问题标签 [magma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
32 浏览

gpu - 使用 MAGMA 测试代码的 CMakeLists 链接错误“magma_opts::parse_opts”

目前我正在使用 MAGMA 2.5.4 来求解具有小矩阵的批量线性求解器。我想参与magma_dgesv_batched通过 CMakeLists 文件编译的项目。

include_directories如下target_link_libraries所示。

但是,我遇到了一些链接错误:

显然,它表明我没有链接正确的库,但我不知道应该如何在我的 CMakeLists 文件中修复它。我查看了 MAGMA 文档,似乎不需要链接其他库(也许我做错了什么)。

MAGMA 安装成功,我也magma_dgesv_batched完美地运行了它的测试代码。Gcc 版本是 8,Ubuntu 20.04 中带有 cuda 10。

谢谢!

0 投票
1 回答
127 浏览

c++ - 为什么我的矩阵求逆在 C++ 中使用 LAPACKE 这么慢:MAGMA Alternative and setup

LAPACK用来逆矩阵:我做了一个引用传递,即通过处理地址。下面的函数带有一个输入矩阵和一个由它们的地址引用的输出矩阵。

问题是我必须将其转换F_matrix1D array,我认为这是在运行时级别的性能浪费:我可以找到哪种方法来摆脱这个耗时的补充任务我想如果我打电话很多次功能matrix_inverse_lapack

在相关功能下方:

例如,我这样称呼它:

反转的表现不是预期的,我认为这是由于2D -> 1D我在函数中描述的这种转换matrix_inverse_lapack

更新

有人建议我在我的 MacOS Big Sur 11.3 上安装 MAGMA,但设置它有很多困难。

我有AMD Radeon Pro 5600M显卡。我已经默认安装了 Big Sur 版本的所有框架 OpenCL(也许我这样说是错的)。任何人都可以告诉安装 MAGMA 的程序。我在http://magma.maths.usyd.edu.au/magma/上看到了一个 MAGMA 软件,但它真的很贵而且不符合我想要的:我只需要所有的 SDK(头文件和库) ,如果可能的话,用我的 GPU 卡构建。我已经在我的 MacOS 上安装了所有英特尔 OpenAPI SDK。也许,我可以将它链接到 MAGMA 安装。

我看到另一个链接https://icl.utk.edu/magma/software/index.html MAGMA 似乎是公开的:上面的非免费版本没有链接,不是吗?

0 投票
1 回答
134 浏览

matrix - 如何使用 MAGMA 和 NVIDIA GPU 卡而不是 CPU LAPACKE 来逆大矩阵

我需要对大型矩阵进行逆运算,并且我想修改我当前的 LAPACKE 版本例程,以利用 GPU NVIDIA 卡的强大功能。

事实上,我的 LAPACKE 例程适用于相对较小的矩阵,但不适用于大型矩阵。

下面这个 LAPACKE 例程的实现:

with 被称为逆 CO_CL 矩阵:

CO_CL 定义为:

在我的情况下,如何使用 MAGMA for NVIDIA 来求逆矩阵,而不是使用 LAPACKE?

更新 1:我已经下载magma-2.6.1,首先,我必须修改原始 Makefile :

我没有在:中看到mkl标题并且兼容?magma-2.6.1nvccMKL

0 投票
0 回答
170 浏览

c++ - 执行分布在两个 GPU 卡上的简单 MAGMA 反演矩阵

我有一个来自 MAGMA doc 的简单程序,它可以反转 GPU 卡上的大矩阵。

一切正常,检查预期的短运行时间:

单卡上的良好执行

现在,如果您查看上面的代码,您会看到我注释了 2 行:

实际上,取消注释这 2 行并替换magma_dgetrf_gpu(m, m, d_a, m, piv, &info);magma_dgetrf_mgpu(2, m, m, d_lA, m, piv, &info);是为了使此代码分布在 2 个 GPU 卡(在 2 个 GPU 卡 RTX A6000)上运行。

我已经MAGMA_NUM_GPUS=2从 MAGMA 文档中设置了。

所以我有代码:

在执行开始时,两个 GPU 似乎都在运行,但我很快得到以下错误:

我们可以看到反转是错误的。我不知道这些错误消息的来源。

编译由 Makefile.inc 完成:

我可以尝试同时利用两个 GPU 卡吗?

PS:我必须提到在 2 个 GPU 卡之间有一个 NVLink 硬件组件。

更新

从使用的文档(Magma script doc)中magma_dgetrf_mgpu,我尝试对其进行调整以计算矩阵的逆a

通常,编译正常,但在执行时会出现以下错误:

但是,我认为我已经很好地初始化了变量d_la,但似乎仍然存在编码错误。

接下来我可以尝试什么?

0 投票
1 回答
112 浏览

compiler-errors - 当我们有 2 个带有 NVLink 硬件组件的 NVIDIA/CUDA GPU 卡时如何正确使用 -Xnvlink 编译器选项

在 Debian 10 上,我有 2 个带有 NVlink 硬件组件的 GPU 卡 RTX A6000,我希望受益于这两张卡的潜在组合功能。

目前,我有以下由 Makefile 调用的 magma.make :

如您所见,我使用了最后一个标志-Xnvlink,但它在编译时生成以下错误:

如何使用正确的标志或选项将 2 GPU 与 NVLink 的组合电源调用包含在可执行文件中?

0 投票
0 回答
207 浏览

gpu - LAPACKE 或 MAGMA GPU - 使用 Cholesky 分解的矩阵求逆 - 函数 magma_dpotrf_gpu 和 magma_dpotri_gpu

我有一个函数的第一个版本,它反转一个大小矩阵并m使用 如下:magma_dgetrf_gpumagma_dgetri_gpu

现在,我也想使用 Cholesky 分解进行逆运算。该功能看起来像第一个版本,除了使用的功能是:

这是反转的整个函数:

不幸的是,在检查了输出数据之后,我的实现出现了错误的反转。

我对这一行的使用有疑问:

谁能一眼看出我使用dpotrfanddpotri函数(实际上是magma_dpotrf_gpuand magma_dpotri_gpu)的错误来自哪里?

编辑1:

根据 Damir Tenishev 的建议,我举了一个使用 LAPACKE 对矩阵求逆的函数示例:

如您所见,这是矩阵求逆的经典版本,它使用LAPACKE_dgetrfLAPACKE_dgetri

编辑2:版本MAGMA是:

如您所见,我使用了magma_dgetrf_gpumagma_dgetri_gpu函数。

现在,我想用LAPACKEor MAGMA+LAPACK、使用dpotrfanddpotri函数来做同样的事情。我记得我逆的矩阵是对称的。

编辑 3:我的尝试来自此文档链接

特别是,请参见magma dpotri - invert a positive definite matrix in double precision, CPU interface第 325 页的第 4.4.21 节。

0 投票
1 回答
226 浏览

c++ - 有没有一种方法可以结合 2 个 GPU 卡的功能来逆大矩阵 120k x 120k 双精度

在 Debian 10 上,我有 2 个带有 NVlink 硬件组件的 GPU 卡 RTX A6000,我希望受益于这两张卡的潜在组合功能。

目前,我有以下由 Makefile 调用的 magma.make :

当我执行我的代码时,我有内存错误,因为在这段代码中,我尝试逆矩阵 size 120k x 120k

如果我们仔细观察,120k x 120k 矩阵需要双精度:120k x 120k x 8 字节,因此差不多 108GB。

隐含的函数不能接受单精度。

不幸的是,我有 2 个 48GB 的​​ NVIDIA GPU 卡:

问题 :

从计算的角度或从编码的角度来看,有没有办法合并 2 个 GPU 卡的 2 个内存(将提供 96GB)以反转这些大矩阵?

我正在使用MAGMA这样的编译和反演例程:

如果这不可能直接使用两个 GPU 卡之间的 NVlink 硬件组件来实现,我们可以找到哪种解决方法来允许这种矩阵反转?

编辑 :

@user2357112supportsMonica. 感谢您的快速答复。是的,如您所见,我意识到我没有足够的内存来存储 120k x 120k。但我们的目标是以 60k x 60k 矩阵为例,大概是 54GB:在这种情况下,我怎样才能合并两个 48GB GPU 卡的能力,以便能够反转这个 54GB 矩阵?我正在使用岩浆。

如果我可以将 GPU 内存与 2 张卡合并,也许第三张 48GB 的​​ GPU 卡可以让我反转 120k x 120k:你怎么看?

0 投票
1 回答
9 浏览

gpu - 谷歌 colab 中的 MAGMA

每当我使用安装了 magma-2.6.1 的 google colab 运行非常简单的代码时,我总是收到以下错误“magma_getdevice_arch 中的错误:MAGMA 未初始化(首先调用 magma_init())或损坏的设备”。

//////////////////////