diff options
author | Tor Lillqvist <tml@collabora.com> | 2013-11-20 18:10:56 +0200 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2013-11-20 18:23:07 +0000 |
commit | b3ecd33b45d131e63bff287ae564c4225a946959 (patch) | |
tree | f04133e3559ef610090dbdb4c5a44b1af640f266 /sc/source | |
parent | 0c7e7043bdeab5ad683e9621573441891ef4868b (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.hxx | 107 | ||||
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 81 | ||||
-rw-r--r-- | sc/source/core/tool/formulagroup.cxx | 1 |
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" |