我正在尝试为一些 C 练习构建一个主要查找器。我已经把算法搞定了,我已经做了很多优化以使其更快,然后我决定尝试并行化它,因为,嘿,为什么不呢!结果比我想象的要难。我可以让所有线程运行相同的进程(具有相同的参数),或者如果我尝试为每个进程提供不同的参数,则单个线程将运行。我真的不知道我在这里做什么,但你可以看到我在这段代码中使用的一些实验值:
// gcc -std=c99 -o multithread multithread.c -fopenmp -lm
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <omp.h>
int pf(unsigned int start, unsigned int limit, unsigned int q);
int main(int argc, char *argv[])
{
printf("prime finder\n");
int j, slimits[4] = {1,10000000,20000000,30000000}, elimits[4] = {10000000,20000000,30000000,40000000};
double startTime = omp_get_wtime();
#pragma omp parallel shared(slimits, elimits primes)
{
#pragma omp for
for (j = 0; j < 4; j++)
{
primes += pf(slimits[j], elimits[j], atoi(argv[2]));
}
}
printf("%d prime numbers found in %.2f seconds.\n\n", primes, omp_get_wtime() - startTime);
return 0;
}
我没有包含 pf 函数,因为它很大,但它可以自己工作,它返回找到的素数的数量。我确定问题出在某个地方。任何帮助将不胜感激!