[Libreoffice-commits] core.git: Branch 'private/kohei/formula-opencl-work' - sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Tue Sep 10 13:59:52 PDT 2013
sc/source/core/opencl/formulagroupcl.cxx | 14 +----
sc/source/core/opencl/oclkernels.hxx | 5 +
sc/source/core/opencl/openclwrapper.cxx | 39 ++++++++------
sc/source/core/opencl/openclwrapper.hxx | 84 +++++++++++++++----------------
sc/source/core/tool/formulagroup.cxx | 2
5 files changed, 75 insertions(+), 69 deletions(-)
New commits:
commit ef1cd0c12eaddc6f1f30e73c37cf301c1fbe430d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Sep 10 17:01:15 2013 -0400
Put all opencl related code inside sc::opencl namespace.
Change-Id: Ia6c1fd88ed08022347c60af33a8620b9cf278c12
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 279ac2d..62d70de 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -7,7 +7,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <config_features.h>
#include "formulagroup.hxx"
#include "document.hxx"
#include "formulacell.hxx"
@@ -23,12 +22,11 @@
#define SINGLEARRAYLEN 100
#define DOUBLEARRAYLEN 100
#define SVDOUBLELEN 100
-namespace sc {
+
+namespace sc { namespace opencl {
// A single public entry point for a factory function:
-namespace opencl {
- extern sc::FormulaGroupInterpreter *createFormulaGroupInterpreter();
-}
+extern sc::FormulaGroupInterpreter *createFormulaGroupInterpreter();
/////time test dbg
double getTimeDiff(const TimeValue& t1, const TimeValue& t2)
@@ -1063,17 +1061,15 @@ bool FormulaGroupInterpreterGroundwater::interpret(ScDocument& rDoc, const ScAdd
return true;
}
-namespace opencl {
-
sc::FormulaGroupInterpreter *createFormulaGroupInterpreter()
{
if (getenv("SC_SOFTWARE"))
return NULL;
if (getenv("SC_GROUNDWATER"))
- return new sc::FormulaGroupInterpreterGroundwater();
+ return new FormulaGroupInterpreterGroundwater();
- return new sc::FormulaGroupInterpreterOpenCL();
+ return new FormulaGroupInterpreterOpenCL();
}
} // namespace opencl
diff --git a/sc/source/core/opencl/oclkernels.hxx b/sc/source/core/opencl/oclkernels.hxx
index 53917b3..3e0af5b 100644
--- a/sc/source/core/opencl/oclkernels.hxx
+++ b/sc/source/core/opencl/oclkernels.hxx
@@ -12,6 +12,9 @@
#ifndef USE_EXTERNAL_KERNEL
#define KERNEL( ... )# __VA_ARGS__
+
+namespace sc { namespace opencl {
+
// Double precision is a default of spreadsheets
// cl_khr_fp64: Khronos extension
// cl_amd_fp64: AMD extension
@@ -380,6 +383,8 @@ __kernel void oclSub( fp_t ltData, __global fp_t *rtData, __global fp_t *outData
}
);
+}}
+
#endif // USE_EXTERNAL_KERNEL
#endif //_OCL_KERNEL_H_
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx
index 6db498b..75e991b 100644
--- a/sc/source/core/opencl/openclwrapper.cxx
+++ b/sc/source/core/opencl/openclwrapper.cxx
@@ -7,24 +7,19 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <cmath>
+#include "openclwrapper.hxx"
+
#include "sal/config.h"
#include "random.hxx"
-#include "openclwrapper.hxx"
#include "oclkernels.hxx"
-#ifdef SAL_WIN32
-#include <Windows.h>
-#endif
-//#define USE_MAP_BUFFER
-using namespace std;
-GPUEnv OpenclDevice::gpuEnv;
-int OpenclDevice::isInited =0;
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <cmath>
-#ifdef SAL_WIN32
+#ifdef WIN32
+#include <Windows.h>
#define OPENCL_DLL_NAME "opencllo.dll"
#define OCLERR -1
@@ -40,6 +35,16 @@ int OpenclDevice::isInited =0;
#define OCL_CHECK(value1,value2,str) \
if(value1!=value2) \
fprintf(stderr,"[OCL_ERROR] %s\n",str);
+#endif
+
+using namespace std;
+
+namespace sc { namespace opencl {
+
+GPUEnv OpenclDevice::gpuEnv;
+int OpenclDevice::isInited =0;
+
+#ifdef WIN32
HINSTANCE HOpenclDll = NULL;
void * OpenclDll = NULL;
@@ -69,7 +74,7 @@ void OpenclDevice::freeOpenclDll()
int OpenclDevice::initEnv()
{
-#ifdef SAL_WIN32
+#ifdef WIN32
while( 1 )
{
if( 1 == loadOpencl() )
@@ -83,14 +88,14 @@ int OpenclDevice::initEnv()
int OpenclDevice::releaseOpenclRunEnv()
{
releaseOpenclEnv( &gpuEnv );
-#ifdef SAL_WIN32
+#ifdef WIN32
freeOpenclDll();
#endif
return 1;
}
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
-inline int OpenclDevice::addKernelConfig( int kCount, const char *kName )
+int OpenclDevice::addKernelConfig( int kCount, const char *kName )
{
if ( kCount < 1 )
fprintf(stderr,"Error: ( KCount < 1 )" SAL_DETAIL_WHERE "addKernelConfig\n" );
@@ -2660,4 +2665,6 @@ int OclCalc::oclHostMatrixInverse32Bits( const char* aKernelName, float *fpOclMa
return 0;
}
+}}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/opencl/openclwrapper.hxx b/sc/source/core/opencl/openclwrapper.hxx
index cf3b4f1..d1e8925 100644
--- a/sc/source/core/opencl/openclwrapper.hxx
+++ b/sc/source/core/opencl/openclwrapper.hxx
@@ -39,6 +39,32 @@
#define CL_QUEUE_THREAD_HANDLE_AMD 0x403E
#define CL_MAP_WRITE_INVALIDATE_REGION (1 << 2)
+#define CHECK_OPENCL(status,name) \
+if( status != CL_SUCCESS ) \
+{ \
+ printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when %s .\n", status, name); \
+ return 0; \
+}
+
+#define CHECK_OPENCL_VOID(status,name) \
+if( status != CL_SUCCESS ) \
+{ \
+ printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when %s .\n", status, name); \
+}
+
+#define CHECK_OPENCL_RELEASE(status,name) \
+if ( name != NULL ) \
+ clReleaseMemObject( name ); \
+if( status != CL_SUCCESS ) \
+{ \
+ printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when clReleaseMemObject( %s ).\n", status, #name); \
+}
+
+#define MAX_KERNEL_STRING_LEN 64
+#define MAX_CLFILE_NUM 50
+#define MAX_CLKERNEL_NUM 200
+#define MAX_KERNEL_NAME_LEN 64
+
#if defined(_MSC_VER)
#ifndef strcasecmp
#define strcasecmp strcmp
@@ -48,8 +74,6 @@
#include <cstdio>
#include <vector>
-typedef unsigned int uint;
-
typedef struct _KernelEnv
{
cl_context mpkContext;
@@ -59,52 +83,25 @@ typedef struct _KernelEnv
char mckKernelName[150];
} KernelEnv;
-typedef struct _OpenCLEnv
-{
- cl_platform_id mpOclPlatformID;
- cl_context mpOclContext;
- cl_device_id mpOclDevsID;
- cl_command_queue mpOclCmdQueue;
-} OpenCLEnv;
-
-#if defined __cplusplus
extern "C" {
-#endif
-//user defined, this is function wrapper which is used to set the input parameters,
-//luanch kernel and copy data from GPU to CPU or CPU to GPU.
+// user defined, this is function wrapper which is used to set the input
+// parameters, launch kernel and copy data from GPU to CPU or CPU to GPU.
typedef int ( *cl_kernel_function )( void **userdata, KernelEnv *kenv );
-#if defined __cplusplus
-
-}
-#endif
-
-#define CHECK_OPENCL(status,name) \
-if( status != CL_SUCCESS ) \
-{ \
- printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when %s .\n", status, name); \
- return 0; \
}
-#define CHECK_OPENCL_VOID(status,name) \
-if( status != CL_SUCCESS ) \
-{ \
- printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when %s .\n", status, name); \
-}
+namespace sc { namespace opencl {
-#define CHECK_OPENCL_RELEASE(status,name) \
-if ( name != NULL ) \
- clReleaseMemObject( name ); \
-if( status != CL_SUCCESS ) \
-{ \
- printf ("OpenCL error code is %d at " SAL_DETAIL_WHERE " when clReleaseMemObject( %s ).\n", status, #name); \
-}
+typedef unsigned int uint;
-#define MAX_KERNEL_STRING_LEN 64
-#define MAX_CLFILE_NUM 50
-#define MAX_CLKERNEL_NUM 200
-#define MAX_KERNEL_NAME_LEN 64
+typedef struct _OpenCLEnv
+{
+ cl_platform_id mpOclPlatformID;
+ cl_context mpOclContext;
+ cl_device_id mpOclDevsID;
+ cl_command_queue mpOclCmdQueue;
+} OpenCLEnv;
typedef struct _GPUEnv
{
@@ -214,14 +211,12 @@ public:
#ifdef WIN32
static int loadOpencl();
- static int openclInite();
static void freeOpenclDll();
#endif
int getOpenclState();
void setOpenclState( int state );
- inline static int addKernelConfig( int kCount, const char *kName );
-
+ static int addKernelConfig( int kCount, const char *kName );
};
class OclCalc: public OpenclDevice,OpenclCalcBase
@@ -293,5 +288,8 @@ public:
friend class agency;
};
+}}
+
#endif
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx
index 1dbe5bd..d8ba564 100644
--- a/sc/source/core/tool/formulagroup.cxx
+++ b/sc/source/core/tool/formulagroup.cxx
@@ -7,7 +7,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <config_features.h>
#include "formulagroup.hxx"
#include "document.hxx"
#include "formulacell.hxx"
@@ -17,6 +16,7 @@
#include "scmatrix.hxx"
#include "formula/vectortoken.hxx"
+#include "config_features.h"
#include <vector>
#include <boost/unordered_map.hpp>
More information about the Libreoffice-commits
mailing list