【问题标题】:Gpuarray in Cuda/Matlab [closed]Cuda / Matlab中的Gpuarray [关闭]
【发布时间】:2013-03-17 13:40:54
【问题描述】:

想知道有没有办法优化matlab函数gather。我正在开发一个具有非常大矩阵的 Cuda 代码,并且我注意到我必须用来取回我的 GPU 数据的 gather 函数非常慢。对于一个 2^13x2^8 的矩阵,大约需要 3 秒!

【问题讨论】:

  • @MariusBrendmoe, gather 是 matlab 中将 gpuArray 类型从设备内存移回主机内存的函数。 matlab GPU 代码中不一定有任何用户定义的内核。
  • 您好,我使用的是 GTX 680 卡。我的矩阵包含单个(cuda 中的浮点数)值。

标签: matlab cuda gpu


【解决方案1】:

gpuArray.gather 的性能受您的 PCI 总线的限制。您只能通过收集更少的数据(例如使用索引)来优化它。请注意,在 Parallel Computing Toolbox 的更新版本中,许多操作是异步的,但 gather 不是 - 所以您可能只是看到异步请求完成的时间。您可以使用wait(gpuDevice)检查设备同步。

【讨论】:

  • 我还没有对gpuArray.gather 进行基准测试,但是做一些粗略的数学计算,我认为一个 2^21 浮点数或双精度数的数组应该大约为 16 或 32MB。这不应该花费近 3 秒的时间来传输,所以我认为在进行任何时序测量之前进行同步的建议是一个很好的调查方法——无论如何,这在非 matlab GPU 代码上是一个常见的时序错误。很久以前我确实做了一些 gpuArray 矩阵乘法的计时,它一定是在 matlab 将操作暴露为异步之前,因为我只是在乘法周围使用了 tic 和 toc。
猜你喜欢
  • 1970-01-01
  • 2019-05-22
  • 2013-07-05
  • 2012-10-18
  • 2017-08-04
  • 1970-01-01
  • 2013-01-03
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多