我这是相当耗费时间的函数,它是这样的,因为n的值非常大如何并行该功能
sum=0; for(i=0;i<n;i++)
{
a=func(i,b);
c=func(i,a);
sum+=c;
}
是否可以并行使用OpenMP这个循环?
我这是相当耗费时间的函数,它是这样的,因为n的值非常大如何并行该功能
sum=0; for(i=0;i<n;i++)
{
a=func(i,b);
c=func(i,a);
sum+=c;
}
是否可以并行使用OpenMP这个循环?
以下是简短的方式:
int sum = 0;
#pragma omp parallel for reduction(+:sum)
for(i = 0; i < n; i++){
int a = func(i,b);
int c = func(i,a);
sum += c;
}
这里有一个较长的(更灵活)的方式:
int sum = 0;
#pragma omp parallel
{
int local_sum = 0;
#pragma omp for
for(i = 0; i < n; i++){
a = func(i,b);
c = func(i,a);
local_sum += c;
}
#pragma omp critical
{
sum += local_sum;
}
}
谢谢你神秘:)是否有可能将它用于数组呢?说我想它是总和[我] = C ?? – user1019083
是的。如果每次迭代都写入目标数组的不同元素,则根本不需要“简化”或同步。 (如果这回答你的问题,你可以通过点击绿色的复选标记来接受我的答案,你之前的问题也是如此。) – Mysticial
神秘的,我修改了一下问题,我尝试着去处理它,但是没能你请帮我在这里 – user1019083
我们要需要看到更多的代码。现在,由于您在每次迭代中覆盖'c',代码不会执行任何操作。 – Mysticial
执行此操作时,确保'func'在被多个线程调用时是可重入的。 – evnu
你已经完全改变了你的问题。我建议你提出一个新问题,然后将这个问题还原为原始问题。所以我会分开回答。 – Mysticial