[clblas] 09/75: fix some exception hanlers. now test-functional all pass

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Tue Jan 24 23:30:30 UTC 2017


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/master
in repository clblas.

commit 6041a3a43c1f8b599356c7303f16a0d41835f657
Author: Timmy <timmy.liu at amd.com>
Date:   Thu Jan 7 14:47:17 2016 -0600

    fix some exception hanlers. now test-functional all pass
---
 src/CMakeLists.txt                  |   2 +-
 src/library/blas/xgemm.cc           | 132 +++++++++++++++++++++++++++++++++---
 src/tests/functional/func-error.cpp |   4 +-
 3 files changed, 124 insertions(+), 14 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8d98ecf..1fa849d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -18,7 +18,7 @@ cmake_minimum_required(VERSION 2.8)
 
 #User toggle-able options that can be changed on the command line with -D
 option( BUILD_RUNTIME "Build the BLAS runtime library" ON )
-option( BUILD_TEST "Build the library testing suite (dependency on google test, Boost, and ACML)" ON )
+option( BUILD_TEST "Build the library testing suite (dependency on google test, Boost, and ACML/NETLIB BLAS)" ON )
 option( BUILD_PERFORMANCE "Copy the performance scripts that can measure and graph performance" OFF )
 option( BUILD_SAMPLE "Build the sample programs" OFF )
 option( BUILD_CLIENT "Build a command line clBLAS client program with a variety of configurable parameters (dependency on Boost)" OFF )
diff --git a/src/library/blas/xgemm.cc b/src/library/blas/xgemm.cc
index bfb133a..71165dd 100644
--- a/src/library/blas/xgemm.cc
+++ b/src/library/blas/xgemm.cc
@@ -61,6 +61,9 @@ static void force_gemm_column_major(
     printf("OpenCL error %i on line %u of %s\n", RET, __LINE__, __FILE__); \
     assert(false); \
   }
+#define returnIfErr(err) \
+	if (err != CL_SUCCESS)\
+		return static_cast<clblasStatus>(err);
 
 const static unsigned int numGemmKernelArgs = 14;
 void *gemmKernelArgs[numGemmKernelArgs];
@@ -258,7 +261,7 @@ void makeGemmKernel(
 /******************************************************************************
  * Enqueue Gemm Kernel
  *****************************************************************************/
- void enqueueGemmKernel(
+ cl_int enqueueGemmKernel(
    cl_command_queue clQueue,
    cl_kernel clKernel,
    void **kernelArgs,
@@ -271,14 +274,20 @@ void makeGemmKernel(
    cl_event *clEvent)
  {
    for (unsigned int i = 0; i < numKernelArgs; i++) {
-     CL_CHECK( clSetKernelArg( clKernel, i, kernelArgSizes[i], kernelArgs[i]) )
+	   cl_int err = clSetKernelArg(clKernel, i, kernelArgSizes[i], kernelArgs[i]);
+	   if (err != CL_SUCCESS)
+		   return err;
    }
    /*printf("global={%llu, %llu} local={%llu, %llu}\n",
      globalWorkSize[0], globalWorkSize[1],
      localWorkSize[0], localWorkSize[1] );*/
-   CL_CHECK( clEnqueueNDRangeKernel( clQueue, clKernel,
-      2, NULL, globalWorkSize, localWorkSize,
-      numEventsInWaitList, eventWaitList, clEvent ) )
+   cl_uint err = clEnqueueNDRangeKernel(clQueue, clKernel,
+	   2, NULL, globalWorkSize, localWorkSize,
+	   numEventsInWaitList, eventWaitList, clEvent);
+   if (err != CL_SUCCESS)
+	   return err;
+
+   return CL_SUCCESS;
  }
 
 
@@ -325,6 +334,8 @@ clblasGemm(
     const cl_event *eventWaitList,
     cl_event *events)
 {
+
+
   // cast types to opencl types
   cl_mem A = iA;
   cl_mem B = iB;
@@ -389,10 +400,13 @@ clblasGemm(
   cl_int err;
   cl_device_id clDevice;
   err = clGetCommandQueueInfo( commandQueues[0], CL_QUEUE_DEVICE, sizeof(clDevice), &clDevice, NULL);
-  CL_CHECK(err)
+  //CL_CHECK(err)
+  returnIfErr(err);
+
   cl_uint clDeviceNumCUs;
   err = clGetDeviceInfo( clDevice, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(clDeviceNumCUs), &clDeviceNumCUs, NULL);
-  CL_CHECK(err)
+  //CL_CHECK(err)
+  returnIfErr(err);
   unsigned int deviceIdealNumThreads = (8 /*waves per CU*/)*(64 /*threads per wave*/)*clDeviceNumCUs;
   float optimalNumElementsPerThread = ((float)M*N) / deviceIdealNumThreads;
   //optimalNumElementsPerThread = 32;
@@ -562,11 +576,12 @@ clblasGemm(
   if (needTileKernel) {
     //printf("enqueueing tile kernel\n");
     size_t globalWorkSize[2] = {(M/macroTileNumRows)*workGroupNumRows, (N/macroTileNumCols)*workGroupNumCols };
-    enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *tileClKernel,
+    err = enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *tileClKernel,
       gemmKernelArgs, gemmKernelArgSizes, numGemmKernelArgs,
       globalWorkSize, localWorkSize,
       numEventsInWaitList, eventWaitList,
       &events[numKernelsEnqueued%numCommandQueues] );
+	returnIfErr(err);
     numKernelsEnqueued++;
   }
 
@@ -576,11 +591,12 @@ clblasGemm(
   if (needRowKernel) {
     //printf("enqueueing row kernel\n");
     size_t globalWorkSize[2] = {1*workGroupNumRows, (N/macroTileNumCols)*workGroupNumCols };
-    enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *rowClKernel,
+    err = enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *rowClKernel,
       gemmKernelArgs, gemmKernelArgSizes, numGemmKernelArgs,
       globalWorkSize, localWorkSize,
       numEventsInWaitList, eventWaitList,
       &events[numKernelsEnqueued%numCommandQueues] );
+	returnIfErr(err);
     numKernelsEnqueued++;
   }
 
@@ -590,11 +606,12 @@ clblasGemm(
   if (needColKernel) {
     //printf("enqueueing col kernel\n");
     size_t globalWorkSize[2] = { (M/macroTileNumRows)*workGroupNumRows, 1*workGroupNumCols };
-    enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *colClKernel,
+    err = enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *colClKernel,
       gemmKernelArgs, gemmKernelArgSizes, numGemmKernelArgs,
       globalWorkSize, localWorkSize,
       numEventsInWaitList, eventWaitList,
       &events[numKernelsEnqueued%numCommandQueues] );
+	returnIfErr(err);
     numKernelsEnqueued++;
   }
 
@@ -604,11 +621,12 @@ clblasGemm(
   if (needCornerKernel) {
     //printf("enqueueing corner kernel\n");
     size_t globalWorkSize[2] = { 1*workGroupNumRows, 1*workGroupNumCols };
-    enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *cornerClKernel,
+    err = enqueueGemmKernel( commandQueues[numKernelsEnqueued%numCommandQueues], *cornerClKernel,
       gemmKernelArgs, gemmKernelArgSizes, numGemmKernelArgs,
       globalWorkSize, localWorkSize,
       numEventsInWaitList, eventWaitList,
       &events[numKernelsEnqueued%numCommandQueues] );
+	returnIfErr(err);
     numKernelsEnqueued++;
   }
 
@@ -637,6 +655,29 @@ clblasSgemm(
     const cl_event *eventWaitList,
     cl_event *events)
 {
+  // check if memory objects are valid
+  clblasStatus clblasErr = clblasSuccess;
+  clblasErr = checkMemObjects(A, B, C, true, A_MAT_ERRSET, B_MAT_ERRSET, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	  return clblasErr;
+  
+  if (K != 0)
+  {
+  	//check matrix A
+  	clblasErr = checkMatrixSizes(TYPE_FLOAT, order, transA, M, K, A, offA, lda, A_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  
+  	//check matrix B
+	clblasErr = checkMatrixSizes(TYPE_FLOAT, order, transB, K, N, B, offB, ldb, B_MAT_ERRSET);
+	if (clblasErr != clblasSuccess)
+		return clblasErr;
+  }
+  //check matrix C
+  clblasErr = checkMatrixSizes(TYPE_FLOAT, order, clblasNoTrans, M, N, C, offC, ldc, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+      return clblasErr;
+
   return clblasGemm(
        order,
        transA,
@@ -674,6 +715,29 @@ clblasDgemm( clblasOrder order,
              const cl_event *eventWaitList,
              cl_event *events)
 {
+  // check if memory objects are valid
+  clblasStatus clblasErr = clblasSuccess;
+  clblasErr = checkMemObjects(A, B, C, true, A_MAT_ERRSET, B_MAT_ERRSET, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	  return clblasErr;
+  
+  if (K != 0)
+  {
+  	//check matrix A
+  	clblasErr = checkMatrixSizes(TYPE_DOUBLE, order, transA, M, K, A, offA, lda, A_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  
+  	//check matrix B
+  	clblasErr = checkMatrixSizes(TYPE_DOUBLE, order, transB, K, N, B, offB, ldb, B_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  }
+  //check matrix C
+  clblasErr = checkMatrixSizes(TYPE_DOUBLE, order, clblasNoTrans, M, N, C, offC, ldc, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+      return clblasErr;
+
    return clblasGemm(
        order,
        transA,
@@ -712,6 +776,29 @@ clblasCgemm(
     const cl_event *eventWaitList,
     cl_event *events)
 {
+  // check if memory objects are valid
+  clblasStatus clblasErr = clblasSuccess;
+  clblasErr = checkMemObjects(A, B, C, true, A_MAT_ERRSET, B_MAT_ERRSET, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	return clblasErr;
+  
+  if (K != 0)
+  {
+  	//check matrix A
+  	clblasErr = checkMatrixSizes(TYPE_COMPLEX_FLOAT, order, transA, M, K, A, offA, lda, A_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  
+  	//check matrix B
+  	clblasErr = checkMatrixSizes(TYPE_COMPLEX_FLOAT, order, transB, K, N, B, offB, ldb, B_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  }
+  //check matrix C
+  clblasErr = checkMatrixSizes(TYPE_COMPLEX_FLOAT, order, clblasNoTrans, M, N, C, offC, ldc, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	  return clblasErr;
+
    return clblasGemm(
        order,
        transA,
@@ -750,6 +837,29 @@ clblasZgemm(
     const cl_event *eventWaitList,
     cl_event *events)
 {
+  // check if memory objects are valid
+  clblasStatus clblasErr = clblasSuccess;
+  clblasErr = checkMemObjects(A, B, C, true, A_MAT_ERRSET, B_MAT_ERRSET, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	  return clblasErr;
+  
+  if (K != 0)
+  {
+  	//check matrix A
+  	clblasErr = checkMatrixSizes(TYPE_COMPLEX_DOUBLE, order, transA, M, K, A, offA, lda, A_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  
+  	//check matrix B
+  	clblasErr = checkMatrixSizes(TYPE_COMPLEX_DOUBLE, order, transB, K, N, B, offB, ldb, B_MAT_ERRSET);
+  	if (clblasErr != clblasSuccess)
+  		return clblasErr;
+  }
+  //check matrix C
+  clblasErr = checkMatrixSizes(TYPE_COMPLEX_DOUBLE, order, clblasNoTrans, M, N, C, offC, ldc, C_MAT_ERRSET);
+  if (clblasErr != clblasSuccess)
+  	  return clblasErr;
+
    return clblasGemm(
        order,
        transA,
diff --git a/src/tests/functional/func-error.cpp b/src/tests/functional/func-error.cpp
index 064e182..3a6bf51 100644
--- a/src/tests/functional/func-error.cpp
+++ b/src/tests/functional/func-error.cpp
@@ -272,7 +272,7 @@ TEST(ERROR, InvalidMemObjectsymm) {
 }
 TEST(ERROR, InvalidValuesymm) {
     ErrorClass<SymmMetod<FloatComplex> > ec;
-    ec.error(clblasInsufficientMemMatB);
+    ec.error(clblasInsufficientMemMatA);
 }
 
 TEST(ERROR, InvalidDevicesymm) {
@@ -512,7 +512,7 @@ TEST(ERROR, InvalidMemObjecthemm) {
 TEST(ERROR, InvalidValuehemm) {
 
     ErrorClass<HemmMetod<DoubleComplex> > ec;
-    ec.error(clblasInsufficientMemMatB);
+    ec.error(clblasInsufficientMemMatA);
 }
 
 TEST(ERROR, InvalidDevicehemm) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/clblas.git



More information about the debian-science-commits mailing list