Kaydet (Commit) d5dac048 authored tarafından hongyu zhong's avatar hongyu zhong Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: Optimized NORMINV

AMLOEXT-285

Change-Id: I362d51a2e1dd750dfbafc7a8830c4a8b7611daed
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 19013b91
...@@ -4868,58 +4868,59 @@ void OpNorminv::GenSlidingWindowFunction( ...@@ -4868,58 +4868,59 @@ void OpNorminv::GenSlidingWindowFunction(
ss << "{\n"; ss << "{\n";
ss <<" double q,t,z;\n"; ss <<" double q,t,z;\n";
ss <<" double x,mue,sigma;\n"; ss <<" double x,mue,sigma;\n";
ss <<" double tmp0,tmp1,tmp2;\n";
ss <<" int gid0=get_global_id(0);\n"; ss <<" int gid0=get_global_id(0);\n";
#ifdef ISNAN size_t i = vSubArguments.size();
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); ss <<"\n";
const formula::SingleVectorRefToken*tmpCurDVR0= dynamic_cast<const for (i = 0; i < vSubArguments.size(); i++)
formula::SingleVectorRefToken *>(tmpCur0); {
FormulaToken *tmpCur1 = vSubArguments[1]->GetFormulaToken(); FormulaToken *pCur = vSubArguments[i]->GetFormulaToken();
const formula::SingleVectorRefToken*tmpCurDVR1= dynamic_cast<const assert(pCur);
formula::SingleVectorRefToken *>(tmpCur1); if (pCur->GetType() == formula::svSingleVectorRef)
FormulaToken *tmpCur2 = vSubArguments[2]->GetFormulaToken(); {
const formula::SingleVectorRefToken*tmpCurDVR2= dynamic_cast<const #ifdef ISNAN
formula::SingleVectorRefToken *>(tmpCur2); const formula::SingleVectorRefToken* pSVR =
ss << " int buffer_x_len = "; dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss << tmpCurDVR0->GetArrayLength(); ss << "if (gid0 < " << pSVR->GetArrayLength() << "){\n";
ss << ";\n";
ss << " int buffer_mue_len = ";
ss << tmpCurDVR1->GetArrayLength();
ss << ";\n";
ss << " int buffer_sigma_len = ";
ss << tmpCurDVR2->GetArrayLength();
ss << ";\n";
#endif #endif
#ifdef ISNAN }
ss <<" if((gid0)>=buffer_x_len || isNan("; else if (pCur->GetType() == formula::svDouble)
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); {
ss <<"))\n"; #ifdef ISNAN
ss <<" x = 0;\n"; ss << "{\n";
ss <<" else \n";
#endif #endif
ss <<" x ="<<vSubArguments[0]->GenSlidingWindowDeclRef(); }
ss << ";\n"; else
#ifdef ISNAN {
ss <<" if((gid0)>=buffer_mue_len || isNan("; #ifdef ISNAN
ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss <<"))\n";
ss <<" mue = 0;\n";
ss <<" else \n";
#endif #endif
ss <<" mue ="<<vSubArguments[1]->GenSlidingWindowDeclRef(); }
ss << ";\n"; #ifdef ISNAN
#ifdef ISNAN if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
ss <<" if((gid0)>=buffer_sigma_len || isNan("; {
ss << vSubArguments[2]->GenSlidingWindowDeclRef(); ss << " if (isNan(";
ss <<"))\n"; ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<" sigma = 0;\n"; ss << "))\n";
ss <<"else \n"; ss << " tmp"<<i<<"= 0;\n";
ss << " else\n";
ss << " tmp"<<i<<"=\n";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n}\n";
}
else
{
ss << "tmp"<<i<<"="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<";\n";
}
#endif #endif
ss <<" sigma ="<<vSubArguments[2]->GenSlidingWindowDeclRef(); }
ss << ";\n"; ss <<" x = tmp0;\n";
ss <<" mue = tmp1;\n";
ss <<" sigma = tmp2;\n";
ss <<" q = x -0.5;\n"; ss <<" q = x -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"
...@@ -5068,7 +5069,7 @@ void OpNorminv::GenSlidingWindowFunction( ...@@ -5068,7 +5069,7 @@ void OpNorminv::GenSlidingWindowFunction(
"*t+1.0\n" "*t+1.0\n"
");\n"; ");\n";
ss<<"}\n"; ss<<"}\n";
ss<<"if(q<0.0) z=-z;\n"; ss << "z = q < 0.0 ? (-1)*z : z;\n";
ss<<"}\n"; ss<<"}\n";
ss<<"double tmp = z*sigma + mue;\n"; ss<<"double tmp = z*sigma + mue;\n";
ss<<"return tmp;\n"; ss<<"return tmp;\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