从CMake获取BLAS实现信息



在一个项目中,我使用

find_package(BLAS REQUIRED)

以检测BLAS。

有没有办法判断在这之后发现了BLAS的哪个实现

根据文档,BLA_VENDOR可以用于要求特定的实现,但它没有报告找到了哪一个。

不幸的是,我需要知道找到了哪个BLAS,因为不同的实现在接口上有细微的差异,例如MKL使用具有6个参数而不是5个参数的zdotu(第一个是指向结果值的指针(。

根据@Tsyvarev的建议,我最终做了这个

set(BLA_VENDOR Intel10_64lp)
find_package(BLAS)
if(BLAS_FOUND)
message("MKL environment detected")
add_definitions(-DRETURN_BY_STACK)
else()
unset(BLA_VENDOR)
find_package(BLAS REQUIRED)
endif()

-DRETURN_BY_STACK(或-DFORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID(似乎是某些BLAS标头(例如cblas.h(识别为具有MKL兼容声明的一种方式。

从技术上讲,可能需要尝试intelmkl BLAS的每个变体,并以某种方式选择一个,我将其放在这里是为了完整性。

Intel10_32 (intel mkl v10 32 bit)
Intel10_64lp (intel mkl v10+ 64 bit, threaded code, lp64 model)
Intel10_64lp_seq (intel mkl v10+ 64 bit, sequential code, lp64 model)
Intel10_64ilp (intel mkl v10+ 64 bit, threaded code, ilp64 model)
Intel10_64ilp_seq (intel mkl v10+ 64 bit, sequential code, ilp64 model)
Intel

相关内容

  • 没有找到相关文章

最新更新