【发布时间】:2016-09-29 10:13:04
【问题描述】:
我正在用 C++ 开发一个线性代数工具,它严重依赖于矩阵乘法和分解(如 LU、SVD),旨在应用于大型矩阵。我使用英特尔 MKL 开发它以获得最佳性能,但我不想发布仅限英特尔 MKL 的版本,因为我认为它不适用于没有英特尔或不想安装 MKL 的人。相反,我应该发布一个不是英特尔 MKL 特定的更通用的代码,而是允许用户指定他们想要使用的 BLAS 和 LAPACK 的实现(例如 OpenBLAS 或 ATLAS)。
尽管函数原型在不同的实现中似乎是相同的,但有几个(帮助?)函数和类型是特定于英特尔 MKL 的。例如,我使用的是 MKL_INT 类型,还有 mkl_malloc。这个article 建议使用宏来重新定义类型,这也是我的第一个想法。我想我也会有标题的宏。
我相信编写与 BLAS/LAPACK 实现无关的代码是标准的,我想知道是否有比依赖宏更简洁的方法——特别是因为后者需要重新编译切换代码,does not seem to be necessary 用于我使用过的其他工具。
【问题讨论】:
标签: c++ c lapack blas intel-mkl