3

我已经为 CUDA 编写了最小二乘优化程序。当它优化一个数据集时它工作得很好。为了进一步使用,我必须实现它以同时使用三个数据集。该代码由三个内核和它们之间的一些主机代码组成,用于准备数据等。一个简单的实现是为每个数据集调用该程序三次。

串行计算

但我的任务是找出如何同时运行它 3 次。 多线程

当我使用 openmp 或 posix 之类的库时,是否可以同时从三个主机线程调用程序或并发内核,甚至是一个好主意?还是我应该尝试编写自己的调度程序?

4

1 回答 1

2

当您说“同时四个块”时,您的意思是每个多处理器(MP)四个块吗?

根据您在 Q 中的附加评论,您的560 Ti上可能有 384/32=12 多处理器 (MP) 。如果您为一个内核启动超过 12*4=48 个块,您将无法同时运行您的三个内核。

在这种情况下,您的任务规模对于并发内核执行来说太大了,但您仍然可以重叠数据传输和内核执行,如本博客所示。

您可以在 CUDA 编程指南的异步并发执行部分找到更多信息。

另一方面,由于每个数据集都有一些宿主代码,因此您可以通过同时运行一个数据集的宿主代码和另一个数据集的内核来加速程序。

对于主机代码并行性,您可以使用 posix/omp,然后将具有不同 CUDA 流的每个内核绑定到相应的主机线程。

于 2013-01-23T08:33:29.803 回答