OpenMP和GMP瓶颈问题

我一直在测试OpenmP和GMP的瓶颈问题。我发现了一些有趣的数据。

我的代码如下,

#include<stdio.h>
#include<stdlib.h>
#include<gmp.h>
#include<omp.h>

void test_fun()
{
    mpz_t x;
    mpz_init(x);
    mpz_set_ui(x,2);
    mpz_clear(x);
    mpz_init(x);
    mpz_set_ui(x,2);
    mpz_clear(x);
}
int main()
{
    long i;
    double time = omp_get_wtime();
    #pragma omp parallel for
    for(i=0;i<100000000;i++)
    {
        test_fun();
    }
    time = omp_get_wtime() - time;
    printf("Time Taken %lf\n",time);
    return 1;
}

这在我的四核i5处理器中产生了4个线程需要1.755720秒。现在,如果我使用单核(无openmp)将循环迭代25000000次(1/4次),则需要1.555573秒。因此,对于多个线程使用GMP肯定会有开销。谁能指出主要原因。

每个mpz_init内部都会进行malloc调用可能是有原因的。由于malloc在所有线程之间都是原子的,因此可能会创建这样的时间间隔。还是还有其他原因?

w24667266 回答:OpenMP和GMP瓶颈问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2866689.html

大家都在问