linux下调用openblas的segmentation fault错误

编译了一个动态库,需要调用blas的库函数进行矩阵向量运算。在linux环境下一开始使用的是atlas库,编译运行后没有问题,但是速度和windows下的程序比较慢了很多,唯一的不同之处在于windows下调用的是openblas函数库,于是考虑是不是这个动态库的速度有差别。

然后编译openblas的源代码,下载地址如下https://github.com/xianyi/OpenBLAS,编译的时候需要使用FC=gfortran选项才能编译成功。

但是编译成功后,我写的动态库调用openblas,问题出现在外部函数链接动态库的时候。只用链接了这个库,在main函数执行之前,程序直接core掉,完全没法调试。

于是我考虑是不是我编译oepnblas的库的问题,另外写了一个简单的testlib库,调用openblas,运行良好。也就是说openblas库编译没有问题。

我完全迷惑了,在工程组同事的帮助下,找到了问题的所在。

流程如下: 首先在http://itil.gyoss.oa.com公司内部网站上申请”现网环境管理“下的coredump开关的使用权,打开服务器上的coredump开关。然后在服务器上使用

ulimit -c unlimited 设置core file size(ps: 使用 ulimit -a 可以查看core file size的大小)
程序挂掉时 segmentation fault后面会多个括号,里面写着 coredumped 
这时候会在/home/tmp下生成core文件,用gdb可以查看
查看是问题是这样的

可以看到程序是在main函数运行前调用blas分配内存时出了问题。查看openblas的资料可以发现,openblas根据自动探测的cpu内核开多个线程,服务器有12核,所以它开了12个线程,分配内存时出了问题,使用
export OPENBLAS_NUM_THREADS=1
运行ok
但是还是觉得有些地方不能理解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值