先感谢这几天的ICE和横扫大哥。。。小弟现在其实再做一个大数库。。但感觉性能不理想。。不知道哪里的问题。
怀疑了几点:
(1)CUDA的整数处理效果如何?我的大数是1M位的,128KB一个,主要试图用来加速乘法运算。
(2)似乎CPU很容易跑出峰值啊。不知道怎么CUDA和我理论的期待不太一样。。。
或者有现成的CUDA上的大整数库也行。。。谢了。。。
先感谢这几天的ICE和横扫大哥。。。小弟现在其实再做一个大数库。。但感觉性能不理想。。不知道哪里的问题。
怀疑了几点:
(1)CUDA的整数处理效果如何?我的大数是1M位的,128KB一个,主要试图用来加速乘法运算。
(2)似乎CPU很容易跑出峰值啊。不知道怎么CUDA和我理论的期待不太一样。。。
或者有现成的CUDA上的大整数库也行。。。谢了。。。
很好奇,你的大数乘法运算是怎样的?据我所知大数乘法运算没有并行性的
有啊。假设是1M位*1M位的,结果是2M位的。中间我先用int做乘法,多次乘法后,再加法加起来。里面很多地方都可以并行啊。
这个完全没有接触过,果断顶贴~呼唤横扫
这样的话,相比串行算法,有什么优势?你是基于2进制的还是十进制的?
大整数的乘法往往被拆分为多个硬件支持的int长度上的乘法和加法。的确如此。
但楼主期待不一样我觉得是因为fermi/kepler有这个几个地方和普通的CPU硬件不同,
(1)fermi/kepler本质上是一个32位机,但CPU可以支持64位整数运算。
(2)作为一个32位机,fermi/kepler没有完成的32位整数*32位整数=>64位结果的完成支持,而是只能选择性的取得低一半结果或者高一半结果,导致一次完整的乘法需要重复2次相乘。但是CPU上的乘法是完整的。
此外,楼主性能不佳,是否可能是忘记了fermi/kepler提供了整数乘加(IMAD)的功能(d = a * b + c), 如果考虑这点,应用上去,应该可以再改善不少吧。