如何解决GSL实际上是在使用Atlas吗?
我想将Atlas用作Raspbian上GSL的BLAS后端。使用以下make选项:
ldflags = $(shell pkg-config --libs gsl) -L:libatlas.so.3
产生此链接步骤:
gcc -lgsl -lgslcblas -lm -L:libatlas.so.3 -o my-app main.o
most basic example构建并成功运行:
#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 };
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);
/* Compute C = A B */
gsl_blas_dgemm (CblasNoTrans,CblasNoTrans,1.0,&A.matrix,&B.matrix,0.0,&C.matrix);
printf ("[ %g,%g\n",c[0],c[1]);
printf (" %g,%g ]\n",c[2],c[3]);
return 0;
}
如何验证它在使用Atlas后端?进行运行时调用,或在必要时通过GDB进行解决。
解决方法
答案基本上是
- 不,它没有使用Atlas;
- 原因是
endContainer
中的库顺序声明必须为ldflags
; - 您可以通过运行
-L/usr/lib/arm-linux-gnueabihf/atlas -lblas -lgsl -lgslcblas -lm
,gdb
来判断,对将来的库符号加载和运行说是。如果您进入b cblas_dgemm
(这是通过替代系统与Atlas的符号链接),那么可以,它使用的是Atlas。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。