繁体   English   中英

CUDA:将 arguments 传递给 kernel 会减慢 Z50484C19F1AFDAF3841A0D821ED393D2 的启动速度吗?

[英]CUDA: Does passing arguments to a kernel slow the kernel launch much?

CUDA 初学者在这里。

在我的代码中,我目前在主机代码的循环中多次启动内核。 (因为我需要块之间的同步)。 所以我想知道我是否可以优化 kernel 的发布。

我的 kernel 启动看起来像这样:

MyKernel<<<blocks,threadsperblock>>>(double_ptr, double_ptr, int N, double x);

So to launch a kernel some signal obviously has to go from the CPU to the GPU, but i'm wondering if the passing of arguments make this process noticeably slower.

arguments 到 kernel 每次都是相同的,所以也许我可以通过复制一次来节省时间,在 kernel 中通过定义的名称访问它们

__device__ int N;
<and somehow (how?) copy the value to this name N on the GPU once>

并简单地启动没有 arguments 的 kernel

MyKernel<<<blocks,threadsperblock>>>();

这会让我的程序更快吗? 这样做的最佳方法是什么? AFAIK arguments 存储在一些常量全局 memory 中。 我如何确保手动传输的值存储在速度相同或更快的 memory 中?

提前感谢您的帮助。

我希望这种优化的好处相当小。 在健全的平台上(即除 WDDM 之外的任何平台),kernel 启动开销仅为 10-20 微秒左右,因此可能没有太多 scope 需要改进。

话虽如此,如果您想尝试,影响这一点的合乎逻辑的方法是使用常量 memory。 在翻译单元 scope 将每个参数定义为__constant__符号,然后使用cudaMemcpyToSymbol function 将值从主机复制到设备常量 ZCD69B4957F06CD818D7BF3D61980。

简单的回答:没有。

更详细地说:无论如何,您需要从主机向 GPU 发送一些信号,以启动 kernel 本身。 此时,再多几个字节的参数数据就不再重要了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM