第一篇文章!openmp创建随机数的线程
主要编辑..
我有了这个程序计算的点积,使用gcc与-fopenmp编译。问题是,它没有创建我告诉它创建的线程数。在一台计算机上,它会不断产生2个线程,在另一台计算机上。这两个数字都不是赋予它们的数字。我正在使用(静态,块大小)调度,这是一种间接方式,可以通过更改块大小来选择要创建的线程数。我觉得运行时有些东西会覆盖我的指令,因为所有的计算机都使用相同的可执行文件。我也注意到,如果我给程序一个与总负载相等的块大小,它将使用一个线程,但仍然产生与之前相同的线程数。我究竟做错了什么?
#pragma omp parallel shared(vector1, vector2, loadsize, vectorsize, final_sum) private(i, threadsum, threadid)
{
threadsum = 0;
threadid = omp_get_thread_num();
#pragma omp for schedule(static, loadsize)
for (i = 0; i < vectorsize; i++){
threadsum += vector1[i] * vector2[i];}
printf("thread %d reached up to index %d with a sum of %d\n", threadid, (i-1), threadsum);
#pragma omp critical
final_sum += threadsum;
}
printf("final sum: %d", final_sum);
感谢,
扎克
谢谢,它似乎对它创建的线程数有一个默认限制。我用omp_get_max_threads()检查了它们,发现我仅限于2个线程。 – zedjay72