diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2022-09-20 18:08:31 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-09-21 10:23:36 +0200 |
commit | 380b42bd1b8be39d774245f93651515b45df150b (patch) | |
tree | ac279fcfb50e86baa3e1012ae4b8cf05d1039c80 | |
parent | ab561d74375576efbc1629ae4f169c8e02f5fee0 (diff) |
fix and enable some disabled opencl functions
Change-Id: Ic7bd01edcc7297317b390567590821ce00e5ef22
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140254
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 64 | ||||
-rw-r--r-- | sc/source/core/opencl/op_statistical.cxx | 52 |
2 files changed, 59 insertions, 57 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 75485b47dc21..af81125e9c99 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -2523,10 +2523,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpLogNormDist>(), nResultSize)); break; - /*case ocGammaDist: + case ocGammaDist: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i], std::make_shared<OpGammaDist)); - break;*/ + ft->Children[i], std::make_shared<OpGammaDist>(), nResultSize)); + break; case ocLn: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpLn>(), nResultSize)); @@ -2551,10 +2551,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpVar>(), nResultSize)); break; - /*case ocChiDist: + case ocChiDist: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i],std::make_shared<OpChiDist)); - break;*/ + ft->Children[i],std::make_shared<OpChiDist>(), nResultSize)); + break; case ocPow: case ocPower: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, @@ -2564,26 +2564,26 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpOdd>(), nResultSize)); break; - /*case ocChiSqDist: + case ocChiSqDist: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i],std::make_shared<OpChiSqDist)); + ft->Children[i],std::make_shared<OpChiSqDist>(), nResultSize)); break; case ocChiSqInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i],std::make_shared<OpChiSqInv)); + ft->Children[i],std::make_shared<OpChiSqInv>(), nResultSize)); break; case ocGammaInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i], std::make_shared<OpGammaInv)); - break;*/ + ft->Children[i], std::make_shared<OpGammaInv>(), nResultSize)); + break; case ocFloor: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpFloor>(), nResultSize)); break; - /*case ocFInv: + case ocFInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i], std::make_shared<OpFInv)); - break;*/ + ft->Children[i], std::make_shared<OpFInv>(), nResultSize)); + break; case ocFTest: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpFTest>(), nResultSize)); @@ -2664,10 +2664,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpBitXor>(), nResultSize)); break; - /*case ocChiInv: + case ocChiInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i],std::make_shared<OpChiInv)); - break;*/ + ft->Children[i],std::make_shared<OpChiInv>(), nResultSize)); + break; case ocPoissonDist: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpPoisson>(), nResultSize)); @@ -2742,10 +2742,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpSumX2PY2>(), nResultSize)); break; - /*case ocBetaInv: + case ocBetaInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i],std::make_shared<OpBetainv)); - break;*/ + ft->Children[i],std::make_shared<OpBetainv>(), nResultSize)); + break; case ocTTest: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpTTest>(), nResultSize)); @@ -2754,10 +2754,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpTDist>(), nResultSize)); break; - /*case ocTInv: + case ocTInv: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, - ft->Children[i], std::make_shared<OpTInv)); - break;*/ + ft->Children[i], std::make_shared<OpTInv>(), nResultSize)); + break; case ocSumXMY2: mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpSumXMY2>(), nResultSize)); @@ -2915,10 +2915,10 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, { mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpFvschedule>(), nResultSize)); } - /*else if ( pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getYield") + else if ( pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getYield") { - mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpYield)); - }*/ + mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpYield>(), nResultSize)); + } else if (pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getYielddisc") { mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpYielddisc>(), nResultSize)); @@ -2969,16 +2969,16 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpCoupnum>(), nResultSize)); } - /*else if pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getDuration")) + else if (pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getDuration") { mvSubArguments.push_back( - SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpDuration_ADD)); - }*/ - /*else if (pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getAmordegrc") + SoPHelper(mCalcConfig, ts, ft->Children[i], std::make_shared<OpDuration_ADD>(), nResultSize)); + } + else if (pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getAmordegrc") { mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], - std::make_shared<OpAmordegrc, nResultSize)); - }*/ + std::make_shared<OpAmordegrc>(), nResultSize)); + } else if (pChild->GetExternal() == "com.sun.star.sheet.addin.Analysis.getAmorlinc") { mvSubArguments.push_back(SoPHelper(mCalcConfig, ts, ft->Children[i], diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx index 03e81c4dd034..1fbc80e2e00e 100644 --- a/sc/source/core/opencl/op_statistical.cxx +++ b/sc/source/core/opencl/op_statistical.cxx @@ -1010,12 +1010,16 @@ void OpPermut::GenSlidingWindowFunction( ss <<" double tmp = 1 ;\n"; GenerateArg( "inA", 0, vSubArguments, ss ); GenerateArg( "inB", 1, vSubArguments, ss ); - ss << " for( int i =0; i<inB; i++)\n"; - ss << " {\n"; + ss << " inA = floor( inA );\n"; + ss << " inB = floor( inB );\n"; + ss << " if (inA < 0.0 || inB < 0.0 || inB > inA)\n"; + ss << " return CreateDoubleError(IllegalArgument);\n"; + ss << " for( int i = 0; i<inB; i++)\n"; + ss << " {\n"; ss << " tmp *= inA ;\n"; ss << " inA = inA - 1.0;\n"; - ss << " }\n"; - ss << " return tmp;\n"; + ss << " }\n"; + ss << " return tmp;\n"; ss << "}\n"; } void OpPermutationA::GenSlidingWindowFunction( @@ -1029,11 +1033,11 @@ void OpPermutationA::GenSlidingWindowFunction( ss <<" double tmp = 1.0;\n"; GenerateArg( "inA", 0, vSubArguments, ss ); GenerateArg( "inB", 1, vSubArguments, ss ); - ss << " for(int i=0; i<inB; i++)\n"; - ss << " {\n"; - ss << " tmp *= inA;\n"; - ss << " }\n"; - ss << " return tmp;\n"; + ss << " inA = floor( inA );\n"; + ss << " inB = floor( inB );\n"; + ss << " if (inA < 0.0 || inB < 0.0)\n"; + ss << " return CreateDoubleError(IllegalArgument);\n"; + ss << " return pow(inA, inB);\n"; ss << "}\n"; } @@ -1275,6 +1279,8 @@ void OpGammaDist::GenSlidingWindowFunction(outputstream &ss, GenerateArg( 1, vSubArguments, ss ); GenerateArg( 2, vSubArguments, ss ); GenerateArgWithDefault( "arg3", 3, 1, vSubArguments, ss ); + ss << " if(arg1 <= 0 || arg2 <= 0)\n"; + ss << " return CreateDoubleError(IllegalArgument);\n"; ss << " double tmp;\n"; ss << " if (arg3)\n"; ss << " tmp=GetGammaDist( arg0, arg1, arg2);\n"; @@ -1306,7 +1312,7 @@ void OpChiDist::GenSlidingWindowFunction( CHECK_PARAMETER_COUNT( 2, 2 ); GenerateFunctionDeclaration( sSymName, vSubArguments, ss ); ss << "{\n"; - ss << " double fx,fDF,tmp=0,tmp0=0,tmp1=0;\n"; + ss << " double fx,fDF,tmp=0;\n"; ss << " int gid0=get_global_id(0);\n"; GenerateArg( "tmp0", 0, vSubArguments, ss ); GenerateArg( "tmp1", 1, vSubArguments, ss ); @@ -1651,12 +1657,12 @@ void OpFInv::GenSlidingWindowFunction(outputstream &ss, ss << "{\n"; ss << " int gid0=get_global_id(0);\n"; ss << " double tmp;\n"; + GenerateArg( 0, vSubArguments, ss ); GenerateArg( 1, vSubArguments, ss ); GenerateArg( 2, vSubArguments, ss ); - GenerateArg( 3, vSubArguments, ss ); ss << " double fF2=floor(arg2);\n" " double fF1=floor(arg1);\n" - " if( arg0 <= 0 || arg1 < 1 || arg2 < 1 || arg1 >= 1.0e10 || arg2 >= 1.0e10 || arg > 1 )\n" + " if( arg0 <= 0 || arg1 < 1 || arg2 < 1 || arg1 >= 1.0e10 || arg2 >= 1.0e10 || arg0 > 1 )\n" " return CreateDoubleError(IllegalArgument);\n" " double fAx=fF1*0.5;\n" " double fBx=fF1;\n" @@ -1938,6 +1944,8 @@ void OpPoisson::GenSlidingWindowFunction( GenerateArg( "lambda", 1, vSubArguments, ss ); GenerateArgWithDefault( "bCumulative", 2, 1, vSubArguments, ss ); ss << " x = floor(x);\n"; + ss << " if (lambda <= 0.0 || x < 0.0)\n"; + ss << " return CreateDoubleError(IllegalArgument);\n"; ss << " if (!bCumulative)\n"; ss << " {\n"; ss << " if(lambda == 0.0)\n"; @@ -2085,23 +2093,17 @@ void OpBetainv::GenSlidingWindowFunction( GenerateArg( "tmp2", 2, vSubArguments, ss ); GenerateArgWithDefault( "tmp3", 3, 0, vSubArguments, ss ); GenerateArgWithDefault( "tmp4", 4, 1, vSubArguments, ss ); - ss << " if (tmp0 < 0.0 || tmp0 >= 1.0 ||"; - ss << "tmp3 == tmp4 || tmp1 <= 0.0 || tmp2 <= 0.0)\n"; + ss << " if (tmp0 < 0.0 || tmp0 > 1.0 ||"; + ss << "tmp3 >= tmp4 || tmp1 <= 0.0 || tmp2 <= 0.0)\n"; ss << " {\n"; ss << " return CreateDoubleError(IllegalArgument);\n"; ss << " }\n"; - ss << " if (tmp0 == 0.0)\n"; - ss << " return 0.0;\n"; - ss << " else\n"; - ss << " {"; - ss << " bool bConvError;"; - ss << " double fVal = lcl_IterateInverseBetaInv"; + ss << " bool bConvError;\n"; + ss << " double fVal = lcl_IterateInverseBetaInv"; ss << "(tmp0, tmp1, tmp2, 0.0, 1.0, &bConvError);\n"; - ss << " if(bConvError)\n"; - ss << " return CreateDoubleError(NoConvergence);\n"; - ss << " else\n"; - ss << " return (tmp3 + fVal*(tmp4 - tmp3));\n"; - ss << " }"; + ss << " if(bConvError)\n"; + ss << " return CreateDoubleError(NoConvergence);\n"; + ss << " return (tmp3 + fVal*(tmp4 - tmp3));\n"; ss << "}\n"; } void OpDevSq::GenSlidingWindowFunction(outputstream& ss, |