【问题标题】:Optimized CUDA matrix hamming distance优化的 CUDA 矩阵汉明距离
【发布时间】:2016-11-11 15:30:20
【问题描述】:

是否有人知道用于计算两个维度为 A x N 和 N x B 的矩阵之间的 GEMM 风格汉明距离的优化 CUDA 内核?该问题与 GEMM 几乎相同,但它计算每个向量 {1 ... N} 的总和 (a_n != b_n),而不是对每个向量元素进行相乘和求和。

我想在编写自己的代码之前进行验证,因为这个问题比较常见,但我还没有成功找到它的代码。修改代码的建议也很好。

编辑:

除了以下康士因的建议外,我发现this walk-through of an optimized SGEMM implementation 对理解《CUDA C 编程指南》中基本共享内存矩阵乘法示例之外的步骤非常有帮助。

【问题讨论】:

    标签: c++ c matrix cuda hamming-distance


    【解决方案1】:

    你是对的,你可以通过修改gemm() 代码来编写你的内核。 CUDA示例有一个简单的gemm()实现,但是太简单了。性能受限于共享内存访问,在 Kepler 设备上仅提供约 250 Gflops。为了获得更高的性能,您可能需要检查 MAGMA 中的 gemm() 代码。

    http://icl.cs.utk.edu/magma/index.html

    这两篇论文还告诉你如何实现和调优gemm()

    http://staff.kfupm.edu.sa/ics/ahkhan/Resources/Papers/Autotuning/Autotuning%2520GEMM%2520Kernels%2520for%2520the%2520Fermi%2520GPU.pdf

    http://www.netlib.org/lapack/lawnspdf/lawn267.pdf

    gemm() 不同,它通过 FMA 指令实现快速乘加运算的硬件支持,您所需的比较和加法运算可能需要更多指令,因此性能应该较低。考虑到gemm() 的峰值性能在 Kepler 上约为 3 Tflops。汉明距离矩阵计算或许能得到 0.5~2 Tflops。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多