Visual C ++ 2010和Lapack,Blas库(Visual C++ 2010 and Lapack, Blas libraries)
我想使用Blas和Lapack库来使用一些rutines,但我不知道如何在Visual C++ 2010使用它们。
如何在这种情况下使用它们?
I want to use Blas and Lapack libraries to use some rutines, however I do not know how to use them in Visual C++ 2010.
How to use them in this context?
原文:https://stackoverflow.com/questions/
更新时间:2019-12-21 17:40
最满意答案
虽然我没有使用它,但似乎LAPACK有一个C ++ DLL接口。 请参阅此站点 – 向下滚动到标题为“第2部分:在Visual(Studio)C / C ++项目中使用LAPACK子例程”的部分。
有预先构建的Windows二进制文件可用。
如果我理解正确, LASACK中包含BLAS的参考版本。
Though I haven’t used it, it appears that LAPACK has a C++ dll interface. See this site – scroll down to the section titled “Part 2: Using LAPACK subroutines in a Visual (Studio) C/C++ Project”.
There are pre-built Windows binaries available.
If I understand correctly, a reference version of the BLAS is included in LAPACK.
2011-04-20
相关问答
BLAS和LAPACK有很多实现,也没有单一的Linux版本。 在netlib.org上有一个例程接口和参考实现的规范 ,但该参考实现并不专注于特定平台(CPU,OS ……)上的最大性能。 所以,Mac库所做的是它有自己的代码来进行一些计算,这可能比参考计算更快。 它可以用与参考Fortran代码不同的编程语言编程。 您可以尝试许多其他实现:英特尔MKL,ATLAS,GotoBLAS,OpenBLAS,Sun性能库,Cray科学库等。 它们通常用C语言或特定CPU的汇编语言编写。 Appl
…
如果您从提到的FEX提交中查看lapack.m文件,您将看到一些关于如何使用该函数的示例: 示例:使用DGESVD进行 SVD分解: X = rand(4,3);
[m,n] = size(X);
C = lapack(‘dgesvd’, …
‘A’, ‘A’, … % compute ALL left/right singular vectors
m, n, X, m, … % input MxN matrix
ze
…
这里描述了在Windows 7 64位上没有用于SciPy安装的BLAS / LAPACK库的解决方案: http://www.scipy.org/scipylib/building/windows.html 安装Anaconda更容易,但您仍然不会获得英特尔MKL或GPU支持,而不需要支付(他们在MKA优化和加速Anaconda的附加组件中 – 我不知道他们是否使用PLASMA和MAGMA) 。 使用MKL优化,numpy在大矩阵计算上的表现优于IDL 10倍。 MATLAB在内部使用英特尔MK
…
最近,这两个来自田纳西大学的接口已经发布: https://bitbucket.org/icl/blaspp https://bitbucket.org/icl/lapackpp 使用这些本机C ++实现有一些直接的好处。 让我们考虑一个基本的通用编程示例: 想象一下,你想要缩放矢量: v = alpha*v这要归功于cblas_?scal函数。 使用cblas ,如果你想要一些“泛型”,因为它具有所有支持的标量类型( float , double , complex , compl
…
虽然我没有使用它,但似乎LAPACK有一个C ++ DLL接口。 请参阅此站点 – 向下滚动到标题为“第2部分:在Visual(Studio)C / C ++项目中使用LAPACK子例程”的部分。 有预先构建的Windows二进制文件可用。 如果我理解正确, LASACK中包含BLAS的参考版本。 Though I haven’t used it, it appears that LAPACK has a C++ dll interface. See this site – scroll down
…
我曾经有过类似的问题 ,而且看起来很可能你的代码中存在一些未定义的行为(例如double free),这是以编译器特定的方式处理的。 也许这在gcc 4.9和6.0之间改变了。 很难说如果不知道你的代码,但你可以自己使用一些工具来跟踪这个问题,例如GDB或特别是valgrind的memcheck (对我来说非常出色): valgrind –tool memcheck
这将报告代码中与内存相关的错误和未定义行为的位置。 Problem solved. 1 –
…
我假设,如果你是C++新手,你也是C和Fortran新手。 在那种情况下,我肯定会建议你,不要从Blas / Lapack开始,至少没有一个不错的C++ -wrapper。 我的建议是看看Eigen ,它使用原生C++代码提供了更容易的矩阵运算开始。 您可以查看他们的入门指南 。 据说Eigen性能与Blas / Lapack相当,例如他们的基准 。 但是我没有自己测试。 如果你真的想要进入低级别并使用Blas / Lapack来看看cBlas ( C Wrapper of Blas)和Lapac
…
根据netlib dger(M, N, ALPHA, X INCX, Y, INCY, A, LDA)执行A := alpha*x*yT + A 因此A应该全部为零以获得X和Y的外积。 According to netlib dger(M, N, ALPHA, X INCX, Y, INCY, A, LDA) performs A := alpha*x*yT + A. So A should be all zeros to get the outer product of X and Y.
…
实际上dgemm是为子矩阵乘法而设计的。 您只需要正确使用每个矩阵的起始指针和参数LDA , LDB , LDC 。 BLAS的C变体是: void cblas_dgemm (const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A,
…
您的链接顺序错误。 在需要它们的代码之后链接库,而不是之前。 喜欢这个: gcc -o eigen eigen.c -llapack
gcc -static -o eigen eigen.c -llapack
这应解决联系问题。 为了回答随后的问题,为什么会这样,GNU ld文档说: 它在您编写此选项的命令中有所不同; 链接器按照指定的顺序搜索和处理库和目标文件。 因此, foo.o -lz bar.o’ searches library ‘在文件foo.o之后但在bar.o之前foo.o –
…
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226034.html原文链接:https://javaforall.net
