OpenMP的线程数

问题描述

目前,我正在学习并行计算课程。我想运行一个具有特定数量线程的程序,以检查执行时间会有什么不同。我发现类似的帖子对您​​有所帮助,但不幸的是,该解决方案并不能进一步帮助我。 (OpenMP set_num_threads() is not working) (openmp for block error

我的程序的代码是:

#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);
}

我认为问题出在并行区域。

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中。我也在外部循环中尝试过,但是重新编译后,我只得到一个打印语句,仍然是一个线程。

   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 (将#修改为@)