使用GPU加速BigInteger计算

2024-01-22

我几乎完成了处理一些非常大的整数(大约 2 的 100,000,000 次方)的算法。由于该算法不是内存密集型的,因此需要在内存充足的 16 核服务器上编写几个小时的高度并行代码。我使用 .NET 4 中的 BigInteger 类。

算法的细节并不重要,但就上下文而言,以下是对这些整数执行的操作的相当详尽的列表以及算法的一些显着特征:

  • 加法/减法。
  • 大数乘以小数。
  • 大数除以小数(例如 2)。
  • 基数 2 日志。
  • 基础 2 电源。
  • 比较两个或多个大数(最小/最大)。
  • 没有任何质数的参与。
  • 该算法经过专门设计,不占用内存,因为内存访问对性能的影响大于某些智能即时计算的性能影响。然而,如果内存访问得到改善,该算法可以合理地受益。

我已经尽可能地优化了代码,现在分析仅显示两个瓶颈:

  • 计算如此大的数字以 2 为底的 Log。
  • 检查这些数字中二进制数字的预定义模式。这是因为访问 BigInteger 基础数据的唯一方法是首先使用 ToByteArray 而不是就地操作。此外,对字节大小的块进行操作对性能没有帮助。

考虑到内存访问和日志操作,我开始考虑 GPU 以及是否可以有效地卸载一些工作。我对 GPU 知之甚少,只知道它们针对浮点运算进行了优化。

我的问题是,使用 GPU .NET 这样的库,如何在 GPU 上处理如此大的数字?我可以以某种方式利用浮点优化来计算如此大的数字的 Log 吗?

寻找制定策略的起点。


我正在寻找 C# 中的 GPU 工作,并正在考虑 Tidepowerd.com GPU.NET 和 CUDAfy.NET。当我上次检查时,Nvidia 特定的和 CUDAfy 都不支持单声道。但它们都允许在 GPU 上运行的 C# 中看起来相当正常的代码。

另外,您是否考虑过使用 3d 方库?有几个非常好的 BigInteger 库,也是开源的。 GMP很好而且免费;http://gmplib.org/ http://gmplib.org/,至少有一个 C# 包装器(我对此没有经验)http://www.emilstefanov.net/Projects/GnuMpDotNet/ http://www.emilstefanov.net/Projects/GnuMpDotNet/

.NET 中的 BigInteger 类是不可变的,根据我的经验,这并不方便。如果您有 2 个大小相同的整数(大约 100MB),则添加操作会生成第三个 100MB BigInt。例如,如果修改两个原始文件之一,则可以更快地完成。

C = A + B means allocating 100MB for C (this is what BigInt does)
A = A + B means you no longer have the original A, but a much faster calculation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用GPU加速BigInteger计算 的相关文章

  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • Android - 用 @IntDef 替换参数化枚举

    如何避免参数化枚举与 IntDef 我想保留一些与每个枚举 类型关联的静态详细信息 例如关联的 URl 关联的可绘制对象等 TYPE ONE R string res Urls URL1 TYPE TWO R string res Urls
  • 如何防止Xcode每次都重建项目

    我有一个 Mac OS X 应用程序 由一个主要目标和一个依赖框架组成 自从在我的 Mac OS X 应用程序上启用代码签名后 我注意到每次运行 Xcode 时都会重建主要目标 即使我没有触及任何代码行 这是一个问题 因为依赖框架需要知道主
  • 如何更改多处理模块使用的序列化方法?

    如何更改Python使用的序列化方法multiprocessing图书馆 特别是 默认的序列化方法使用pickle具有该版本 Python 的默认 pickle 协议版本的库 默认的pickle协议在Python 2 7中是版本2 在Pyt
  • 为什么是24位寄存器?

    在我的工作中 我处理不同的微控制器 微处理器和 DSP 处理器 其中许多都有 24 位寄存器和计数器 我知道如何使用它们 这不是我的问题 我的问题是为什么他们有 24 位寄存器 为什么不把它做成32位的呢 据我所知 这不是大小的问题 因为寄
  • 根据另一个参考数组从一个数组中选择密切匹配

    我有一个数组A和一个参考数组B 尺寸为A至少和B e g A 2 100 300 793 1300 1500 1810 2400 B 4 305 789 1234 1890 B实际上是指定时间信号中峰值的位置 并且A包含稍后时间的峰值位置
  • 序列化代码示例中的无限循环

    看看下面的代码here https web archive org web 20151025040111 http blogs msdn com 80 b sowmy archive 2006 03 26 561188 aspx 它是关于在
  • 如何使用 Jest 运行单个测试?

    我在文件 fix order test js 中有一个 适用于嵌套子项 的测试 运行以下命令会运行文件中的所有测试 jest fix order test 如何只运行一个测试 下面的代码不起作用 因为它搜索指定的正则表达式的文件 jest
  • Windows:检测右 alt 是否在当前布局中生成 Ctrl+Alt (AltGr)

    Windows 中的某些键盘布局 例如 US QWERTY 将右 Alt 视为常规 Alt 键 而其他键盘布局 例如 US International 将其视为 AltGr 并在按下时同时生成 Ctrl 和 Alt 键 Microsoft
  • 通过身份验证从 https 下载文件

    我有一个 Python 2 6 脚本 可以从 Web 服务器下载文件 我希望这个脚本传递用户名和密码 用于在获取文件之前进行身份验证 并且我将它们作为 url 的一部分传递 如下所示 import urllib2 response urll
  • android 中如何导航到另一个页面?

    我是安卓新手 请告诉我如何在 android 中导航到新页面 提前致谢 编辑 如何从现有活动开始新活动 在 Android 中 导航到另一个页面意味着您必须启动另一个 Activity 要开始新活动 请使用此 Intent intent n
  • 使用 postgres 表序列而不是共享 hibernate_sequence

    当我对表执行任何操作时 它总是显示错误 Hibernate select nextval hibernate sequence 2019 07 20 16 15 44 877 WARN 58376 nio 9000 exec 1 o h e
  • 按修改日期而不是发布日期对 Jekyll 帖子进行排序?

    对于经常更新帖子的人来说 有必要根据帖子从新到旧进行排序最后修改日期而不是 Jekyll 默认按发布日期排序 似乎没有简单的方法可以实现这一点 我已经阅读并测试了几乎所有的方法 这是有效的 部分符合预期 用过这个宝石https github
  • 在linux中安装jdk 1.7时出错[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当我使用以下命令在 Oracle Linux 中安装 jdk 1 7 时 rpm ivh jdk 7u9 linux i586 rpm 但是我收到以下
  • 使用正则表达式捕获两个单词之间的文本

    我正在尝试使用 CSharp 中的正则表达式获取两个关键字之间的文本 虽然我已经找到了一个具有相同标题的主题 但该主题是关于查找方括号之间的文本 这相当容易 因为您可以使用
  • 为什么 SQLAlchemy count() 比原始查询慢得多?

    我正在使用 SQLAlchemy 和 MySQL 数据库 我想计算表中的行数 大约 300k SQL炼金术count http docs sqlalchemy org ru latest orm query html sqlalchemy
  • 警告:在此函数中使用未初始化的“”[-Wuninitialized]

    以下程序编译时没有警告 O0 include
  • GitHub Action:如何从表达式求值中获取值并将其分配给环境变量

    环境表达式通常直接赋值 如下例所示 name set up env var env TAG v1 2 3 run echo TAG 但是如何从 shell 脚本评估中获取值呢 例如 在我的终端中 我可以通过以下方式获取当前标签git des
  • CMake rpm 在 /etc/init.d 中安装文件

    我想安装一个文件 etc init d 目录 我已经写了代码 INSTALL FILES CMAKE SOURCE DIR app script appd DESTINATION etc init d appd 但是当我使用 cmake 运
  • Facebook SDK 4.5 iOS 9

    我遇到了新 FBSDK 的问题 每当我尝试调用登录方法 logInWithReadPermissions 时 我都会收到以下错误消息 错误 canOpenUrl url fbauth2 失败错误 null 我的配置 plist 文件遵循 i
  • 使用GPU加速BigInteger计算

    我几乎完成了处理一些非常大的整数 大约 2 的 100 000 000 次方 的算法 由于该算法不是内存密集型的 因此需要在内存充足的 16 核服务器上编写几个小时的高度并行代码 我使用 NET 4 中的 BigInteger 类 算法的细