在CUDA中初始化dim3变量,"dim3 dimGrid(numBlocks);"如何?语法工作?

Ada*_*win 4 c++ syntax cuda initialization

我正在学习CUDA,在大量示例代码中,我看到块和网格尺寸设置如下:

dim3 dimGrid(numBlocks);
dim3 dimBlock(numThreadsPerBlock);
exampleKernel<<<dimGrid, dimBlock>>>(input);
Run Code Online (Sandbox Code Playgroud)

我知道像dim3 dimGrid(numBlocks);初始化dimGrid(dim3类型的变量)这样的行有numBlocksx值 - 但我不确定这是如何工作的.

我会假设这是正常的C++语法,但对于C++,我认为该行必须像这样编写:

dim3 dimGrid = dim3(numBlocks);
Run Code Online (Sandbox Code Playgroud)

否则你会得到"最令人烦恼的解析".所以我假设这些行作为变量赋值的解释是CUDA的NVCC编译器的特殊行为,但我找不到任何证实这一点的东西.

我是对的,这是正在发生的事情,还是还有其他一些我不明白这是如何工作的?

pfa*_*fac 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;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.