summaryrefslogtreecommitdiff
path: root/sc/source
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2013-11-20 18:10:56 +0200
committerMichael Meeks <michael.meeks@collabora.com>2013-11-20 18:23:07 +0000
commitb3ecd33b45d131e63bff287ae564c4225a946959 (patch)
treef04133e3559ef610090dbdb4c5a44b1af640f266 /sc/source
parent0c7e7043bdeab5ad683e9621573441891ef4868b (diff)
DynamicKernel isn't needed outside formulagroupcl.cxx after all
So put it back there. Change-Id: I7c78719c95123e33e4506ace912ff056df56b247
Diffstat (limited to 'sc/source')
-rw-r--r--sc/source/core/inc/dynamickernel.hxx107
-rw-r--r--sc/source/core/opencl/formulagroupcl.cxx81
-rw-r--r--sc/source/core/tool/formulagroup.cxx1
3 files changed, 62 insertions, 127 deletions
diff --git a/sc/source/core/inc/dynamickernel.hxx b/sc/source/core/inc/dynamickernel.hxx
deleted file mode 100644
index dd4d516e4e92..000000000000
--- 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 8ef18cf994a8..5d14ddddf233 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 79d5de7b1202..f3ec3e08d5eb 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"