sc/source/core/opencl/formulagroupcl.cxx | 32 - sc/source/core/opencl/op_addin.cxx | 124 ----- sc/source/core/opencl/op_array.cxx | 33 - sc/source/core/opencl/op_database.cxx | 121 ----- sc/source/core/opencl/op_financial.cxx | 586 ++++--------------------- sc/source/core/opencl/op_logical.cxx | 346 +------------- sc/source/core/opencl/op_logical.hxx | 34 - sc/source/core/opencl/op_math.cxx | 657 ++++------------------------ sc/source/core/opencl/op_spreadsheet.cxx | 11 sc/source/core/opencl/op_statistical.cxx | 724 +++++-------------------------- sc/source/core/opencl/opbase.cxx | 45 + sc/source/core/opencl/opbase.hxx | 6 12 files changed, 466 insertions(+), 2253 deletions(-)
New commits: commit 7ed959dfe96f3a4edc0ee00f23473aac28734e1f Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Sep 6 12:37:50 2022 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Sep 13 09:05:06 2022 +0200 reduce opencl copy&paste in op_addin.cxx and op_logical.cxx The svDoubleVectorRef stuff in OpAnd etc. didn't make sense, those operators are required to do implicit intersection (which can be done in sc core in ScCompiler::HandleIIOpCodeInternal()). Change-Id: Ic970c8e649a651f6a804b5ed265fe2e08ff29681 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139485 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/sc/source/core/opencl/op_addin.cxx b/sc/source/core/opencl/op_addin.cxx index a9c2f9508ac8..602ed2dfb36d 100644 --- a/sc/source/core/opencl/op_addin.cxx +++ b/sc/source/core/opencl/op_addin.cxx @@ -23,69 +23,8 @@ void OpBesselj::GenSlidingWindowFunction(outputstream &ss, GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; - ss << " double x = 0.0;\n"; - ss << " double N = 0.0;\n"; - FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); - assert(tmpCur0); - if(ocPush == vSubArguments[0]->GetFormulaToken()->GetOpCode()) - { - if(tmpCur0->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*tmpCurSVR0 = - static_cast<const formula::SingleVectorRefToken *>(tmpCur0); - ss << " if (gid0 < " << tmpCurSVR0->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " x = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(x))\n"; - ss << " x = 0.0;\n"; - ss << " }\n"; - } - else if(tmpCur0->GetType() == formula::svDouble) - { - ss << " x = " << tmpCur0->GetDouble() << ";\n"; - } - else - { - throw Unhandled(__FILE__, __LINE__); - } - } - else - { - ss << " x = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - } - - FormulaToken *tmpCur1 = vSubArguments[1]->GetFormulaToken(); - assert(tmpCur1); - if(ocPush == vSubArguments[1]->GetFormulaToken()->GetOpCode()) - { - if(tmpCur1->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*tmpCurSVR1 = - static_cast<const formula::SingleVectorRefToken *>(tmpCur1); - ss << " if (gid0 < " << tmpCurSVR1->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " N = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(N))\n"; - ss << " N = 0.0;\n"; - ss << " }\n"; - } - else if(tmpCur1->GetType() == formula::svDouble) - { - ss << " N = " << tmpCur1->GetDouble() << ";\n"; - } - else - { - throw Unhandled(__FILE__, __LINE__); - } - } - else - { - ss << " N = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - } + GenerateArg( "x", 0, vSubArguments, ss ); + GenerateArg( "N", 1, vSubArguments, ss ); ss << " double f_2_DIV_PI = 2.0 / M_PI;\n"; ss << " if( N < 0.0 )\n"; ss << " return CreateDoubleError(IllegalArgument);\n"; @@ -170,44 +109,14 @@ void OpGestep::GenSlidingWindowFunction( outputstream &ss,const std::string &sSymName, SubArguments &vSubArguments) { + CHECK_PARAMETER_COUNT( 2, 2 ); GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; - ss << " double tmp=0,tmp0 =0,tmp1 = 0;\n"; + ss << " double tmp=0;\n"; ss << " int gid0=get_global_id(0);\n"; ss <<"\n"; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - FormulaToken *pCur = vSubArguments[i]->GetFormulaToken(); - assert(pCur); - if (pCur->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken& rSVR = - dynamic_cast< const formula::SingleVectorRefToken& >(*pCur); - ss << " if (gid0 < " << rSVR.GetArrayLength() << ")\n"; - ss << " {\n"; - } - else if (pCur->GetType() == formula::svDouble) - { - ss << " {\n"; - } - - if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode()) - { - ss << " if (isnan("; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << "))\n"; - ss << " tmp"<<i<<" = 0;\n"; - ss << " else\n"; - ss << " tmp"<<i<<" = "; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << ";\n }\n"; - } - else - { - ss << "tmp"<<i<<" ="<<vSubArguments[i]->GenSlidingWindowDeclRef(); - ss <<";\n"; - } - } + GenerateArg( "tmp0", 0, vSubArguments, ss ); + GenerateArg( "tmp1", 1, vSubArguments, ss ); ss << " tmp =tmp0 >= tmp1 ? 1 : 0;\n"; ss << " return tmp;\n"; ss << "}\n"; diff --git a/sc/source/core/opencl/op_logical.cxx b/sc/source/core/opencl/op_logical.cxx index ae4bb9d03de7..2af37c73395e 100644 --- a/sc/source/core/opencl/op_logical.cxx +++ b/sc/source/core/opencl/op_logical.cxx @@ -15,158 +15,24 @@ using namespace formula; namespace sc::opencl { -void OpAnd::GenSlidingWindowFunction(outputstream &ss, - const std::string &sSymName, SubArguments &vSubArguments) -{ - CHECK_PARAMETER_COUNT_MIN( 1 ); - GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); - ss << "{\n"; - ss << " int gid0 = get_global_id(0);\n"; - ss << " double t = 1,tmp=0;\n"; - for(size_t j = 0; j< vSubArguments.size(); j++) - { - ss << " double tmp"<<j<<" = 1;\n"; - FormulaToken *tmpCur0 = vSubArguments[j]->GetFormulaToken(); - if(tmpCur0->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*pCurDVR= static_cast<const - formula::SingleVectorRefToken *>(tmpCur0); - ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength(); - ss<< ";\n"; - ss <<" if(gid0 >= buffer_len"<<j<<" || isnan("; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<"))\n"; - ss <<" tmp = 1;\n else\n"; - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" && tmp;\n"; - } - else if(tmpCur0->GetType() == formula::svDouble) - { - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" && tmp;\n"; - } - else if(tmpCur0->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken*pCurDVR= static_cast<const - formula::DoubleVectorRefToken *>(tmpCur0); - size_t nCurWindowSize = pCurDVR->GetArrayLength() < - pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): - pCurDVR->GetRefRowSize() ; - ss << " for(int i = "; - if (!pCurDVR->IsStartFixed() && pCurDVR->IsEndFixed()) { - ss << "gid0; i < " << nCurWindowSize << "; i++) {\n"; - } - else if(pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()){ - ss << "0; i < gid0 + " << nCurWindowSize << "; i++) {\n"; - } - else{ - ss << "0; i < " << nCurWindowSize << "; i++) {\n"; - } - if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) - { - ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 1;\n else\n"; - } - else - { - ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<")||i>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 1;\n else\n"; - } - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" && tmp;\n"; - ss <<" }\n"; - } - else - { - ss <<" tmp"<<j<<" = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - } - ss <<" t = t && tmp"<<j<<";\n"; - } - ss << " return t;\n"; - ss << "}\n"; -} -void OpOr::GenSlidingWindowFunction(outputstream &ss, +void OpLogicalBinaryOperator::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - CHECK_PARAMETER_COUNT_MIN( 1 ); + CHECK_PARAMETER_COUNT( 1, 30 ); GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; - ss << " double t = 0,tmp=0;\n"; + ss << " bool t = " << defaultOpenclValue() << ";\n"; for(size_t j = 0; j< vSubArguments.size(); j++) { - ss << " double tmp"<<j<<" = 0;\n"; - FormulaToken *tmpCur0 = vSubArguments[j]->GetFormulaToken(); - if(tmpCur0->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*pCurDVR= static_cast<const - formula::SingleVectorRefToken *>(tmpCur0); - ss<< " int buffer_len"<<j<<" = "<<pCurDVR->GetArrayLength(); - ss<< ";\n"; - ss <<" if(gid0 >= buffer_len"<<j<<" || isnan("; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<"))\n"; - ss <<" tmp = 0;\n else\n"; - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" || tmp;\n"; - } - else if(tmpCur0->GetType() == formula::svDouble) - { - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" || tmp;\n"; - } - else if(tmpCur0->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken*pCurDVR= static_cast<const - formula::DoubleVectorRefToken *>(tmpCur0); - size_t nCurWindowSize = pCurDVR->GetArrayLength() < - pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): - pCurDVR->GetRefRowSize() ; - ss << " for(int i = "; - if (!pCurDVR->IsStartFixed() && pCurDVR->IsEndFixed()) { - ss << "gid0; i < " << nCurWindowSize << "; i++) {\n"; - } - else if(pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()){ - ss << "0; i < gid0 + " << nCurWindowSize << "; i++) {\n"; - } - else{ - ss << "0; i < " << nCurWindowSize << "; i++) {\n"; - } - if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) - { - ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 0;\n else\n"; - } - else - { - ss <<" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef(); - ss <<")||i>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 0;\n else\n"; - } - ss <<" tmp = "; - ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp"<<j<<" = tmp"<<j<<" || tmp;\n"; - ss <<" }\n"; - } - ss <<" t = t || tmp"<<j<<";\n"; + GenerateArg( j, vSubArguments, ss ); + ss << " t = t " << openclOperator() << " (arg" << j << " != 0);\n"; } ss << " return t;\n"; ss << "}\n"; } + void OpNot::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { @@ -174,103 +40,11 @@ void OpNot::GenSlidingWindowFunction(outputstream &ss, GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; - ss << " double tmp=0;\n"; - FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); - if(tmpCur0->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*pCurDVR= static_cast<const - formula::SingleVectorRefToken *>(tmpCur0); - ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan("; - ss <<vSubArguments[0]->GenSlidingWindowDeclRef(); - ss <<"))\n"; - ss <<" tmp = 0;\n else\n"; - ss <<" tmp = "; - ss <<vSubArguments[0]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp = (tmp == 0.0);\n"; - } - else if(tmpCur0->GetType() == formula::svDouble) - { - ss <<" tmp = "; - ss <<vSubArguments[0]->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp = (tmp == 0.0);\n"; - } - ss << " return tmp;\n"; + GenerateArg( 0, vSubArguments, ss ); + ss << " return arg0 == 0;\n"; ss << "}\n"; } -void OpXor::GenSlidingWindowFunction(outputstream &ss, - const std::string &sSymName, SubArguments &vSubArguments) -{ - CHECK_PARAMETER_COUNT_MIN( 1 ); - GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); - ss << "{\n"; - ss << " int gid0 = get_global_id(0);\n"; - ss << " int t = 0,tmp0 = 0;\n"; - ss << " double tmp = 0;\n"; - for(DynamicKernelArgumentRef & rArg : vSubArguments) - { - FormulaToken *tmpCur0 = rArg->GetFormulaToken(); - if(tmpCur0->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken*pCurDVR= static_cast<const - formula::SingleVectorRefToken *>(tmpCur0); - ss <<" if(gid0 >= "<<pCurDVR->GetArrayLength()<<" || isnan("; - ss <<rArg->GenSlidingWindowDeclRef(); - ss <<"))\n"; - ss <<" tmp = 0;\n else\n"; - ss <<" tmp = "; - ss <<rArg->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp0 = (tmp != 0);\n"; - ss <<" t = t ^tmp0;\n"; - } - else if(tmpCur0->GetType() == formula::svDouble) - { - ss <<" tmp = "; - ss <<rArg->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp0 = (tmp != 0);\n"; - ss <<" t = t ^tmp0;\n"; - } - else if(tmpCur0->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken*pCurDVR= static_cast<const - formula::DoubleVectorRefToken *>(tmpCur0); - size_t nCurWindowSize = pCurDVR->GetArrayLength() < - pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): - pCurDVR->GetRefRowSize() ; - ss << " for(int i = "; - if (!pCurDVR->IsStartFixed() && pCurDVR->IsEndFixed()) { - ss << "gid0; i < " << nCurWindowSize << "; i++) {\n"; - } - else if(pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()){ - ss << "0; i < gid0 + " << nCurWindowSize << "; i++) {\n"; - } - else{ - ss << "0; i < " << nCurWindowSize << "; i++) {\n"; - } - if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) - { - ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef(); - ss <<")||i+gid0>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 0;\n else\n"; - } - else - { - ss <<" if(isnan("<<rArg->GenSlidingWindowDeclRef(); - ss <<")||i>="<<pCurDVR->GetArrayLength(); - ss <<")\n"; - ss <<" tmp = 0;\n else\n"; - } - ss <<" tmp = "; - ss <<rArg->GenSlidingWindowDeclRef()<<";\n"; - ss <<" tmp0 = (tmp != 0);\n"; - ss <<" t = t ^tmp0;\n"; - ss <<" }\n"; - } - } - ss << " return t;\n"; - ss << "}\n"; -} void OpIf::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { @@ -278,51 +52,20 @@ void OpIf::GenSlidingWindowFunction(outputstream &ss, GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; + GenerateArg( 0, vSubArguments, ss ); + if(vSubArguments.size()>1) + GenerateArg( 1, vSubArguments, ss ); + else + ss << " double arg1 = 1;\n"; + if(vSubArguments.size()>2) + GenerateArg( 2, vSubArguments, ss ); + else + ss << " double arg2 = 0;\n"; - FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); - if(tmpCur0->GetType() == formula::svDoubleVectorRef) - { - throw UnhandledToken("unknown operand for ocPush", __FILE__, __LINE__); - } - if(vSubArguments.size()==3) - { - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << ")|| "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << " == 0)\n"; - ss << " return "; - ss << vSubArguments[2]->GenSlidingWindowDeclRef(); - ss << ";\n"; - ss << " else"; - ss <<" return "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss <<";\n"; - } - if(vSubArguments.size()==2) - { - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << ")|| "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << " == 0)\n"; - ss << " return 0;\n"; - ss << " else"; - ss <<" return "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss <<";\n"; - } - if(vSubArguments.size()==1) - { - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << ")|| "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss << " == 0)\n"; - ss << " return 0;\n"; - ss << " else"; - ss <<" return 1;\n"; - } + ss << " if(arg0 != 0)\n"; + ss << " return arg1;\n"; + ss << " else\n"; + ss << " return arg2;\n"; ss << "}\n"; } diff --git a/sc/source/core/opencl/op_logical.hxx b/sc/source/core/opencl/op_logical.hxx index 18cb0b59001f..f4c6b7a952ef 100644 --- a/sc/source/core/opencl/op_logical.hxx +++ b/sc/source/core/opencl/op_logical.hxx @@ -14,23 +14,34 @@ namespace sc::opencl { -class OpAnd: public Normal +/// Implements OpAnd, OpOr, OpXor. +class OpLogicalBinaryOperator : public Normal { -public: virtual void GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override; - virtual std::string BinFuncName() const override { return "And"; } virtual bool canHandleMultiVector() const override { return true; } + /// The C operator implementing the function. + virtual const char* openclOperator() const = 0; + /// Default value when chaining the operator. + virtual const char* defaultOpenclValue() const = 0; }; -class OpOr: public Normal +class OpAnd: public OpLogicalBinaryOperator +{ +public: + virtual std::string BinFuncName() const override { return "And"; } + virtual const char* openclOperator() const override { return "&&"; }; + virtual const char* defaultOpenclValue() const override { return "true"; } +}; + +class OpOr: public OpLogicalBinaryOperator { public: - virtual void GenSlidingWindowFunction(outputstream &ss, - const std::string &sSymName, SubArguments &vSubArguments) override; virtual std::string BinFuncName() const override { return "Or"; } - virtual bool canHandleMultiVector() const override { return true; } + virtual const char* openclOperator() const override { return "||"; }; + virtual const char* defaultOpenclValue() const override { return "false"; } }; + class OpNot: public Normal { public: @@ -38,14 +49,15 @@ public: const std::string &sSymName, SubArguments &vSubArguments) override; virtual std::string BinFuncName() const override { return "Not"; } }; -class OpXor: public Normal + +class OpXor: public OpLogicalBinaryOperator { public: - virtual void GenSlidingWindowFunction(outputstream &ss, - const std::string &sSymName, SubArguments &vSubArguments) override; virtual std::string BinFuncName() const override { return "Xor"; } - virtual bool canHandleMultiVector() const override { return true; } + virtual const char* openclOperator() const override { return "^"; }; + virtual const char* defaultOpenclValue() const override { return "false"; } }; + class OpIf:public Normal { public: diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx index 7f50d5523a15..a10ba9f77b64 100644 --- a/sc/source/core/opencl/opbase.cxx +++ b/sc/source/core/opencl/opbase.cxx @@ -174,36 +174,45 @@ bool VectorRef::NeedParallelReduction() const return false; } -void SlidingFunctionBase::GenerateArg( int num, SubArguments& vSubArguments, outputstream& ss ) +void SlidingFunctionBase::GenerateArg( const char* name, int num, SubArguments& vSubArguments, outputstream& ss ) { CHECK_PARAMETER_COUNT_MIN( num ); FormulaToken *token = vSubArguments[num]->GetFormulaToken(); if( token == nullptr ) throw Unhandled( __FILE__, __LINE__ ); - ss << " double arg" << num << ";\n"; + ss << " double " << name << ";\n"; if(token->GetOpCode() == ocPush) { if(token->GetType() == formula::svSingleVectorRef) { - ss << " if(isnan("; + const formula::SingleVectorRefToken* svr = + static_cast<const formula::SingleVectorRefToken *>(token); + ss << " if (gid0 >= " << svr->GetArrayLength() << " || isnan("; ss << vSubArguments[num]->GenSlidingWindowDeclRef() << "))\n"; - ss << " arg" << num << " = 0.0;\n"; + ss << " " << name << " = 0.0;\n"; ss << " else\n"; - ss << " arg" << num << " = "; + ss << " " << name << " = "; ss << vSubArguments[num]->GenSlidingWindowDeclRef() << ";\n"; } else if(token->GetType() == formula::svDouble) - ss << " arg" << num << " = " << token->GetDouble() << ";\n"; + ss << " " << name << " = " << token->GetDouble() << ";\n"; else throw Unhandled( __FILE__, __LINE__ ); } else { - ss << " arg" << num << " = "; + ss << " " << name << " = "; ss << vSubArguments[num]->GenSlidingWindowDeclRef() << ";\n"; } } +void SlidingFunctionBase::GenerateArg( int num, SubArguments& vSubArguments, outputstream& ss ) +{ + char buf[ 30 ]; + sprintf( buf, "arg%d", num ); + GenerateArg( buf, num, vSubArguments, ss ); +} + void SlidingFunctionBase::GenerateFunctionDeclaration( const std::string& sSymName, SubArguments& vSubArguments, outputstream& ss ) { diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx index 1b118d39e93e..46b767062b9a 100644 --- a/sc/source/core/opencl/opbase.hxx +++ b/sc/source/core/opencl/opbase.hxx @@ -225,7 +225,9 @@ public: virtual void GenSlidingWindowFunction( outputstream&, const std::string&, SubArguments& ) = 0; protected: - // generate code for "double arg<num> = <value>;" from vSubArguments + // generate code for "double <name> = <value>;" from vSubArguments + static void GenerateArg( const char* name, int num, SubArguments& vSubArguments, outputstream& ss ); + // overload, variable will be named "arg<num>" static void GenerateArg( int num, SubArguments& vSubArguments, outputstream& ss ); void GenerateFunctionDeclaration( const std::string& sSymName, SubArguments& vSubArguments, outputstream& ss ); commit b58acf93626456f9d9b9ff66f9208a3f944180ac Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Tue Sep 6 12:37:43 2022 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Sep 13 09:04:51 2022 +0200 reduce opencl copy&paste when generating function declaration Change-Id: Ibe3677ed56423aeb0d19b510664bc402fc53366d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139484 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 9838e9adaef2..28b4c87fdb07 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -1419,15 +1419,8 @@ public: virtual void GenSlidingWindowFunction( outputstream& ss, const std::string& sSymName, SubArguments& vSubArguments ) override { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << "double tmp = " << GetBottom() << ";\n"; ss << "int gid0 = get_global_id(0);\n"; if (isAverage() || isMinOrMax()) @@ -1534,16 +1527,9 @@ public: virtual void GenSlidingWindowFunction( outputstream& ss, const std::string& sSymName, SubArguments& vSubArguments ) override { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - assert(vSubArguments.size() == 2); - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + CHECK_PARAMETER_COUNT( 2, 2 ); + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "int gid0 = get_global_id(0), i = 0;\n\t"; ss << "double tmp = "; ss << Gen2(vSubArguments[0]->GenSlidingWindowDeclRef(), @@ -1563,13 +1549,10 @@ public: size_t nCurWindowSize = 0; FormulaToken* tmpCur = nullptr; const formula::DoubleVectorRefToken* pCurDVR = nullptr; - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; for (size_t i = 0; i < vSubArguments.size(); i++) { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); size_t nCurChildWindowSize = vSubArguments[i]->GetWindowSize(); nCurWindowSize = (nCurWindowSize < nCurChildWindowSize) ? nCurChildWindowSize : nCurWindowSize; @@ -1582,7 +1565,6 @@ public: throw Unhandled(__FILE__, __LINE__); } } - ss << ") {\n"; ss << " double tmp = 0.0;\n"; ss << " int gid0 = get_global_id(0);\n"; diff --git a/sc/source/core/opencl/op_addin.cxx b/sc/source/core/opencl/op_addin.cxx index 5e4dc04a2b0b..a9c2f9508ac8 100644 --- a/sc/source/core/opencl/op_addin.cxx +++ b/sc/source/core/opencl/op_addin.cxx @@ -20,15 +20,8 @@ void OpBesselj::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 2, 2 ); - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double x = 0.0;\n"; ss << " double N = 0.0;\n"; @@ -177,15 +170,7 @@ void OpGestep::GenSlidingWindowFunction( outputstream &ss,const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " double tmp=0,tmp0 =0,tmp1 = 0;\n"; ss << " int gid0=get_global_id(0);\n"; diff --git a/sc/source/core/opencl/op_array.cxx b/sc/source/core/opencl/op_array.cxx index cf54a5be8b92..65a1caf65fbc 100644 --- a/sc/source/core/opencl/op_array.cxx +++ b/sc/source/core/opencl/op_array.cxx @@ -19,15 +19,8 @@ namespace sc::opencl { void OpSumX2MY2::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double tmp =0;\n"; GenTmpVariables(ss,vSubArguments); @@ -76,15 +69,8 @@ void OpSumX2MY2::GenSlidingWindowFunction(outputstream &ss, void OpSumX2PY2::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double tmp =0;\n"; GenTmpVariables(ss,vSubArguments); @@ -132,15 +118,8 @@ void OpSumX2PY2::GenSlidingWindowFunction(outputstream &ss, void OpSumXMY2::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double tmp =0;\n"; GenTmpVariables(ss,vSubArguments); diff --git a/sc/source/core/opencl/op_database.cxx b/sc/source/core/opencl/op_database.cxx index 2a76a4171501..8c7e92e3654e 100644 --- a/sc/source/core/opencl/op_database.cxx +++ b/sc/source/core/opencl/op_database.cxx @@ -17,15 +17,8 @@ namespace sc::opencl { void OpDmax::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double max = -1000000000000;\n"; ss << " double value=0.0;\n"; @@ -144,15 +137,8 @@ void OpDmax::GenSlidingWindowFunction(outputstream &ss, void OpDmin::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double min = 1000000000000;\n"; ss << " double value=0.0;\n"; @@ -272,15 +258,8 @@ void OpDmin::GenSlidingWindowFunction(outputstream &ss, void OpDproduct::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double product = 1;\n"; ss << " double value =0;\n"; @@ -398,15 +377,8 @@ void OpDproduct::GenSlidingWindowFunction(outputstream &ss, void OpDaverage::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double sum = 0;\n"; ss << " int count = 0;\n"; @@ -529,15 +501,8 @@ void OpDaverage::GenSlidingWindowFunction(outputstream &ss, void OpDstdev::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double var = 0;\n"; ss << " double mean = 0;\n"; @@ -711,15 +676,8 @@ void OpDstdev::GenSlidingWindowFunction(outputstream &ss, void OpDstdevp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double var = 0;\n"; ss << " double mean = 0;\n"; @@ -893,15 +851,8 @@ void OpDstdevp::GenSlidingWindowFunction(outputstream &ss, void OpDsum::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double sum = 0;\n"; ss << " double value =0;\n"; @@ -1020,15 +971,8 @@ void OpDsum::GenSlidingWindowFunction(outputstream &ss, void OpDvar::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double var = 0;\n"; ss << " double mean = 0;\n"; @@ -1202,15 +1146,8 @@ void OpDvar::GenSlidingWindowFunction(outputstream &ss, void OpDvarp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double var = 0;\n"; ss << " double mean = 0;\n"; @@ -1384,15 +1321,8 @@ void OpDvarp::GenSlidingWindowFunction(outputstream &ss, void OpDcount::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double value=0;\n"; ss << " int count = 0;\n"; @@ -1512,15 +1442,8 @@ void OpDcount::GenSlidingWindowFunction(outputstream &ss, void OpDcount2::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double value=0;\n"; ss << " int count = 0;\n"; diff --git a/sc/source/core/opencl/op_financial.cxx b/sc/source/core/opencl/op_financial.cxx index 12acbb435081..0840c334f7df 100644 --- a/sc/source/core/opencl/op_financial.cxx +++ b/sc/source/core/opencl/op_financial.cxx @@ -22,15 +22,8 @@ void RRI::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 3, 3 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() <<";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double fv;\n"; @@ -92,15 +85,8 @@ void OpNominal::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments & vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = 0;\n\t"; ss << "double temp = 0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; @@ -150,15 +136,8 @@ void OpDollarde::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 2, 2 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = " << GetBottom() <<";\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double fInt = " << GetBottom() <<";\n\t"; @@ -201,15 +180,8 @@ void OpDollarde::GenSlidingWindowFunction( void OpDollarfr::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = " << GetBottom() <<";\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double fInt = " << GetBottom() <<";\n\t"; @@ -261,15 +233,8 @@ void OpDISC::BinInlineFun(std::set<std::string>& decls, void OpDISC::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -332,15 +297,8 @@ void OpINTRATE::BinInlineFun(std::set<std::string>& decls, void OpINTRATE::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -396,15 +354,8 @@ void OpFV::BinInlineFun(std::set<std::string>& decls, void OpFV::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -446,15 +397,8 @@ void OpIPMT::BinInlineFun(std::set<std::string>& decls, void OpIPMT::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -515,15 +459,8 @@ void OpISPMT::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { CHECK_PARAMETER_COUNT( 4, 4 ); - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -569,15 +506,8 @@ void OpISPMT::GenSlidingWindowFunction(outputstream& ss, void OpPDuration::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -635,15 +565,8 @@ void OpDuration_ADD::BinInlineFun(std::set<std::string>& decls, void OpDuration_ADD::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -695,15 +618,8 @@ void OpMDuration::BinInlineFun(std::set<std::string>& decls, void OpMDuration::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() << ";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -761,15 +677,8 @@ void Fvschedule::GenSlidingWindowFunction( const formula::DoubleVectorRefToken* pCurDVR = static_cast<const formula::DoubleVectorRefToken *>(pCur); size_t nCurWindowSize = pCurDVR->GetRefRowSize(); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = 1.0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); @@ -800,15 +709,8 @@ void Cumipmt::GenSlidingWindowFunction( vSubArguments) { CHECK_PARAMETER_COUNT( 6, 6 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double fRate,fVal;\n"; ss << " int nStartPer,nEndPer,nNumPeriods,nPayType;\n"; @@ -915,15 +817,8 @@ void IRR::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 2, 2 ); - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " #define Epsilon 1.0E-7\n"; ss << " int gid0 = get_global_id(0);\n"; FormulaToken* pSur = vSubArguments[1]->GetFormulaToken(); @@ -1080,16 +975,8 @@ void XNPV::GenSlidingWindowFunction( const formula::DoubleVectorRefToken* pCurDVR = static_cast<const formula::DoubleVectorRefToken *>(pCur); size_t nCurWindowSize = pCurDVR->GetRefRowSize(); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"( "; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double result = 0.0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "int i=0;\n\t"; @@ -1187,15 +1074,8 @@ void PriceMat::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 6 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double result=0;\n\t"; ss<< "int nNullDate = GetNullDate( );\n\t"; @@ -1298,15 +1178,8 @@ void PriceMat::GenSlidingWindowFunction( void OpSYD::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double result=0;\n"; ss << " double cost;\n"; @@ -1398,15 +1271,8 @@ void MIRR::GenSlidingWindowFunction( static_cast< const formula::SingleVectorRefToken* >(pCur2); assert(pSVR2); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = " << GetBottom() <<";\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double arg0, arg1, arg2;\n\t"; @@ -1456,15 +1322,8 @@ void MIRR::GenSlidingWindowFunction( void OpEffective::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_" << BinFuncName() << "("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() <<";\n"; ss << " int gid0 = get_global_id(0);\n\t"; ss << " double arg0 = " << GetBottom() << ";\n"; @@ -1520,15 +1379,8 @@ void OpEffective::GenSlidingWindowFunction(outputstream& ss, void OpTbilleq::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << " int gid0 = get_global_id(0);\n"; ss << "double tmp = 0;\n\t"; ss << "double tmp000;\n\t"; @@ -1599,15 +1451,8 @@ void OpCumprinc::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 6 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() <<";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double fRate,fVal;\n"; @@ -1726,15 +1571,8 @@ void OpAccrint::GenSlidingWindowFunction( SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 7, 7 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = 0;\n"; ss << " int nStartDate,nEndDate,mode,freq;\n"; @@ -1841,15 +1679,8 @@ void OpAccrintm::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 5, 5 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double tmp = " << GetBottom() <<";\n\t"; ss << "int nStartDate,nEndDate,mode;\n\t"; @@ -1969,15 +1800,8 @@ void OpYield::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 7, 7 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = 0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double tmp000;\n\t"; @@ -2109,15 +1933,8 @@ void OpYield::GenSlidingWindowFunction( void OpSLN::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double cost;\n"; @@ -2186,15 +2003,8 @@ void OpYieldmat::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 6 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = 0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double tmp000;\n\t"; @@ -2309,15 +2119,8 @@ void OpYieldmat::GenSlidingWindowFunction( void OpPMT::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss<<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss<<" double tmp = 0;\n"; ss<<" double temp=0.0;\n"; ss<<" int gid0 = get_global_id(0);\n"; @@ -2369,15 +2172,8 @@ void OpPMT::GenSlidingWindowFunction(outputstream &ss, void OpNPV::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0.0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nCount = 1;\n"; @@ -2499,15 +2295,8 @@ void OpNPV::GenSlidingWindowFunction(outputstream &ss, void OpPrice::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss<<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss<<" double tmp = 0;\n"; ss<<" int gid0 = get_global_id(0);\n"; ss<<" double tmp0=0;\n"; @@ -2573,15 +2362,8 @@ void OpOddlprice::BinInlineFun(std::set<std::string>& decls, void OpOddlprice::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss <<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" double tmp = 0;\n"; ss <<" int gid0 = get_global_id(0);\n"; ss <<" double tmp0=0;\n"; @@ -2670,15 +2452,8 @@ void OpOddlyield::BinInlineFun(std::set<std::string>& decls, void OpOddlyield::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss <<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" double tmp = 0;\n"; ss <<" int gid0 = get_global_id(0);\n"; ss <<" double tmp0=0;\n"; @@ -2771,15 +2546,8 @@ void OpPriceDisc::BinInlineFun(std::set<std::string>& decls, void OpPriceDisc::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss<<" double tmp0=0;\n"; @@ -2831,15 +2599,8 @@ void OpPriceDisc::GenSlidingWindowFunction(outputstream &ss, void OpNper::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss <<" double tmp0=0;\n"; @@ -2904,15 +2665,8 @@ void OpPPMT::BinInlineFun(std::set<std::string>& decls, void OpPPMT::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss<<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss<<" double tmp = 0;\n"; ss<<" int gid0 = get_global_id(0);\n"; ss<<" double arg=0;\n"; @@ -3008,15 +2762,8 @@ void OpCoupdaybs::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments & vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3099,15 +2846,8 @@ void OpCoupdays::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments & vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3185,15 +2925,8 @@ void OpCouppcd::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3272,15 +3005,8 @@ void OpCoupncd::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments & vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3372,15 +3098,8 @@ void OpCoupdaysnc::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3458,15 +3177,8 @@ void OpCoupnum::BinInlineFun(std::set<std::string>& decls, void OpCoupnum::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle,nMat,nFreq,nBase;\n"; @@ -3538,16 +3250,9 @@ void OpAmordegrc::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 7 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n "; - ss << "int gid0 = get_global_id(0);\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; + ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() <<";\n"; ss << " double fCost,fRestVal,fPer,fRate;\n"; ss << " int nDate,nFirstPer,nBase;\n"; @@ -3694,15 +3399,8 @@ void OpAmorlinc::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 7 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = 0;\n"; ss << " double fCost,fRestVal,fPer,fRate;\n"; @@ -3833,15 +3531,8 @@ void OpReceived::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 5, 5 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double tmp = " << GetBottom() <<";\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int nSettle, nMat;\n"; @@ -3931,15 +3622,8 @@ void OpYielddisc::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT(5,5); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "double tmp = 0;\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double tmp000;\n\t"; @@ -4051,15 +3735,8 @@ void OpYielddisc::GenSlidingWindowFunction( void OpTbillprice::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = 0;\n"; @@ -4087,21 +3764,14 @@ void RATE::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 6, 6 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; FormulaToken* pCur = vSubArguments[5]->GetFormulaToken(); assert(pCur); const formula::SingleVectorRefToken* pSVR = static_cast< const formula::SingleVectorRefToken* >(pCur); assert(pSVR); - ss << ") {\n"; ss << " double result;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " bool bValid = true, bFound = false;\n"; @@ -4226,15 +3896,8 @@ void RATE::GenSlidingWindowFunction( void OpTbillyield::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; ss << "double tmp = 0;\n\t"; ss << "double tmp000;\n\t"; @@ -4302,15 +3965,8 @@ void OpDDB::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { CHECK_PARAMETER_COUNT( 5, 5 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = 0;\n"; ss << " double fCost, fSalvage, fLife, fPeriod, fFactor;\n"; @@ -4403,15 +4059,8 @@ void OpPV::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments & vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " double result = 0;\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double rate;\n"; @@ -4538,15 +4187,8 @@ tmpCur4); void OpVDB::GenSlidingWindowFunction( outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int singleIndex = gid0;\n"; ss << " double result = 0;\n"; @@ -4587,15 +4229,8 @@ void OpXirr::GenSlidingWindowFunction(outputstream &ss, size_t nCurWindowSize = pCurDVR->GetArrayLength() < pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): pCurDVR->GetRefRowSize() ; - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int doubleIndex = gid0;\n"; ss << " int singleIndex = gid0;\n"; @@ -4700,15 +4335,8 @@ void OpDB::GenSlidingWindowFunction(outputstream& ss, const std::string &sSymName, SubArguments& vSubArguments) { CHECK_PARAMETER_COUNT( 5, 5 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double fCost, fSalvage, fLife, fPeriod;\n"; ss << " int nMonths;\n"; diff --git a/sc/source/core/opencl/op_logical.cxx b/sc/source/core/opencl/op_logical.cxx index 1fa21e8250e6..ae4bb9d03de7 100644 --- a/sc/source/core/opencl/op_logical.cxx +++ b/sc/source/core/opencl/op_logical.cxx @@ -19,15 +19,8 @@ void OpAnd::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT_MIN( 1 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double t = 1,tmp=0;\n"; for(size_t j = 0; j< vSubArguments.size(); j++) @@ -105,15 +98,8 @@ void OpOr::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT_MIN( 1 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double t = 0,tmp=0;\n"; for(size_t j = 0; j< vSubArguments.size(); j++) @@ -185,15 +171,8 @@ void OpNot::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 1, 1 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp=0;\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -223,15 +202,8 @@ void OpXor::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT_MIN( 1 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " int t = 0,tmp0 = 0;\n"; ss << " double tmp = 0;\n"; @@ -303,15 +275,8 @@ void OpIf::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 1, 3 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); diff --git a/sc/source/core/opencl/op_math.cxx b/sc/source/core/opencl/op_math.cxx index 4dec63ac654f..b837d930910f 100644 --- a/sc/source/core/opencl/op_math.cxx +++ b/sc/source/core/opencl/op_math.cxx @@ -20,14 +20,7 @@ namespace sc::opencl { void OpCos::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -71,15 +64,8 @@ void OpSec::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss <<" double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss <<";\n"; @@ -102,15 +88,8 @@ void OpSecH::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss <<" double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss <<";\n"; @@ -125,15 +104,8 @@ void OpMROUND::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT(2, 2); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ", "; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss<<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss<<" double tmp = 0;\n"; ss<<" int gid0 = get_global_id(0);\n"; ss<<" double arg0=0;\n"; @@ -184,15 +156,8 @@ void OpCosh::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n"; @@ -208,15 +173,7 @@ void OpCosh::GenSlidingWindowFunction(outputstream &ss, void OpCot::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -269,15 +226,8 @@ void OpCoth::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n"; @@ -301,15 +251,8 @@ void OpCombinA::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 2, 2 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tem;\n"; ss << " double arg0,arg1;\n"; @@ -358,15 +301,8 @@ void OpEven::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n"; @@ -390,15 +326,8 @@ void OpMod::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { CHECK_PARAMETER_COUNT( 2, 2 ); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n"; @@ -424,15 +353,8 @@ void OpMod::GenSlidingWindowFunction(outputstream &ss, void OpLog::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tem;\n"; ss << " double arg0,arg1;\n"; @@ -475,15 +397,8 @@ void OpCsc::GenSlidingWindowFunction( FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss <<"int gid0=get_global_id(0);\n\t"; ss << "double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n\t"; @@ -504,15 +419,8 @@ void OpCountIfs::GenSlidingWindowFunction(outputstream &ss, size_t nCurWindowSize = pCurDVR->GetArrayLength() < pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): pCurDVR->GetRefRowSize() ; - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " int tmp =0;\n"; ss << " int loop;\n"; @@ -696,15 +604,8 @@ void OpSumIfs::GenSlidingWindowFunction(outputstream &ss, ss << "}\n"; }// finish generate reduction code // generate functions as usual - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double tmp =0;\n"; if (!mNeedReductionKernel) @@ -767,15 +668,8 @@ void OpCscH::GenSlidingWindowFunction( FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss <<"int gid0=get_global_id(0);\n\t"; ss << "double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n\t"; @@ -790,14 +684,7 @@ void OpCscH::GenSlidingWindowFunction( void OpExp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -844,15 +731,8 @@ void OpAverageIfs::GenSlidingWindowFunction(outputstream &ss, size_t nCurWindowSize = pCurDVR->GetArrayLength() < pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength(): pCurDVR->GetRefRowSize() ; - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss << " double tmp =0;\n"; ss << " int count=0;\n"; @@ -901,15 +781,8 @@ void OpLog10::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n{\n\t"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n\t"; ss <<"int gid0=get_global_id(0);\n\t"; ss << "double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << ";\n\t"; @@ -925,15 +798,8 @@ void OpLog10::GenSlidingWindowFunction(outputstream &ss, void OpSinh::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss <<") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss <<" int gid0=get_global_id(0);\n"; ss <<" double arg0 = " << vSubArguments[0]->GenSlidingWindowDeclRef(); @@ -947,14 +813,7 @@ void OpSinh::GenSlidingWindowFunction(outputstream &ss, void OpSin::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -996,15 +855,8 @@ void OpSin::GenSlidingWindowFunction(outputstream &ss, void OpAbs::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1032,14 +884,8 @@ void OpArcCos::BinInlineFun(std::set<std::string>& decls, void OpArcCos::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1058,14 +904,8 @@ void OpArcCos::GenSlidingWindowFunction(outputstream &ss, void OpArcCosHyp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1103,14 +943,7 @@ void OpArcCosHyp::GenSlidingWindowFunction(outputstream &ss, void OpTan::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -1154,15 +987,7 @@ void OpTanH::GenSlidingWindowFunction(outputstream &ss, FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken(); const formula::SingleVectorRefToken*tmpCurDVR= static_cast<const formula::SingleVectorRefToken *>(tmpCur); - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = "<< vSubArguments[0]->GenSlidingWindowDeclRef(); @@ -1178,15 +1003,7 @@ void OpTanH::GenSlidingWindowFunction(outputstream &ss, void OpPower::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg[2];\n"; @@ -1246,15 +1063,7 @@ void OpPower::GenSlidingWindowFunction(outputstream &ss, void OpSqrt::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) - ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -1301,14 +1110,8 @@ void OpSqrt::GenSlidingWindowFunction(outputstream &ss, void OpArcCot::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1326,14 +1129,7 @@ void OpArcCot::GenSlidingWindowFunction(outputstream &ss, void OpArcCotHyp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ")\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double arg0 = 0.0f;\n"; @@ -1380,14 +1176,8 @@ void OpArcSin::BinInlineFun(std::set<std::string>& decls, void OpArcSin::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1405,14 +1195,8 @@ void OpArcSin::GenSlidingWindowFunction(outputstream &ss, void OpArcSinHyp::GenSlidingWindowFunction(outputstream &ss, const std::string &sSymName, SubArguments &vSubArguments) { - ss << "\ndouble " << sSymName; - ss << "_"<< BinFuncName() <<"("; - for (size_t i = 0; i < vSubArguments.size(); i++) - { - if (i) ss << ","; - vSubArguments[i]->GenSlidingWindowDecl(ss); - } - ss << ") {\n"; + GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); + ss << "{\n"; ss << " int gid0 = get_global_id(0);\n"; ss << " double tmp = " << GetBottom() << ";\n"; FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); @@ -1453,14 +1237,8 @@ void OpArcTan2::BinInlineFun(std::set<std::string>& decls, void OpArcTan2::GenSlidingWindowFunction(outputstream &ss, ... etc. - the rest is truncated