犰狳线性系统求解器(带 openblas)

2023-12-09

我一直在测试各种开源代码来求解 C++ 中的线性方程组。到目前为止,我发现最快的是犰狳,也使用 OPENblas 包。为了解决密集线性 NxN 系统,其中 N=5000 在我的系统上大约需要 8.3 秒,这真的非常快(没有安装 openblas,大约需要 30 秒)。

这种增加的原因之一是犰狳+openblas 似乎可以使用多线程。它在我的两个核心上运行,而没有 openblas 的犰狳只使用 1 个。我有一个 i7 处理器,所以我想增加核心数量,并进一步测试它。我使用的是 ubuntu,所以从 openblas 文档中我可以在终端中执行以下操作:

导出 OPENBLAS_NUM_THREADS=4

然而,再次运行代码似乎并没有增加正在使用的核心数量或速度。我做错了什么吗,还是 2 是使用犰狳的“solve(A,b)”命令的最大数量?我无法在任何地方找到犰狳的源代码来查看。

顺便说一句,有人知道犰狳/openblas 用于求解 Ax=b 的方法(具有并行性的标准 LU 分解或其他方法)吗?谢谢!

编辑:实际上,使用 synaptic 包管理器安装 openblas 时,核心数量停留在 2 似乎是一个错误see here。从源代码重新安装可以让它检测我实际有多少个核心 (8)。现在我可以使用 export OPENBLAS_NUM_THREADS=4 等来管理它。


犰狳并不能阻止OpenBlas使用更多核心。 OpenBlas 的当前实现可能只是为某些操作选择 2 个内核。

你可以直接在中看到Armadillo的源代码可下载包(它是开源的),位于文件夹“include”中。具体来说,查看文件“include/armadillo_bits/fn_solve.hpp”(其中包含用户可访问的solve()函数),以及文件“include/armadillo_bits/auxlib_meat.hpp”(其中包含用于调用痛苦的 Blas 和 Lapack 函数的包装器和内务代码)。

如果您的计算机上已经安装了 Armadillo,请查看“/usr/include/armadillo_bits”或“/usr/local/include/armadillo_bits”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

犰狳线性系统求解器(带 openblas) 的相关文章

  • 关于多核CPU的x86 LOCK问题

    当执行 LOCK 后面的指令时 x86 ASM LOCK 命令前缀是否会导致所有内核冻结 我在一篇博客文章中读到了这一点 但它没有意义 我找不到任何东西表明这是否属实 这是关于锁定该地址的内存总线 Intel 64 和 IA 32 架构软件
  • 为什么这个简单的 Spark 程序不利用多核?

    因此 我在 16 核多核系统上运行这个简单的程序 我运行它 通过发布以下内容 spark submit master local pi py 该程序的代码如下 pi py from pyspark import SparkContext i
  • 使用 LAPACK 分发基于 Cython 的扩展

    我正在编写一个包含 Cython 扩展和使用的 Python 模块LAPACK and BLAS 我愿意使用任何一个clapack or lapacke 或者某种f2c or f2py如有必要 请提供解决方案 重要的是我可以打电话lapac
  • 多线程 Java 应用程序的性能

    我想了解多线程环境中的性能 为此 我编写了一个小测试 在我的机器 四核 Intel Windows XP Sun JDK 1 6 0 20 上运行 结果令人惊讶 该测试基本上是一个线程安全计数器 使用以下任一方法进行同步synchroniz
  • 我可以在多核 x86 CPU 上强制缓存一致性吗?

    前一周 我编写了一个小线程类和一个单向消息管道 以允许线程之间进行通信 显然 每个线程有两个管道 用于双向通信 在我的 Athlon 64 X2 上一切正常 但我想知道如果两个线程都在查看同一个变量并且每个核心上该变量的本地缓存值不同步 我
  • 用于矩阵向量乘积的 Rcpp Parallel 或 openmp

    我正在尝试对共轭梯度的朴素并行版本进行编程 所以我从简单的维基百科算法开始 我想改变dot products and MatrixVector产品通过其适当的并行版本 Rcppparallel 文档具有以下代码dot product使用并行
  • 在 debian wheezy 上的 virtualenv 中使用 pip 安装 matplotlib 时出现 GotoBLAS 错误

    我正在尝试在 debian wheezy 上的 virtualenv 中使用 pip 安装 matplotlib 我收到以下消息 Running setup py egg info for package matplotlib GotoBL
  • Haskell 中的多核编程 - Control.Parallel

    我正在尝试学习如何使用Control Parallel模块 但我认为我没有理解正确 我正在尝试运行以下代码 fibs hs import Control Parallel fib Int gt Int fib 0 0 fib 1 1 fib
  • 元素矩阵乘法:R 与 Rcpp(如何加速此代码?)

    我是新来的C 编程 使用Rcpp无缝集成到R 并且我希望得到一些有关如何加快某些计算速度的建议 考虑以下示例 testmat lt matrix 1 9 nrow 3 testvec lt 1 3 testmat testvec 1 2 3
  • Java 数据流编程 API? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取我的应用程序的“可用”处理器数量?

    我知道如何获取计算机上的物理处理器数量和逻辑处理器数量 但我想知道我的应用程序可以访问多少个逻辑处理器 例如 我在四核机器上进行开发 但我有许多单核用户 并且在许多情况下我 简化 了界面 或者遇到了多核系统从未遇到过的锁定问题 因此 为此
  • 多核 CPU 中的核之间/跨核访问寄存器

    这可能听起来很疯狂 但我似乎不清楚是否有一个接口可供汇编程序员编写代码将内核 1 上的一个寄存器加载到内核 2 上的寄存器 例如 将内核 1 上的 EAX 加载到内核 2 上的 EAX 有可能吗 更多关于汇编程序员使用两个核心 在多个核心上
  • R 中 %in% 运算符的 C++ 版本

    C 中有没有相当于的函数 in R 中的运算符 考虑 R 中的以下命令 which y in x 我试图在 C 中找到等效的东西 特别是在犰狳中 但我找不到任何东西 然后我编写了自己的函数 与上面的 R 命令相比 它非常慢 这是我写的 in
  • 多核::应用?

    有没有类似的东西sapply in the multicore图书馆 或者我必须unlist mclapply 为了达到这个目的 如果它不存在 原因是什么 提前致谢 如果这是一个愚蠢的问题 抱歉 在图书馆parallel 你有mcmappl
  • 哪个更高效?更多核心或更多 CPU

    我意识到这更多的是一个硬件问题 但这也与软件非常相关 特别是在多线程多核 CPU 环境编程时 哪个更好 为什么 无论是效率 速度 生产力 可用性等 1 具有 4 个四核 CPU 的计算机 服务器 or 2 具有 16 个单核 CPU 的计算
  • 检测windows上的核心数

    如果我在 Linux 或 Mac 上运行 R 我可以使用以下命令检测可用内核的数量multicore detectCores 但是 没有 Windows 版本的多核功能 因此我无法在 Windows 上使用此技术 如何从 R 中以编程方式检
  • 查看 Linux 上的多核或多 CPU 利用率

    我有一个在 Linux 上运行的程序 我需要确定它如何利用所有 CPU 内核 有没有什么程序可以查看这些信息 跑过 top 命令并按下 1 查看各个核心
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • Fortran90 中 BLAS 函数返回零

    我正在学习在Fortran90中使用BLAS 并使用子例程编写了一个简单的程序SAXPY https software intel com en us mkl developer reference fortran axpy和函数SNRM2
  • 乔斯基与 ScaLAPACK

    我正在尝试通过进行 Cholesky 分解pdpotrf https software intel com en us node 521465MKL Intel 的库 它使用 ScaLAPACK 我正在读取主节点中的整个矩阵 然后像这样分配

随机推荐

  • d3 - 将数据附加到轴以重新缩放

    我想在显示实际值和比例百分比之间切换 目前 数据是从 csv 文件导入的 我处理 csv 以查找数据的域并很好地显示图表 我可以切换到显示百分比 因为轴域变为 0 到 100 但我希望能够切换回实际数据域 而无需重新处理 csv 文件 是否
  • 动态路由上的 Vue.js 2.0 转换未触发

    我发现转换不会在带有参数的动态路由上触发 例如 使用下面的代码 当我在 chapter 1我去 chapter 2没有过渡 但当我在 chapter 1我去 profile 1有一个 main js file require normali
  • 使用 PHPStorm 和 Docker 容器进行 Xdebug

    设置 Windows 10 Docker 在 Hyper V 上使用 Boot2Docker 运行 PHPStorm 9 VM 上的 Web 服务器是 Nginx 我已将 php5 fpm 的 xdebug ini 配置为 zend ext
  • 基于另一个切片器选择的 Power BI 切片器的初始值

    每当上类别切片器值发生变化时 我想设置下类别切片器的初始值 假设我们有这样的数据 upper category lower category units fruit apple 1 fruit banana 1 vegetable carr
  • 当用户退出浏览器时显示自定义对话框?

    是的 我意识到这是可怕的用户界面和糟糕的可访问性 但由于合同工作 我最初不同意并且一直坚持 我被迫寻找选项 我知道你可以分配一个事件处理程序onbeforeunload like window onbeforeunload function
  • CompositeDisposable.clear 导致 OkHttp 抛出 java.lang.IllegalStateException: 不平衡的进入/退出

    所以我有一个使用 OkHttp 的简单 http 请求 我在 Android 上使用 RxJava 执行此操作 我将此 RxJava 调用添加到CompositeDisposable然后我就清楚了onStop 由于某种原因触发了下面的异常
  • 如何从c程序中终止exe

    我正在使用 system 来调用可执行程序 服务器 现在 经过一段时间后 我想从我的 c 程序本身终止该程序 有谁知道如何做到这一点 运行操作系统 http rcn ee net deb rootfs precise ubuntu 12 0
  • 查找 xslt 中字符串中子字符串的出现次数

    我正在编写一个脚本来查找 XSLT 字符串中子字符串的出现次数 当我想要遍历超过 200k 条记录时 它花费了太多时间 任何人都可以帮助我指出一些更改以使其更快 或者使用其他方法来获取出现次数 我说的是一个子字符串 而不是一个字符 所以我不
  • Magento SOAP API - PHP 登录方法调用引发异常:“看起来我们没有 XML 文档”

    我在通过 PHP 的 SoapClient 连接到 Magento SOAP API 时遇到问题 我的开发服务器上有一个小型测试 PHP 文件设置 代码如下 PHP 文件与我的 magento 开发版本位于同一服务器上 当我通过命令行运行
  • Python 3 安装失败“注册的密钥集无效”

    我一直在尝试安装Python 3 但出现此错误 我在 Windows 8 64 位上运行它 我会继续努力 谢谢您的帮助 我没有找到任何有关此事的文章 所以我来到这里 我对所有应用程序都遇到了这个问题 这意味着当我尝试安装应用程序时 会弹出相
  • Coldfusion如何将pdf文件保存在数据库中并在浏览器中获取它

    插入到 MS SQL 2008 数据库
  • V8 执行解释器生成的字节代码还是涡轮风扇编译器生成的二进制代码? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我对 v8 的工作原理以及它如何执行 js 代码感到困惑 据我了解 v8 首先解析代码并创建 AST 然后将此 AST 引入解释器作为输入并生成字节代码 然后将此字节代码引入到
  • 如何连接 Jenkins 和 Gieta

    我有一个问题 我想在 Gitea Repo 和 Jenkins 之间建立 CI CD 管道 到目前为止 我使用 Jenkins 的 Gitea API 创建了一个 Webhook 不幸的是 当我尝试将测试包从 Gitea 发送到 Jenki
  • 按时区转换日期

    在上面的代码中 我想将服务器时区 GMT 02 00 的日期转换为我设备中的时区 GMT 03 00 但我总是有相同的服务器日期 我做错了什么 TimeZone timeZoneServer TimeZone getTimeZone tim
  • 在循环中保存 Matplotlib 绘图时出现内存溢出

    我正在使用 Matplotlib 使用迭代循环来绘制 soame 数据 当代码保存了大约 768 个绘图时 它会抛出以下异常 RuntimeError Could not allocate memory for image 我的电脑有大约
  • 对声明的 C++ 静态成员变量的“未定义引用”[重复]

    这个问题在这里已经有答案了 我已经开始使用 Java 进行编程 我刚刚达到了我认为在语言知识方面 良好 的水平 为了好玩 我决定开始使用 C 编程 我对这种语言相当陌生 但我学得很快 而且我认为它与 Java 相差不远 我创建了一个测试类
  • 控制台宽度存储在 Windows 注册表中的哪个位置?

    我的默认控制台宽度是 80 但是当我查看HKCU Console没有一个名称具有此值 唯一与 with 有关的是 WindowSize但它的值为 0x190050 即 dec 1638480 它的最后两位数字是否代表我正在搜索的值 在 HK
  • Python:同名函数和变量

    为什么我无法再次调用该函数 或者说 我怎样才能做到呢 假设我有这个功能 def a x y z if x return y else return z 我这样称呼它 print a 3 gt 2 4 5 I get 4 但想象一下我声明了一
  • 没有点击就触发onclick事件

    这是一个简单的骰子投掷事件 6 个骰子 由随机数生成 一切正常 我正在控制台中获取数据 但我希望它仅在单击按钮时触发 在此代码中 在没有我点击的情况下触发了 onclick 事件 在控制台中 我该如何解决这个问题 h1 Dice Proje
  • 犰狳线性系统求解器(带 openblas)

    我一直在测试各种开源代码来求解 C 中的线性方程组 到目前为止 我发现最快的是犰狳 也使用 OPENblas 包 为了解决密集线性 NxN 系统 其中 N 5000 在我的系统上大约需要 8 3 秒 这真的非常快 没有安装 openblas