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 <[email protected]> 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 <[email protected]> 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" _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
