Kaydet (Commit) 9a4bc254 authored tarafından mulei's avatar mulei Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: Optimized NOMINAL

AMLOEXT-265

Change-Id: I497b5cd9c89fc1c1afc4091023335b7db9fc8f4b
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 2180b1c9
...@@ -102,7 +102,8 @@ void RRI::GenSlidingWindowFunction( ...@@ -102,7 +102,8 @@ void RRI::GenSlidingWindowFunction(
} }
void OpNominal::GenSlidingWindowFunction( void OpNominal::GenSlidingWindowFunction(
std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments) std::stringstream &ss, const std::string sSymName, SubArguments &
vSubArguments)
{ {
ss << "\ndouble " << sSymName; ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"("; ss << "_"<< BinFuncName() <<"(";
...@@ -114,31 +115,59 @@ void OpNominal::GenSlidingWindowFunction( ...@@ -114,31 +115,59 @@ void OpNominal::GenSlidingWindowFunction(
} }
ss << ") {\n\t"; ss << ") {\n\t";
ss << "double tmp = 0;\n\t"; ss << "double tmp = 0;\n\t";
ss << "double temp = 0;\n\t";
ss << "int gid0 = get_global_id(0);\n\t"; ss << "int gid0 = get_global_id(0);\n\t";
ss <<"double tmp0 = "; ss << "double tmp0=0,tmp1=0;\n";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef()<<";\n\t"; for (unsigned i = 0; i < vSubArguments.size(); i++)
ss <<"double tmp1 = "; {
ss <<vSubArguments[1]->GenSlidingWindowDeclRef()<<";\n\t"; FormulaToken *pCur = vSubArguments[i]->GetFormulaToken();
#ifdef ISNAN assert(pCur);
if (pCur->GetType() == formula::svSingleVectorRef)
FormulaToken *tmpCur0 = vSubArguments[0] {
->GetFormulaToken(); #ifdef ISNAN
const formula::SingleVectorRefToken*tmpCurDVR0= dynamic_cast<const const formula::SingleVectorRefToken* pSVR =
formula::SingleVectorRefToken *>(tmpCur0); dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss<<"if("<<tmpCurDVR0->GetArrayLength()<<"<=gid0||"; ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
ss <<"isNan(tmp0))\n\t\t"; #else
ss<<" tmp0= 0;\n\t"; #endif
FormulaToken *tmpCur1 = vSubArguments[1] }
->GetFormulaToken(); else if (pCur->GetType() == formula::svDouble)
const formula::SingleVectorRefToken*tmpCurDVR1= dynamic_cast<const {
formula::SingleVectorRefToken *>(tmpCur1); #ifdef ISNAN
ss<<"if("<<tmpCurDVR1->GetArrayLength()<<"<=gid0||"; ss << "{\n";
ss <<"isNan(tmp1))\n\t\t"; #endif
ss<<" tmp1= 0;\n\t"; }
else
{
#ifdef ISNAN
#endif #endif
}
#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss <<" temp="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
ss <<" if (isNan(temp))\n";
ss <<" tmp"<<i<<"= 0;\n";
ss <<" else\n";
ss <<" tmp"<<i<<"=temp;\n";
ss <<" }\n";
}
else
{
ss <<" tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef(
);
ss <<";\n";
}
#else
ss <<" tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
#endif
}
ss<<"if(tmp1==0)\n\t"; ss<<"if(tmp1==0)\n\t";
ss<<"\treturn 0;\n\t"; ss<<"\treturn 0;\n\t";
ss<<"tmp=( pow( tmp0+ 1.0, 1.0 / tmp1 ) - 1.0 ) *"; ss<<"tmp=pow( tmp1,-1);\n\t";
ss<<"tmp=( pow( tmp0+ 1.0, tmp ) - 1.0 ) *";
ss<<"tmp1;\n\t"; ss<<"tmp1;\n\t";
ss << "return tmp;\n"; ss << "return tmp;\n";
ss << "}"; ss << "}";
......
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