问题标签 [cblas]

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 回答
1073 浏览

c++ - cblas_dgemm() 中子矩阵的前导维度参数如何工作?

我有三个矩阵 A、B 和 C: 在此处输入图像描述

以及一般矩阵的矩阵-矩阵乘积:

void cblas_dgemm(const enum CBLAS_ORDER __Order, const enum CBLAS_TRANSPOSE __TransA, const enum CBLAS_TRANSPOSE __TransB, const int __M, const int __N, const int __K, const double __alpha, const double *__A, const int __lda, const double *__B, const int __ldb, const double __beta, double *__C, const int __ldc);

为了使用- 命令,cblas_dgemm我需要知道前导维度。对我来说很明显,在总矩阵 A (或其转置形式)的情况下,我们有:M=5, N=4, lda=4

在子矩阵 CI 的情况下,我认为我必须放弃&A[5]并设置M=3, N=2, ldc=4

但我不知道这在红色子矩阵 B 的情况下如何工作M=4, N=2。谁可以给我解释一下这个。非常感谢。

0 投票
0 回答
591 浏览

matrix - 为什么我使用 DGEMM 的矩阵乘法不适用于转置?

我使用 DGEMM 编写了以下矩阵乘法函数。它将三个矩阵 a、b 和 c 作为双精度数组并计算 axb=c。DGEMM 使用三个整数 rowsA、colsB 和 colsA_rowsB 来使用正确的尺寸。Thee boolean trans 应该提供在计算中使用矩阵 b 的转置的选项,特别是 axb^T=c。

现在,当我使用以下代码测试我的函数时,它在我不转置(第一个方法调用)但当我做(第二个方法调用)时工作得很好 ** On entry to DGEMM parameter number 8 had an illegal value

我不明白。转置的矩阵是正方形的,因此尺寸应该不是问题。我哪里错了?

0 投票
2 回答
581 浏览

ios - 使用 Accelerate 平均像素颜色

是的,我知道使用CIAreaAverate CIFilter来获取像素的平均颜色。

我正在尝试创建一些替代方案,Accelerate Framework以查看是否可以更快地提供一些东西。

我正在渲染CIImage一个上下文。为此,我有这个CIImage extension...

在这一点上,我已经bitmap包含了交错的 BGRA 字节。

要获得 R、G 和 B 的平均值,我所要做的就是这样:

for正如预期的那样,这个循环非常慢。

我正在考虑使用一些Accelerate功能,比如

但是这个函数需要是一个...bitmap的数组UnsafePointer<Double>

我可以转换bitmap为那个,但这需要一个for循环,这很慢......

有什么方法可以提取那些 R、G 和 B 像素,并使用一些加速的东西来获得它们各自的平均值吗?

0 投票
1 回答
449 浏览

makefile - 我应该把 cblas.h 放在哪里,以便我构建的 mxnet 可以找到它?

我正在尝试mxnet通过克隆 git 存储库进行安装,如下所示:

但是,当我尝试通过放入 mxnet 目录并按make如下方式运行来构建它时:

我收到指示cblas.h无法找到的错误 - 例如

make 的输出是一系列nvcc编译命令,看起来如下:

如果我打破(我相信)成为所有包含目录,我可以挑选出这些目录:

当我寻找时cblas.h,我会看到这些副本:

显然,这些似乎都不是Makefile被指示去寻找的地方。我需要以Makefile某种方式更改(如何?),还是需要将副本cblas.h放在其他目录中,或者至少是指向它的软链接。如果是这样,哪个目录以及如何?

0 投票
1 回答
705 浏览

c++ - 使用 BLAS 和 LAPACKE 在 C++ 中使用 SVD 计算 Pseidoinverse

我正在尝试实现矩阵的伪逆计算 A*,以便为具有 C++ 维度的方形 nxn 矩阵 A 求解 Ax=b。A* 的算术公式是通过 SVD 分解。

因此,首先我计算 SVD(A)=USV^T,然后计算 A*=VS U^T,其中 S是反对角线 S,其中其非零元素 si 在 S* 中变为 1/si。最后我计算解决方案 x=A*b

但是我没有得到正确的结果。我将 LAPACKE 接口用于 c++ 和 cblas 用于矩阵乘法。这是我的代码:

在第二个 cblas_dgemm 之后,预计在 r2 中有 A* 伪逆。但是,在与 matlab pinv 比较后,我没有得到相同的结果。如果我打印 r2 结果给出:

但应该是

0 投票
1 回答
88 浏览

cuda - magma_dpotrf_gpu 给出分段错误

我有一个 cblas 和 lapack 代码,我正试图将其“转换”为岩浆代码以利用 GPU。这是我工作正常的 CPU 代码:

现在,对于 magma GPU 版本,我这样做了:

由于某种原因,最后一行给出了分段错误。我在这里做错了什么?这一切似乎都是正确的。

0 投票
1 回答
206 浏览

version - BLAS官方参考版本有什么区别?

我的包管理器有许多可用的 BLAS 版本(特别是 CBLAS):

如果我查看它们的配置,我可以看到它们是从相应的 LAPACK 参考分布中提取的。

我的问题是官方版本之间的差异是否记录在某个地方,希望在变更日志中?理想情况下还指定 BLAS (Fortran) 和 CBLAS 实现之间的差异?我在http://netlib.org/blas网站上找不到该信息。

在那个网站上,有一个指向 BLAST 论坛的链接,在那里我可以找到对“遗留 BLAS”的引用,并想知道它如何适合版本控制方案。编辑:这似乎专门指密集/带状BLAS

请注意,这个问题与现有的众多供应商实现无关——我只对 netlib.org 参考实现感兴趣。

0 投票
1 回答
526 浏览

matrix - 如何在 BLAS 中复制跨步矩阵?

据我了解, BLAS 3 级矩阵/矩阵例程采用参数ldaldb,允许传递“跨步”矩阵。例如,如果我有以下 2 x 2 列主矩阵:

其中 x 是我想要忽略的数据,我可以使用参数来表示它m = 2, n = 2, lda=3(对于列主矩阵)。我的问题是,可以使用 BLAS 例程复制这样的矩阵吗?

如果步幅等于矩阵维数(即矩阵没有步幅),则使用向量复制过程(例如dcopy(m*n,A,1,B,1)执行此操作)是微不足道的。当矩阵元素不连续时有没有办法做到这一点,即 lda/stride != m

我能想到的一种方法是重复调用dcopy增加偏移量,同时保持incrx参数等于 m。似乎效率不高。或者dgemmB = I 和 C = 0。

0 投票
1 回答
328 浏览

c - 使用 CMake 测试 GSL 时 CBLAS 中的未定义引用

我刚刚在我的 Deepin OS(Linux) 上安装了 GSL,为了测试我的安装,我正在尝试编译一个测试文件。使用 编译时gcc,它可以正常工作,但是使用 CMake 时,Undefined Reference会出现一些错误。

我尝试main.c使用以下命令编译文件gcc

它工作正常。但是当我尝试 CMake 时:

使用 CMakeLists.txt 文件,如下所示:

出现这样的错误:</p>

(由于系统语言,输出为中文。例如:

方法 :

)

为了确定问题是如何产生的,我还尝试使用gcc. 使用此命令编译时:

它运作良好。尝试时:

错误消息被重现。所以我猜在链接 BLAS 库时会出现问题。

这是文件main.c

预期的结果是:

0 投票
4 回答
742 浏览

c - 使用 cmake 链接外部 cblas 存档库

我在我的 Linux Fedora 环境中下载并构建(似乎正确)相关的 BLAS 和 CBLAS 库(来自 netlib.org/blas)。结果是blas_LINUX.a我重命名libblas.a并复制到\usr\local\lib的文件,以及复制到的cblas.h文件\usr\include。我随后尝试CMakeList.txt在 CLion 项目的文件中引用它。该文件如下:

根据重新加载时 cmake 产生的消息,cblas 库似乎很好。但是,当我尝试运行我的应用程序时,我收到以下链接器错误消息:

以下是我的main.c文件的内容

我不完全确定我在哪里出错了。我是使用 cmake 的新手,我在网上搜索时绕着圈子试图找出问题所在。任何朝着正确方向的指针都会受到极大的欢迎和赞赏。

修正(CMakeOutput.txt如下)