Cleanup cublas comments
This commit is contained in:
parent
5fc6799f05
commit
40846bd28d
2 changed files with 15 additions and 16 deletions
|
@ -1,4 +1,4 @@
|
||||||
cmake_minimum_required(VERSION 3.17) # Don't bump this version for no reason
|
cmake_minimum_required(VERSION 3.12) # Don't bump this version for no reason
|
||||||
project("llama.cpp" C CXX)
|
project("llama.cpp" C CXX)
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
@ -144,6 +144,8 @@ if (LLAMA_OPENBLAS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_CUBLAS)
|
if (LLAMA_CUBLAS)
|
||||||
|
cmake_minimum_required(VERSION 3.17)
|
||||||
|
|
||||||
find_package(CUDAToolkit)
|
find_package(CUDAToolkit)
|
||||||
if (CUDAToolkit_FOUND)
|
if (CUDAToolkit_FOUND)
|
||||||
message(STATUS "cuBLAS found")
|
message(STATUS "cuBLAS found")
|
||||||
|
|
27
ggml.c
27
ggml.c
|
@ -172,14 +172,14 @@ static cublasHandle_t cublasH = NULL;
|
||||||
static cudaStream_t cudaStream = NULL;
|
static cudaStream_t cudaStream = NULL;
|
||||||
static void init_cublas(void) {
|
static void init_cublas(void) {
|
||||||
if (cublasH == NULL) {
|
if (cublasH == NULL) {
|
||||||
/* step 1: create cublas handle, bind a stream */
|
// create cublas handle, bind a stream
|
||||||
CUBLAS_CHECK(cublasCreate(&cublasH));
|
CUBLAS_CHECK(cublasCreate(&cublasH));
|
||||||
|
|
||||||
CUDA_CHECK(cudaStreamCreateWithFlags(&cudaStream, cudaStreamNonBlocking));
|
CUDA_CHECK(cudaStreamCreateWithFlags(&cudaStream, cudaStreamNonBlocking));
|
||||||
CUBLAS_CHECK(cublasSetStream(cublasH, cudaStream));
|
CUBLAS_CHECK(cublasSetStream(cublasH, cudaStream));
|
||||||
|
|
||||||
// configure logging to stdout
|
// configure logging to stdout
|
||||||
//CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, NULL));
|
// CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -7336,11 +7336,11 @@ static void ggml_compute_forward_mul_mat_f32(
|
||||||
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
||||||
|
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
/* step 2: copy data to device */
|
// copy data to device
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(float) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(float) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(float) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(float) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
|
|
||||||
/* step 3: compute */
|
// compute
|
||||||
CUBLAS_CHECK(
|
CUBLAS_CHECK(
|
||||||
cublasSgemm(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
cublasSgemm(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
||||||
ne01, ne11, ne10,
|
ne01, ne11, ne10,
|
||||||
|
@ -7348,7 +7348,7 @@ static void ggml_compute_forward_mul_mat_f32(
|
||||||
d_Y, ne10,
|
d_Y, ne10,
|
||||||
&beta, d_D, ne01));
|
&beta, d_D, ne01));
|
||||||
|
|
||||||
/* step 4: copy data to host */
|
// copy data to host
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
||||||
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
||||||
#else
|
#else
|
||||||
|
@ -7362,7 +7362,6 @@ static void ggml_compute_forward_mul_mat_f32(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
/* free resources */
|
|
||||||
CUDA_CHECK(cudaFree(d_X));
|
CUDA_CHECK(cudaFree(d_X));
|
||||||
CUDA_CHECK(cudaFree(d_Y));
|
CUDA_CHECK(cudaFree(d_Y));
|
||||||
CUDA_CHECK(cudaFree(d_D));
|
CUDA_CHECK(cudaFree(d_D));
|
||||||
|
@ -7533,7 +7532,7 @@ static void ggml_compute_forward_mul_mat_f16_f32(
|
||||||
for (int64_t i03 = 0; i03 < ne03; i03++) {
|
for (int64_t i03 = 0; i03 < ne03; i03++) {
|
||||||
for (int64_t i02 = 0; i02 < ne02; i02++) {
|
for (int64_t i02 = 0; i02 < ne02; i02++) {
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
// with cuBlAS, instead of converting src0 to fp32, we convert src1 to fp16
|
// with cuBlAS, instead of converting src0 to fp32, we convert src1 to fp16
|
||||||
{
|
{
|
||||||
size_t id = 0;
|
size_t id = 0;
|
||||||
for (int64_t i01 = 0; i01 < ne11; ++i01) {
|
for (int64_t i01 = 0; i01 < ne11; ++i01) {
|
||||||
|
@ -7559,11 +7558,11 @@ static void ggml_compute_forward_mul_mat_f16_f32(
|
||||||
|
|
||||||
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
||||||
|
|
||||||
/* step 2: copy data to device */
|
// copy data to device
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(ggml_fp16_t) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(ggml_fp16_t) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(ggml_fp16_t) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(ggml_fp16_t) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
|
|
||||||
/* step 3: compute */
|
// compute
|
||||||
CUBLAS_CHECK(
|
CUBLAS_CHECK(
|
||||||
cublasGemmEx(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
cublasGemmEx(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
||||||
ne01, ne11, ne10,
|
ne01, ne11, ne10,
|
||||||
|
@ -7573,7 +7572,7 @@ static void ggml_compute_forward_mul_mat_f16_f32(
|
||||||
CUBLAS_COMPUTE_32F,
|
CUBLAS_COMPUTE_32F,
|
||||||
CUBLAS_GEMM_DEFAULT));
|
CUBLAS_GEMM_DEFAULT));
|
||||||
|
|
||||||
/* step 4: copy data to host */
|
// copy data to host
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
||||||
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
||||||
#else
|
#else
|
||||||
|
@ -7593,7 +7592,6 @@ static void ggml_compute_forward_mul_mat_f16_f32(
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
/* free resources */
|
|
||||||
CUDA_CHECK(cudaFree(d_X));
|
CUDA_CHECK(cudaFree(d_X));
|
||||||
CUDA_CHECK(cudaFree(d_Y));
|
CUDA_CHECK(cudaFree(d_Y));
|
||||||
CUDA_CHECK(cudaFree(d_D));
|
CUDA_CHECK(cudaFree(d_D));
|
||||||
|
@ -7797,11 +7795,11 @@ static void ggml_compute_forward_mul_mat_q_f32(
|
||||||
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3);
|
||||||
|
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
/* step 2: copy data to device */
|
// copy data to device
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(float) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_X, x, sizeof(float) * x_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(float) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d_Y, y, sizeof(float) * y_ne, cudaMemcpyHostToDevice, cudaStream));
|
||||||
|
|
||||||
/* step 3: compute */
|
// compute
|
||||||
CUBLAS_CHECK(
|
CUBLAS_CHECK(
|
||||||
cublasSgemm(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
cublasSgemm(cublasH, CUBLAS_OP_T, CUBLAS_OP_N,
|
||||||
ne01, ne11, ne10,
|
ne01, ne11, ne10,
|
||||||
|
@ -7809,7 +7807,7 @@ static void ggml_compute_forward_mul_mat_q_f32(
|
||||||
d_Y, ne10,
|
d_Y, ne10,
|
||||||
&beta, d_D, ne01));
|
&beta, d_D, ne01));
|
||||||
|
|
||||||
/* step 4: copy data to host */
|
// copy data to host
|
||||||
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
CUDA_CHECK(cudaMemcpyAsync(d, d_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream));
|
||||||
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
CUDA_CHECK(cudaStreamSynchronize(cudaStream));
|
||||||
#else
|
#else
|
||||||
|
@ -7824,7 +7822,6 @@ static void ggml_compute_forward_mul_mat_q_f32(
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GGML_USE_CUBLAS)
|
#if defined(GGML_USE_CUBLAS)
|
||||||
/* free resources */
|
|
||||||
CUDA_CHECK(cudaFree(d_X));
|
CUDA_CHECK(cudaFree(d_X));
|
||||||
CUDA_CHECK(cudaFree(d_Y));
|
CUDA_CHECK(cudaFree(d_Y));
|
||||||
CUDA_CHECK(cudaFree(d_D));
|
CUDA_CHECK(cudaFree(d_D));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue