diff options
author | Wei Wei <weiwei@multicorewareinc.com> | 2014-02-28 11:25:33 -0600 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2014-02-28 19:10:03 +0100 |
commit | 4f0d08df0f48c1c47f11e6f5206f445823deca1e (patch) | |
tree | 32053bdf2bbbe17c14a4065dffd5aa9dc3acb72e | |
parent | d1fc65581906ef0ce4c8e276ae67a35fb0fc6dfd (diff) |
GPU-Calc: Change the szHostBuffer to fix the out of boundary bug
Change-Id: I4037fb3c0ddda1a9c4b0e777e1a75bc0b11fd24b
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 724f6753bbcd..55668ee5f383 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -65,6 +65,7 @@ size_t VectorRef::Marshal(cl_kernel k, int argno, int, cl_program) { FormulaToken *ref = mFormulaTree->GetFormulaToken(); double *pHostBuffer = NULL; + size_t requestedLength = 1; size_t szHostBuffer = 0; if (ref->GetType() == formula::svSingleVectorRef) { const formula::SingleVectorRefToken* pSVR = @@ -72,6 +73,7 @@ size_t VectorRef::Marshal(cl_kernel k, int argno, int, cl_program) assert(pSVR); pHostBuffer = const_cast<double*>(pSVR->GetArray().mpNumericArray); szHostBuffer = pSVR->GetArrayLength() * sizeof(double); + requestedLength = pSVR->GetRequestedArrayLength(); #if 0 std::cerr << "Marshal a Single vector of size " << pSVR->GetArrayLength(); std::cerr << " at argument "<< argno << "\n"; @@ -83,6 +85,7 @@ size_t VectorRef::Marshal(cl_kernel k, int argno, int, cl_program) pHostBuffer = const_cast<double*>( pDVR->GetArrays()[mnIndex].mpNumericArray); szHostBuffer = pDVR->GetArrayLength() * sizeof(double); + requestedLength = pDVR->GetRequestedArrayLength(); } else { throw Unhandled(); } @@ -102,7 +105,7 @@ size_t VectorRef::Marshal(cl_kernel k, int argno, int, cl_program) else { if (szHostBuffer == 0) - szHostBuffer = sizeof(double); // a dummy small value + szHostBuffer = requestedLength * sizeof(double);//vector length for NAN vector // Marshal as a buffer of NANs mpClmem = clCreateBuffer(kEnv.mpkContext, (cl_mem_flags) CL_MEM_READ_ONLY|CL_MEM_ALLOC_HOST_PTR, |