C++ 如何在模板函数中使用CUBLAS库?

C++ 如何在模板函数中使用CUBLAS库?,c++,templates,cublas,C++,Templates,Cublas,CUBLAS对每种类型的数据都有一个函数,但我想从模板中调用CUBLAS,例如: template <typename T> foo(...) { ... cublas<S/D/C/Z>geam(..., const T* A, ...); ... } 模板foo(…){ ... 立方英尺(…,常数T*A,…); ... } 如何触发正确的函数调用?我为具有相同函数名的不同类型编写了cublas包装函数 inline cublasStatus_

CUBLAS对每种类型的数据都有一个函数,但我想从模板中调用CUBLAS,例如:

template <typename T> foo(...) {
    ...
    cublas<S/D/C/Z>geam(..., const T* A, ...);
    ...
}
模板foo(…){
...
立方英尺(…,常数T*A,…);
...
}

如何触发正确的函数调用?

我为具有相同函数名的不同类型编写了cublas包装函数

inline cublasStatus_t cublasGgeam(cublasHandle_t handle,
        cublasOperation_t transa, cublasOperation_t transb,
        int m, int n,
        const float *alpha,
        const float *A, int lda,
        const float *beta,
        const float *B, int ldb,
        float *C, int ldc)
{
    return cublasSgeam(handle, transa, transb, m, n, alpha, A, lda, beta, B, ldb, C, ldc);
}

inline cublasStatus_t cublasGgeam(cublasHandle_t handle,
        cublasOperation_t transa, cublasOperation_t transb,
        int m, int n,
        const double *alpha,
        const double *A, int lda,
        const double *beta,
        const double *B, int ldb,
        double *C, int ldc)
{
    return cublasDgeam(handle, transa, transb, m, n, alpha, A, lda, beta, B, ldb, C, ldc);
}
之后,可以为具有相同函数名的任何类型调用geam()。C++编译器将根据函数的类型选择正确的函数。你的情况应该是这样的

template <typename T> foo(...) {
    ...
    cublasGgeam(..., A, ...);
    ...
}
模板foo(…){
...
库布拉斯盖姆(…,A,…);
...
}

这是一个复杂的时间重载,并且根本没有运行时成本,尽管您必须为包装器函数编写一个很长的列表

C开关案例陈述?看一看。@RobertCrovella-好的,但是我如何比较类型呢?例如,开关(T){case float:…}?那有效吗?不,那不行。这可能是个坏主意。你可以切换数据类型的大小,但双和CuFiple的大小相同。如果你问主机侧代码,如果你有一个非常新的C++编译器,你应该能够使用C++ RTTI(IE.CuthType IDE)/Cux>来实现这个。但我不知道这与CUDA或CUBLAS有什么关系,它是一个通用的C++编程问题。