将cuda上下文传递给工作线程
Passing cuda context to worker pthreads
我有一些CUDA内核,我想在单独的pthread中运行。
我基本上必须让每个pthread执行,比如说,3个cuda内核,它们必须顺序执行。
我想我会尝试给每个pthread传递一个对流的引用,这样这3个cuda内核都将在同一个流中依次执行。
我可以为pthread使用不同的上下文,然后像正常一样执行内核,但这似乎需要很多开销。
那么,如何使每个pthread在同一上下文中与其他pthread并发地工作呢?谢谢
在CUDA 4.0之前,从不同CPU线程访问给定上下文的方法是使用cuCtxPopCurrent()/cuCtxPushCurrent()。一个上下文一次只能对一个CPU线程是当前的。
在CUDA 4.0中,您可以在每个pthread中调用cudaSetDevice(),并且它可以同时当前于多个线程。
内核调用将由上下文按照接收到的顺序序列化,但是您可能必须执行CPU线程同步,以确保按照所需的顺序提交工作。
相关文章:
- 工作线程在执行太快后永久休眠
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- 工作线程一直在等待,condition_variable甚至调用了notify_all
- 使用 std::atomic 标志和 std::condition_variable 在工作线程上等待
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 无法将接口从主线程封送到工作线程
- 在 C++ 中扩展作业/工作线程多线程系统
- Qt C++ - 如何将数据从工作线程传递到主线程?
- 从线程池工作线程使用 GetQueuedCompletionStatus 的奇怪行为
- QtThread:I/O 队列的工作线程
- 将信号从工作线程类连接到控制器类 - QThreads
- Qt:工作线程和 GUI 事件之间的关系
- 将数据集几乎平均分配给工作线程
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- 如何将C++ dll 在 C# 窗口窗体应用程序下的工作线程中运行
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- 在工作线程中使用 QT 主窗口
- C++,pthreads:如何从多个线程停止工作线程
- 同步主线程和工作线程
- 从工作线程更新QtCharts的正确方法