2011-07-29 48 views
1

我有一些CUDA内核我想在单独的pthreads中运行。将cuda上下文传递给worker pthreads

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

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

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

那么如何让每个pthread在同一个环境中工作,与其他pthreads同时工作呢?

感谢

回答

2

CUDA 4.0之前,顺便去访问不同的CPU线程特定情况下是使用cuCtxPopCurrent()/ cuCtxPushCurrent()。上下文一次只能对一个CPU线程通用。

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

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