c - GSL 实际上是在使用 Atlas 吗?
问题描述
我想在 Raspbian 上使用 Atlas 作为 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
最基本的示例构建并成功运行:
#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, %g\n", 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。
推荐阅读
- python - Python:XML元素树findall()不返回任何东西
- html - Chrome 开发者工具 - 如何锁定 CSS 类列表?
- javascript - 使用 indexOf 匹配的 JS 代码是如何工作的?
- python - 使用神经网络的多元时间序列回归
- ios - 如何在 Swiftui 视图函数中使用 EnvironmentObject?
- python - Django:在模型导入的上下文中没有名为“foo”的模块问题
- jpa - 使用每个 Persist JPA 创建新实体
- react-native - AsyncStorage.removeItem(key) 不会删除项目,除非应用程序重新启动或几分钟后
- javascript - 是否有fingerprintjs 采用的详尽选项列表?
- python - Python 找不到带有模块的本地 .PYD 文件