-1

我在全新的 Cygwin 安装上编译 Fortran 代码时遇到了一些问题,我可以追溯到对英特尔svml(短向量数学库)库中函数的未定义引用。

具体来说,我收到了表格错误

import_gamess.o:import_gamess.f90:(.text+0xb58b): 
undefined reference to `vmldPow2'

并且该函数vmldPow2svml库的一部分,如此处所示我将其作为选项传递给我的 makefile 中的 gfortran

F90 = gfortran -m64 -msse2 -O3 -march=native -mtune=native -fopenmp \
  -ffast-math -fassociative-math -freciprocal-math -ffinite-math-only \
  -fno-signed-zeros -fno-trapping-math -msahf -mmovbe -mrecip \
  -mveclibabi=svml -ftree-vectorize -fexternal-blas 
  -fblas-matmul-limit=50  -static 

(我也在使用库lapacklblas。)

该文件在我的笔记本电脑上编译得很好,在 Windows 7 上运行 Cygwin 1.7.17。(大约在 2013 年 4 月 18 日安装;gfortran 版本是 4.5.3。)我现在正在尝试在新桌面上复制安装,同样运行 Windows 7,并已安装 Cygwin 1.7.25。我在 32 位和 64 位安装(分别使用 gfortran 4.7.3 和 4.8.1 运行)以及在我的桌面上新安装 64 位 Cygwin 时都遇到了上述错误。我也没有在同一个桌面上启动 Linux 时遇到错误,目前我无法解决。

我很清楚svml,在较新的 Cygwin 安装中,有 (a) 到 的链接断开,或 (b) 该库缺少部分。我已尽我所能广泛搜索恢复该库的方法,但它似乎是 GNU 编译器的固有部分。事实上,GNU 编译器是否放弃了对这个库的支持?如果没有,那么我推测我需要修复库或链接到它的文件。在那种情况下,这个库在哪里可用?我应该修复哪些文件以及如何修复?

不过,我承认,我很可能会找错树,如果是这样的话,我很乐意直截了当。我应该在哪里寻找?

4

1 回答 1

1

与您的gfortran 4.8.1链接对应的站点为-mveclibabi

To use this option, both -ftree-vectorize and -funsafe-math-optimizations 
have to be enabled, and an SVML or ACML ABI-compatible library must be 
specified at link time. 

版本4.7.14.7.2.

我的猜测是您需要安装英特尔 MKL(并设置环境)并链接它。此外,您需要指定-funsafe-math-optimizations.

或者,您可以删除-mveclibabi=svml并使用gfortran矢量化内在函数。

于 2013-09-24T18:58:21.200 回答