В CUDA гарантируется, что поток по умолчанию равен nullptr?

В CUDA driver_types.h у нас есть:

typedef __device_builtin__ struct CUstream_st *cudaStream_t;

И в cuda_runtime.h у нас во многих местах есть инициализированные по умолчанию параметры потока. Например:

template<class T>
    static __inline__ __host__ cudaError_t cudaLaunchKernel(
    const T *func,
    dim3 gridDim,
    dim3 blockDim,
    void **args,
    size_t sharedMem = 0,
    cudaStream_t stream = 0
)

Насколько безопасно считать поток по умолчанию (cudaStream) nullptr?

1 ответ

Решение

Это задокументировано, чтобы иметь место в нескольких местах:

  1. Руководство по программированию:

Ядро запускается, и копии памяти устройства <-> устройства, которые не задают какой-либо параметр потока или эквивалентно устанавливающие нулевой параметр потока, выдаются в поток по умолчанию.

  1. Например, cudaMemcpyAsync:

При желании копия может быть связана с потоком, передавая ненулевой аргумент потока.

Кажется вполне безопасным предположить, что поток по умолчанию эквивалентен (cudaStream_t) 0

Другие вопросы по тегам