2013-10-08 40 views
4

我正在學習CUDA,和在大量的示例代碼我看到被設置這樣塊和網格尺寸:在CUDA中初始化dim3變量,「dim3 dimGrid(numBlocks);」語法工作?

dim3 dimGrid(numBlocks); 
dim3 dimBlock(numThreadsPerBlock); 
exampleKernel<<<dimGrid, dimBlock>>>(input); 

我明白,像dim3 dimGrid(numBlocks);的線初始化dimGrid,爲dim3類型的變量,以有numBlocks作爲它的x值 - 但我不知道這是如何工作的。

我本來只是認爲這是正常的C++語法,但對於C++我認爲,生產線必須這樣寫:

dim3 dimGrid = dim3(numBlocks); 

否則,你得到「最傷腦筋的解析」。所以我假設這些行作爲變量賦值的解釋是CUDA的NVCC編譯器的特殊行爲,但是我找不到證實這一點的任何事情。

我說得對,這就是發生了什麼,或者有什麼我不明白這是如何工作?

回答

3

這是正常的C++語法。如果圓括號爲空或包含類型(後跟圓括號),則只會得到(大部分)煩人的解析。在你的情況下,numBlocks不是一個類型,所以一切都很好。

+0

啊,我沒有意識到有那些令人煩惱的解析問題的條件。 –

+0

@AdamGoodwin(大部分)煩人的分析意味着表達式被誤解爲函數聲明。所以它必須是一個有效的函數聲明才能發生。 – Angew

5

這是正常的C++語法,你可以用最小的工作示例自己嘗試。

#include <iostream> 

using namespace std; 

class A { 
    int _x; 
public: 
    A(int x) : _x(x) {} 
    int x() const { return _x; } 
}; 

int main() { 
    A first(3); 
    cout << first.x() << endl; // "3" 
    return 0; 
} 

希望這會有所幫助。