1. CUDA流介绍
CUDA流在加速应用程序方面起着重要的作用。CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。我们可以在流中添加一些操作,如核函数启动,内存复制等。将这些操作添加到流的顺序也就是他们的执行顺序。你可以将每个流视为GPU上的一个任务,并且这些任务可以并行执行。
2. CUDA流的使用
我们先通过在应用程序中使用单个流来说明流的用法。
1)
首先,选择一个支持设备重叠功能的设备。支持设备重叠功能的GPU能够在执行一个CUDA C核函数的同时,还能在设备与主机之间执行复制操作。
cudaDeviceProp prop;
int whichDevice;
cudaGetDevice(&whichDevice);
cudaGetDeviceProperties(&prop, whichDevice);
if (!prop.deviceOverlap)
{
printf("Device will not handle overlaps, so no speed up from streams.\n");
return 0;
}
<span style="white-space:pre"> </span>cudaStream_t stream;
<span style="white-space:pre"> </span>cudaStreamCreate(&stream);
3) 然后是数据分配操作。注意,程序将使用主机上的固定内存,即调用cudaHostAlloc()来执行内存分配:
int *host_a, *host_b, *host_c;
int *dev_a, *dev_b, *dev_c;
cudaError_t cudaStatus;
cudaStatus = cudaMalloc((void **)&dev_a, N * sizeof(int));
if (cudaStatus != cudaSuccess)
{
printf("cudaMalloc dev_a failed!\n");
}
cudaStatus = cudaHostAl

最低0.47元/天 解锁文章
6933

被折叠的 条评论
为什么被折叠?



