cudaStream_t 默认值

cudaStream_t default value

我正在编写一个 cuda 库,其中一些函数将有一个参数,如果用户提供,则从外部(用户端)接受 cudaStream_t,否则将使用内部流。

所以这个函数希望有一个 cudaStream_t 作为最后一个参数和默认值,但我没有找到 cudaStream_t 的合适值,我不确定通过-按值或 pass-by-ref/pointer

我能想到的一种方法是通过指针和 nullptr 作为默认值

void cudaFunc1(....., cudaStream_t * stream_ptr=nullptr);

但我在其他代码中看到许多按值传递用法....不确定最佳做法是什么

在没有任何其他信息的情况下,我建议使用默认选项 cudaStreamLegacy 的按值传递。参见 here

如果您知道您打算使用 per thread default stream 选项编译您的应用程序,那么更好的选择是 cudaStreamPerThread

这些选择不假设流已经创建或将作为函数调用使用的一部分创建。

如果您想使用与应用程序编译方式相关联的任何默认流,那么只需将 NULL 用作流参数默认即可。

按值传递或按指针传递都应该可行。这主要与这些选择的通常语义有关,而不是 CUDA 特定或独有的任何内容。如果您希望您的函数在尚未创建的情况下创建流, 您希望此创建的流在函数外部使用,然后通过指针传递,否则 return 创建的流作为函数 return 的值,似乎是显而易见的选择。您还可以使用 C++ 传递引用。