【问题标题】:Is there efficient way to map graph onto blocks in CUDA programming?有没有有效的方法将图形映射到 CUDA 编程中的块?
【发布时间】:2015-06-18 16:51:35
【问题描述】:

在并行计算中,第一步通常是将原点问题划分为一些子任务,并将它们映射到块和线程上。

对于规则数据结构的问题,非常简单高效,例如矩阵乘法、FFT等。

但是图论问题,如最短路径、图遍历、树搜索,具有不规则的数据结构。至少在我看来,在使用 GPU 时将问题划分为块和线程似乎并不容易。

我想知道这种分区是否有有效的解决方案?

为简单起见,以单源最短路径问题为例。我被困在如何划分图表以便局部性和合并。

【问题讨论】:

  • 这是一个非常宽泛的问题,很难回答。你有没有想到一个特定的应用程序?您能否细化您所询问的范围?
  • 您能否详细介绍一下您正在寻找的算法的应用领域。我可以分享最近邻搜索的经验,但如果你问一些一般的图问题,比如生成树搜索...
  • @marina.k 我没有解决单源最短路径问题。首先,Dijkstra 算法如果在多核系统中实现似乎很难。其次,如果使用类似于 Dijkstra 算法的迭代方案,由于节点之间的约束非常复杂且不规则,很难保证局部性和合并性,甚至使用共享内存进行缓存。
  • @talonmies 请参阅上面的评论。

标签: cuda gpu


【解决方案1】:

树形数据结构旨在最好地优化顺序推进方式。在树搜索中,由于每个状态都高度依赖于前一个状态,我认为并行遍历树并不是最优的。

就图而言,可以并行分析每个连接的节点,但我猜可能存在重叠路径的冗余操作。

【讨论】:

    【解决方案2】:

    您可以使用使用 GAS 方法的 MapGraph 来处理您提到的所有事情......他们也有一些实现相同的示例,并且库包括用于 GPU 和 cpu 实现的 cuda 中的 Gather、Apply 和 Scatter。

    您可以在这里找到最新版本:http://sourceforge.net/projects/mpgraph/files/0.3.3/

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2022-10-04
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2015-01-18
      相关资源
      最近更新 更多