我几乎完成了一个处理一些非常大的整数(大约2次提高到100,000,000次)的算法。由于该算法不是内存密集型的,因此在16核心服务器上需要花费几个小时的高度并行代码才能获得足够的内存。我利用BigInteger类在.NET 4使用GPU加速BigInteger计算
算法的细节并不重要,但对于背景下,以下是对这些整数和算法的一些显着特征进行操作的一个非常详尽的列表:
- 加法/减法。
- 大数乘以小数。
- 大数除以非常小的数字(例如2)。
- Base 2 Log。
- 基地2电源。
- 比较两个或更多的大数字(最小/最大)。
- 不涉及素数。
- 该算法的具体设计不是内存密集型,因为内存访问的性能高于一些智能即时计算。尽管如此,如果内存访问得到改善,算法可以合理地受益。
我已经优化了代码尽可能现在分析仅示出了两个瓶颈:
- 计算基地2登录用于这种大的数字。
- 检查这些数字中预定义的二进制数字模式。这是因为访问BigInteger底层数据的唯一方法是首先使用ToByteArray而不是就地操作。此外,在字节大小的块上操作不会有助于性能。
考虑到内存访问和日志操作,我开始考虑GPU和我是否可以有效地卸载一些工作。我对GPU的了解很少,只是它们针对浮点运算进行了优化。
我的问题是,使用类似GPU .NET的库,我该如何在GPU上处理如此庞大的数字?我能以某种方式利用浮点优化来计算这么大数量的Log吗?
寻找一个起点来形成一个战略。
您是否考虑过使用CUDAfy.NET? http://cudafy.codeplex.com/(请注意,这是NVIDIA特定的,因此可能对您无用) – 2012-08-17 07:12:26