我快要完成一个处理非常大的整数(约为2的100,000,000次方)的算法。这需要在一个16核服务器上运行几个小时的高度并行代码,由于该算法不需要太多内存,因此内存充足。我在.NET 4中使用了BigInteger类。
算法的具体细节并不重要,但为了提供背景,以下是对这些整数执行的操作以及算法的一些显着特点的相当详尽的列表:
我的问题是,使用类似GPU .NET的库,我如何在GPU上处理如此大的数字?我是否可以利用浮点优化来计算这么大的数字的对数?
寻找一个起点来制定策略。
算法的具体细节并不重要,但为了提供背景,以下是对这些整数执行的操作以及算法的一些显着特点的相当详尽的列表:
- 加法/减法。
- 将大数乘以小数。
- 用非常小的数字(例如2)除以大数。
- 基于2的对数。
- 基于2的幂。
- 比较两个或多个大数(最小值/最大值)。
- 完全没有涉及质数。
- 该算法专门设计为不占用太多内存,因为内存访问的性能损失超过了某些智能即时计算的性能损失。然而,如果内存访问得到改善,算法可以受益。
- 计算如此大的数字的基于2的对数。
- 检查这些数字中二进制位的预定义模式。这是因为访问BigInteger底层数据的唯一方法是首先使用ToByteArray而不是原地操作。此外,操作字节大小的块并不能提高性能。
我的问题是,使用类似GPU .NET的库,我如何在GPU上处理如此大的数字?我是否可以利用浮点优化来计算这么大的数字的对数?
寻找一个起点来制定策略。