簡體   English   中英

如何在OpenMp中管理共享變量

[英]How to manage shared variable in OpenMp

我正在嘗試編寫一個OpenMp程序。 我有一個for循環,可以迭代100次。 我將其分為10個線程。 每個線程運行10次迭代,並根據某些條件生成一些計數。 因此,按照此邏輯,每個線程將生成自己的計數。

我只想將此計數復制到一個變量中,該變量將保存所有線程中所有計數的總和。 如果我們使該變量(共享)在循環中寫入,我想它會序列化線程。 我只想將每個線程的最后一個計數復制到全局變量中。 這樣,我將只序列化10個賦值語句。 我嘗試使用lastprivate但對於如何根據自己的需求使用它感到困惑。

這是我的代碼

#pragma omp parallel for private(i) schedule(dynamic) shared(count)
for (i = 1; i <= 100 ; i++)
{
    if(i%2==0)
        count++; 
}
printf("Total = %d \n", count);

你應該使用減少

int count = 0;
int i;
#pragma omp parallel for private(i) schedule(dynamic) reduction(+:count)
for (i = 1; i <= 100 ; i++)
    if(i%2==0)
        count++; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM