Kaydet (Commit) bfa7a9b8 authored tarafından mingli's avatar mingli Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: Optimized LOGINV

AMLOEXT-254

Change-Id: I2103d54f50eb0faa2cc4afab7b83cf4d0bd78aed
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 d4ab0a44
...@@ -5370,15 +5370,6 @@ void OpIntercept::GenSlidingWindowFunction(std::stringstream &ss, ...@@ -5370,15 +5370,6 @@ void OpIntercept::GenSlidingWindowFunction(std::stringstream &ss,
void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss, void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments) const std::string sSymName, SubArguments &vSubArguments)
{ {
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);
ss << "\ndouble " << sSymName; ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"("; ss << "_"<< BinFuncName() <<"(";
for (unsigned i = 0; i < vSubArguments.size(); i++) for (unsigned i = 0; i < vSubArguments.size(); i++)
...@@ -5389,39 +5380,90 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss, ...@@ -5389,39 +5380,90 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss,
} }
ss << ") {\n"; ss << ") {\n";
ss << " int gid0=get_global_id(0);\n"; ss << " int gid0=get_global_id(0);\n";
ss << " double arg0 = ";
ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " double arg1 = ";
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " double arg2 = ";
ss << vSubArguments[2]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " double tmp;\n"; ss << " double tmp;\n";
#ifdef ISNAN ss << " double arg0,arg1,arg2,arg3;\n";
ss<< " if(isNan(arg0)||(gid0>="; size_t i = vSubArguments.size();
ss<<tmpCurDVR0->GetArrayLength(); size_t nItems = 0;
ss<<"))\n"; for (i = 0; i < vSubArguments.size(); i++)
ss<<" arg0 = 0;\n"; {
FormulaToken *pCur = vSubArguments[i]->GetFormulaToken();
assert(pCur);
if (pCur->GetType() == formula::svDoubleVectorRef)
{
const formula::DoubleVectorRefToken* pDVR =
dynamic_cast<const formula::DoubleVectorRefToken *>(pCur);
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << "for (int i = ";
if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) {
#ifdef ISNAN
ss << "gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << "; i++){\n";
#else
ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
#endif #endif
#ifdef ISNAN } else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
ss<< " if(isNan(arg1)||(gid0>="; #ifdef ISNAN
ss<< tmpCurDVR1->GetArrayLength(); ss << "0; i < " << pDVR->GetArrayLength();
ss<< "))\n"; ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
ss<< " arg1 = 0;\n"; #else
ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n ";
#endif #endif
#ifdef ISNAN } else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
ss<< " if(isNan(arg2)||(gid0>="; #ifdef ISNAN
ss<< tmpCurDVR2->GetArrayLength(); ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss<< "))\n"; ss << " && i < "<< nCurWindowSize << "; i++){\n ";
ss<< " arg2 = 0;\n"; #else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif #endif
}
else {
#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif
}
nItems += nCurWindowSize;
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n";
ss << " {\n";
ss << " if (isNan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
ss << " arg"<<i<<"= 0;\n";
ss << " else\n";
ss << " arg"<<i<<"=";
ss<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " }\n";
ss << " else\n";
ss << " arg"<<i<<"= 0;\n";
#endif
}
else if (pCur->GetType() == formula::svDouble)
{
#ifdef ISNAN
ss << " if (isNan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << "))\n";
ss << " arg"<<i<<"= 0;\n";
ss << " else\n";
ss << " arg"<<i<<"=";
ss<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
#endif
}
}
ss<< " double q,t,z;\n"; ss<< " double q,t,z;\n";
ss<< " q = arg0 -0.5;\n"; ss<< " q = arg0 -0.5;\n";
ss<< " if(fabs(q)<=.425)\n"; ss<< " if(fabs(q)<=.425)\n";
ss<< " {\n"; ss<< " {\n";
ss<< " t=0.180625-q*q;\n"; ss<< " t=0.180625-pow(q, 2);\n";
ss<< " z=\n" ss<< " z=\n"
" q*\n" " q*\n"
" (\n" " (\n"
...@@ -5472,10 +5514,7 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss, ...@@ -5472,10 +5514,7 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss,
ss<<" }\n"; ss<<" }\n";
ss<<" else\n"; ss<<" else\n";
ss<<" {\n"; ss<<" {\n";
ss<<" if(q>0)\n"; ss<<" t = q > 0 ? 1 - arg0 : arg0;\n";
ss<<" t=1-arg0;\n";
ss<<" else\n";
ss<<" t=arg0;\n";
ss<<" t=sqrt(-log(t));\n"; ss<<" t=sqrt(-log(t));\n";
ss<<" if(t<=5.0)\n"; ss<<" if(t<=5.0)\n";
ss<<" {\n"; ss<<" {\n";
...@@ -5577,13 +5616,13 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss, ...@@ -5577,13 +5616,13 @@ void OpLogInv:: GenSlidingWindowFunction(std::stringstream &ss,
" *t+1.0\n" " *t+1.0\n"
" );\n"; " );\n";
ss << " }\n"; ss << " }\n";
ss << " if(q<0.0)\n"; ss << " z = q < 0.0 ? (-1)*z : z;\n";
ss << " z=-z;\n";
ss << " }\n"; ss << " }\n";
ss << " tmp = exp(arg1+arg2*z);\n"; ss << " tmp = exp(arg1+arg2*z);\n";
ss << " return tmp;\n"; ss << " return tmp;\n";
ss << "}\n"; ss << "}\n";
} }
void OpForecast::GenSlidingWindowFunction(std::stringstream &ss, void OpForecast::GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments) const std::string sSymName, SubArguments &vSubArguments)
{ {
......
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