问题标签 [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.
java - java.lang.UnsatisfiedLinkError:java.library.path 中没有 mkl_rt
我在 windows10 中有一个使用微笑库的 java8 应用程序。例如,当我运行 LLE 算法时,我收到了以下警告:
Smile-netlib 模块在类路径中不可用。将使用纯 Java 矩阵库。所以我决定通过 maven 添加微笑 ntelib,正如 github 中的微笑所建议的那样。但是再次运行后,我得到了这个堆栈跟踪:
1) mkl_rt 是什么,我如何将它插入到 java 中?这意味着数学内核库?2) 微笑还建议“让他们的机器优化 libblas3 (CBLAS) 和 liblapack3 (Fortran) 在运行时作为共享库可用。” 我怎样才能做到这一点?
编辑:
我找到并下载了 mkl_rt.dll 并将其放在一个名为 dlls 的文件夹中。我当前的问题是,通过在 java.library.path 中设置带有 mkl_rt 的文件夹,它会找到 dll,但找不到来自其他依赖项的函数。我在问题开始的微笑网络库中找到了这段代码。
JMatrix(蓝色)是smile.math.matrix包中smile-math jar中的一个类,所以当我通过vm参数、编程方式或通过本地位置的eclipse添加路径时,dllsmile-netlib NLMatrix类找不到JMatrix 类是smile-netlib,我收到以下错误。
c++ - GEMV BLAS 和 cuBLAS 缺少“仅共轭”排序选项?
我对 BLAS 和 cublas 接口以及如何进行特定的矩阵向量乘法有疑问。
我目前正在打一个电话,cblas_zgemv
并给出了正确的结果。
基本上我有一个复杂的 3x3 矩阵A
和一个复杂的向量v
(3 个分量),在 c 排序中所有连续的,我想将矩阵的 Hermitian 共轭(共轭和转置)乘以向量。可以通过调用 cblas 进行此调用
看起来这似乎无法通过 BLAS 接口实现。 http://www.netlib.org/lapack/explore-html/dc/dc1/group__complex16__blas__level2_gafaeb2abd9fffa7442b938dc384aeaf47.html#gafaeb2abd9fffa7442b938dc384aeaf47
原因似乎是 BLAS 在“trans”参数中没有“conjugate-only”选项。
BLAS(不是 cblas)中的等效调用将是:
trans
选项只有N
(无转置,即 C 排序中的转置)、(转置,即 C 中的T
无转置)、C
(共轭转置,仅 C 中的共轭)。
由于对称性,缺少另一种组合,例如CO
(“仅共轭”--没有转置--,这将对应于 C 排序中的共轭-转置)。
因此,对于复杂元素,BLAS 似乎有一个不方便的漏洞。最糟糕的是,这种限制似乎传播到了与 BLAS 基本具有相同接口的 CUDA BLAS (cuBLAS)。拨打 cuBLAS 电话将是我的最终目标。 https://docs.nvidia.com/cuda/cublas/index.html#cublas-lt-t-gt-gemv
与 BLAS 一样,cuBLAS 只有三个选项(通过枚举)用于转置选项:CUBLAS_OP_N
, CUBLAS_OP_T
, CUBLAS_OP_H
.
我错过了一些明显的东西吗?这是一个已知的限制并且有一个众所周知的解决方法吗?
注意:我知道也许这种特殊情况可以用 GEMM 在具有维度的情况下实现1xn
,但是可以对 GEMM 提出相同的论点,它缺少“仅共轭”选项。
c - cblas - 函数 _main 中引用的未解析的外部符号
对于初学者,我经历了几个类似的问题和主题,但没有找到答案(或者不知道如何应用它)。我正在使用 VS 2019 和最新的 LAPACK。首先,这是我到目前为止所做的:
- 下载的 LAPACK 仓库
- 将 cmake 文件更改为也构建 cblas
- 使用 CMake 生成项目
- 建立所说的项目(不会让我启动它,所以我猜这就是它应该做的)
- 将带有头文件的文件夹传递给包含目录 (LIBPATH),将带有 .lib 文件的文件夹传递给库目录 (LIB) 以及 .lib 文件本身(lapack.lib、lapacke.lib、blas.lib、cblas.lib)作为附加依赖项链接器
然后尝试启动以下代码,只是为了得到“函数_main中引用的未解析的外部符号_cblas_dgemv”:
根据在网上找到的一些随机建议,我还尝试将编译类型从默认更改为 C,但结果是其他依赖项产生了数千个错误(诸如“原子”之类的文件,不太确定,但我怀疑它们来自基础库) .
c - 使用 cblas_chpr 函数
当我尝试使用 cblas 库中的 cblas_chpr() 函数来计算浮点复数向量的相关矩阵时遇到问题。
从 netLib.org下载Lapack v3.10.0 库后,我对其进行编译并将libcblas.a、liblapack.a、liblapacke.a、librefblas.a和libtmglib.a文件复制到我的项目中,并确保这些库已链接正确。
根据描述,cblas_chpr 函数计算 alpha * x * conjg(x') + A 并将结果存储在 A 中。
函数定义为:
其中参数是:
- 布局 - 这是一个 emun,两个可能的输入是 CblasRowMajor 和 CblasColMajor。
- Uplo - 这是一个枚举,两个可能的输入是 CblasUpper 和 CblasLower。
- N - 矩阵 A 的阶数和向量 x 中的元素数。
- alpha - 向量 X 乘以的比例因子。
- X - 向量 X。
- incX - X 内的步幅。例如,如果 incX 为 7,则使用每第 7 个元素。
- A - 矩阵 A。返回时被结果覆盖。
我的函数的主体如下:
但是,程序因“chpr_() at 0x55555555e70b”错误而崩溃。
我猜我的输入参数不正确。CBLAS 是 Fortran BLAS 库的包装器。
有没有人遇到过这个错误并且知道如何解决它?
blas - CBLAS - ** 在进入 SGEMM / DGEMM 时,参数编号 X 具有非法值?
我使用以下参数调用 cblas_sgemm:
- 顺序:CblasRowMajor
- transA、transB:CblasTrans 或 CblasNoTrans
- M:矩阵 op(A) 和矩阵 C 的行数(高度)
- N:矩阵 op(B) 和矩阵 C 的列数(宽度)
- K:矩阵 op(A) 的列数(宽度)和矩阵 op(B) 的行数(高度)
- 阿尔法:标量
- A:指向矩阵 A 的指针
- LDA:当 transA = CblasNoTrans 则 LDA = M,否则 LDA = K
- B:指向矩阵 B 的指针
- LDB:当 transB = CblasNoTrans 则 LDB = K,否则 LDB = N
- 测试版:标量
- C:指向矩阵 C 的指针(入口偏差和出口结果)
- 最不发达国家 = 米
其中,如果 transM 为 CblasNoTrans,则 op(M) = M,否则为 Transpose(M)
参数正确(根据文档),但我收到错误消息:“** 在进入 SGEMM 时,参数编号 X 具有非法值” - 如何解决此错误?