gpt4 book ai didi

c - 如何使用openmp并行化代码以减少添加矩阵和

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

我想使用 openmp 编写并行代码并减少矩阵 (X*X) 值的平方加法。我可以在#pragma omp parallel 之后使用“2 for loops”进行缩减吗?如果不是好心建议。

#pragma omp parallel
{
#pragma omp parallel for reduction(+:SqSumLocal)
for(index=0; index<X; index++)
{
for(i=0; i<X; i++)
{
SqSumLocal = SqSumLocal + pow(InputBuffer[index][i],2);
}
}
}

解决方法:在#pragma omp parallel下添加int i即可解决。

最佳答案

您编写它的方式是正确的,但并不理想:只有外部循环将被并行化,而每个内部循环将在单独的线程上执行。如果 X 足够大(明显大于线程数),这可能没问题。如果您想并行化两个 循环,那么您应该向指令添加一个collapse(2) 子句。这告诉编译器将两个循环合并为一个循环并并行执行整个循环。

考虑一个示例,其中有 8 个线程,并且 X=4。如果没有 collapse 子句,只有四个线程会工作:每个线程会完成一个 index 值的工作。使用 collapse 子句,所有 8 个线程将各自完成一半的工作。 (当然,并行化如此微不足道的工作量是没有意义的——这只是一个例子。)

关于c - 如何使用openmp并行化代码以减少添加矩阵和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940339/

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