В 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 ответ
Решение
Это задокументировано, чтобы иметь место в нескольких местах:
Ядро запускается, и копии памяти устройства <-> устройства, которые не задают какой-либо параметр потока или эквивалентно устанавливающие нулевой параметр потока, выдаются в поток по умолчанию.
- Например,
cudaMemcpyAsync
:
При желании копия может быть связана с потоком, передавая ненулевой аргумент потока.
Кажется вполне безопасным предположить, что поток по умолчанию эквивалентен (cudaStream_t) 0