初识CUDAGPU线程的调用

简介: 初识CUDAGPU线程的调用

正如talonmies所说,

将其调用放入lambda函数

auto myFunc = [&](){

cudaStream_t stream2;

cudaSetDevice(device2);

cudaStreamCreate (&stream2);

vectorAdd_gpu <<>>(s.a1, s.a2, s.a2, s.flag);

cudaStreamSynchronize(stream2);

cudaStreamDestroy(stream2);

};

然后把它交给线程 .

thread t2(myFunc);

t2.join();

但是,除此之外,您仍然可以在CPU工作中异步使用应用程序的相同主线程 . 我只是展示了你想看到的东西 . 异步使用相同的线程可能比重新创建流和重新连接线程更有效,具体取决于工作的大小 . 也许重新加入比在这里同步和启动内核有更多的开销 . 你每秒进行多少次内核调用?

for (int i = 0; i < nStreams; ++i) {

int offset = i * streamSize;

cudaMemcpyAsync(&d_a[offset], &a[offset],

streamBytes, cudaMemcpyHostToDevice, cudaMemcpyHostToDevice, stream[i]);

}

for (int i = 0; i < nStreams; ++i) {

int offset = i * streamSize;

kernel<<>>(d_a, offset);

}

for (int i = 0; i < nStreams; ++i) {

int offset = i * streamSize;

cudaMemcpyAsync(&a[offset], &d_a[offset],

streamBytes, cudaMemcpyDeviceToHost, cudaMemcpyDeviceToHost, stream[i]);

}

这只是进行异步流重叠的不同方法之一 .

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
调度
线程都有哪些方法?
线程都有哪些方法?
57 0
多线程之Thread类常见方法及线程的状态
多线程之Thread类常见方法及线程的状态
|
Java API 调度
线程的创建和使用
线程的创建和使用
54 0
|
Java 调度
join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程
Java中的join方法,阻塞当前线程,直到join线程结束后才继续执行。底层是通过wait来实现的,join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程(join之前的那个“当前”线程)呢?
102 0
join线程执行结束之后,并没有看到哪里有notify方法,请问此时谁去唤醒等待池中的线程
|
自然语言处理 算法 Linux
线程执行 Q&A
线程执行 Q&A
76 0
|
开发框架 Java .NET
干货分享:详解线程的开始和创建
干货分享:详解线程的开始和创建
102 0
干货分享:详解线程的开始和创建
|
搜索推荐 Java Python
一日一技:等待多个线程同时结束的两种方法
一日一技:等待多个线程同时结束的两种方法
357 0
|
监控
线程 - 带返回值的多线程
线程 - 带返回值的多线程
199 0