| ENDIF(${OpenCL_FOUND}) | ||
| OPTION(BUILD_OPENCL "Build ArrayFire with a OpenCL backend" OFF) | ||
| OPTION(USE_CLBLAST "Build ArrayFire with the CLBlast BLAS library for the OpenCL backend" OFF) | ||
| OPTION(USE_CLBLAS "Build ArrayFire with the clBLAS BLAS library for the OpenCL backend" ON) |
| ENDIF() | ||
|
|
||
| IF(USE_CLBLAST) | ||
| OPTION(USE_SYSTEM_CLBLAST "Use system CLBlast" OFF) |
| ENDIF() | ||
|
|
||
| IF(USE_CLBLAS) | ||
| OPTION(USE_SYSTEM_CLBLAS "Use system clBLAS" OFF) |
| FIND_PACKAGE(OpenCL REQUIRED) | ||
|
|
||
| OPTION(USE_CLBLAST "Build ArrayFire with the CLBlast BLAS library for the OpenCL backend" OFF) | ||
| OPTION(USE_CLBLAS "Build ArrayFire with the clBLAS BLAS library for the OpenCL backend" ON) |
| * http://arrayfire.com/licenses/BSD-3-Clause | ||
| ********************************************************/ | ||
|
|
||
| #if defined(USE_CLBLAS) |
| c_neg_one, | ||
| dAT(j-1,j+1), lddat, | ||
| dAT(j, j-1), lddat, | ||
| OPENCL_BLAS_CHECK(gpu_blas_trsm(OPENCL_BLAS_SIDE_RIGHT, OPENCL_BLAS_TRIANGLE_UPPER, OPENCL_BLAS_NO_TRANS, OPENCL_BLAS_UNIT_DIAGONAL, |
| dAT(j, j+1), lddat, | ||
| 1, &queue, 0, nullptr, &event)); | ||
| } | ||
| OPENCL_BLAS_CHECK(gpu_blas_trsm(OPENCL_BLAS_SIDE_RIGHT, OPENCL_BLAS_TRIANGLE_UPPER, OPENCL_BLAS_NO_TRANS, OPENCL_BLAS_UNIT_DIAGONAL, |
| } | ||
| else { | ||
| if (n > s * nb) { | ||
| OPENCL_BLAS_CHECK(gpu_blas_trsm(OPENCL_BLAS_SIDE_RIGHT, OPENCL_BLAS_TRIANGLE_UPPER, OPENCL_BLAS_NO_TRANS, OPENCL_BLAS_UNIT_DIAGONAL, |
| #define OPENCL_BLAS_CHECK CLBLAST_CHECK | ||
|
|
||
| // Transposing | ||
| #define OPENCL_BLAS_TRANS_TYPE clblast::Transpose // the type |
| struct gpu_blas_gemm_func | ||
| { | ||
| clblast::StatusCode operator() ( | ||
| const clblast::Transpose a_transpose, const clblast::Transpose b_transpose, |
|
|
||
| // This file contains the common interface for Magma OpenCL BLAS | ||
| // functions. They can be implemented in different back-ends, | ||
| // such as CLBlast or clBLAS. |
| cl_int err; | ||
| *ptrPtr = clCreateBuffer(opencl::getContext()(), CL_MEM_READ_WRITE, size, NULL, &err ); | ||
| if ( err != clblasSuccess ) { | ||
| if ( err != CL_SUCCESS ) { |
| const dim4 rStrides = rhs.strides(); | ||
| if(rDims[bColDim] == 1) { | ||
| CLBLAST_CHECK( | ||
| clblast::Gemv(clblast::Layout::kColMajor, lOpts, |
Open
4 tasks
| case AF_MAT_CTRANS : out = clblasConjTrans; break; | ||
| case AF_MAT_NONE : return OPENCL_BLAS_NO_TRANS; | ||
| case AF_MAT_TRANS : return OPENCL_BLAS_TRANS; | ||
| case AF_MAT_CTRANS : return OPENCL_BLAS_CONJ_TRANS; |
|
|
||
| // This file contains the common interface for Magma OpenCL BLAS | ||
| // functions. They can be implemented in different back-ends, | ||
| // such as CLBlast or clBLAS. |