Kaydet (Commit) 2e5abd41 authored tarafından minwang's avatar minwang Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: Optimized COUPPCD

AMLOEXT-382

Change-Id: I49ed9bdd88a0f00da4475798362750d5a0253c09
Signed-off-by: 's avatarhaochen <haochen@multicorewareinc.com>
Signed-off-by: 's avatarWei Wei <weiwei@multicorewareinc.com>
Signed-off-by: 's avatarI-Jui (Ray) Sung <ray@multicorewareinc.com>
üst fdbf8645
...@@ -3622,11 +3622,17 @@ void OpCouppcd::BinInlineFun(std::set<std::string>& decls, ...@@ -3622,11 +3622,17 @@ void OpCouppcd::BinInlineFun(std::set<std::string>& decls,
{ {
decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl); decls.insert(IsLeapYearDecl); decls.insert(DaysInMonthDecl);
decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl); decls.insert(DaysToDateDecl); decls.insert(DateToDaysDecl);
decls.insert(GetNullDateDecl); decls.insert(ScaDate2Decl); decls.insert(GetNullDateDecl);
decls.insert(ScaDateDecl);
decls.insert(addMonthsDecl);
decls.insert(setDayDecl);decls.insert(checklessthanDecl);
decls.insert(lcl_GetCouppcdDecl); decls.insert(lcl_GetCouppcdDecl);
funs.insert(IsLeapYear);funs.insert(DaysInMonth); funs.insert(IsLeapYear);funs.insert(DaysInMonth);
funs.insert(DaysToDate);funs.insert(DateToDays); funs.insert(DaysToDate);funs.insert(DateToDays);
funs.insert(GetNullDate);funs.insert(ScaDate2); funs.insert(GetNullDate);
funs.insert(ScaDate);
funs.insert(addMonths);
funs.insert(setDay);funs.insert(checklessthan);
funs.insert(lcl_GetCouppcd); funs.insert(lcl_GetCouppcd);
} }
void OpCouppcd::GenSlidingWindowFunction( void OpCouppcd::GenSlidingWindowFunction(
...@@ -3637,82 +3643,74 @@ void OpCouppcd::GenSlidingWindowFunction( ...@@ -3637,82 +3643,74 @@ void OpCouppcd::GenSlidingWindowFunction(
ss << "_"<< BinFuncName() <<"("; ss << "_"<< BinFuncName() <<"(";
for (unsigned i = 0; i < vSubArguments.size(); i++) for (unsigned i = 0; i < vSubArguments.size(); i++)
{ {
if (i) if (i)
ss << ","; ss << ",";
vSubArguments[i]->GenSlidingWindowDecl(ss); vSubArguments[i]->GenSlidingWindowDecl(ss);
} }
ss << ") {\n"; ss << ") {\n";
ss << " double tmp = 0;\n"; ss << " double tmp = 0;\n";
ss << " int gid0 = get_global_id(0);\n"; ss << " int gid0 = get_global_id(0);\n";
ss << " int bLastDayMode =1,bLastDay =0,b30Days= 0,bUSMode = 0;\n";
ss << " int nSettle,nMat,nFreq,nBase;\n"; ss << " int nSettle,nMat,nFreq,nBase;\n";
#ifdef ISNAN #ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); FormulaToken* tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR0= dynamic_cast<const FormulaToken* tmpCur1 = vSubArguments[1]->GetFormulaToken();
formula::SingleVectorRefToken *>(tmpCur0); FormulaToken* tmpCur2 = vSubArguments[2]->GetFormulaToken();
FormulaToken *tmpCur1 = vSubArguments[1]->GetFormulaToken(); FormulaToken* tmpCur3 = vSubArguments[3]->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 #endif
#ifdef ISNAN #ifdef ISNAN
ss <<" if(gid0 >= buffer_nSettle_len || isNan("; if(tmpCur0->GetType() == formula::svSingleVectorRef)
ss <<vSubArguments[0]->GenSlidingWindowDeclRef(); {
ss <<"))\n"; 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"; ss <<" nSettle = 0;\n else\n";
}
#endif #endif
ss << " nSettle=(int)"; ss <<" nSettle=(int)";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n"; ss <<";\n";
#ifdef ISNAN #ifdef ISNAN
ss <<" if(gid0 >= buffer_nMat_len || isNan("; if(tmpCur1->GetType() == formula::svSingleVectorRef)
ss <<vSubArguments[1]->GenSlidingWindowDeclRef(); {
ss <<"))\n"; 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"; ss <<" nMat = 0;\n else\n";
}
#endif #endif
ss <<" nMat=(int)"; ss <<" nMat=(int)";
ss << vSubArguments[1]->GenSlidingWindowDeclRef(); ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss << ";\n"; ss <<";\n";
#ifdef ISNAN #ifdef ISNAN
ss <<" if(gid0 >= buffer_nFreq_len || isNan("; if(tmpCur2->GetType() == formula::svSingleVectorRef)
ss <<vSubArguments[2]->GenSlidingWindowDeclRef(); {
ss <<"))\n"; 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"; ss <<" nFreq = 0;\n else\n";
}
#endif #endif
ss <<" nFreq=(int)"; ss << " nFreq=(int)";
ss <<vSubArguments[2]->GenSlidingWindowDeclRef(); ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss <<";\n"; ss <<";\n";
#ifdef ISNAN #ifdef ISNAN
ss <<" if(gid0 >= buffer_nBase_len || isNan("; if(tmpCur3->GetType() == formula::svSingleVectorRef)
ss <<vSubArguments[3]->GenSlidingWindowDeclRef(); {
ss <<"))\n"; 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"; ss <<" nBase = 0;\n else\n";
}
#endif #endif
ss <<" nBase=(int)"; ss << " nBase=(int)";
ss << vSubArguments[3]->GenSlidingWindowDeclRef(); ss << vSubArguments[3]->GenSlidingWindowDeclRef();
ss <<";\n"; ss << ";\n";
ss <<" int nNullDate=GetNullDate();\n"; ss <<" int nNullDate=693594;\n";
ss <<" ScaDate2(nNullDate, nMat, nBase,&bLastDayMode,&bLastDay,"; ss <<" tmp = lcl_GetCouppcd(nNullDate,nSettle,nMat,nFreq,nBase);\n";
ss <<"&b30Days,&bUSMode);\n";
ss <<" tmp = lcl_GetCouppcd(nNullDate,nSettle,nMat,nFreq,";
ss <<"&bLastDayMode,&bLastDay,&b30Days,&bUSMode);\n";
ss <<" return tmp;\n"; ss <<" return tmp;\n";
ss <<"}"; ss <<"}";
} }
......
...@@ -334,46 +334,36 @@ std::string ScaDate2= ...@@ -334,46 +334,36 @@ std::string ScaDate2=
"}\n"; "}\n";
std::string lcl_GetCouppcdDecl= std::string lcl_GetCouppcdDecl=
"int lcl_GetCouppcd(int nNullDate,int nSettle, int nMat,int nFreq,int *" "int lcl_GetCouppcd(int nNullDate,int nSettle,int nMat,int nFreq,int nBase);\n";
"bLastDayMode,int *bLastDay,int *b30Days,int *bUSMode);\n";
std::string lcl_GetCouppcd= std::string lcl_GetCouppcd=
"int lcl_GetCouppcd(int nNullDate,int nSettle, int nMat,int nFreq,int *" "int lcl_GetCouppcd(int nNullDate,int nSettle, int nMat,int nFreq,int nBase)\n"
"bLastDayMode,int *bLastDay,int *b30Days,int *bUSMode)\n"
"{\n" "{\n"
" int aDate = nMat;int rDay=0,rMonth=0,rYear=0;int mDay=0,mMonth=0," " int aDate = nMat;\n"
"mYear=0;\n" " int rDay=0,rMonth=0, rYear=0,rbLastDayMode=0, rbLastDay=0,rb30Days=0,"
" int sDay=0,sMonth=0, sYear=0;\n" "rbUSMode=0,rnDay=0;\n"
" DaysToDate(aDate+nNullDate,&rDay, &rMonth, &rYear );\n" " int sDay=0,sMonth=0, sYear=0,sbLastDayMode=0, sbLastDay=0,sb30Days=0,"
" DaysToDate(nMat+nNullDate,&mDay, &mMonth, &mYear );\n" "sbUSMode=0,snDay=0;\n"
" DaysToDate(nSettle+nNullDate,&sDay, &sMonth, &sYear );\n" " ScaDate( nNullDate,nSettle,nBase,&sDay,&sMonth,&sYear,&sbLastDayMode,"
" rYear= sYear;\n" "&sbLastDay,&sb30Days,&sbUSMode,&snDay);\n"
" nSettle=nSettle+nNullDate;\n" " ScaDate( nNullDate,aDate,nBase,&rDay,&rMonth,&rYear,&rbLastDayMode,"
" aDate=DateToDays( rDay,rMonth,rYear );\n" "&rbLastDay,&rb30Days,&rbUSMode,&rnDay);\n"
" if( aDate < nSettle )\n" " rYear=sYear;\n"
" rYear+= 1;\n" " setDay(rDay,rMonth,rYear,rbLastDay,rb30Days,&rnDay);\n"
" int d=DateToDays( rDay,rMonth,rYear );\n" " if(checklessthan(rYear,sYear,rMonth,sMonth,rnDay,snDay,rbLastDay,"
" int nMonthCount=-1*(12 / nFreq);\n" "sbLastDay,rDay,sDay))\n"
" while(d > nSettle )\n"
" {\n" " {\n"
" int nNewMonth = nMonthCount + rMonth;\n" " rYear+=1;\n"
" if( nNewMonth > 12 )\n" " setDay(rDay,rMonth,rYear,rbLastDay,rb30Days,&rnDay);\n"
" {\n" " }\n"
" --nNewMonth;\n" " while(checklessthan(sYear,rYear,sMonth,rMonth,snDay,rnDay,sbLastDay,"
" rYear+=nNewMonth / 12;\n" "rbLastDay,sDay,rDay))\n"
" rMonth = nNewMonth % 12 + 1;\n" " {\n"
" }\n" " double d = -1*(12/nFreq);\n"
" else if( nNewMonth < 1 )\n" " addMonths(rb30Days,rbLastDay,&rnDay,rDay,&rMonth,d,&rYear);\n"
" {\n"
" rYear+= nNewMonth / 12 - 1;\n"
" rMonth = nNewMonth % 12 + 12;\n"
" }\n"
" else\n"
" rMonth = nNewMonth;\n"
" d=DateToDays( rDay,rMonth,rYear );\n"
" }\n" " }\n"
" int nLastDay = DaysInMonth( rMonth, rYear );\n" " int nLastDay = DaysInMonth( rMonth, rYear );\n"
" int nRealDay = ((*bLastDayMode) && (*bLastDay)) ? nLastDay :" " int nRealDay = (rbLastDayMode && rbLastDay) ? nLastDay :"
"min( nLastDay, rDay );\n" "min( nLastDay, rDay );\n"
" return DateToDays( nRealDay, rMonth, rYear ) - nNullDate;\n" " return DateToDays( nRealDay, rMonth, rYear ) - nNullDate;\n"
"}\n"; "}\n";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment