问题描述
目前,我正在学习并行计算课程。我想运行一个具有特定数量线程的程序,以检查执行时间会有什么不同。我发现类似的帖子对您有所帮助,但不幸的是,该解决方案并不能进一步帮助我。 (OpenMP set_num_threads() is not working) (openmp for block error)
我的程序的代码是:
@H_502_5@#define SIZE 1000 main () { float A[SIZE][SIZE],b[SIZE],c[SIZE]; int i,j,n; double fTimeStart,fTimeEnd; /* Initializations */ for (i=0; i < SIZE; i++) { for (j=0; j < SIZE; j++) /* fminf(x,y) gives the minimum of x and y */ A[i][j] = fminf(i*1.0/(j+1.0),j*1.0/(i+1.0)); b[i] = 1.0 * (i+1); c[i] = 0.0; } fTimeStart = omp_get_wtime(); omp_set_num_threads(4); #pragma omp for schedule(static) for (i=0; i < SIZE; i++) for (j=0; j < SIZE; j++) c[j] = c[j] + A[j][i] * b[i]; printf("threads: %d\n",omp_get_num_threads()); fTimeEnd = omp_get_wtime(); printf(" wall clock time = %.20f\n",fTimeEnd - fTimeStart); }
我认为问题出在并行区域。
@H_502_5@fTimeStart = omp_get_wtime(); { omp_set_dynamic(0); omp_set_num_threads(4); #pragma omp parallel for for (i=0; i < SIZE; i++) for (j=0; j < SIZE; j++) c[j] = c[j] + A[j][i] * b[i]; printf("threads: %d\n",omp_get_num_threads()); } fTimeEnd = omp_get_wtime(); printf(" wall clock time = %.20f\n",fTimeEnd - fTimeStart);
关于线程数的程序输出为1。这很奇怪,因为我尝试将其设置为4。
问题:为什么程序不能在4个线程中执行?
编辑:建议@igorR将printstatement放入forloop中。我也在外部循环中尝试过,但是重新编译后,我只得到一个打印语句,仍然是一个线程。
@H_502_5@ omp_set_dynamic(0); omp_set_num_threads(4); #pragma omp parallel for for (i=0; i < SIZE; i++) for (j=0; j < SIZE; j++) c[j] = c[j] + A[j][i] * b[i]; n = omp_get_num_threads(); printf("threads: %d",n);
谢谢, Ter
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)