From 785d4a385c1d0f77293078ad5358c37ccf5c3322 Mon Sep 17 00:00:00 2001 From: Jolllly Date: Wed, 10 Nov 2021 23:04:03 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A1=A5=E5=85=A8MPI=E7=9F=A9=E9=98=B5?= =?UTF-8?q?=E4=B9=98=E7=A8=8B=E5=BA=8F=E7=BB=93=E5=B0=BE=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 20-parallel-programming.Rmd | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/20-parallel-programming.Rmd b/20-parallel-programming.Rmd index a406c86..3b83804 100644 --- a/20-parallel-programming.Rmd +++ b/20-parallel-programming.Rmd @@ -777,6 +777,21 @@ int main(int argc, char **argv) C[i*n+j]=0; for(k=0;k Date: Wed, 10 Nov 2021 23:40:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86=E5=B9=B6?= =?UTF-8?q?=E8=A1=8C=E7=BC=96=E7=A8=8B=E5=9F=BA=E7=A1=80=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E9=87=8C=E7=9A=84=E4=B8=AD=E6=96=87=E6=A0=87=E7=82=B9=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 20-parallel-programming.Rmd | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/20-parallel-programming.Rmd b/20-parallel-programming.Rmd index 3b83804..4b0a642 100644 --- a/20-parallel-programming.Rmd +++ b/20-parallel-programming.Rmd @@ -20,7 +20,7 @@ 数据级并行性(Data Level Parallelism,简称DLP)是指对集合或者数组中的元素同时执行相同的操作。这种并行性通常来源于程序中的循环语句。下列代码块所示的代码就是一个数据并行的例子。对于数组local中的元素local[i],执行相同的操作(i+0.5)*w。可以采用将不同的数据分布到不同的处理单元的方式来实现数据级并行。 ```c -for(i = 0;i #include int main(){ - int i; + int i; int num_steps=1000000; double x,pi,step,sum=0.0; step = 1.0/(double) num_steps; @@ -218,7 +218,7 @@ int main(){ sum = sum+4.0/(1.0+x*x); } pi = step*sum; - printf(“pi %1f\n”, pi); + printf("pi %1f\n", pi); return 0; } ``` @@ -283,11 +283,11 @@ int main() { #define n 1000 double *A,*B,*C; void *matrixMult(void *id) {//计算矩阵乘 - intmy_id = (int ) id; - inti,j,k,start,end; + int my_id = (int)id; + int i,j,k,start,end; //计算进程负责的部分 start = my_id*(n/NUM_THREADS); - if(my_id == NUMTHREADS-1) + if(my_id == NUM_THREADS-1) end = n; else end = start+(n/NUM_THREADS); @@ -296,11 +296,11 @@ void *matrixMult(void *id) {//计算矩阵乘 C[i*n+j] = 0; for(k=0;k #include int main(){ - int i; + int i; int num_steps=1000000; double x,pi,step,sum=0.0; step = 1.0/(double) num_steps; @@ -570,7 +570,7 @@ int main(){ sum = sum+4.0/(1.0+x*x); } pi = step*sum; - printf(“pi %1f\n”, pi); + printf("pi %1f\n", pi); return 0; } ``` @@ -600,7 +600,7 @@ int main() for(k=0;k -#include “mpi.h” +#include "mpi.h" int main(int argc, char **argv){ int num_steps=1000000; double x,pi,step,sum,sumallprocs; @@ -707,9 +707,9 @@ int main(int argc, char **argv){ //进程编号及组中的进程数量, 进程编号的范围为0到num_procs-1 int ID,num_procs; MPI_Status status; - //Initialize the MPI environment + //初始化MPI环境 MPI_Init(&argc,&argv); - MPI_Comm_rank(MPI_COMM_WORLD,&ID);// + MPI_Comm_rank(MPI_COMM_WORLD,&ID); MPI_Comm_size(MPI_COMM_WORLD,&num_procs); //任务划分并计算 step = 1.0/num_steps; @@ -726,7 +726,7 @@ int main(int argc, char **argv){ MPI_Reduce(&sum,&sumallprocs,1,MPI_DOUBLE,MPI_SUM,0, MPI_COMM_WORLD); if(ID==0) { pi = sumallprocs*step; - printf(“pi %1f\n”, pi); + printf("pi %1f\n", pi); } MPI_Finalize(); return 0; @@ -737,14 +737,14 @@ int main(int argc, char **argv){ ```c #include -#include “mpi.h” +#include "mpi.h" #define n 1000 int main(int argc, char **argv) { double*A,*B,*C; int i,j,k; int ID,num_procs,line; - MPI_Status status; + MPI_Status status; MPI_Init(&argc,&argv); //Initialize the MPI environment MPI_Comm_rank(MPI_COMM_WORLD,&ID);//获取当前进程号 @@ -756,12 +756,12 @@ int main(int argc, char **argv) C = (double *)malloc(sizeof(double)*n*n); line = n/num_procs;//按进程数来划分数据 - if(ID==0){ //节点0,主进程 + if(ID==0) { //节点0,主进程 //初始化数组 for(i=0;i