______ 水仙花数
double pt=t2-t1-0.0;
printf(\并行时间%f\\n\输出并行时间
clock_t t3=clock();//串行开始 for(int i=100; i<1000; i++) {
int xlh=i/100;
int k=(i-100*xlh)/10; int l=i; Sleep(1);
if(xlh*xlh*xlh+k*k*k+l*l*l==i) printf(\ }
clock_t t4=clock();//串行结束 double st=t4-t3-0.0;
printf(\串行时间%f\\n\ printf(\加速比%f\\n\ system(\ return 0; }
1.3.2 执行结果截图(体现串行时间、并行时间和加速比)
1.3.3 遇到的问题及解决方案 错误代码
int xlh,j,z,t,m,n;
int id=omp_get_thread_num();
omp_set_num_threads(NUM_THREADS);
clock_t t1=clock();
______ 水仙花数
#pragma omp parallel {
for(xlh=100+id;xlh<1000;xlh+=NUM_THREADS)//判断是否为水仙花数 {
j=xlh/100;
z=(xlh-100*j)/10; t=xlh;
if(j*j*j+z*z*z+t*t*t==xlh) printf(\ } }
clock_t t2=clock();
printf(\并行时间%d\\n\ printf(\串行水仙花数:\\n\
clock_t t3=clock();// for(xlh=100;xlh<1000;xlh++) {
j=xlh/100;
z=(xlh-100*j)/10; t=xlh;
if(j*j*j+z*z*z+t*t*t==xlh) printf(\}
clock_t t4=clock();
正确代码
int _tmain(int argc, _TCHAR* argv[]) {
printf(\求水仙花数\\n\
cout<<\并行结果:\
______ 水仙花数
clock_t t1=clock();//线程1 #pragma omp parallel for//并行开始
for(int i=100; i<1000; i++)//判断是否为水仙花数 {
int xlh=i/100;
int k=(i-100*xlh)/10; int l=i; Sleep(1);
if(xlh*xlh*xlh+k*k*k+l*l*l==i) printf(\ }
clock_t t2=clock();//并行结束 double pt=t2-t1-0.0;
printf(\并行时间%f\\n\输出并行时间
clock_t t3=clock();//串行开始 for(int i=100; i<1000; i++) {
int xlh=i/100;
int k=(i-100*xlh)/10; int l=i; Sleep(1);
if(xlh*xlh*xlh+k*k*k+l*l*l==i) printf(\ }
clock_t t4=clock();//串行结束 分析
对并行算法设计不熟悉。逻辑混乱,写代码有错误。
1.4 基于MPI的并行算法实现
1.4.1 代码及注释(变量名 名字首字母 开头)
#include \#include
int main(int argc,char * argv[]) { int id,numpro; double startime01,endtime01,startime02,endtime02; MPI_Init (&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&id); MPI_Comm_size(MPI_COMM_WORLD,&numpro);
______ 水仙花数
}
startime01 =MPI_Wtime(); printf(\水仙花数:\\n\if(id==0)//并行
for (int xlh=100+ id; xlh< 1000; xlh+=2) //1000以内的水仙花数 { int j=xlh/100; //判断百位 int z=xlh0/10;//判断十位 int t=xlh;//个位 if(j*j*j+z*z*z+t*t*t ==xlh)//确定是否是水仙花数 printf(\输出水仙花数 }
if(id==0) {
endtime01=MPI_Wtime();
printf(\并行时间:%f\\n\输出并行时间 }
if(id==0)//串行 {
startime02=MPI_Wtime(); printf(\水仙花数:\\n\
for (int xlh =100; xlh < 1000; xlh+=1) { int j=xlh/100; int z=xlh0/10; int t=xlh; if(j*j*j+z*z*z+t*t*t ==xlh) printf(\ }
endtime02=MPI_Wtime();
printf(\串行时间:%f\\n\}
MPI_Finalize(); system(\return 0;
1.4.2 执行结果截图(体现串行时间、并行时间和加速比)