如何在 Linux 集群上构建用于 C++ 的 BLAS 和 LAPACK?
How to build BLAS and LAPACK for use in C++ on Linux cluster?
我正在处理一个很大的计算问题。为了降低方阵中一组线性方程的计算速度,我使用了 lapack
和 blas
。要在我的笔记本电脑上获取库 (Ubuntu 2020),我 运行 以下命令
sudo apt-get install libblas-dev liblapack-dev
然后我通过输入以下内容在编译时链接代码
g++ main.cpp -llapack -lblas
但是,我正在处理的集群似乎没有安装这两个库。它在集群上要慢得多,但芯片更好。它运行,所以我认为它安装了 lapack
库,但没有 blas
。我想安装两者。
我如何构建和编译 lapack
和 blas
库 访问 root 或 apt-get
?
这是一个简短的测试脚本。
#include <iostream>
#include <vector>
extern "C" void dgesv_( int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *lbd, int *info );
int main() {
int SIZE = 3;
int nrhs = 1; // one column in b
int lda = SIZE;
int ldb = SIZE;
std::vector<int> i_piv(SIZE, 0); // pivot column vector
int info;
std::vector<double> A(SIZE*SIZE, 0); // sq mat with 0's
A = {5, 2, 8, 9, 7, 2, 10, 3, 4};
std::vector<double> b(SIZE);
b = {22, 13, 17};
dgesv_( &SIZE, &nrhs, &*A.begin(), &lda, &*i_piv.begin(), &*b.begin(), &ldb, &info );
return 0;
}
我想用
构建它
g++ main.cpp -L/path/to/lapack -L/path/to/blas -llapack -lblas
其中 b 矩阵被替换为解决方案,解决方案是 1.71, 1.29, 0.18
(这是任意的,所以我没有在代码中提供“print_matrix”函数来减少混乱)。
感谢您的宝贵时间。
您可以通过 git:
将官方仓库克隆到您的集群
git clone https://github.com/xianyi/OpenBLAS.git
现在 cd 到克隆的 repo,编译并安装它:
cd OpenBLAS
make
make install PREFIX=~/blas
现在您可以 link BLAS 这样:
g++ main.cpp -L~/blas/lib -lblas
有关编译 BLAS 的更多信息,请参阅 official repo。
LAPACK.
相同
根据 repo README.md
,LAPACK 可以用 CMAKE 编译:
cd lapack
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/home/user/lapack ..
cmake --build . -j --target install
BLAS
下载最新版本BLAS
打开终端并转到保存它的目录
tar -xvf blas-3.8.0.tgz # unzip the blas source files
cd BLAS-3.8.0/
make
mv blas_LINUX.a libblas.a
mv *.a path/to/lib # move the blas lib to the library you will be including at compile
拉帕克
- 下载最新版本LAPACK
tar -xvf lapack-3.9.0.tar.gz
cd lapack-3.9.0/
cp make.inc.example make.inc # use example make as make
make
cp *.a path/to/lib
现在库已经构建,并存储在path/to/lib
中,可以编译问题中的简短示例代码。
g++ main.cpp -L/path/to/lib -llapack -lblas -lgfortran # compiles the code
./a.out # runs the code
我正在处理一个很大的计算问题。为了降低方阵中一组线性方程的计算速度,我使用了 lapack
和 blas
。要在我的笔记本电脑上获取库 (Ubuntu 2020),我 运行 以下命令
sudo apt-get install libblas-dev liblapack-dev
然后我通过输入以下内容在编译时链接代码
g++ main.cpp -llapack -lblas
但是,我正在处理的集群似乎没有安装这两个库。它在集群上要慢得多,但芯片更好。它运行,所以我认为它安装了 lapack
库,但没有 blas
。我想安装两者。
我如何构建和编译 lapack
和 blas
库 访问 root 或 apt-get
?
这是一个简短的测试脚本。
#include <iostream>
#include <vector>
extern "C" void dgesv_( int *n, int *nrhs, double *a, int *lda, int *ipiv, double *b, int *lbd, int *info );
int main() {
int SIZE = 3;
int nrhs = 1; // one column in b
int lda = SIZE;
int ldb = SIZE;
std::vector<int> i_piv(SIZE, 0); // pivot column vector
int info;
std::vector<double> A(SIZE*SIZE, 0); // sq mat with 0's
A = {5, 2, 8, 9, 7, 2, 10, 3, 4};
std::vector<double> b(SIZE);
b = {22, 13, 17};
dgesv_( &SIZE, &nrhs, &*A.begin(), &lda, &*i_piv.begin(), &*b.begin(), &ldb, &info );
return 0;
}
我想用
构建它g++ main.cpp -L/path/to/lapack -L/path/to/blas -llapack -lblas
其中 b 矩阵被替换为解决方案,解决方案是 1.71, 1.29, 0.18
(这是任意的,所以我没有在代码中提供“print_matrix”函数来减少混乱)。
感谢您的宝贵时间。
您可以通过 git:
将官方仓库克隆到您的集群git clone https://github.com/xianyi/OpenBLAS.git
现在 cd 到克隆的 repo,编译并安装它:
cd OpenBLAS
make
make install PREFIX=~/blas
现在您可以 link BLAS 这样:
g++ main.cpp -L~/blas/lib -lblas
有关编译 BLAS 的更多信息,请参阅 official repo。
LAPACK.
根据 repo README.md
,LAPACK 可以用 CMAKE 编译:
cd lapack
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/home/user/lapack ..
cmake --build . -j --target install
BLAS
下载最新版本BLAS
打开终端并转到保存它的目录
tar -xvf blas-3.8.0.tgz # unzip the blas source files
cd BLAS-3.8.0/
make
mv blas_LINUX.a libblas.a
mv *.a path/to/lib # move the blas lib to the library you will be including at compile
拉帕克
- 下载最新版本LAPACK
tar -xvf lapack-3.9.0.tar.gz
cd lapack-3.9.0/
cp make.inc.example make.inc # use example make as make
make
cp *.a path/to/lib
现在库已经构建,并存储在path/to/lib
中,可以编译问题中的简短示例代码。
g++ main.cpp -L/path/to/lib -llapack -lblas -lgfortran # compiles the code
./a.out # runs the code