Я хочу реализовать оптимизированный по производительности код для умножения матриц с использованием ManagedCuda / CudaBlas из ManagedCuda.
Базовая реализация относительно быстра и работает:
handle.Gemm(Operation.NonTranspose, Operation.NonTranspose, N, N, N, alpha, d_A, N, d_B, N, beta, d_C, N);
Теперь я хочу использовать тензорные ядра (графические карты V100) -> указание тензорной операции.
Чистый код Cuda ниже (cublasGemmEx) работает отлично. Как я могу реализовать это в ManagedCuda напрямую?
Я пробовал "GemmStridedBatched", но это не работает для больших матриц.
cublasGemmEx(cublasHandle, CUBLAS_OP_N, CUBLAS_OP_N,
MATRIX_M, MATRIX_N, MATRIX_K,
&alpha,
a_fp16, CUDA_R_16F, MATRIX_M,
b_fp16, CUDA_R_16F, MATRIX_K,
&beta,
c_cublas, CUDA_R_32F, MATRIX_M,
CUDA_R_32F, CUBLAS_GEMM_DFALT_TENSOR_OP);