优化的CUDA矩阵汉明距离
是否有人知道优化的CUDA内核用于计算尺寸为A x N和N x B的两个矩阵之间的GEMM样式汉明距离? 问题几乎与GEMM相同,而是计算每个向量{1 … N}的和(a_n!= b_n),而不是对每个向量元素进行乘法和求和。
我想在编写自己的之前validation,因为这个问题比较常见,但我还没有成功找到它的代码。 修改代码的建议也很好。
编辑:
除了下面的kangshiyin的建议之外,我发现这个优化的SGEMM实现的演绎对于理解CUDA C编程指南中基本共享内存矩阵乘法示例之外的步骤非常有帮助。
你是对的,你可以通过修改gemm()
代码来编写你的内核。 CUDA示例有一个简单的gemm()
,但它太简单了。 性能受共享内存访问的限制,在开普勒设备上仅提供约250 Gflops。 为了获得更高的性能,您可能需要检查MAGMA中的gemm()
代码。
http://icl.cs.utk.edu/magma/index.html
这两篇论文还告诉你如何实现和调整gemm()
。
http://www.netlib.org/lapack/lawnspdf/lawn267.pdf
与具有FMA指令的硬件支持的gemm()
用于快速乘法和加法操作不同,您所需的操作比较和添加可能需要更多指令,因此性能应该更低。 考虑到gemm()
的峰值性能在Kepler上约为3 Tflops。 汉明距离矩阵计算可能会得到0.5~2个Tflops。