CUDA中的内核参数传递
Kernel parameter passing in CUDA?
对于CUDA内核是如何工作的,我有一个新手的疑问。
如果有以下代码(使用此处的函数cuPrintf
):
#include "cuPrintf.cu"
__global__ void testKernel(int param){
cuPrintf("Param value: %dn", param);
}
int main(void){
// initialize cuPrintf
cudaPrintfInit();
int a = 456;
testKernel<<<4,1>>>(a);
// display the device's greeting
cudaPrintfDisplay();
// clean up after cuPrintf
cudaPrintfEnd();
}
执行的输出为:
Param value: 456
Param value: 456
Param value: 456
Param value: 456
我不知道内核如何读取我传递的参数的正确值,它不是分配在主机内存中吗?GPU可以从主机内存中读取吗?
谢谢,
Andrea
根据E.2.5.2节。CUDA C编程指南中的功能参数
__global__函数参数传递到设备:
- 经由共享存储器并且在计算能力为1x的设备上被限制为256字节
- 并且在计算能力2.x及更高的设备上被限制为4KB
声明void testKernel(int param)
表示param
是通过值传递的,而不是通过引用传递的。换句话说,堆栈包含a
值的副本,而不是指向a
的指针。CUDA将堆栈复制到GPU上运行的内核。
根据CUDA编程指南(附录B.16),参数通过共享内存传递到设备。
执行的自变量在实际函数参数和类似函数参数,当前为通过共享内存传递到装置
当您调用这些参数时,它们会被传递给内核;否则,您将如何与GPU通信?这与在着色器中设置统一材质背后的想法相同。
在运行时API中,全局函数的参数隐式编组并从主机复制到设备。
NVCC编译器生成对您隐藏编组的代码。您可以在CUDA编程指南
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用指向成员的指针将成员函数作为参数传递
- 如何将参数传递给正在使用模板的类
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将部分流作为参数传递
- 我正在开发服务器,ip作为参数传递不起作用
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 将参数传递为"const"的奇怪效果
- 如何在 c++ 中将函数作为参数传递?
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 为什么我不能将引用作为 std::async 的函数参数传递
- 如何将函数作为CUDA内核参数传递
- CUDA中的内核参数传递