将cuda上下文传递给工作线程

Passing cuda context to worker pthreads

本文关键字:工作 线程 cuda 上下文      更新时间:2023-10-16

我有一些CUDA内核,我想在单独的pthread中运行。

我基本上必须让每个pthread执行,比如说,3个cuda内核,它们必须顺序执行。

我想我会尝试给每个pthread传递一个对流的引用,这样这3个cuda内核都将在同一个流中依次执行。

我可以为pthread使用不同的上下文,然后像正常一样执行内核,但这似乎需要很多开销。

那么,如何使每个pthread在同一上下文中与其他pthread并发地工作呢?

谢谢

在CUDA 4.0之前,从不同CPU线程访问给定上下文的方法是使用cuCtxPopCurrent()/cuCtxPushCurrent()。一个上下文一次只能对一个CPU线程是当前的。

在CUDA 4.0中,您可以在每个pthread中调用cudaSetDevice(),并且它可以同时当前于多个线程。

内核调用将由上下文按照接收到的顺序序列化,但是您可能必须执行CPU线程同步,以确保按照所需的顺序提交工作。