【发布时间】:2011-06-28 12:30:42
【问题描述】:
这里是 CUDA 初学者。
在我的代码中,我目前在主机代码的循环中多次启动内核。 (因为我需要块之间的同步)。所以我想知道我是否可以优化内核启动。
我的内核启动看起来像这样:
MyKernel<<<blocks,threadsperblock>>>(double_ptr, double_ptr, int N, double x);
所以要启动内核,一些信号显然必须从 CPU 传递到 GPU,但我想知道参数的传递是否会使这个过程明显变慢。
内核的参数每次都是相同的,所以也许我可以通过复制一次来节省时间,在内核中通过定义的名称访问它们
__device__ int N;
<and somehow (how?) copy the value to this name N on the GPU once>
然后简单地启动内核,不带任何参数
MyKernel<<<blocks,threadsperblock>>>();
这会让我的程序更快吗? 这样做的最佳方法是什么? AFAIK 参数存储在一些恒定的全局内存中。如何确保手动传输的值存储在同样快或更快的内存中?
提前感谢您的帮助。
【问题讨论】: