diff options
author | minwang <min@multicorewareinc.com> | 2013-12-24 14:20:15 +0800 |
---|---|---|
committer | I-Jui (Ray) Sung <ray@multicorewareinc.com> | 2013-12-30 15:05:27 -0600 |
commit | 5aeeba0efa4b21d185603671675bf36d204940e5 (patch) | |
tree | 57aa5dddc434db8a2193f896ec4783127320d1fc /sc/source/core/opencl/op_financial.cxx | |
parent | 0389e9e112f62fae0715979290d7dc084801cba0 (diff) |
GPU Calc: Optimized COUPNUM
AMLOEXT-222
Change-Id: I630a4e1d648158e66efe4efb5d671a9b1df06f6a
Signed-off-by: haochen <haochen@multicorewareinc.com>
Signed-off-by: Wei Wei <weiwei@multicorewareinc.com>
Signed-off-by: I-Jui (Ray) Sung <ray@multicorewareinc.com>
Diffstat (limited to 'sc/source/core/opencl/op_financial.cxx')
-rw-r--r-- | sc/source/core/opencl/op_financial.cxx | 119 |
1 files changed, 60 insertions, 59 deletions
diff --git a/sc/source/core/opencl/op_financial.cxx b/sc/source/core/opencl/op_financial.cxx index acd90eaac272..176c0a1038e7 100644 --- a/sc/source/core/opencl/op_financial.cxx +++ b/sc/source/core/opencl/op_financial.cxx @@ -3928,14 +3928,19 @@ void OpCoupnum::BinInlineFun(std::set<std::string>& decls, std::set<std::string>& funs) { decls.insert(IsLeapYearDecl);decls.insert(DaysInMonthDecl); - decls.insert(DaysToDateDecl);decls.insert(DateToDaysDecl); - decls.insert(GetNullDateDecl);decls.insert(lcl_GetcoupnumDecl); - decls.insert(coupnumDecl); - funs.insert(IsLeapYear);funs.insert(DaysInMonth); - funs.insert(DaysToDate);funs.insert(DateToDays); - funs.insert(GetNullDate); - funs.insert(lcl_Getcoupnum); - funs.insert(coupnum); + decls.insert(DaysToDateDecl); + decls.insert(DateToDaysDecl); + decls.insert(ScaDateDecl); + decls.insert(setDayDecl);decls.insert(checklessthanDecl); + decls.insert(addMonthsDecl);decls.insert(lcl_Getcoupnum_newDecl); + decls.insert(coupnum_newDecl); + funs.insert(IsLeapYear);funs.insert(DaysInMonth_new); + funs.insert(DaysToDate); + funs.insert(DateToDays); + funs.insert(ScaDate); + funs.insert(setDay);funs.insert(checklessthan); + funs.insert(addMonths);funs.insert(lcl_Getcoupnum_new); + funs.insert(coupnum_new); } void OpCoupnum::GenSlidingWindowFunction(std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments) @@ -3945,77 +3950,73 @@ void OpCoupnum::GenSlidingWindowFunction(std::stringstream &ss, for (unsigned i = 0; i < vSubArguments.size(); i++) { if (i) - ss << ","; + ss << ","; vSubArguments[i]->GenSlidingWindowDecl(ss); } - ss << ") {\n "; - ss << "double tmp = " << GetBottom() <<";\n "; - ss << "int gid0 = get_global_id(0);\n "; - ss << "int nSettle,nMat,nFreq,nBase;\n "; + ss << ") {\n"; + ss << " double tmp = 0;\n"; + ss << " int gid0 = get_global_id(0);\n"; + ss << " int nSettle,nMat,nFreq,nBase;\n"; #ifdef ISNAN FormulaToken* tmpCur0 = vSubArguments[0]->GetFormulaToken(); - const formula::SingleVectorRefToken*tmpCurDVR0= dynamic_cast<const - formula::SingleVectorRefToken *>(tmpCur0); FormulaToken* tmpCur1 = vSubArguments[1]->GetFormulaToken(); - const formula::SingleVectorRefToken*tmpCurDVR1= dynamic_cast<const - formula::SingleVectorRefToken *>(tmpCur1); FormulaToken* tmpCur2 = vSubArguments[2]->GetFormulaToken(); - const formula::SingleVectorRefToken*tmpCurDVR2= dynamic_cast<const - formula::SingleVectorRefToken *>(tmpCur2); FormulaToken* tmpCur3 = vSubArguments[3]->GetFormulaToken(); - const formula::SingleVectorRefToken*tmpCurDVR3= dynamic_cast<const - formula::SingleVectorRefToken *>(tmpCur3); - ss<< "int buffer_nSettle_len = "; - ss<< tmpCurDVR0->GetArrayLength(); - ss << ";\n "; - ss<< "int buffer_nMat_len = "; - ss<< tmpCurDVR1->GetArrayLength(); - ss << ";\n "; - ss<< "int buffer_nFreq_len = "; - ss<< tmpCurDVR2->GetArrayLength(); - ss << ";\n "; - ss<< "int buffer_nBase_len = "; - ss<< tmpCurDVR3->GetArrayLength(); - ss << ";\n "; #endif #ifdef ISNAN - ss <<"if(gid0 >= buffer_nSettle_len || isNan("; - ss <<vSubArguments[0]->GenSlidingWindowDeclRef(); - ss <<"))\n "; - ss <<"nSettle = 0;\n else\n "; + if(tmpCur0->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken*tmpCurDVR0= dynamic_cast<const + formula::SingleVectorRefToken *>(tmpCur0); + ss <<" if(isNan("<<vSubArguments[0]->GenSlidingWindowDeclRef(); + ss <<")||(gid0 >="<<tmpCurDVR0->GetArrayLength()<<"))\n"; + ss <<" nSettle = 0;\n else\n"; + } #endif - ss << "nSettle=(int)"; + ss <<" nSettle=(int)"; ss << vSubArguments[0]->GenSlidingWindowDeclRef(); - ss <<";\n "; + ss <<";\n"; #ifdef ISNAN - ss <<"if(gid0 >= buffer_nMat_len || isNan("; - ss <<vSubArguments[1]->GenSlidingWindowDeclRef(); - ss <<"))\n "; - ss <<"nMat = 0;\n else\n "; + if(tmpCur1->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken*tmpCurDVR1= dynamic_cast<const + formula::SingleVectorRefToken *>(tmpCur1); + ss <<" if(isNan("<<vSubArguments[1]->GenSlidingWindowDeclRef(); + ss <<")||(gid0 >="<<tmpCurDVR1->GetArrayLength()<<"))\n"; + ss <<" nMat = 0;\n else\n"; + } #endif - ss << "nMat=(int)"; + ss <<" nMat=(int)"; ss << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ";\n "; + ss <<";\n"; #ifdef ISNAN - ss <<"if(gid0 >= buffer_nFreq_len || isNan("; - ss <<vSubArguments[2]->GenSlidingWindowDeclRef(); - ss <<"))\n "; - ss <<"nFreq = 0;\n else\n "; + if(tmpCur2->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken*tmpCurDVR2= dynamic_cast<const + formula::SingleVectorRefToken *>(tmpCur2); + ss <<" if(isNan("<<vSubArguments[2]->GenSlidingWindowDeclRef(); + ss <<")||(gid0 >="<<tmpCurDVR2->GetArrayLength()<<"))\n"; + ss <<" nFreq = 0;\n else\n"; + } #endif - ss << "nFreq=(int)"; + ss << " nFreq=(int)"; ss << vSubArguments[2]->GenSlidingWindowDeclRef(); - ss <<";\n "; + ss <<";\n"; #ifdef ISNAN - ss <<"if(gid0 >= buffer_nBase_len || isNan("; - ss <<vSubArguments[3]->GenSlidingWindowDeclRef(); - ss <<"))\n "; - ss <<"nBase = 0;\n else\n "; + if(tmpCur3->GetType() == formula::svSingleVectorRef) + { + const formula::SingleVectorRefToken*tmpCurDVR3= dynamic_cast<const + formula::SingleVectorRefToken *>(tmpCur3); + ss <<" if(isNan(" <<vSubArguments[3]->GenSlidingWindowDeclRef(); + ss <<")||(gid0 >="<<tmpCurDVR3->GetArrayLength()<<"))\n"; + ss <<" nBase = 0;\n else\n"; + } #endif - ss << "nBase=(int)"; + ss << " nBase=(int)"; ss << vSubArguments[3]->GenSlidingWindowDeclRef(); - ss << ";\n "; - ss <<"tmp = coupnum(nSettle,nMat,nFreq,nBase);\n "; - ss << "return tmp;\n"; + ss << ";\n"; + ss <<" tmp = coupnum_new(nSettle,nMat,nFreq,nBase);\n"; + ss <<" return tmp;\n"; ss << "}"; } void OpAmordegrc::BinInlineFun(std::set<std::string>& decls, |