gpt4 book ai didi

c - 似乎没有得到我应该在 openMP 中的加速

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:28 25 4
gpt4 key购买 nike

据我所知,该程序在使用 2 个线程运行时应该获得 2 或更多的加速。取而代之的是,我得到的几乎与连续剧一样。

static void proc_paralelo (int n, char *vprimos,  int nthr) {

omp_set_num_threads(nthr);


int i, j, prim, posiciones;

int raiz_n = sqrt(n);

for (i=1;i < raiz_n; i++)
{
if (vprimos[i]==0)
{
prim=i+1;
posiciones=ceil((float)(n-(i+prim))/(float)prim);
#pragma omp parallel for private(j) schedule (static, posiciones/omp_get_num_threads())
for (j=0; j<posiciones; j++){
vprimos[i+prim+(j*prim)]=1;}
}
}
}

我使用的线程数是 2(我的处理器的内核),大小是 n是 20000000。

我得到的时间是:

  • 连续:650000000 ns
  • 并行:630000000 ns

最佳答案

通过运行两个线程,您永远不会(编辑:很少见评论)看到超过 2 倍的加速。事实上,因为没有工作是完全可并行化的,所以您甚至可能看不到这一点。还要考虑启动一个新线程会占用大量资源——您可能看不到任何 yield ,并且可能会看到性能损失,除非您的工作量大到足以使 CPU 饱和的时间超过启动一个新线程所需的时间(例如CPU 密集型工作负载)。您还将受到共享资源争用的限制,因为您的线程正在共享一些硬件或软件资源 - 请参阅评论了解一些示例。

关于c - 似乎没有得到我应该在 openMP 中的加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33699494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com