gpt4 book ai didi

c - 如何使用英特尔 MKL (cblas) 中的 "double"函数和 "single"函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:29 27 4
gpt4 key购买 nike

blas 的 C 接口(interface)(我使用的是 Intel MKL)在对单数据类型和双数据类型的输入数据进行操作时具有不同的函数。例如,cblas_dgemmcblas_sgemm

我编写了一个广泛使用这些函数的程序。我希望用户可以选择使用单精度或 double 进行计算。这只是意味着它说 dgemm 的每个地方都应该是 sgemm(对于其他功能等等)。我不想复制所有代码并将所有 sgemm 替换为 dgemm。在没有相同代码的两个副本的情况下,如何才能最优雅地向用户提供这两种功能?

一个潜在的解决方案是将 cblas_dgemm 的所有实例替换为 cblas_gemm,并根据 g++ 编译器标志 -DDATATYPE_SINGLE-DDATATYPE_DOUBLE 使用宏将 cblas_gemm 定义为 cblas_dgemm 或 cblas_sgemm/。然后,将有两个不同的可执行文件,具有相同的代码库。这是最好的解决方案吗?

最佳答案

因为你不能只用单精度函数替换函数调用(参数类型也必须改变,我建议为 float 和 double 定义一个模板类,比方说 template <typename T> class processing ,和, 编写模板类的两个特化,用于差异重要的地方(即调用 cblas 例程的地方)。

关于c - 如何使用英特尔 MKL (cblas) 中的 "double"函数和 "single"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com