【问题标题】:OpenCl and power iteration method (eigendecomposition)OpenCl和幂迭代法(特征分解)
【发布时间】:2014-01-31 18:45:14
【问题描述】:

我是 OpenCL 的新手,我正在尝试实现幂迭代方法(描述为 over here) 矩阵大小超过 100000x100000!

实际上我不知道如何实现这一点。 这是因为工作组有限制 CL_DEVICE_MAX_WORK_GROUP_SIZE (所以我不能用 1000000 个工作项制作一个工作组) 但是在迭代的每一步我都需要同步和规范化向量。

1) 那么是否可以在一个内核中进行所有计算? (如果矩阵大小大于 CL_DEVICE_MAX_WORK_GROUP_SIZE,我认为答案是否定的)

2) 我可以在主机代码中创建“while”循环吗?在这种情况下使用 GPU 是否仍然有利可图? 就像是: while(条件)

{

内核调用

同步

}

【问题讨论】:

    标签: opencl gpgpu


    【解决方案1】:
    • 2:是的,您可以在主机代码中创建一个while 循环。这在性能方面是否仍然有利可图,取决于被调用的内核是否实现了良好的加速。我个人的偏好是将太多逻辑打包到单个内核中,因为较小的内核更易于维护,有时更易于优化。但是,当然,调用内核有一个(小)开销,必须考虑在内。而组合到内核是否可以带来加速(或新的优化潜力)取决于内核实际在做什么。但在这种情况下(矩阵乘法和向量归一化),我个人会从两个不同的内核开始,它们在 while 循环中从主机调用。

    • 1:由于具有浮点值的 100000x100000 矩阵将占用至少 40GB 内存,因此无论如何您都必须考虑一般的方法。有大量关于矩阵运算、它们的并行化以及在 GPU 上的相应实现的文献。从“高级”的角度来看,一个重要方面是矩阵是 dense 还是 sparse (http://en.wikipedia.org/wiki/Sparse_matrix)。根据稀疏性,甚至可以在主内存中处理 100000x100000 个矩阵。除此之外,您可能会考虑查看用于矩阵运算的库(例如 http://viennacl.sourceforge.net/ ),因为实现高效的矩阵乘法具有挑战性,尤其是对于稀疏矩阵。但是,如果您想自己完成整个过程:祝您好运 ;-) 和 ... CL_DEVICE_MAX_WORK_GROUP_SIZE 对 problem 大小没有限制。事实上,OpenCL 中的问题规模(即工作项的总数)实际上是无限大的。如果您的 CL_DEVICE_MAX_WORK_GROUP_SIZE 为 256,并且您想要处理 10000000000 个元素,那么您创建 10000000000/256 个工作组并让 OpenCL 关心它们的实际调度和执行方式。对于矩阵运算,CL_DEVICE_MAX_WORK_GROUP_SIZE 主要在您想要使用本地内存时相关(并且您必须这样做,以实现良好的性能):因此工作组的大小隐含地定义了您的本地内存块的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多