summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2022-09-20 18:08:31 +0200
committerLuboš Luňák <l.lunak@collabora.com>2022-09-21 10:23:36 +0200
commit380b42bd1b8be39d774245f93651515b45df150b (patch)
treeac279fcfb50e86baa3e1012ae4b8cf05d1039c80
parentab561d74375576efbc1629ae4f169c8e02f5fee0 (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.cxx64
-rw-r--r--sc/source/core/opencl/op_statistical.cxx52
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,