Kaydet (Commit) 2e348a2e authored tarafından yiming ju's avatar yiming ju Kaydeden (comit) I-Jui (Ray) Sung

GPU Calc: implemented SUMX2PY2

AMLOEXT-200 FIX

Change-Id: I61ec2c11db0bd9bce4a0b32cf266ab39d5439a08
Signed-off-by: 's avatarhaochen <haochen@multicorewareinc.com>
Signed-off-by: 's avatarI-Jui (Ray) Sung <ray@multicorewareinc.com>
üst 67e2b033
......@@ -1481,6 +1481,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(
mvSubArguments.push_back(SoPHelper(ts,
ft->Children[i],new OpSumX2MY2));
break;
case ocSumX2DY2:
mvSubArguments.push_back(SoPHelper(ts,
ft->Children[i],new OpSumX2PY2));
break;
case ocExternal:
if ( !(pChild->GetExternal().compareTo(OUString(
"com.sun.star.sheet.addin.Analysis.getEffect"))))
......
......@@ -79,6 +79,62 @@ void OpSumX2MY2::GenSlidingWindowFunction(std::stringstream &ss,
ss << "}";
}
void OpSumX2PY2::GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments)
{
ss << "\ndouble " << sSymName;
ss << "_"<< BinFuncName() <<"(";
for (unsigned i = 0; i < vSubArguments.size(); i++)
{
if (i)
ss << ",";
vSubArguments[i]->GenSlidingWindowDecl(ss);
}
ss << ")\n {\n";
ss << " int gid0=get_global_id(0);\n";
ss << " double tmp =0;\n";
GenTmpVariables(ss,vSubArguments);
if(vSubArguments[0]->GetFormulaToken()->GetType() ==
formula::svDoubleVectorRef)
{
FormulaToken *tmpCur = vSubArguments[0]->GetFormulaToken();
const formula::DoubleVectorRefToken*pCurDVR= dynamic_cast<const
formula::DoubleVectorRefToken *>(tmpCur);
size_t nCurWindowSize = pCurDVR->GetArrayLength() <
pCurDVR->GetRefRowSize() ? pCurDVR->GetArrayLength():
pCurDVR->GetRefRowSize() ;
ss << " int i ;\n";
ss << " for (i = ";
if (!pCurDVR->IsStartFixed() && pCurDVR->IsEndFixed()) {
ss << "gid0; i < "<< nCurWindowSize <<"; i++)\n";
} else if (pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed()) {
ss << "0; i < gid0+"<< nCurWindowSize <<"; i++)\n";
} else {
ss << "0; i < "<< nCurWindowSize <<"; i++)\n";
}
ss << " {\n";
if(!pCurDVR->IsStartFixed() && !pCurDVR->IsEndFixed())
{
ss << " int doubleIndex =i+gid0;\n";
}else
{
ss << " int doubleIndex =i;\n";
}
CheckSubArgumentIsNan(ss,vSubArguments,0);
CheckSubArgumentIsNan(ss,vSubArguments,1);
ss << " tmp +=pow(tmp0,2) + pow(tmp1,2);\n";
ss <<" }\n";
}
else
{
ss << " int singleIndex =gid0;\n";
CheckAllSubArgumentIsNan(ss, vSubArguments);
ss << " tmp = pow(tmp0,2) + pow(tmp1,2);\n";
}
ss << " return tmp;\n";
ss << "}";
}
}}
......
......@@ -22,6 +22,14 @@ public:
virtual std::string BinFuncName(void) const { return "SumX2MY2"; }
};
class OpSumX2PY2: public CheckVariables
{
public:
virtual void GenSlidingWindowFunction(std::stringstream &ss,
const std::string sSymName, SubArguments &vSubArguments);
virtual std::string BinFuncName(void) const { return "SumX2PY2"; }
};
}}
#endif
......
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