【发布时间】:2015-01-10 01:04:51
【问题描述】:
blas 的 C 接口(我使用的是英特尔 MKL)具有不同的函数,用于对单数据类型和双数据类型的输入数据进行操作。例如,cblas_dgemm 与 cblas_sgemm。
我编写了一个广泛使用这些功能的程序。我希望用户可以选择使用单精度或双精度进行计算。这仅仅意味着它说 dgemm 的每个地方都应该是 sgemm (对于其他功能等等)。我不想复制所有代码并将所有 sgemm 替换为 dgemm。我怎样才能最优雅地向用户提供这两种功能,而不需要两个相同的代码副本?
一种可能的解决方案是将 cblas_dgemm 的所有实例替换为 cblas_gemm,并使用宏将 cblas_gemm #define cblas_gemm 定义为 cblas_dgemm 或 cblas_sgemm,具体取决于 g++ 编译器标志 -DDATATYPE_SINGLE 或 -DDATATYPE_DOUBLE。然后,将有两个不同的可执行文件,具有相同的代码库。这是最好的解决方案吗?
【问题讨论】: