template <typename T> foo(...) {
...
cublas<S/D/C/Z>geam(..., const T* A, ...);
...
}
I为具有相同功能名称的不同类型编写了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 *B, int ldb,
const float *beta,
float *C, int ldc)
{
return cublasSgeam(handle, transa, transb, m, n, alpha, A, lda, B, ldb, beta, 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 *B, int ldb,
const double *beta,
double *C, int ldc)
{
return cublasDgeam(handle, transa, transb, m, n, alpha, A, lda, B, ldb, beta, C, ldc);
}
在此之后,您可以针对具有相同函数名称的任何类型调用geam()。 C ++编译器将通过参数的类型选择正确的函数。在您的情况下,应该像
template <typename T> foo(...) {
...
cublasGgeam(..., A, ...);
...
}
这是一个综合时间过载,根本没有运行时的成本,尽管您必须为包装函数编写一个长列表。