sc/source/core/opencl/formulagroupcl.cxx | 22 ++++++++++++---------- sc/source/core/opencl/formulagroupcl_public.hxx | 6 +++++- 2 files changed, 17 insertions(+), 11 deletions(-)
New commits: commit 1f3c1592da05740e695ef3502ca8f3cb4cdaa62b Author: I-Jui (Ray) Sung <r...@multicorewareinc.com> Date: Tue Nov 19 22:53:42 2013 -0600 GPU Calc: optimize average() handling Change-Id: I2f9a813e15068867f218631e9ebadd3ea2c38c95 diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index dbefbf8..6e4df20 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -528,7 +528,6 @@ return nCurWindowSize; temp1 << "){\n\t\t"; temp1 << mpCodeGen->Gen2(GenSlidingWindowDeclRef(), "tmp"); temp1 << ";\n\t\t\t"; - temp1 << "nCount += 1;\n\t\t"; temp1 << "}\n\t"; } ss << temp1.str(); @@ -544,7 +543,6 @@ return nCurWindowSize; temp2 << "tmp = "; temp2 << mpCodeGen->Gen2(GenSlidingWindowDeclRef(), "tmp"); temp2 << ";\n\t\t\t"; - temp2 << "nCount += 1;\n\t\t"; temp2 << "}\n\t"; } ss << temp2.str(); @@ -568,7 +566,6 @@ return nCurWindowSize; temp1 << "tmp = "; temp1 << mpCodeGen->Gen2(GenSlidingWindowDeclRef(), "tmp"); temp1 << ";\n\t\t\t"; - temp1 << "nCount += 1;\n\t\t"; } ss << temp1.str(); } @@ -581,7 +578,6 @@ return nCurWindowSize; temp2 << "tmp = "; temp2 << mpCodeGen->Gen2(GenSlidingWindowDeclRef(), "tmp"); temp2 << ";\n\t\t\t"; - temp2 << "nCount += 1;\n\t\t"; } ss << temp2.str(); } @@ -847,7 +843,8 @@ public: ss << ") {\n\t"; ss << "double tmp = " << GetBottom() <<";\n\t"; ss << "int gid0 = get_global_id(0);\n\t"; - ss << "int nCount = 0;\n\t"; + if (isAverage()) + ss << "int nCount = 0;\n\t"; ss << "double tmpBottom;\n\t"; unsigned i = vSubArguments.size(); size_t nItems = 0; @@ -901,9 +898,6 @@ public: } else { -#ifdef ISNAN - ss << "nCount += 1;\n\t\t"; -#endif nItems += 1; } } @@ -920,7 +914,6 @@ public: ss << "tmp = "; ss << Gen2(vSubArguments[i]->GenSlidingWindowDeclRef(), "tmp"); ss << ";\n\t\t\t"; - ss << "nCount += 1;\n\t\t"; ss << "}\n\t"; ss << "}\n\t"; } @@ -1266,7 +1259,16 @@ public: virtual std::string BinFuncName(void) const { return "fsum"; } }; -class OpAverage: public OpSum { +class OpAverage: public Reduction { +public: + virtual std::string GetBottom(void) { return "0"; } + virtual std::string Gen2(const std::string &lhs, const std::string &rhs) const + { + std::stringstream ss; + ss << "fsum_count(" << lhs <<","<< rhs<<", &nCount)"; + return ss.str(); + } + virtual std::string BinFuncName(void) const { return "fsum"; } virtual bool isAverage() const { return true; } }; diff --git a/sc/source/core/opencl/formulagroupcl_public.hxx b/sc/source/core/opencl/formulagroupcl_public.hxx index ccee5e1..d001a06 100644 --- a/sc/source/core/opencl/formulagroupcl_public.hxx +++ b/sc/source/core/opencl/formulagroupcl_public.hxx @@ -12,7 +12,11 @@ const char* publicFunc = "int isNan(double a) { return a != a; }\n" - "double legalize(double a, double b) { return isNan(a)?b:a; }\n" + "double fsum_count(double a, double b, __private int *p) {\n" + " bool t = isNan(a);\n" + " (*p) += t?0:1;\n" + " return t?b:a+b;\n" + "}\n" "double fsum(double a, double b) { return isNan(a)?b:a+b; }\n" "double fsub(double a, double b) { return a-b; }\n" "double fdiv(double a, double b) { return a/b; }\n" _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits