问题标签 [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.
c++ - cblas_dgemm() 中子矩阵的前导维度参数如何工作?
以及一般矩阵的矩阵-矩阵乘积:
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
。谁可以给我解释一下这个。非常感谢。
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
我不明白。转置的矩阵是正方形的,因此尺寸应该不是问题。我哪里错了?
ios - 使用 Accelerate 平均像素颜色
是的,我知道使用CIAreaAverate
CIFilter
来获取像素的平均颜色。
我正在尝试创建一些替代方案,Accelerate Framework
以查看是否可以更快地提供一些东西。
我正在渲染CIImage
一个上下文。为此,我有这个CIImage extension
...
在这一点上,我已经bitmap
包含了交错的 BGRA 字节。
要获得 R、G 和 B 的平均值,我所要做的就是这样:
但for
正如预期的那样,这个循环非常慢。
我正在考虑使用一些Accelerate
功能,比如
但是这个函数需要是一个...bitmap
的数组UnsafePointer<Double>
我可以转换bitmap
为那个,但这需要一个for
循环,这很慢......
有什么方法可以提取那些 R、G 和 B 像素,并使用一些加速的东西来获得它们各自的平均值吗?
makefile - 我应该把 cblas.h 放在哪里,以便我构建的 mxnet 可以找到它?
我正在尝试mxnet
通过克隆 git 存储库进行安装,如下所示:
但是,当我尝试通过放入 mxnet 目录并按make
如下方式运行来构建它时:
我收到指示cblas.h
无法找到的错误 - 例如
make 的输出是一系列nvcc
编译命令,看起来如下:
如果我打破(我相信)成为所有包含目录,我可以挑选出这些目录:
当我寻找时cblas.h
,我会看到这些副本:
显然,这些似乎都不是Makefile
被指示去寻找的地方。我需要以Makefile
某种方式更改(如何?),还是需要将副本cblas.h
放在其他目录中,或者至少是指向它的软链接。如果是这样,哪个目录以及如何?
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 结果给出:
但应该是
cuda - magma_dpotrf_gpu 给出分段错误
我有一个 cblas 和 lapack 代码,我正试图将其“转换”为岩浆代码以利用 GPU。这是我工作正常的 CPU 代码:
现在,对于 magma GPU 版本,我这样做了:
由于某种原因,最后一行给出了分段错误。我在这里做错了什么?这一切似乎都是正确的。
version - BLAS官方参考版本有什么区别?
我的包管理器有许多可用的 BLAS 版本(特别是 CBLAS):
如果我查看它们的配置,我可以看到它们是从相应的 LAPACK 参考分布中提取的。
我的问题是官方版本之间的差异是否记录在某个地方,希望在变更日志中?理想情况下还指定 BLAS (Fortran) 和 CBLAS 实现之间的差异?我在http://netlib.org/blas网站上找不到该信息。
在那个网站上,有一个指向 BLAST 论坛的链接,在那里我可以找到对“遗留 BLAS”的引用,并想知道它如何适合版本控制方案。编辑:这似乎专门指密集/带状BLAS
请注意,这个问题与现有的众多供应商实现无关——我只对 netlib.org 参考实现感兴趣。
matrix - 如何在 BLAS 中复制跨步矩阵?
据我了解, BLAS 3 级矩阵/矩阵例程采用参数lda
等ldb
,允许传递“跨步”矩阵。例如,如果我有以下 2 x 2 列主矩阵:
其中 x 是我想要忽略的数据,我可以使用参数来表示它m = 2, n = 2, lda=3
(对于列主矩阵)。我的问题是,可以使用 BLAS 例程复制这样的矩阵吗?
如果步幅等于矩阵维数(即矩阵没有步幅),则使用向量复制过程(例如dcopy(m*n,A,1,B,1)
执行此操作)是微不足道的。当矩阵元素不连续时有没有办法做到这一点,即 lda/stride != m
我能想到的一种方法是重复调用dcopy
增加偏移量,同时保持incrx
参数等于 m。似乎效率不高。或者dgemm
B = I 和 C = 0。
c - 使用 CMake 测试 GSL 时 CBLAS 中的未定义引用
我刚刚在我的 Deepin OS(Linux) 上安装了 GSL,为了测试我的安装,我正在尝试编译一个测试文件。使用 编译时gcc
,它可以正常工作,但是使用 CMake 时,Undefined Reference
会出现一些错误。
我尝试main.c
使用以下命令编译文件gcc
:
它工作正常。但是当我尝试 CMake 时:
使用 CMakeLists.txt 文件,如下所示:
出现这样的错误:</p>
(由于系统语言,输出为中文。例如:
方法 :
)
为了确定问题是如何产生的,我还尝试使用gcc
. 使用此命令编译时:
它运作良好。尝试时:
错误消息被重现。所以我猜在链接 BLAS 库时会出现问题。
这是文件main.c
预期的结果是:
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如下)