|
@@ -1107,6 +1107,11 @@ static void ggml_cuda_op_mul_mat_cublas(
|
|
|
const half alpha_f16 = 1.0f;
|
|
const half alpha_f16 = 1.0f;
|
|
|
const half beta_f16 = 0.0f;
|
|
const half beta_f16 = 0.0f;
|
|
|
|
|
|
|
|
|
|
+ cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F;
|
|
|
|
|
+ if (ggml_cuda_info().devices[ctx.device].cc == CC_CDNA) {
|
|
|
|
|
+ cu_compute_type = CUBLAS_COMPUTE_32F;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
|
|
CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
|
|
|
CUBLAS_CHECK(
|
|
CUBLAS_CHECK(
|
|
|
cublasGemmEx(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
|
|
cublasGemmEx(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
|
|
@@ -1114,7 +1119,7 @@ static void ggml_cuda_op_mul_mat_cublas(
|
|
|
&alpha_f16, src0_ptr, CUDA_R_16F, ne00,
|
|
&alpha_f16, src0_ptr, CUDA_R_16F, ne00,
|
|
|
src1_ptr, CUDA_R_16F, ne10,
|
|
src1_ptr, CUDA_R_16F, ne10,
|
|
|
&beta_f16, dst_f16.get(), CUDA_R_16F, ldc,
|
|
&beta_f16, dst_f16.get(), CUDA_R_16F, ldc,
|
|
|
- CUBLAS_COMPUTE_16F,
|
|
|
|
|
|
|
+ cu_compute_type,
|
|
|
CUBLAS_GEMM_DEFAULT_TENSOR_OP));
|
|
CUBLAS_GEMM_DEFAULT_TENSOR_OP));
|
|
|
|
|
|
|
|
const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
|
|
const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
|
|
@@ -1607,6 +1612,10 @@ static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, co
|
|
|
cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F;
|
|
cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F;
|
|
|
cudaDataType_t cu_data_type = CUDA_R_16F;
|
|
cudaDataType_t cu_data_type = CUDA_R_16F;
|
|
|
|
|
|
|
|
|
|
+ if (ggml_cuda_info().devices[ctx.device].cc == CC_CDNA) {
|
|
|
|
|
+ cu_compute_type = CUBLAS_COMPUTE_32F;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// dst strides
|
|
// dst strides
|
|
|
size_t nbd2 = dst->nb[2];
|
|
size_t nbd2 = dst->nb[2];
|
|
|
size_t nbd3 = dst->nb[3];
|
|
size_t nbd3 = dst->nb[3];
|