Fortran Coder

标题: 调用MKL,调试显示"没有为 mkl_core.dll 加载的符号文件" [打印本页]

作者: wojiaoshuhua    时间: 2019-7-12 00:59
标题: 调用MKL,调试显示"没有为 mkl_core.dll 加载的符号文件"
环境是VS2017+Intel parallel studio2019,要做一个有限元-边界元算法,代码里分别调用了pardiso,dgemm,dgesv三个函数,配置选项如下:
链接库mkl_lapack95_ilp64.lib,  mkl_blas95_ilp64.lib,  mkl_intel_lp64_dll.lib,  mkl_intel_thread_dll.lib,  mkl_core_dll.lib,  libiomp5md.lib  (不知道是否齐全,求大家指点)
include位置:<mkl文件夹>/<include>      (此路径下还有ilp64文件夹,我不确定要不要写,求大家指点)
lib位置<mkl文件夹>/lib/intel64_win
用的是parallel模式
代码几千行,就不附了。。。。但是因为用的不是95接口下的函数,所以前面没有用include语句和use语句,不知道有没有关系。。。。
运行时,弹出如下图的错误,没有在某一位置间断,我在百度查了一下,也没有相关的答案,请教一下大家,谢谢!!!!!


IO7UEL5Y%9_G0@S6)8~Z{%Y.png (52.07 KB, 下载次数: 307)

IO7UEL5Y%9_G0@S6)8~Z{%Y.png

作者: fcode    时间: 2019-7-12 08:03
1、用77还是95接口,不影响。
2、你这个问题也是小问题。注意调试的时候不要步入到MKL函数内部就好。
3、发生异常是在MKL的内部(你没有MKL的源代码,当然不能调试到内部)(我也没有,别问我要)
4、异常虽然发生在MKL内部,但诱导出现异常的原因确是你。(99.99%的原因在于你,也不排除MKL有bug)
5、比如,你给出的数组大小超过了数组真实的大小,导致MKL误以为数组很大,读取了不该读取的内存。或者比如,某些函数对数组矩阵有要求(例如要求满秩、对称、正定等),你给出的并不满足使用条件等。
作者: wojiaoshuhua    时间: 2019-7-12 17:20
fcode 发表于 2019-7-12 08:03
1、用77还是95接口,不影响。
2、你这个问题也是小问题。注意调试的时候不要步入到MKL函数内部就好。
3、发 ...

谢谢您的指点,再向您请教一下,这种情况我该怎么排查问题。。。
我研究了一天,反复确认了函数里传递的实参符合mkl用户手册的规范,因为计算有限元问题,所以数组阶数很大,我不确定哪出了问题。。。。

作者: fcode    时间: 2019-7-12 21:54
单步调试,找到出问题的地方,然后再分析传给MKL的数据如何
作者: wojiaoshuhua    时间: 2019-7-13 13:47
fcode 发表于 2019-7-12 21:54
单步调试,找到出问题的地方,然后再分析传给MKL的数据如何

谢谢您,我单步调试的时候,发现问题出在调用dgesv上,请问一下,该怎么分析传给mkl的数据呢?
作者: vvt    时间: 2019-7-15 07:51
断点时查看传递给函数的各变量的值,是否正常,是否符合函数要求。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2