【问题标题】:cudaStream_t default valuecudaStream_t 默认值
【发布时间】:2021-10-05 13:21:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ cuda


    【解决方案1】:

    如果没有任何其他信息,我建议使用传递值,cudaStreamLegacy 作为默认选项。见here

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 2018-09-12
      • 2015-05-22
      • 1970-01-01
      • 2019-07-05
      • 2010-12-05
      • 2012-03-17
      • 2012-07-13
      相关资源
      最近更新 更多