我這是相當耗費時間的函數,它是這樣的,因爲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