gpt4 book ai didi

c - OpenMP 部分运行速度比单线程慢

转载 作者:太空狗 更新时间:2023-10-29 15:32:22 29 4
gpt4 key购买 nike

为什么并行应用程序的执行时间比单线程应用程序的执行时间长?我正在使用带有 Ubuntu 14.04 的 8 CPU 计算机。该代码只是我测试omp并行部分的简单方法,后面的目的是同时在两个不同的线程中运行两个不同的函数,所以我不想使用#pragma omp parallel for。

并行:

int main()
{
int k = 0;
int m = 0;

omp_set_num_threads(2);

#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
for( k = 0; k < 1e9; k++ ){};
}

#pragma omp section
{
for( m = 0; m < 1e9; m++ ){};
}
}
}

return 0;

}

和单线程:

int main()
{
int m = 0;
int k = 0;

for( k = 0; k < 1e9; k++ ){};


for( m = 0; m < 1e9; m++ ){};

return 0;

}

最佳答案

如果编译器不优化循环,那么并行代码将遭受错误共享,因为mk 很可能最终在同一个缓存行中。使变量私有(private):

#pragma omp parallel private(k,m)
{
#pragma omp sections
{
#pragma omp section
{
for( k = 0; k < 1e9; k++ ){};
}

#pragma omp section
{
for( m = 0; m < 1e9; m++ ){};
}
}
}

在高优化级别,编译器可以完全放弃循环。但是并行版本仍然会增加生成 OpenMP 工作线程并在之后加入它们的开销,这将使其比顺序版本慢。

关于c - OpenMP 部分运行速度比单线程慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157675/

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