diff options
author | shiming zhang <shiming@multicorewareinc.com> | 2013-12-06 13:35:32 +0800 |
---|---|---|
committer | I-Jui (Ray) Sung <ray@multicorewareinc.com> | 2013-12-19 17:54:06 -0600 |
commit | 18397efd14ba7a06a92f0f11f0f9b603e6d30c05 (patch) | |
tree | cce1b0507b332b1f4b4165e8e0ee97bc62021ec5 | |
parent | 838653741c1c5f59725dbdcd0c0a833ebd1db7c9 (diff) |
GPU Calc: Optimized TEST
AMLOEXT-206
Change-Id: Ibde6be7d2fba7f96912924396e17cc21e4c00826
Signed-off-by: haochen <haochen@multicorewareinc.com>
Signed-off-by: I-Jui (Ray) Sung <ray@multicorewareinc.com>
-rw-r--r-- | sc/source/core/opencl/op_statistical.cxx | 122 | ||||
-rw-r--r-- | sc/source/core/opencl/op_statistical.hxx | 1 |
2 files changed, 62 insertions, 61 deletions
diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx index 9786682957c3..44d9cf3cbf10 100644 --- a/sc/source/core/opencl/op_statistical.cxx +++ b/sc/source/core/opencl/op_statistical.cxx @@ -255,7 +255,16 @@ void OpVar::GenSlidingWindowFunction(std::stringstream &ss, ss << " return vSum * pow(fCount - 1.0,-1.0);\n"; ss << "}\n"; } - +void OpZTest::BinInlineFun(std::set<std::string>& decls, + std::set<std::string>& funs) +{ + decls.insert(phiDecl); + funs.insert(phi); + decls.insert(taylorDecl); + funs.insert(taylor); + decls.insert(gaussDecl); + funs.insert(gauss); +} void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments) { @@ -269,13 +278,13 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, } ss << "){\n"; ss << " int gid0 = get_global_id(0);\n"; - ss << " double fSum=0.0;\n"; - ss << " double fSumSqr=0.0;\n"; - ss << " double mue=0.0;\n"; - ss << " double fCount=0.0;\n"; - ss << " double arg=0.0;\n"; - ss << " double sigma=0.0;\n"; - ss << " double mu=0.0;\n"; + ss << " double fSum = 0.0;\n"; + ss << " double fSumSqr = 0.0;\n"; + ss << " double mue = 0.0;\n"; + ss << " double fCount = 0.0;\n"; + ss << " double arg = 0.0;\n"; + ss << " double sigma = 0.0;\n"; + ss << " double mu = 0.0;\n"; if(vSubArguments.size() == 1 || vSubArguments.size() == 0) { ss << " return DBL_MAX;\n"; @@ -301,7 +310,7 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "gid0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "gid0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } @@ -309,10 +318,10 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, { #ifdef ISNAN ss << "0; i < " << pDVR->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << "0; i < gid0+" << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } @@ -320,20 +329,20 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, { #ifdef ISNAN ss << "0; i + gid0 < " << pDVR->GetArrayLength(); - ss << " && i < "<< nCurWindowSize << "; i++)\n"; + ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } else { #ifdef ISNAN - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << pDVR->GetArrayLength() << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << pDVR->GetArrayLength() << "; i++)\n"; ss << " {\n"; #endif } @@ -345,13 +354,14 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << " continue;\n"; #endif ss << " fSum += arg;\n"; - ss << " fSumSqr += arg*arg;\n"; - ss << " fCount += 1;\n"; + ss << " fSumSqr += arg * arg;\n"; + ss << " fCount += 1.0;\n"; ss << " }\n"; - ss << " if(fCount<=1.0)\n"; + ss << " if(fCount <= 1.0)\n"; ss << " return DBL_MAX;\n"; - ss << " mue=fSum/fCount;\n"; - ss << " sigma=(fSumSqr-fSum*fSum/fCount)/(fCount-1.0);\n"; + ss << " mue = fSum *pow(fCount,-1.0);\n"; + ss << " sigma = (fSumSqr-fSum*fSum*"; + ss << "pow(fCount,-1.0))*pow(fCount-1.0,-1.0);\n"; } else { @@ -359,25 +369,22 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - if(ocPush==vSubArguments[1]->GetFormulaToken()->GetOpCode()) + if(ocPush == vSubArguments[1]->GetFormulaToken()->GetOpCode()) { if(pCur1->GetType() == formula::svSingleVectorRef) { const formula::SingleVectorRefToken* pSVR = - dynamic_cast< const formula:: - SingleVectorRefToken* >(pCur1); + dynamic_cast<const formula::SingleVectorRefToken* >(pCur1); assert(pSVR); #ifdef ISNAN ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; ss << " {\n"; - ss << " if (isNan("; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << "))\n"; - ss << " mu=0.0;\n"; - ss << " else\n"; #endif - ss << " mu=" ; + ss << " mu = " ; ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; #ifdef ISNAN + ss << " if (isNan(mu))\n"; + ss << " mu = 0.0;\n"; ss << " }\n"; #endif @@ -395,11 +402,10 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, } else { - ss << " mu=" ; + ss << " mu = " ; ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; } - ss << " return 0.5-(0.5 *erfc(-((mue-mu)/sqrt(sigma/fCount))"; - ss << "* 0.7071067811865475)-0.5);\n"; + ss << " return 0.5 - gauss((mue-mu)/sqrt(sigma/fCount));\n"; ss << "}\n"; return ; } @@ -424,7 +430,7 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "gid0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "gid0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } @@ -432,10 +438,10 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, { #ifdef ISNAN ss << "0; i < " << pDVR->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << "0; i < gid0+" << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } @@ -443,20 +449,20 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, { #ifdef ISNAN ss << "0; i + gid0 < " << pDVR->GetArrayLength(); - ss << " && i < "<< nCurWindowSize << "; i++)\n"; + ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; #endif } else { #ifdef ISNAN - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << pDVR->GetArrayLength() << "; i++)\n"; ss << " {\n"; #else - ss << "0; i < "<< nCurWindowSize << "; i++)\n"; + ss << "0; i < " << pDVR->GetArrayLength() << "; i++)\n"; ss << " {\n"; #endif } @@ -467,12 +473,12 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << " continue;\n"; #endif ss << " fSum += arg;\n"; - ss << " fSumSqr += arg*arg;\n"; - ss << " fCount += 1;\n"; + ss << " fSumSqr += arg * arg;\n"; + ss << " fCount += 1.0;\n"; ss << " }\n"; - ss << " if(fCount<=1.0)\n"; + ss << " if(fCount <= 1.0)\n"; ss << " return DBL_MAX;\n"; - ss << " mue=fSum/fCount;\n"; + ss << " mue = fSum * pow(fCount,-1.0);\n"; } else { @@ -480,25 +486,22 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - if(ocPush==vSubArguments[1]->GetFormulaToken()->GetOpCode()) + if(ocPush == vSubArguments[1]->GetFormulaToken()->GetOpCode()) { if(pCur1->GetType() == formula::svSingleVectorRef) { const formula::SingleVectorRefToken* pSVR1 = - dynamic_cast< const formula:: - SingleVectorRefToken* >(pCur1); + dynamic_cast<const formula::SingleVectorRefToken* >(pCur1); assert(pSVR1); #ifdef ISNAN ss << " if (gid0 < " << pSVR1->GetArrayLength() << ")\n"; ss << " {\n"; - ss << " if (isNan("; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << "))\n"; - ss << " mu=0.0;\n"; - ss << " else\n"; #endif - ss << " mu=" ; + ss << " mu = " ; ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; #ifdef ISNAN + ss << " if (isNan(mu))\n"; + ss << " mu = 0.0;\n"; ss << " }\n"; #endif } @@ -518,25 +521,22 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, ss << " mu=" ; ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; } - if(ocPush==vSubArguments[2]->GetFormulaToken()->GetOpCode()) + if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) { if(pCur2->GetType() == formula::svSingleVectorRef) { const formula::SingleVectorRefToken* pSVR2 = - dynamic_cast< const formula:: - SingleVectorRefToken* >(pCur2); + dynamic_cast<const formula::SingleVectorRefToken* >(pCur2); assert(pSVR2); #ifdef ISNAN ss << " if (gid0 < " << pSVR2->GetArrayLength() << ")\n"; ss << " {\n"; - ss << " if (isNan("; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << "))\n"; - ss << " sigma=0.0;\n"; - ss << " else\n"; #endif - ss << " sigma=" ; + ss << " sigma = " ; ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; #ifdef ISNAN + ss << " if (isNan(sigma))\n"; + ss << " sigma = 0.0;\n"; ss << " }\n"; #endif } @@ -553,14 +553,14 @@ void OpZTest::GenSlidingWindowFunction(std::stringstream &ss, } else { - ss << " sigma=" ; + ss << " sigma = " ; ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; } - ss << " return 0.5-(0.5 *erfc(-((mue-mu)*sqrt(fCount)/sigma)"; - ss << " * 0.7071067811865475)-0.5);\n"; + ss << " return 0.5 - gauss((mue-mu)*sqrt(fCount)/sigma);\n"; ss << "}\n"; } } + void OpTTest::BinInlineFun(std::set<std::string>& decls, std::set<std::string>& funs) { diff --git a/sc/source/core/opencl/op_statistical.hxx b/sc/source/core/opencl/op_statistical.hxx index 111141b24afb..cdbc86678f76 100644 --- a/sc/source/core/opencl/op_statistical.hxx +++ b/sc/source/core/opencl/op_statistical.hxx @@ -54,6 +54,7 @@ class OpZTest: public Normal public: virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string sSymName, SubArguments &vSubArguments); + virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&); virtual std::string BinFuncName(void) const { return "ZTest"; } }; class OpStDevP: public Normal |