我正在學習 C 編程中的 OpenMP,并試圖了解不同情況下變數的默認范圍。
鑒于此代碼,我對指標的范圍及其各自的變數值有些困惑。例如 *x 和 x,以及 *y 和 y。據我了解,從并行區域呼叫的函式變數是“私有”的,除了靜態變數變成“共享”。
遵循此規則,變數 *x、*y 和 z 應該是“私有的”,因為它們是從并行區域呼叫的函式 'fvg2' 的變數。此外,變數 x 和 y 也應該是私有的。
我的推理正確嗎?
同樣在并行編程中,最好的做法是明確指定每個變數范圍而不是依賴默認值?
謝謝你。
void fvg1 ( int *a, int n)
{
int i, j, m = 3;
#pragma omp parallel for
for (i = 0; i < n; i )
{
int k = m;
for (j = 0; j < 5; j )
fvg2 (&( a[i]), &k, j);
}
}
extern int c;
void fvg2 ( int *x, int *y, int z)
{
int ii;
static int cnt ;
cnt
for (ii = 0; ii < z; ii )
{
*x = *y c;
}
}
uj5u.com熱心網友回復:
在函式中宣告的變數確實是私有的,但是您的a陣列來自共享陣列變數,因此 variablex作為函式引數是共享的:函式的每次呼叫都會獲得指向同一個原始陣列的指標a。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/410327.html
標籤:
下一篇:為什么這兩個執行緒不同步運行?
