第一篇文章!
主要编辑..
我有这个程序用于计算点积,使用 gcc 和 -fopenmp 编译。问题是,它没有创建我告诉它创建的线程数。在一台计算机上,它将不断产生 2 个线程,在另一个 4 上。这些数字都不是给它们的数字。我正在使用(静态,块大小)调度,这是一种间接方式,可以通过更改块大小来选择要创建的线程数。我觉得运行时中有一些东西覆盖了我的指令,因为所有计算机都使用相同的可执行文件。我还注意到,如果我给程序一个等于总负载的块大小,它将使用一个线程,但仍会产生与以前相同数量的线程。我究竟做错了什么?
#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);
谢谢,
扎克