问题描述
目前,我正在学习并行计算课程。我想运行一个具有特定数量线程的程序,以检查执行时间会有什么不同。我发现类似的帖子对您有所帮助,但不幸的是,该解决方案并不能进一步帮助我。 (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 (将#修改为@)