reduce opencl copy&paste (gaussinv)

Change-Id: I44e5c74c903bab46a54b5b855f2665d924ac91fb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140225
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
This commit is contained in:
Luboš Luňák
2022-09-20 17:53:47 +02:00
parent 7dc92d6016
commit 68ae079807
3 changed files with 53 additions and 492 deletions
+42 -481
View File
@@ -1089,6 +1089,13 @@ void OpPhi::GenSlidingWindowFunction(
ss << "}\n";
}
void OpNorminv::BinInlineFun(std::set<std::string>& decls,
std::set<std::string>& funs)
{
decls.insert(gaussinvDecl);
funs.insert(gaussinv);
}
void OpNorminv::GenSlidingWindowFunction(
outputstream &ss,const std::string &sSymName,
SubArguments &vSubArguments)
@@ -1096,168 +1103,25 @@ void OpNorminv::GenSlidingWindowFunction(
CHECK_PARAMETER_COUNT( 3, 3 );
GenerateFunctionDeclaration( sSymName, vSubArguments, ss );
ss << "{\n";
ss <<" double q,t,z;\n";
ss << " int gid0=get_global_id(0);\n";
GenerateArg( "x", 0, vSubArguments, ss );
GenerateArg( "mue", 1, vSubArguments, ss );
GenerateArg( "sigma", 2, vSubArguments, ss );
ss <<" q = x -0.5;\n";
ss <<" if(fabs(q)<=.425)\n";
ss <<" {\n";
ss <<" t=0.180625-pow(q,2);\n";
ss <<" z=\n"
"q*\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2509.0809287301226727";
ss <<"+33430.575583588128105\n"
")\n"
"*t+67265.770927008700853\n"
")\n"
"*t+45921.953931549871457\n"
")\n"
"*t+13731.693765509461125\n"
")\n"
"*t+1971.5909503065514427\n"
")\n"
"*t+133.14166789178437745\n"
")\n"
"*t+3.387132872796366608\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*5226.495278852854561";
ss <<"+28729.085735721942674\n"
")\n"
"*t+39307.89580009271061\n"
")\n"
"*t+21213.794301586595867\n"
")\n"
"*t+5394.1960214247511077\n"
")\n"
"*t+687.1870074920579083\n"
")\n"
"*t+42.313330701600911252\n"
")\n"
"*t+1.0\n"
");\n";
ss <<"}\nelse\n{\n";
ss <<" if(q>0)\nt=1-x;\n";
ss <<"else\nt=x;\n";
ss <<"t=sqrt(-log(t));\n";
ss <<"if(t<=5.0)\n{\n";
ss <<"t+=-1.6;\n";
ss <<"z=\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*7.7454501427834140764e-4";
ss <<"+0.0227238449892691845833\n"
")\n"
"*t+0.24178072517745061177\n"
")\n"
"*t+1.27045825245236838258\n"
")\n"
"*t+3.64784832476320460504\n"
")\n"
"*t+5.7694972214606914055\n"
")\n"
"*t+4.6303378461565452959\n"
")\n"
"*t+1.42343711074968357734\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*1.05075007164441684324e-9";
ss <<"+5.475938084995344946e-4\n"
")\n"
"*t+0.0151986665636164571966\n"
")\n"
"*t+0.14810397642748007459\n"
")\n"
"*t+0.68976733498510000455\n"
")\n"
"*t+1.6763848301838038494\n"
")\n"
"*t+2.05319162663775882187\n"
")\n"
"*t+1.0\n"
");\n}\n";
ss <<"else\n{\n";
ss <<"t+=-5.0;\n";
ss <<"z=\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2.01033439929228813265e-7";
ss<<"+2.71155556874348757815e-5\n"
")\n"
"*t+0.0012426609473880784386\n"
")\n"
"*t+0.026532189526576123093\n"
")\n"
"*t+0.29656057182850489123\n"
")\n"
"*t+1.7848265399172913358\n"
")\n"
"*t+5.4637849111641143699\n"
")\n"
"*t+6.6579046435011037772\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2.04426310338993978564e-15"
"+1.4215117583164458887e-7\n"
")\n"
"*t+1.8463183175100546818e-5\n"
")\n"
"*t+7.868691311456132591e-4\n"
")\n"
"*t+0.0148753612908506148525\n"
")\n"
"*t+0.13692988092273580531\n"
")\n"
"*t+0.59983220655588793769\n"
")\n"
"*t+1.0\n"
");\n";
ss<<"}\n";
ss << "z = q < 0.0 ? (-1)*z : z;\n";
ss<<"}\n";
ss<<"double tmp = z*sigma + mue;\n";
ss<<"return tmp;\n";
ss<<"}\n";
ss << " if (sigma <= 0.0 || x < 0.0 || x > 1.0)\n";
ss << " return CreateDoubleError(IllegalArgument);\n";
ss << " else if (x == 0.0 || x == 1.0)\n";
ss << " return CreateDoubleError(NoValue);\n";
ss << " return gaussinv(x)*sigma + mue;\n";
ss << "}\n";
}
void OpNormsinv::BinInlineFun(std::set<std::string>& decls,
std::set<std::string>& funs)
{
decls.insert(gaussinvDecl);
funs.insert(gaussinv);
}
void OpNormsinv:: GenSlidingWindowFunction
(outputstream &ss,const std::string &sSymName,
SubArguments &vSubArguments)
@@ -1265,168 +1129,16 @@ void OpNormsinv:: GenSlidingWindowFunction
CHECK_PARAMETER_COUNT( 1, 1 );
GenerateFunctionDeclaration( sSymName, vSubArguments, ss );
ss << "{\n";
ss << " double q,t,z;\n";
ss << " int gid0=get_global_id(0);\n";
GenerateArg( "x", 0, vSubArguments, ss );
ss <<" q = x -0.5;\n";
ss <<" if(fabs(q)<=.425)\n";
ss <<" {\n";
ss <<" t=0.180625-pow(q,2);\n";
ss <<" z=\n"
"q*\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2509.0809287301226727";
ss <<"+33430.575583588128105\n"
")\n"
"*t+67265.770927008700853\n"
")\n"
"*t+45921.953931549871457\n"
")\n"
"*t+13731.693765509461125\n"
")\n"
"*t+1971.5909503065514427\n"
")\n"
"*t+133.14166789178437745\n"
")\n"
"*t+3.387132872796366608\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*5226.495278852854561";
ss <<"+28729.085735721942674\n"
")\n"
"*t+39307.89580009271061\n"
")\n"
"*t+21213.794301586595867\n"
")\n"
"*t+5394.1960214247511077\n"
")\n"
"*t+687.1870074920579083\n"
")\n"
"*t+42.313330701600911252\n"
")\n"
"*t+1.0\n"
");\n";
ss <<"}\nelse\n{\n";
ss <<" if(q>0)\nt=1-x;\n";
ss <<"else\nt=x;\n";
ss <<"t=sqrt(-log(t));\n";
ss <<"if(t<=5.0)\n{\n";
ss <<"t+=-1.6;\n";
ss <<"z=\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*7.7454501427834140764e-4";
ss <<"+0.0227238449892691845833\n"
")\n"
"*t+0.24178072517745061177\n"
")\n"
"*t+1.27045825245236838258\n"
")\n"
"*t+3.64784832476320460504\n"
")\n"
"*t+5.7694972214606914055\n"
")\n"
"*t+4.6303378461565452959\n"
")\n"
"*t+1.42343711074968357734\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*1.05075007164441684324e-9";
ss <<"+5.475938084995344946e-4\n"
")\n"
"*t+0.0151986665636164571966\n"
")\n"
"*t+0.14810397642748007459\n"
")\n"
"*t+0.68976733498510000455\n"
")\n"
"*t+1.6763848301838038494\n"
")\n"
"*t+2.05319162663775882187\n"
")\n"
"*t+1.0\n"
");\n}\n";
ss <<"else\n{\n";
ss <<"t+=-5.0;\n";
ss <<"z=\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2.01033439929228813265e-7";
ss <<"+2.71155556874348757815e-5\n"
")\n"
"*t+0.0012426609473880784386\n"
")\n"
"*t+0.026532189526576123093\n"
")\n"
"*t+0.29656057182850489123\n"
")\n"
"*t+1.7848265399172913358\n"
")\n"
"*t+5.4637849111641143699\n"
")\n"
"*t+6.6579046435011037772\n"
")\n"
"/\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"(\n"
"t*2.04426310338993978564e-15"
"+1.4215117583164458887e-7\n"
")\n"
"*t+1.8463183175100546818e-5\n"
")\n"
"*t+7.868691311456132591e-4\n"
")\n"
"*t+0.0148753612908506148525\n"
")\n"
"*t+0.13692988092273580531\n"
")\n"
"*t+0.59983220655588793769\n"
")\n"
"*t+1.0\n"
");\n";
ss <<"}\n";
ss << "z = q < 0.0 ? (-1)*z : z;\n";
ss <<"}\n";
ss <<"if (isnan(z))\n";
ss <<" return CreateDoubleError(NoValue);\n";
ss <<"return z;\n";
ss <<"}\n";
ss << " if (x < 0.0 || x > 1.0)\n";
ss << " return CreateDoubleError(IllegalArgument);\n";
ss << " else if (x == 0.0 || x == 1.0)\n";
ss << " return CreateDoubleError(NoValue);\n";
ss << " return gaussinv(x);\n";
ss << "}\n";
}
void OpMedian::GenSlidingWindowFunction(
outputstream &ss, const std::string &sSymName,
SubArguments &vSubArguments)
@@ -1526,6 +1238,13 @@ void OpKurt:: GenSlidingWindowFunction(outputstream &ss,
ss << "}";
}
void OpLogInv::BinInlineFun(std::set<std::string>& decls,
std::set<std::string>& funs)
{
decls.insert(gaussinvDecl);
funs.insert(gaussinv);
}
void OpLogInv:: GenSlidingWindowFunction(outputstream &ss,
const std::string &sSymName, SubArguments &vSubArguments)
{
@@ -1534,170 +1253,12 @@ void OpLogInv:: GenSlidingWindowFunction(outputstream &ss,
ss << "{\n";
ss << " int gid0=get_global_id(0);\n";
ss << " double tmp;\n";
GenerateArg( 0, vSubArguments, ss );
GenerateArgWithDefault( "arg1", 1, 0, vSubArguments, ss );
GenerateArgWithDefault( "arg2", 2, 1, vSubArguments, ss );
ss<< " double q,t,z;\n";
ss<< " q = arg0 -0.5;\n";
ss<< " if(fabs(q)<=.425)\n";
ss<< " {\n";
ss<< " t=0.180625-pow(q, 2);\n";
ss<< " z=\n"
" q*\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*2509.0809287301226727";
ss<<"+33430.575583588128105\n"
" )\n"
" *t+67265.770927008700853\n"
" )\n"
" *t+45921.953931549871457\n"
" )\n"
" *t+13731.693765509461125\n"
" )\n"
" *t+1971.5909503065514427\n"
" )\n"
" *t+133.14166789178437745\n"
" )\n"
" *t+3.387132872796366608\n"
" )\n"
" /\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*5226.495278852854561";
ss<<"+28729.085735721942674\n"
" )\n"
" *t+39307.89580009271061\n"
" )\n"
" *t+21213.794301586595867\n"
" )\n"
" *t+5394.1960214247511077\n"
" )\n"
" *t+687.1870074920579083\n"
" )\n"
" *t+42.313330701600911252\n"
" )\n"
" *t+1.0\n"
" );\n";
ss<<" }\n";
ss<<" else\n";
ss<<" {\n";
ss<<" t = q > 0 ? 1 - arg0 : arg0;\n";
ss<<" t=sqrt(-log(t));\n";
ss<<" if(t<=5.0)\n";
ss<<" {\n";
ss<<" t+=-1.6;\n";
ss<<" z=\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*7.7454501427834140764e-4";
ss<<"+0.0227238449892691845833\n"
" )\n"
" *t+0.24178072517745061177\n"
" )\n"
" *t+1.27045825245236838258\n"
" )\n"
" *t+3.64784832476320460504\n"
" )\n"
" *t+5.7694972214606914055\n"
" )\n"
" *t+4.6303378461565452959\n"
" )\n"
" *t+1.42343711074968357734\n"
" )\n"
" /\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*1.05075007164441684324e-9";
ss<<"+5.475938084995344946e-4\n"
" )\n"
" *t+0.0151986665636164571966\n"
" )\n"
" *t+0.14810397642748007459\n"
" )\n"
" *t+0.68976733498510000455\n"
" )\n"
" *t+1.6763848301838038494\n"
" )\n"
" *t+2.05319162663775882187\n"
" )\n"
" *t+1.0\n"
" );\n";
ss<<" }\n";
ss<<" else\n";
ss<<" {\n";
ss<<" t+=-5.0;\n";
ss<<" z=\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*2.01033439929228813265e-7";
ss<<"+2.71155556874348757815e-5\n"
" )\n"
" *t+0.0012426609473880784386\n"
" )\n"
" *t+0.026532189526576123093\n"
" )\n"
" *t+0.29656057182850489123\n"
" )\n"
" *t+1.7848265399172913358\n"
" )\n"
" *t+5.4637849111641143699\n"
" )\n"
" *t+6.6579046435011037772\n"
" )\n"
" /\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" t*2.04426310338993978564e-15"
" +1.4215117583164458887e-7\n"
" )\n"
" *t+1.8463183175100546818e-5\n"
" )\n"
" *t+7.868691311456132591e-4\n"
" )\n"
" *t+0.0148753612908506148525\n"
" )\n"
" *t+0.13692988092273580531\n"
" )\n"
" *t+0.59983220655588793769\n"
" )\n"
" *t+1.0\n"
" );\n";
ss << " }\n";
ss << " z = q < 0.0 ? (-1)*z : z;\n";
ss << " }\n";
ss << " tmp = exp(arg1+arg2*z);\n";
ss << " return tmp;\n";
GenerateArg( "x", 0, vSubArguments, ss );
GenerateArgWithDefault( "mue", 1, 0, vSubArguments, ss );
GenerateArgWithDefault( "sigma", 2, 1, vSubArguments, ss );
ss << " if ( sigma <= 0.0 || x <= 0.0 || x >= 1.0 )\n";
ss << " return CreateDoubleError(IllegalArgument);\n";
ss << " return exp(mue+sigma*gaussinv(x));\n";
ss << "}\n";
}
+5 -2
View File
@@ -214,13 +214,15 @@ class OpNorminv:public Normal{
public:
virtual void GenSlidingWindowFunction(outputstream &ss,
const std::string &sSymName, SubArguments &vSubArguments) override;
virtual std::string BinFuncName() const override { return "OpNorminv"; }
virtual std::string BinFuncName() const override { return "OpNorminv"; }
virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) override;
};
class OpNormsinv:public Normal{
public:
virtual void GenSlidingWindowFunction(outputstream &ss,
const std::string &sSymName, SubArguments &vSubArguments) override;
virtual std::string BinFuncName() const override { return "OpNormsinv"; }
virtual std::string BinFuncName() const override { return "OpNormsinv"; }
virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) override;
};
class OpPhi:public Normal{
public:
@@ -268,6 +270,7 @@ public:
virtual void GenSlidingWindowFunction(outputstream &ss,
const std::string &sSymName, SubArguments &vSubArguments) override;
virtual std::string BinFuncName() const override { return "LogInv"; }
virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) override;
};
class OpCritBinom: public Normal
{
@@ -745,7 +745,7 @@ const char gaussinv[] =
" )\n"
" *t+3.387132872796366608\n"
" )\n"
" *pow\n"
" /\n"
" (\n"
" (\n"
" (\n"
@@ -765,8 +765,7 @@ const char gaussinv[] =
" )\n"
" *t+42.313330701600911252\n"
" )\n"
" *t+1.0\n"
" , -1.0);\n"
" *t+1.0);\n"
" }\n"
" else\n"
" {\n"
@@ -798,7 +797,7 @@ const char gaussinv[] =
" )\n"
" *t+1.42343711074968357734\n"
" )\n"
" *pow\n"
" /\n"
" (\n"
" (\n"
" (\n"
@@ -818,8 +817,7 @@ const char gaussinv[] =
" )\n"
" *t+2.05319162663775882187\n"
" )\n"
" *t+1.0\n"
" , -1.0);\n"
" *t+1.0);\n"
" }\n"
" else\n"
" {\n"
@@ -846,7 +844,7 @@ const char gaussinv[] =
" )\n"
" *t+6.6579046435011037772\n"
" )\n"
" *pow\n"
" /\n"
" (\n"
" (\n"
" (\n"
@@ -866,8 +864,7 @@ const char gaussinv[] =
" )\n"
" *t+0.59983220655588793769\n"
" )\n"
" *t+1.0\n"
" , -1.0);\n"
" *t+1.0);\n"
" }\n"
" if(q<0.0) z=-z;\n"
" }\n"