计算机视觉 基于CUDA编程的入门与实践 CUDA Streams五

一、Cuda Streams

在GPU上是通过使用CUDA流来实现任务并行的,CUDA流是GPU上的工作队列,队列里的工作将以特定的顺序执行。这些工作可以包括:内核函数的调用,cudaMemcpy系列传输,以及对CUDA事件的操作。它们添加到队列的顺序将决定它们的执行顺序。

每个CUDA流可以被视为单个任务,因此我们可以启动多个流来并行执行多个任务。(每个流中的工作只能以前后顺序串行执行,不能并行)。

下面代码中定义了两个cudaStream_t类型的CUDA流对象,stream 0和stream 1,然后通过cudaStreamCreate函数创建了流。也定义了两套相关的主机和设备指针,将分别会在2个流中使用。我们定义并创建了2个CUDA事件对象,用来进行该程序的性能测量。

之后给这些指针分配空间。CUDA流(中的传输)需要使用页面锁定内存,所以使用了cudaHostAlloc函数,而不是常规的malloc进行内存分配。

然后分别在2个流中将传输操作和内核执行操作加入(队列)。

#include "stdio.h"
#include<iostream>
#include <cuda.h>
#include <cuda_runtime.h>
//Defining number of elements in Array
#define N    50000

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/129182117
今日推荐