20 UnhandledToken::UnhandledToken(
21 const char* m,
const std::string& fn,
int ln ) :
22 mMessage(m), mFile(fn), mLineNumber(ln) {}
25 mFunction(function), mError(error), mFile(file), mLineNumber(line)
35 mFile(fn), mLineNumber(ln) {}
38 mParameterCount(parameterCount), mFile(file), mLineNumber(ln) {}
42 mCalcConfig(config), mSymName(s), mFormulaTree(ft) { }
46 return std::string(
"");
52 return std::string(
"");
70 return std::string(
"");
101 err = clReleaseMemObject(
mpClmem);
109 ss <<
"__global double *" <<
mSymName;
121 std::stringstream ss;
139 dynamic_cast<const formula::DoubleVectorRefToken*>(pCur))
141 return pCurDVR->GetRefRowSize();
143 else if (dynamic_cast<const formula::SingleVectorRefToken*>(pCur))
156 return std::string(
"");
177 std::stringstream& ss,
const std::string& sSymName,
SubArguments& vSubArguments )
179 std::vector<std::string> argVector;
180 ss <<
"\ndouble " << sSymName;
182 for (
size_t i = 0;
i < vSubArguments.size();
i++)
186 vSubArguments[
i]->GenSlidingWindowDecl(ss);
187 argVector.push_back(vSubArguments[
i]->GenSlidingWindowDeclRef());
190 ss <<
"double tmp = " <<
GetBottom() <<
";\n\t";
191 ss <<
"int gid0 = get_global_id(0);\n\t";
193 ss <<
Gen(argVector);
195 ss <<
"return tmp;\n";
200 std::stringstream& ss,
const SubArguments& vSubArguments )
202 for (
size_t i = 0;
i < vSubArguments.size();
i++)
214 if (vSubArguments[i]->GetFormulaToken()->GetType() ==
219 ss <<
" if(singleIndex>=";
223 ss << vSubArguments[i]->GenSlidingWindowDeclRef(
true);
227 ss <<
"=0;\n else \n";
231 ss << vSubArguments[i]->GenSlidingWindowDeclRef(
true);
234 if (vSubArguments[i]->GetFormulaToken()->GetType() ==
239 ss <<
" if(doubleIndex>=";
243 ss << vSubArguments[i]->GenSlidingWindowDeclRef();
247 ss <<
"=0;\n else \n";
251 ss << vSubArguments[i]->GenSlidingWindowDeclRef();
255 vSubArguments[i]->GetFormulaToken()->GetOpCode() ==
ocPush)
260 ss << vSubArguments[i]->GenSlidingWindowDeclRef();
264 ss <<
"=0;\n else \n";
268 ss << vSubArguments[i]->GenSlidingWindowDeclRef();
274 SubArguments& vSubArguments,
int argumentNum,
const std::string& p )
282 vSubArguments[i]->GenDeclRef(ss);
290 vSubArguments[i]->GenDeclRef(ss);
291 if (vSubArguments[i]->GetFormulaToken()->GetType() ==
293 ss <<
"[" << p.c_str() <<
"]";
294 else if (vSubArguments[i]->GetFormulaToken()->GetType() ==
296 ss <<
"[get_group_id(1)]";
303 ss <<
" int k = gid0;\n";
304 for (
size_t i = 0;
i < vSubArguments.size();
i++)
317 ss <<
" loop = (" << nCurWindowSize <<
" - gid0)/";
318 ss << unrollSize <<
";\n";
322 ss <<
" loop = (" << nCurWindowSize <<
" + gid0)/";
323 ss << unrollSize <<
";\n";
328 ss <<
" loop = " << nCurWindowSize <<
"/" << unrollSize <<
";\n";
331 ss <<
" for ( int j = 0;j< loop; j++)\n";
336 ss <<
"gid0 + j * " << unrollSize <<
";\n";
340 ss <<
"j * " << unrollSize <<
";\n";
345 ss <<
" int doubleIndex = i+gid0;\n";
349 ss <<
" int doubleIndex = i;\n";
352 for (
int j = 0; j < unrollSize; j++)
354 ss << unrollstr.str();
356 ss <<
"doubleIndex++;\n";
359 ss <<
" for (int i = ";
362 ss <<
"gid0 + loop *" << unrollSize <<
"; i < ";
363 ss << nCurWindowSize <<
"; i++)\n";
367 ss <<
"0 + loop *" << unrollSize <<
"; i < gid0+";
368 ss << nCurWindowSize <<
"; i++)\n";
372 ss <<
"0 + loop *" << unrollSize <<
"; i < ";
373 ss << nCurWindowSize <<
"; i++)\n";
378 ss <<
" int doubleIndex = i+gid0;\n";
382 ss <<
" int doubleIndex = i;\n";
384 ss << unrollstr.str();
static void CheckSubArgumentIsNan2(std::stringstream &ss, SubArguments &vSubArguments, int argumentNum, const std::string &p)
const std::string & GetName() const
virtual void GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) override
static std::string Gen(std::vector< std::string > &)
virtual void GenSlidingWindowFunction(std::stringstream &)
const std::string & GetName() const
virtual void GenSlidingWindowDecl(std::stringstream &ss) const override
When declared as input to a sliding window function.
static void CheckAllSubArgumentIsNan(std::stringstream &ss, SubArguments &vSubArguments)
std::shared_ptr< FormulaTreeNode > FormulaTreeNodeRef
(Partially) abstract base class for an operand
virtual void GenDecl(std::stringstream &ss) const override
Generate declaration.
virtual std::string DumpOpName() const override
virtual std::string GenDoubleSlidingWindowDeclRef(bool=false) const
When Mix, it will be called.
static void GenTmpVariables(std::stringstream &ss, const SubArguments &vSubArguments)
virtual ~VectorRef() override
virtual std::string GenSlidingWindowDeclRef(bool=false) const override
When referenced in a sliding window function.
FormulaTreeNodeRef mFormulaTree
VectorRef(const ScCalcConfig &config, const std::string &s, const FormulaTreeNodeRef &ft, int index=0)
virtual void DumpInlineFun(std::set< std::string > &, std::set< std::string > &) const override
static void CheckSubArgumentIsNan(std::stringstream &ss, SubArguments &vSubArguments, int argumentNum)
virtual std::string DumpOpName() const
static void UnrollDoubleVector(std::stringstream &ss, const std::stringstream &unrollstr, const formula::DoubleVectorRefToken *pCurDVR, int nCurWindowSize)
virtual std::string GetBottom()
DynamicKernelArgument(const DynamicKernelArgument &)=delete
delete copy constructor
virtual std::string BinFuncName() const
std::vector< DynamicKernelArgumentRef > SubArguments
Arguments that are actually compile-time constant string Currently, only the hash is passed...
formula::FormulaToken * GetFormulaToken() const
Unhandled(const std::string &fn, int ln)
virtual bool NeedParallelReduction() const override
virtual void DumpInlineFun(std::set< std::string > &, std::set< std::string > &) const
Configuration options for formula interpreter.
cl_mem GetCLBuffer() const
virtual void GenDeclRef(std::stringstream &ss) const
Generate use/references to the argument.
#define SAL_WARN_IF(condition, area, stream)
virtual void GenSlidingWindowFunction(std::stringstream &) override
InvalidParameterCount(int parameterCount, const std::string &file, int ln)
const char * errorString(cl_int nError)
OpenCLError(const std::string &function, cl_int error, const std::string &file, int line)
virtual bool NeedParallelReduction() const
virtual size_t GetWindowSize() const override
virtual std::string GenStringSlidingWindowDeclRef(bool=false) const
When Mix, it will be called.