从 CMake 获取 BLAS 实现信息
Get BLAS implementation information from CMake
在我正在使用的项目中
find_package(BLAS REQUIRED)
检测 BLAS。
有没有办法判断 BLAS 是 的哪个实现?
根据 documentation BLA_VENDOR
可用于要求特定的实现,但它不报告找到了哪一个。
不幸的是,我需要知道找到了哪个 BLAS,因为不同的实现在它们的接口中存在细微差别,例如 MKL 使用 zdotu
和 6 个参数而不是 5 个(第一个是指向结果值的指针)。
根据@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 headers(例如cblas.h
认可的方式) 有 MKL-compatible 个声明。
从技术上讲,可能需要尝试 intel
mkl BLAS 的每个变体,并以某种方式选择一个,为了完整性,我将其放在这里。
这也假设最后一个 find_package
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
在我正在使用的项目中
find_package(BLAS REQUIRED)
检测 BLAS。
有没有办法判断 BLAS 是 的哪个实现?
根据 documentation BLA_VENDOR
可用于要求特定的实现,但它不报告找到了哪一个。
不幸的是,我需要知道找到了哪个 BLAS,因为不同的实现在它们的接口中存在细微差别,例如 MKL 使用 zdotu
和 6 个参数而不是 5 个(第一个是指向结果值的指针)。
根据@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 headers(例如cblas.h
认可的方式) 有 MKL-compatible 个声明。
从技术上讲,可能需要尝试 intel
mkl BLAS 的每个变体,并以某种方式选择一个,为了完整性,我将其放在这里。
这也假设最后一个 find_package
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