我想使用Atlas作为Raspbian上GSL的BLAS后端。有了这些制造选项:
ldflags = $(shell pkg-config --libs gsl) -L:libatlas.so.3
产生这个链接步骤:
gcc -lgsl -lgslcblas -lm -L:libatlas.so.3 -o my-app main.o
最基本的例子构建并成功运行:
#include <stdio.h>
#include <gsl/gsl_blas.h>
int
main (void)
{
double a[] = { 0.11, 0.12, 0.13,
0.21, 0.22, 0.23 };
double b[] = { 1011, 1012,
1021, 1022,
1031, 1032 };
double c[] = { 0.00, 0.00,
0.00, 0.00 };
gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3);
gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2);
gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2);
/* Compute C = A B */
gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,
1.0, &A.matrix, &B.matrix,
0.0, &C.matrix);
printf ("[ %g, %gn", c[0], c[1]);
printf (" %g, %g ]n", c[2], c[3]);
return 0;
}
如何验证它是否使用Atlas后端?进行运行时调用,或者在必要时通过GDB进行计算。
答案基本上是
- 不,它没有使用Atlas
- 原因是
ldflags
中的库顺序声明需要为-L/usr/lib/arm-linux-gnueabihf/atlas -lblas -lgsl -lgslcblas -lm
- 您可以通过运行
gdb
、b cblas_dgemm
,对将来的库符号加载和运行表示同意来判断。如果你在/usr/lib/arm-linux-gnueabihf/libblas.so.3
着陆——这是通过替代系统与Atlas的符号链接——那么是的,它正在使用Atlas