gpt4 book ai didi

c - C中的多线程for循环

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

想知道为什么像这样将 for 循环分成两个线程会使我的性能降低几乎两倍?我在双核处理器上运行。

正常循环(1.78 秒):

int var;
for (i = 0; i < n; i++)
for (j=0; j < p; j++){
var = 0;
for (k=0; k < m; k++)
var = i + k;
}

分循环(2.53 秒):

pthread_create(&tid[0], NULL, A, NULL);
pthread_create(&tid[1], NULL, B, NULL);
for (i=0; i < 2; i++) pthread_join(tid[i],NULL) == 0;

...

void * A(void *arg)
{
int i, j, k, var;
for (i = 0; i < n/2; i++)
for (j=0; j < p; j++)
{
var = 0;
for (k=0; k < m; k++)
var = i + k;
}

pthread_exit(NULL);
}


void * B(void *arg)
{
int i, j, k, var;
for (i = n/2; i < n; i++)
for (j=0; j < p; j++)
{
var = 0;
for (k=0; k < m; k++)
var = i + k;
}
pthread_exit(NULL);
}

最佳答案

我想通了。我使用全局变量(i、j、k、x、y、z 等)来遍历循环。我没有在示例中展示这一点,所以您不会知道。这显然增加了大量开销。现在它可以正确处理每个线程的局部变量。

关于c - C中的多线程for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647205/

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