1

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

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

我想我会尝试向每个 pthread 传递对流的引用,因此这 3 个 cuda 内核中的每一个都将在同一个流中按顺序执行。

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

那么如何让每个 pthread 在同一个上下文中工作,同时与其他 pthread 一起工作呢?

谢谢

4

1 回答 1

2

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

在 CUDA 4.0 中,您可以在每个 pthread 中调用cudaSetDevice(),并且它一次可以是多个线程的当前线程。

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

于 2011-07-30T10:14:16.123 回答