18 void OpAnd::GenSlidingWindowFunction(std::stringstream &ss,
19 const std::string &sSymName,
SubArguments &vSubArguments)
21 ss <<
"\ndouble " << sSymName;
22 ss <<
"_"<< BinFuncName() <<
"(";
23 for (
size_t i = 0;
i < vSubArguments.size();
i++)
27 vSubArguments[
i]->GenSlidingWindowDecl(ss);
30 ss <<
" int gid0 = get_global_id(0);\n";
31 ss <<
" double t = 1,tmp=0;\n";
32 for(
size_t j = 0; j< vSubArguments.size(); j++)
34 ss <<
" double tmp"<<j<<
" = 1;\n";
35 FormulaToken *tmpCur0 = vSubArguments[j]->GetFormulaToken();
42 ss <<
" if(gid0 >= buffer_len"<<j<<
" || isnan(";
43 ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
45 ss <<
" tmp = 1;\n else\n";
47 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
48 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" && tmp;\n";
53 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
54 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" && tmp;\n";
63 ss <<
" for(int i = ";
65 ss <<
"gid0; i < " << nCurWindowSize <<
"; i++) {\n";
68 ss <<
"0; i < gid0 + " << nCurWindowSize <<
"; i++) {\n";
71 ss <<
"0; i < " << nCurWindowSize <<
"; i++) {\n";
75 ss <<
" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
78 ss <<
" tmp = 1;\n else\n";
82 ss <<
" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
85 ss <<
" tmp = 1;\n else\n";
88 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
89 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" && tmp;\n";
94 ss <<
" tmp"<<j<<
" = ";
95 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
97 ss <<
" t = t && tmp"<<j<<
";\n";
103 void OpOr::GenSlidingWindowFunction(std::stringstream &ss,
104 const std::string &sSymName,
SubArguments &vSubArguments)
106 ss <<
"\ndouble " << sSymName;
107 ss <<
"_"<< BinFuncName() <<
"(";
108 for (
size_t i = 0;
i < vSubArguments.size();
i++)
112 vSubArguments[
i]->GenSlidingWindowDecl(ss);
115 ss <<
" int gid0 = get_global_id(0);\n";
116 ss <<
" double t = 0,tmp=0;\n";
117 for(
size_t j = 0; j< vSubArguments.size(); j++)
119 ss <<
" double tmp"<<j<<
" = 0;\n";
120 FormulaToken *tmpCur0 = vSubArguments[j]->GetFormulaToken();
127 ss <<
" if(gid0 >= buffer_len"<<j<<
" || isnan(";
128 ss <<vSubArguments[j]->GenSlidingWindowDeclRef();
130 ss <<
" tmp = 0;\n else\n";
132 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
133 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" || tmp;\n";
138 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
139 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" || tmp;\n";
148 ss <<
" for(int i = ";
150 ss <<
"gid0; i < " << nCurWindowSize <<
"; i++) {\n";
153 ss <<
"0; i < gid0 + " << nCurWindowSize <<
"; i++) {\n";
156 ss <<
"0; i < " << nCurWindowSize <<
"; i++) {\n";
160 ss <<
" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
163 ss <<
" tmp = 0;\n else\n";
167 ss <<
" if(isnan("<<vSubArguments[j]->GenSlidingWindowDeclRef();
170 ss <<
" tmp = 0;\n else\n";
173 ss <<vSubArguments[j]->GenSlidingWindowDeclRef()<<
";\n";
174 ss <<
" tmp"<<j<<
" = tmp"<<j<<
" || tmp;\n";
177 ss <<
" t = t || tmp"<<j<<
";\n";
179 ss <<
" return t;\n";
182 void OpNot::GenSlidingWindowFunction(std::stringstream &ss,
183 const std::string &sSymName,
SubArguments &vSubArguments)
185 ss <<
"\ndouble " << sSymName;
186 ss <<
"_"<< BinFuncName() <<
"(";
187 for (
size_t i = 0;
i < vSubArguments.size();
i++)
191 vSubArguments[
i]->GenSlidingWindowDecl(ss);
194 ss <<
" int gid0 = get_global_id(0);\n";
195 ss <<
" double tmp=0;\n";
196 FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
202 ss <<vSubArguments[0]->GenSlidingWindowDeclRef();
204 ss <<
" tmp = 0;\n else\n";
206 ss <<vSubArguments[0]->GenSlidingWindowDeclRef()<<
";\n";
207 ss <<
" tmp = (tmp == 0.0);\n";
212 ss <<vSubArguments[0]->GenSlidingWindowDeclRef()<<
";\n";
213 ss <<
" tmp = (tmp == 0.0);\n";
215 ss <<
" return tmp;\n";
219 void OpXor::GenSlidingWindowFunction(std::stringstream &ss,
220 const std::string &sSymName,
SubArguments &vSubArguments)
222 ss <<
"\ndouble " << sSymName;
223 ss <<
"_"<< BinFuncName() <<
"(";
224 for (
size_t i = 0;
i < vSubArguments.size();
i++)
228 vSubArguments[
i]->GenSlidingWindowDecl(ss);
231 ss <<
" int gid0 = get_global_id(0);\n";
232 ss <<
" int t = 0,tmp0 = 0;\n";
233 ss <<
" double tmp = 0;\n";
242 ss <<rArg->GenSlidingWindowDeclRef();
244 ss <<
" tmp = 0;\n else\n";
246 ss <<rArg->GenSlidingWindowDeclRef()<<
";\n";
247 ss <<
" tmp0 = (tmp != 0);\n";
248 ss <<
" t = t ^tmp0;\n";
253 ss <<rArg->GenSlidingWindowDeclRef()<<
";\n";
254 ss <<
" tmp0 = (tmp != 0);\n";
255 ss <<
" t = t ^tmp0;\n";
264 ss <<
" for(int i = ";
266 ss <<
"gid0; i < " << nCurWindowSize <<
"; i++) {\n";
269 ss <<
"0; i < gid0 + " << nCurWindowSize <<
"; i++) {\n";
272 ss <<
"0; i < " << nCurWindowSize <<
"; i++) {\n";
276 ss <<
" if(isnan("<<rArg->GenSlidingWindowDeclRef();
279 ss <<
" tmp = 0;\n else\n";
283 ss <<
" if(isnan("<<rArg->GenSlidingWindowDeclRef();
286 ss <<
" tmp = 0;\n else\n";
289 ss <<rArg->GenSlidingWindowDeclRef()<<
";\n";
290 ss <<
" tmp0 = (tmp != 0);\n";
291 ss <<
" t = t ^tmp0;\n";
295 ss <<
" return t;\n";
298 void OpIf::GenSlidingWindowFunction(std::stringstream &ss,
299 const std::string &sSymName,
SubArguments &vSubArguments)
301 ss <<
"\ndouble " << sSymName;
302 ss <<
"_"<< BinFuncName() <<
"(";
303 for (
size_t i = 0;
i < vSubArguments.size();
i++)
307 vSubArguments[
i]->GenSlidingWindowDecl(ss);
310 ss <<
" int gid0 = get_global_id(0);\n";
312 FormulaToken *tmpCur0 = vSubArguments[0]->GetFormulaToken();
315 throw UnhandledToken(
"unknown operand for ocPush", __FILE__, __LINE__);
317 if(vSubArguments.size()==3)
320 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
322 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
325 ss << vSubArguments[2]->GenSlidingWindowDeclRef();
329 ss << vSubArguments[1]->GenSlidingWindowDeclRef();
332 if(vSubArguments.size()==2)
335 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
337 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
339 ss <<
" return 0;\n";
342 ss << vSubArguments[1]->GenSlidingWindowDeclRef();
345 if(vSubArguments.size()==1)
348 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
350 ss << vSubArguments[0]->GenSlidingWindowDeclRef();
352 ss <<
" return 0;\n";
std::shared_ptr< DynamicKernelArgument > DynamicKernelArgumentRef
std::vector< DynamicKernelArgumentRef > SubArguments
Arguments that are actually compile-time constant string Currently, only the hash is passed...