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

GPU Calc: Optimized PEARSON

AMLOEXT-281

Change-Id: I98d17f007a77aedff3778b251b6cfd399d34464c
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 3005ed48
...@@ -3787,16 +3787,72 @@ void OpPearson::GenSlidingWindowFunction( ...@@ -3787,16 +3787,72 @@ void OpPearson::GenSlidingWindowFunction(
vSubArguments[i]->GenSlidingWindowDecl(ss); vSubArguments[i]->GenSlidingWindowDecl(ss);
} }
ss << ")\n"; ss << ")\n";
ss << "{\n\t"; ss << "{\n";
ss << "int gid0=get_global_id(0);\n\t"; ss << " int gid0=get_global_id(0);\n";
ss << "double fCount = 0.0;\n\t"; ss << " double fCount = 0.0;\n";
ss << "double fSumX = 0.0;\n\t"; ss << " double fSumX = 0.0;\n";
ss << "double fSumY = 0.0;\n\t"; ss << " double fSumY = 0.0;\n";
ss << "double fSumDeltaXDeltaY = 0.0;\n\t"; ss << " double fSumDeltaXDeltaY = 0.0;\n";
ss << "double fSumSqrDeltaX = 0.0;\n\t"; ss << " double fInx;\n";
ss << "double fSumSqrDeltaY = 0.0;\n\t"; ss << " double fIny;\n";
ss << "double fInx;\n\t"; size_t i = vSubArguments.size();
ss << "double fIny;\n\t"; ss <<"\n";
for (i = 0; i < vSubArguments.size(); i++)
{
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
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
#ifdef ISNAN
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
#endif
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
#ifdef ISNAN
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif
}
else {
#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif
}
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss << "if (gid0 < " << pSVR->GetArrayLength() << "){\n";
#endif
}
else if (pCur->GetType() == formula::svDouble)
{
#ifdef ISNAN
ss << "{\n";
#endif
}
ss << "\n}\n";
}
#ifdef ISNAN #ifdef ISNAN
FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken(); FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
const formula::DoubleVectorRefToken*tmpCurDVR0= dynamic_cast<const const formula::DoubleVectorRefToken*tmpCurDVR0= dynamic_cast<const
...@@ -3806,55 +3862,55 @@ void OpPearson::GenSlidingWindowFunction( ...@@ -3806,55 +3862,55 @@ void OpPearson::GenSlidingWindowFunction(
const formula::DoubleVectorRefToken*tmpCurDVR1= dynamic_cast<const const formula::DoubleVectorRefToken*tmpCurDVR1= dynamic_cast<const
formula::DoubleVectorRefToken *>(tmpCur1); formula::DoubleVectorRefToken *>(tmpCur1);
ss<< "int buffer_fInx_len = "; ss << " int buffer_fInx_len = ";
ss<< tmpCurDVR0->GetArrayLength(); ss << tmpCurDVR0->GetArrayLength();
ss << ";\n\t"; ss << ";\n";
ss<< "int buffer_fIny_len = "; ss << " int buffer_fIny_len = ";
ss<< tmpCurDVR1->GetArrayLength(); ss << tmpCurDVR1->GetArrayLength();
ss << ";\n\t"; ss << ";\n";
#endif #endif
ss << "for(int i=0; i<"<<CurWindowSize<<"; i++)\n\t"; ss << " for(int i=0; i<"<<CurWindowSize<<"; i++)\n";
ss << "{\n\t"; ss << " {\n";
#ifdef ISNAN #ifdef ISNAN
ss<<"if((gid0+i)>=buffer_fInx_len || isNan("; ss <<" if((gid0+i)>=buffer_fInx_len || isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef(); ss << vSubArguments[0]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t"; ss <<"))\n";
ss<<"fInx = 0;\n\telse \n\t"; ss <<" fInx = 0;\n";
ss <<" else\n";
#endif #endif
ss << " fInx = "<<vSubArguments[0]->GenSlidingWindowDeclRef(); ss << " fInx = "<<vSubArguments[0]->GenSlidingWindowDeclRef();
ss << " ;\n\t"; ss << ";\n";
#ifdef ISNAN #ifdef ISNAN
ss<<"if((gid0+i)>=buffer_fIny_len || isNan("; ss <<" if((gid0+i)>=buffer_fIny_len || isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef(); ss << vSubArguments[1]->GenSlidingWindowDeclRef();
ss<<"))\n\t\t"; ss <<"))\n";
ss<<"fIny = 0;\n\telse \n\t"; ss <<" fIny = 0;\n";
#endif ss <<" else\n";
ss << " fIny = "<<vSubArguments[1]->GenSlidingWindowDeclRef(); #endif
ss << " ;\n\t"; ss << " fIny = "<<vSubArguments[1]->GenSlidingWindowDeclRef();
ss << " double fValX = fInx;\n\t"; ss << " ;\n";
ss << " double fValY = fIny;\n\t"; ss << " fSumX += fInx;\n";
ss << " fSumX += fValX;\n\t"; ss << " fSumY += fIny;\n";
ss << " fSumY += fValY;\n\t"; ss << " fCount = fCount + 1;\n";
ss << " fCount = fCount + 1;\n\t"; ss << " }\n";
ss << "}\n\t"; ss << " double fMeanX = fSumX / fCount;\n";
ss << "const double fMeanX = fSumX / fCount;\n\t"; ss << " double fMeanY = fSumY / fCount;\n";
ss << "const double fMeanY = fSumY / fCount;\n\t"; ss << " fSumX = 0.0;\n";
ss << "for(int i=0; i<"<<CurWindowSize<<"; i++)\n\t"; ss << " fSumY = 0.0;\n";
ss << "{\n\t"; ss << " for(int i=0; i<"<<CurWindowSize<<"; i++)\n";
ss << " fInx = "<<vSubArguments[0]->GenSlidingWindowDeclRef(); ss << " {\n";
ss << " ;\n\t"; ss << " fInx = "<<vSubArguments[0]->GenSlidingWindowDeclRef();
ss << " fIny = "<<vSubArguments[1]->GenSlidingWindowDeclRef(); ss << " ;\n";
ss << " ;\n\t"; ss << " fIny = "<<vSubArguments[1]->GenSlidingWindowDeclRef();
ss << " const double fValX = fInx;\n\t"; ss << " ;\n";
ss << " const double fValY = fIny;\n\t"; ss << " fSumDeltaXDeltaY += (fInx - fMeanX) * (fIny - fMeanY);\n";
ss << " fSumDeltaXDeltaY += (fValX - fMeanX) * (fValY - fMeanY);\n\t"; ss << " fSumX += pow(fInx - fMeanX,2);\n";
ss << " fSumSqrDeltaX += (fValX - fMeanX) * (fValX - fMeanX);\n\t"; ss << " fSumY += pow(fIny - fMeanY,2);\n";
ss << " fSumSqrDeltaY += (fValY - fMeanY) * (fValY - fMeanY);\n\t"; ss << " }\n";
ss << "}\n\t"; ss << " double tmp = ( fSumDeltaXDeltaY / ";
ss << "double tmp = ( fSumDeltaXDeltaY / "; ss << "sqrt( fSumX * fSumY));\n\t";
ss << "sqrt( fSumSqrDeltaX * fSumSqrDeltaY));\n\t"; ss << " return tmp;\n";
ss << "return tmp;\n";
ss << "}\n"; ss << "}\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