在pthread中使用cublasSetMatrix

时间:2012-07-27 00:17:37

标签: cuda pthreads

如果在单独的pthread中使用了cublasSetMatrix吗?

我希望将CPU上的任务与CPU-> GPU数据传输重叠。但是,由于数据非常大,我试图避免分配大的固定内存。

1 个答案:

答案 0 :(得分:1)

不,不会。 GPU上下文与创建它们的线程相关联。如果您尝试在另一个线程中运行cublasSetMatrixcudaMemcpy而不执行任何其他操作,则会创建另一个上下文。内存分配在上下文之间不可移植,实际上每个上下文都有自己的虚拟地址空间。结果将是您最终使用两个GPU上下文,并且副本将失败。

固定内存的要求来自CUDA驱动程序。对于重叠复制和执行,复制中涉及的主机存储器必须处于GPU可以通过PCI-e总线通过DMA访问的物理地址范围内。这就是需要固定的原因,否则主机内存可能在交换空间或其他虚拟内存中,并且DMA事务将失败。

如果您担心大问题所需的固定主机内存量,请尝试使用一个或两个较小的固定缓冲区并执行多次传输,使用固定内存作为分段缓冲区。性能不如使用单个大型固定缓冲区和一次大转移,但您仍然可以实现有用的内核/副本重叠并在此过程中隐藏大量PCI-e延迟。