Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 68510f0a authored by Mathieu Faverge's avatar Mathieu Faverge
Browse files

gpucublas: Protect compilation and declaration of the half precision cuda functions

parent f08ed1d4
No related branches found
No related tags found
1 merge request!470Issue #127: Fix the protection of half precision kernels with cuda
......@@ -16,6 +16,10 @@
*/
#include "gpucublas.h"
#if !defined(GPUCUBLAS_HAVE_CUBLASGEMMEX)
#error "This file should not be compiled"
#endif
int
CUDA_gemmex( cham_trans_t transa, cham_trans_t transb,
int m, int n, int k,
......
......@@ -16,6 +16,10 @@
*/
#include "gpucublas.h"
#if !defined(GPUCUBLAS_HAVE_CUBLASHGEMM)
#error "This file should not be compiled"
#endif
extern "C" int
CUDA_hgemm( cham_trans_t transa, cham_trans_t transb,
int m, int n, int k,
......
......@@ -38,9 +38,13 @@ precisions_rules_py(
# Define the list of headers
# --------------------------
configure_file("gpucublas.h.in"
"gpucublas.h"
@ONLY)
set(GPUCUBLAS_HDRS
gpucublas.h
)
${CMAKE_CURRENT_BINARY_DIR}/gpucublas.h
)
# Add generated headers
# ---------------------
......@@ -55,7 +59,7 @@ set(CHAMELEON_SOURCES_TARGETS "${CHAMELEON_SOURCES_TARGETS};gpucublas_include" C
# Installation
# ------------
install( FILES gpucublas.h
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/gpucublas.h
DESTINATION include )
install( FILES ${GPUCUBLAS_HDRS}
......
......@@ -52,6 +52,11 @@
#include "chameleon/struct.h"
#include "chameleon/constants.h"
#cmakedefine GPUCUBLAS_HAVE_CUDA_TOOLKIT
#cmakedefine GPUCUBLAS_HAVE_CUDA_HALF
#cmakedefine GPUCUBLAS_HAVE_CUBLASHGEMM
#cmakedefine GPUCUBLAS_HAVE_CUBLASGEMMEX
/**
* CUDA BLAS headers
*/
......@@ -64,6 +69,7 @@ BEGIN_C_DECLS
#include "gpucublas/gpucublas_zc.h"
#include "gpucublas/gpucublas_ds.h"
#if defined(GPUCUBLAS_HAVE_CUBLASHGEMM)
int CUDA_hgemm( cham_trans_t transa, cham_trans_t transb,
int m, int n, int k,
const CHAMELEON_Real16_t *alpha,
......@@ -72,7 +78,9 @@ int CUDA_hgemm( cham_trans_t transa, cham_trans_t transb,
const CHAMELEON_Real16_t *beta,
CHAMELEON_Real16_t *C, int ldc,
cublasHandle_t handle );
#endif
#if defined(GPUCUBLAS_HAVE_CUBLASGEMMEX)
int CUDA_gemmex( cham_trans_t transa, cham_trans_t transb,
int m, int n, int k,
const void *alpha,
......@@ -81,6 +89,7 @@ int CUDA_gemmex( cham_trans_t transa, cham_trans_t transb,
const void *beta,
void *C, int ldc, cham_flttype_t Ctype,
cublasHandle_t handle );
#endif
static inline cublasComputeType_t
chameleon_cublas_ctype( cham_flttype_t flttype ) {
......
......@@ -24,8 +24,10 @@
/**
* Declarations of cuda kernels - alphabetical order
*/
#if defined(GPUCUBLAS_HAVE_CUDA_HALF)
int CUDA_dlag2h( int m, int n, const double *A, int lda, CHAMELEON_Real16_t *B, int ldb, cublasHandle_t handle );
int CUDA_hlag2d( int m, int n, const CHAMELEON_Real16_t *A, int lda, double *B, int ldb, cublasHandle_t handle );
#endif
int CUDA_zgeadd( cham_trans_t trans, int m, int n, const cuDoubleComplex *alpha, const cuDoubleComplex *A, int lda, const cuDoubleComplex *beta, cuDoubleComplex *B, int ldb, cublasHandle_t handle );
int CUDA_zgemerge( cham_side_t side, cham_diag_t diag, int M, int N, const cuDoubleComplex *A, int LDA, cuDoubleComplex *B, int LDB, cublasHandle_t handle );
int CUDA_zgemm( cham_trans_t transa, cham_trans_t transb, int m, int n, int k, const cuDoubleComplex *alpha, const cuDoubleComplex *A, int lda, const cuDoubleComplex *B, int ldb, const cuDoubleComplex *beta, cuDoubleComplex *C, int ldc, cublasHandle_t handle );
......
......@@ -18,7 +18,9 @@
#ifndef _gpucublas_zc_h_
#define _gpucublas_zc_h_
#if defined(GPUCUBLAS_HAVE_CUDA_TOOLKIT)
int CUDA_clag2z( int m, int n, const cuFloatComplex *A, int lda, cuDoubleComplex *B, int ldb, cublasHandle_t handle );
int CUDA_zlag2c( int m, int n, const cuDoubleComplex *A, int lda, cuFloatComplex *B, int ldb, cublasHandle_t handle );
#endif
#endif /* _gpucublas_zc_h_ */
......@@ -252,9 +252,15 @@ set(RUNTIME_SRCS_GENERATED "")
set(ZSRC
codelets/codelet_zcallback.c
codelets/codelet_zccallback.c
codelets/codelet_dlag2h.c
${CODELETS_ZSRC}
)
if(GPUCUBLAS_HAVE_CUDA_HALF OR CHAMELEON_SIMULATION)
set(ZSRC
${ZSRC}
codelets/codelet_dlag2h.c
)
endif()
precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
PRECISIONS "${CHAMELEON_PRECISION}"
......@@ -262,11 +268,23 @@ precisions_rules_py(RUNTIME_SRCS_GENERATED "${ZSRC}"
set(CODELETS_SRC
codelets/codelet_convert.c
codelets/codelet_hgemm.c
codelets/codelet_gemm.c
${CODELETS_SRC}
)
if(GPUCUBLAS_HAVE_CUBLASHGEMM OR CHAMELEON_SIMULATION)
set(CODELETS_SRC
codelets/codelet_hgemm.c
${CODELETS_SRC}
)
endif()
if(GPUCUBLAS_HAVE_CUBLASGEMMEX OR CHAMELEON_SIMULATION)
set(CODELETS_SRC
codelets/codelet_gemmex.c
${CODELETS_SRC}
)
endif()
set(RUNTIME_SRCS
${RUNTIME_COMMON}
${RUNTIME_SRCS_GENERATED}
......
......@@ -75,7 +75,7 @@ insert_task_convert( const RUNTIME_option_t *options,
break;
#endif
#if defined(CHAMELEON_PREC_D) && defined(CHAMELON_USE_CUDA)
#if defined(CHAMELEON_PREC_D) && defined(GPUCUBLAS_HAVE_CUDA_HALF)
case ChamConvertRealDoubleToHalf:
codelet = &cl_dlag2h;
callback = cl_dlag2h_callback;
......@@ -87,7 +87,7 @@ insert_task_convert( const RUNTIME_option_t *options,
break;
#endif
#if defined(CHAMELEON_PREC_S) && defined(CHAMELON_USE_CUDA)
#if defined(CHAMELEON_PREC_S) && defined(GPUCUBLAS_HAVE_CUDA_HALF)
case ChamConvertRealSingleToHalf:
codelet = &cl_slag2h;
callback = cl_slag2h_callback;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment