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

GPU Calc:Fix the accuracy problem of 'Harmean'

AMLOEXT-366

Change-Id: Ic368b8301c4e80ad76e1d0b33b69bee6a87b9d89
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 436fe90d
......@@ -4381,11 +4381,7 @@ void OpHarMean::GenSlidingWindowFunction(
std::stringstream &ss, const std::string sSymName, SubArguments &
vSubArguments)
{
FormulaToken *pCur = vSubArguments[0]->GetFormulaToken();
assert(pCur);
const formula::DoubleVectorRefToken* pCurDVR =
dynamic_cast<const formula::DoubleVectorRefToken *>(pCur);
size_t nCurWindowSize = pCurDVR->GetRefRowSize();
ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"( ";
for (unsigned i = 0; i < vSubArguments.size(); i++)
......@@ -4394,23 +4390,27 @@ vSubArguments)
ss << ",";
vSubArguments[i]->GenSlidingWindowDecl(ss);
}
ss << ") {\n";
ss << ")\n";
ss <<"{\n";
ss << " int gid0 = get_global_id(0);\n";
ss << " double nVal=0.0;\n";
ss << " int length="<<nCurWindowSize<<";\n";
ss << " double tmp = 0;\n";
ss << " int length;\n";
ss << " int totallength=0;\n";
for (unsigned i = 0; i < vSubArguments.size(); i++)
{
pCur = vSubArguments[i]->GetFormulaToken();
FormulaToken *pCur = vSubArguments[i]->GetFormulaToken();
assert(pCur);
if (pCur->GetType() == formula::svDoubleVectorRef)
{
const formula::DoubleVectorRefToken* pDVR =
dynamic_cast<const formula::DoubleVectorRefToken *>(pCur);
nCurWindowSize = pDVR->GetRefRowSize();
size_t nCurWindowSize = pDVR->GetRefRowSize();
ss << " length="<<nCurWindowSize;
ss << ";\n";
ss << " for (int i = ";
#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
ss << " {\n";
ss << " double arg"<<i<<" = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
......@@ -4423,24 +4423,35 @@ vSubArguments)
ss << " continue;\n";
ss << " }\n";
#endif
ss << " nVal += pow(arg"<<i<<",-1);\n";
ss << " nVal += (1.0 *pow(";
ss << " arg"<<i<<",-1));\n";
ss << " }\n";
#endif
ss << " totallength +=length;\n";
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
#ifdef ISNAN
ss << "return HUGE_VAL";
ss << " double arg0 = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
#ifdef ISNAN
ss << " if(isNan(arg0))\n";
ss << " {\n";
ss << " continue;\n";
ss << " }\n";
#endif
ss << " nVal += (1.0 * pow( arg0,-1));\n";
ss << " totallength +=1;\n";
}
else if (pCur->GetType() == formula::svDouble)
{
#ifdef ISNAN
ss << "return HUGE_VAL";
#endif
ss << " double arg0 = ";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " nVal += (1.0 *pow( arg0,-1));\n";
ss << " totallength +=1;\n";
}
}
ss << " tmp = length/nVal;\n\t";
ss << " tmp = totallength*pow(nVal,-1);\n";
ss << " return tmp;\n";
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