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

GPU Calc: Optimized NPV

AMLOEXT-263

Change-Id: Ifb2359a42329d48d14a26a2aeefae8e3b1122932
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 de9248a8
......@@ -2526,124 +2526,129 @@ void OpPMT::GenSlidingWindowFunction(std::stringstream &ss,
ss << "return tmp;\n";
ss << "}";
}
void OpNPV::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";
ss << " double tmp = 0;\n";
ss << " int gid0 = get_global_id(0);\n";
ss << " int nCount = 1;\n";
size_t nItems = 0;
ss << " double arg0=";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
//while (i-- > 1)
for (size_t i = 1; 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()) {
void OpNPV::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";
ss << " double tmp = 0.0;\n";
ss << " int gid0 = get_global_id(0);\n";
ss << " int nCount = 1;\n";
ss << " double arg0=";
ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
ss <<";\n";
//while (i-- > 1)
for (size_t i = 1; 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";
ss << "gid0; i < " << pDVR->GetArrayLength();
ss << " && i < " << nCurWindowSize << "; i++){\n";
#else
ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
ss << "gid0; i < "<< nCurWindowSize << "; i++)\n";
#endif
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
} else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) {
#ifdef ISNAN
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
ss << "0; i < " << pDVR->GetArrayLength();
ss << " && i < gid0+"<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n";
#endif
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
} else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()){
#ifdef ISNAN
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
ss << "0; i + gid0 < " << pDVR->GetArrayLength();
ss << " && i < "<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif
}
else {
}
else {
#ifdef ISNAN
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
ss << "0; i < "<< nCurWindowSize << "; i++){\n";
#else
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
ss << "0; i < "<< nCurWindowSize << "; i++)\n";
#endif
}
nItems += nCurWindowSize;
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
}
}
else if (pCur->GetType() == formula::svSingleVectorRef)
{
#ifdef ISNAN
const formula::SingleVectorRefToken* pSVR =
dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
const formula::SingleVectorRefToken* pSVR =
dynamic_cast< const formula::SingleVectorRefToken* >(pCur);
ss << " if (gid0 < " << pSVR->GetArrayLength() << "){\n";
#else
nItems += 1;
#endif
}
else if (pCur->GetType() == formula::svDouble)
{
}
else if (pCur->GetType() == formula::svDouble)
{
#ifdef ISNAN
ss << "{\n";
ss << "{\n";
#endif
nItems += 1;
}
else
{
}
else
{
#ifdef ISNAN
ss << "nCount += 1;\n";
ss << "nCount += 1;\n";
#endif
nItems += 1;
}
}
#ifdef ISNAN
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " if (isNan(";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ")){\n";
ss << " tmp += 0;}\n";
ss << " else{\n";
ss << " tmp +="<<vSubArguments[i]
->GenSlidingWindowDeclRef();
ss <<" / pow(1.0f+ arg0 ,";
ss <<" (double)nCount );\n";
ss << " nCount += 1;\n";
ss << " }\n";
ss << " }\n";
}
else
{
ss << " tmp +="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<" / pow(1.0f+ arg0 ,";
ss <<" (double)nCount );\n";
ss << " nCount += 1;\n";
}
if(ocPush==vSubArguments[i]->GetFormulaToken()->GetOpCode())
{
ss << " double temp=";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " double temp1=1.0;";
ss << " if (isNan(temp)){\n";
ss << " tmp += 0;}\n";
ss << " else{\n";
ss << " for(int i=1;i<nCount;i+=2)\n";
ss << " temp1*=pow(1.0f+ arg0 ,2);\n";
ss << " if(nCount%2)\n";
ss << " temp1*=1.0f+ arg0;\n";
ss << " tmp +=temp/ temp1;\n";
ss << " nCount += 1;\n";
ss << " }\n";
ss << " }\n";
}
else
{
ss << " double temp=";
ss << vSubArguments[i]->GenSlidingWindowDeclRef();
ss << ";\n";
ss << " double temp1=1.0;";
ss << " for(int i=1;i<nCount;i+=2)";
ss << " temp1*=pow(1.0f+ arg0 ,2);\n";
ss << " if(nCount%2)";
ss << " temp1*=1.0f+ arg0;\n";
ss << " tmp +=temp/ temp1;\n";
ss << " nCount += 1;\n";
}
#else
ss << "tmp +="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<" / pow(1.0f+ arg0 ,";
ss <<" (double)nCount );\n";
ss << " nCount += 1;\n";
#endif
}
ss << " return tmp;\n";
ss << "}";
}
ss << "tmp +="<<vSubArguments[i]->GenSlidingWindowDeclRef();
ss <<" / pow(1.0f+ arg0 ,";
ss <<" (double)nCount );\n";
ss << " nCount += 1;\n";
#endif
}
ss << " return tmp;\n";
ss << "}";
}
void OpPrice::BinInlineFun(std::set<std::string>& decls,
std::set<std::string>& funs)
{
......
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