[Libreoffice-commits] core.git: Branch 'private/tml/opencl-background-compilation-2' - 2 commits - sc/inc sc/source
Tor Lillqvist
tml at collabora.com
Wed Nov 20 08:16:51 PST 2013
sc/inc/clew.h | 1318 -------------------------------
sc/inc/opbase.hxx | 206 ----
sc/source/core/inc/dynamickernel.hxx | 107 --
sc/source/core/opencl/clcc/clew.h | 1318 +++++++++++++++++++++++++++++++
sc/source/core/opencl/formulagroupcl.cxx | 81 +
sc/source/core/opencl/opbase.hxx | 206 ++++
sc/source/core/opencl/openclwrapper.hxx | 2
sc/source/core/tool/formulagroup.cxx | 1
8 files changed, 1587 insertions(+), 1652 deletions(-)
New commits:
commit 0b6eb3a40374ac6a1165cd5fc279e2e7c2bb9173
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Nov 20 18:15:10 2013 +0200
opbase.hxx and clew.h can now move back where they were, too
Change-Id: I0037eed4102eebafdab3c8b5dc6a3d92b57bd49b
diff --git a/sc/inc/clew.h b/sc/source/core/opencl/clcc/clew.h
similarity index 100%
rename from sc/inc/clew.h
rename to sc/source/core/opencl/clcc/clew.h
diff --git a/sc/inc/opbase.hxx b/sc/source/core/opencl/opbase.hxx
similarity index 99%
rename from sc/inc/opbase.hxx
rename to sc/source/core/opencl/opbase.hxx
index 107ef3e..d921119 100644
--- a/sc/inc/opbase.hxx
+++ b/sc/source/core/opencl/opbase.hxx
@@ -10,7 +10,7 @@
#ifndef SC_OPENCL_OPBASE_HXX
#define SC_OPENCL_OPBASE_HXX
-#include "clew.h"
+#include "clcc/clew.h"
#include "formula/token.hxx"
diff --git a/sc/source/core/opencl/openclwrapper.hxx b/sc/source/core/opencl/openclwrapper.hxx
index fb3ee9e..0dfe24c 100644
--- a/sc/source/core/opencl/openclwrapper.hxx
+++ b/sc/source/core/opencl/openclwrapper.hxx
@@ -21,7 +21,7 @@
#include <rtl/string.hxx>
-#include "clew.h"
+#include "clcc/clew.h"
// CL_MAP_WRITE_INVALIDATE_REGION is new in OpenCL 1.2.
commit 3557ba13574acbb4011460eabe4e3bcf8170a9d3
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Nov 20 18:10:56 2013 +0200
DynamicKernel isn't needed outside formulagroupcl.cxx after all
So put it back there.
Change-Id: I7c78719c95123e33e4506ace912ff056df56b247
diff --git a/sc/source/core/inc/dynamickernel.hxx b/sc/source/core/inc/dynamickernel.hxx
deleted file mode 100644
index dd4d516..0000000
--- a/sc/source/core/inc/dynamickernel.hxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_SC_SOURCE_CORE_INC_DYNAMICKERNEL_HXX
-#define INCLUDED_SC_SOURCE_CORE_INC_DYNAMICKERNEL_HXX
-
-#include <config_features.h>
-
-#include "formulagroup.hxx"
-
-#if !HAVE_FEATURE_OPENCL
-
-namespace sc { namespace opencl {
-
-class DynamikcKernel : public CompiledFormula
-{
-}
-
-} // namespace opencl
-
-} // namespace sc
-
-#else
-
-#include "clew.h"
-
-#include "document.hxx"
-#include "opbase.hxx"
-
-namespace sc { namespace opencl {
-
-class DynamicKernelArgument;
-class SlidingFunctionBase;
-
-/// Holds the symbol table for a given dynamic kernel
-class SymbolTable {
-public:
- typedef std::map<const formula::FormulaToken *,
- boost::shared_ptr<DynamicKernelArgument> > ArgumentMap;
- // This avoids instability caused by using pointer as the key type
- typedef std::list< boost::shared_ptr<DynamicKernelArgument> > ArgumentList;
- SymbolTable(void):mCurId(0) {}
- template <class T>
- const DynamicKernelArgument *DeclRefArg(FormulaTreeNodeRef, SlidingFunctionBase* pCodeGen);
- /// Used to generate sliding window helpers
- void DumpSlidingWindowFunctions(std::stringstream &ss);
- /// Memory mapping from host to device and pass buffers to the given kernel as
- /// arguments
- void Marshal(cl_kernel, int, cl_program);
-private:
- unsigned int mCurId;
- ArgumentMap mSymbols;
- ArgumentList mParams;
-};
-
-class DynamicKernel : public CompiledFormula
-{
-public:
- DynamicKernel(FormulaTreeNodeRef r):mpRoot(r),
- mpProgram(NULL), mpKernel(NULL), mpResClmem(NULL), mpCode(NULL) {}
- static DynamicKernel *create(ScDocument& rDoc,
- const ScAddress& rTopPos,
- ScTokenArray& rCode);
- /// OpenCL code generation
- void CodeGen();
- /// Produce kernel hash
- std::string GetMD5(void);
- /// Create program, build, and create kerenl
- /// TODO cache results based on kernel body hash
- /// TODO: abstract OpenCL part out into OpenCL wrapper.
- void CreateKernel(void);
- /// Prepare buffers, marshal them to GPU, and launch the kernel
- /// TODO: abstract OpenCL part out into OpenCL wrapper.
- void Launch(size_t nr);
- ~DynamicKernel();
- cl_mem GetResultBuffer(void) const { return mpResClmem; }
- void SetPCode(ScTokenArray *pCode) { mpCode = pCode; }
-
-private:
- void TraverseAST(FormulaTreeNodeRef);
- FormulaTreeNodeRef mpRoot;
- SymbolTable mSyms;
- std::string mKernelSignature, mKernelHash;
- std::string mFullProgramSrc;
- cl_program mpProgram;
- cl_kernel mpKernel;
- cl_mem mpResClmem; // Results
- std::set<std::string> inlineDecl;
- std::set<std::string> inlineFun;
- ScTokenArray *mpCode;
-};
-
-}
-
-}
-
-#endif // HAVE_FEATURE_OPENCL
-
-#endif // INCLUDED_SC_SOURCE_CORE_INC_DYNAMICKERNEL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 8ef18cf..5d14ddd 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -17,7 +17,6 @@
#include "formula/vectortoken.hxx"
#include "scmatrix.hxx"
-#include "dynamickernel.hxx"
#include "openclwrapper.hxx"
#include "op_financial.hxx"
@@ -2375,15 +2374,33 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(
}
}
-/// Used to generate sliding window helpers
-void SymbolTable::DumpSlidingWindowFunctions(std::stringstream &ss)
-{
+/// Holds the symbol table for a given dynamic kernel
+class SymbolTable {
+public:
+ typedef std::map<const formula::FormulaToken *,
+ boost::shared_ptr<DynamicKernelArgument> > ArgumentMap;
+ // This avoids instability caused by using pointer as the key type
+ typedef std::list< boost::shared_ptr<DynamicKernelArgument> > ArgumentList;
+ SymbolTable(void):mCurId(0) {}
+ template <class T>
+ const DynamicKernelArgument *DeclRefArg(FormulaTreeNodeRef, SlidingFunctionBase* pCodeGen);
+ /// Used to generate sliding window helpers
+ void DumpSlidingWindowFunctions(std::stringstream &ss)
+ {
for(ArgumentList::iterator it = mParams.begin(), e= mParams.end(); it!=e;
++it) {
(*it)->GenSlidingWindowFunction(ss);
ss << "\n";
}
-}
+ }
+ /// Memory mapping from host to device and pass buffers to the given kernel as
+ /// arguments
+ void Marshal(cl_kernel, int, cl_program);
+private:
+ unsigned int mCurId;
+ ArgumentMap mSymbols;
+ ArgumentList mParams;
+};
void SymbolTable::Marshal(cl_kernel k, int nVectorWidth, cl_program pProgram)
{
@@ -2394,9 +2411,16 @@ void SymbolTable::Marshal(cl_kernel k, int nVectorWidth, cl_program pProgram)
}
}
-/// OpenCL code generation
-void DynamicKernel::CodeGen()
+class DynamicKernel : public CompiledFormula
{
+public:
+ DynamicKernel(FormulaTreeNodeRef r):mpRoot(r),
+ mpProgram(NULL), mpKernel(NULL), mpResClmem(NULL), mpCode(NULL) {}
+ static DynamicKernel *create(ScDocument& rDoc,
+ const ScAddress& rTopPos,
+ ScTokenArray& rCode);
+ /// OpenCL code generation
+ void CodeGen() {
// Travese the tree of expression and declare symbols used
const DynamicKernelArgument *DK= mSyms.DeclRefArg<
DynamicKernelSoPArguments>(mpRoot, new OpNop);
@@ -2432,11 +2456,10 @@ void DynamicKernel::CodeGen()
#if 1
std::cerr<< "Program to be compiled = \n" << mFullProgramSrc << "\n";
#endif
-}
-
-/// Produce kernel hash
-std::string DynamicKernel::GetMD5(void)
-{
+ }
+ /// Produce kernel hash
+ std::string GetMD5(void)
+ {
#ifdef MD5_KERNEL
if (mKernelHash.empty()) {
std::stringstream md5s;
@@ -2455,12 +2478,15 @@ std::string DynamicKernel::GetMD5(void)
#else
return "";
#endif
-}
-
-/// Prepare buffers, marshal them to GPU, and launch the kernel
-/// TODO: abstract OpenCL part out into OpenCL wrapper.
-void DynamicKernel::Launch(size_t nr)
-{
+ }
+ /// Create program, build, and create kerenl
+ /// TODO cache results based on kernel body hash
+ /// TODO: abstract OpenCL part out into OpenCL wrapper.
+ void CreateKernel(void);
+ /// Prepare buffers, marshal them to GPU, and launch the kernel
+ /// TODO: abstract OpenCL part out into OpenCL wrapper.
+ void Launch(size_t nr)
+ {
// Obtain cl context
KernelEnv kEnv;
OpenclDevice::setKernelEnv(&kEnv);
@@ -2481,7 +2507,24 @@ void DynamicKernel::Launch(size_t nr)
global_work_size, NULL, 0, NULL, NULL);
if (CL_SUCCESS != err)
throw OpenCLError(err);
-}
+ }
+ ~DynamicKernel();
+ cl_mem GetResultBuffer(void) const { return mpResClmem; }
+ void SetPCode(ScTokenArray *pCode) { mpCode = pCode; }
+
+private:
+ void TraverseAST(FormulaTreeNodeRef);
+ FormulaTreeNodeRef mpRoot;
+ SymbolTable mSyms;
+ std::string mKernelSignature, mKernelHash;
+ std::string mFullProgramSrc;
+ cl_program mpProgram;
+ cl_kernel mpKernel;
+ cl_mem mpResClmem; // Results
+ std::set<std::string> inlineDecl;
+ std::set<std::string> inlineFun;
+ ScTokenArray *mpCode;
+};
DynamicKernel::~DynamicKernel()
{
diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx
index 79d5de7..f3ec3e0 100644
--- a/sc/source/core/tool/formulagroup.cxx
+++ b/sc/source/core/tool/formulagroup.cxx
@@ -16,7 +16,6 @@
#include "compiler.hxx"
#include "interpre.hxx"
#include "scmatrix.hxx"
-#include "dynamickernel.hxx"
#include "formula/vectortoken.hxx"
#include "rtl/bootstrap.hxx"
More information about the Libreoffice-commits
mailing list