From 5c6cc029858840caf1d9084b7ddf8c0f0379f34d Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Fri, 23 Jan 2026 14:09:46 +0800 Subject: [PATCH] remove clblast, part 2 --- Makefile | 4 +- OpenCL.dll | Bin 55808 -> 0 bytes clblast.dll | Bin 5450752 -> 0 bytes ggml/include/ggml.h | 7 - ggml/src/ggml-cpu/ggml-cpu.c | 20 - ggml/src/ggml-cpu/repack.cpp | 3 - gpttype_adapter.cpp | 19 +- include/CL/Utils/Context.h | 50 - include/CL/Utils/Context.hpp | 17 - include/CL/Utils/Detail.hpp | 84 - include/CL/Utils/Device.hpp | 21 - include/CL/Utils/Error.h | 88 - include/CL/Utils/Error.hpp | 70 - include/CL/Utils/ErrorCodes.h | 5 - include/CL/Utils/Event.h | 13 - include/CL/Utils/Event.hpp | 21 - include/CL/Utils/File.h | 42 - include/CL/Utils/File.hpp | 49 - include/CL/Utils/InteropContext.hpp | 18 - include/CL/Utils/OpenCLUtilsCpp_Export.h | 42 - include/CL/Utils/OpenCLUtils_Export.h | 42 - include/CL/Utils/Platform.hpp | 16 - include/CL/Utils/Utils.h | 11 - include/CL/Utils/Utils.hpp | 14 - include/CL/cl.h | 1936 ---- include/CL/cl2.hpp | 18 - include/CL/cl_d3d10.h | 154 - include/CL/cl_d3d11.h | 156 - include/CL/cl_dx9_media_sharing.h | 268 - include/CL/cl_dx9_media_sharing_intel.h | 18 - include/CL/cl_egl.h | 120 - include/CL/cl_ext.h | 2634 ----- include/CL/cl_ext_intel.h | 19 - include/CL/cl_gl.h | 194 - include/CL/cl_gl_ext.h | 18 - include/CL/cl_half.h | 440 - include/CL/cl_icd.h | 1294 --- include/CL/cl_layer.h | 62 - include/CL/cl_platform.h | 1412 --- include/CL/cl_va_api_media_sharing_intel.h | 163 - include/CL/cl_version.h | 81 - include/CL/license.txt | 201 - include/CL/opencl.h | 32 - include/CL/opencl.hpp | 10372 ------------------- include/cblas.h | 413 - include/clblast.h | 792 -- include/clblast_c.h | 1707 --- include/clblast_half.h | 249 - include/clblast_netlib_c.h | 993 -- include/openblas_config.h | 133 - lib/OpenCL.lib | Bin 28824 -> 0 bytes lib/clblast.lib | Bin 397138 -> 0 bytes otherarch/ggml_v2-opencl-legacy.c | 427 - otherarch/ggml_v2-opencl-legacy.h | 15 - otherarch/ggml_v2-opencl.cpp | 1005 -- otherarch/ggml_v2-opencl.h | 35 - otherarch/ggml_v2.c | 13 - otherarch/ggml_v3-opencl.cpp | 1908 ---- otherarch/ggml_v3-opencl.h | 25 - otherarch/ggml_v3b-opencl.cpp | 2015 ---- otherarch/ggml_v3b-opencl.h | 24 - src/llama-model-loader.cpp | 17 - src/llama-model.cpp | 13 - src/llama.cpp | 6 - 64 files changed, 4 insertions(+), 30034 deletions(-) delete mode 100644 OpenCL.dll delete mode 100644 clblast.dll delete mode 100644 include/CL/Utils/Context.h delete mode 100644 include/CL/Utils/Context.hpp delete mode 100644 include/CL/Utils/Detail.hpp delete mode 100644 include/CL/Utils/Device.hpp delete mode 100644 include/CL/Utils/Error.h delete mode 100644 include/CL/Utils/Error.hpp delete mode 100644 include/CL/Utils/ErrorCodes.h delete mode 100644 include/CL/Utils/Event.h delete mode 100644 include/CL/Utils/Event.hpp delete mode 100644 include/CL/Utils/File.h delete mode 100644 include/CL/Utils/File.hpp delete mode 100644 include/CL/Utils/InteropContext.hpp delete mode 100644 include/CL/Utils/OpenCLUtilsCpp_Export.h delete mode 100644 include/CL/Utils/OpenCLUtils_Export.h delete mode 100644 include/CL/Utils/Platform.hpp delete mode 100644 include/CL/Utils/Utils.h delete mode 100644 include/CL/Utils/Utils.hpp delete mode 100644 include/CL/cl.h delete mode 100644 include/CL/cl2.hpp delete mode 100644 include/CL/cl_d3d10.h delete mode 100644 include/CL/cl_d3d11.h delete mode 100644 include/CL/cl_dx9_media_sharing.h delete mode 100644 include/CL/cl_dx9_media_sharing_intel.h delete mode 100644 include/CL/cl_egl.h delete mode 100644 include/CL/cl_ext.h delete mode 100644 include/CL/cl_ext_intel.h delete mode 100644 include/CL/cl_gl.h delete mode 100644 include/CL/cl_gl_ext.h delete mode 100644 include/CL/cl_half.h delete mode 100644 include/CL/cl_icd.h delete mode 100644 include/CL/cl_layer.h delete mode 100644 include/CL/cl_platform.h delete mode 100644 include/CL/cl_va_api_media_sharing_intel.h delete mode 100644 include/CL/cl_version.h delete mode 100644 include/CL/license.txt delete mode 100644 include/CL/opencl.h delete mode 100644 include/CL/opencl.hpp delete mode 100644 include/cblas.h delete mode 100644 include/clblast.h delete mode 100644 include/clblast_c.h delete mode 100644 include/clblast_half.h delete mode 100644 include/clblast_netlib_c.h delete mode 100644 include/openblas_config.h delete mode 100644 lib/OpenCL.lib delete mode 100644 lib/clblast.lib delete mode 100644 otherarch/ggml_v2-opencl-legacy.c delete mode 100644 otherarch/ggml_v2-opencl-legacy.h delete mode 100644 otherarch/ggml_v2-opencl.cpp delete mode 100644 otherarch/ggml_v2-opencl.h delete mode 100644 otherarch/ggml_v3-opencl.cpp delete mode 100644 otherarch/ggml_v3-opencl.h delete mode 100644 otherarch/ggml_v3b-opencl.cpp delete mode 100644 otherarch/ggml_v3b-opencl.h diff --git a/Makefile b/Makefile index 99ce886ac..5e1591a72 100644 --- a/Makefile +++ b/Makefile @@ -55,8 +55,8 @@ ifdef KCPP_SANITIZE CFLAGS += -fsanitize=undefined -fsanitize-undefined-trap-on-error CXXFLAGS += -fsanitize=undefined -fsanitize-undefined-trap-on-error endif -CFLAGS += -I. -Iggml/include -Iggml/src -Iggml/src/ggml-cpu -Iinclude -Isrc -I./common -I./vendor -I./vendor/stb -I./include -I./include/CL -I./otherarch -I./otherarch/tools -I./otherarch/sdcpp -I./otherarch/ttscpp/include -I./otherarch/ttscpp/src -I./otherarch/sdcpp/thirdparty -I./include/vulkan -O3 -fno-finite-math-only -std=c11 -fPIC -DLOG_DISABLE_LOGS -D_GNU_SOURCE -DGGML_USE_CPU -DGGML_USE_CPU_REPACK -CXXFLAGS += -I. -Iggml/include -Iggml/src -Iggml/src/ggml-cpu -Iinclude -Isrc -I./common -I./vendor -I./vendor/stb -I./include -I./include/CL -I./otherarch -I./otherarch/tools -I./otherarch/sdcpp -I./otherarch/ttscpp/include -I./otherarch/ttscpp/src -I./otherarch/sdcpp/thirdparty -I./include/vulkan -O3 -fno-finite-math-only -std=c++17 -fPIC -DLOG_DISABLE_LOGS -D_GNU_SOURCE -DGGML_USE_CPU -DGGML_USE_CPU_REPACK +CFLAGS += -I. -Iggml/include -Iggml/src -Iggml/src/ggml-cpu -Iinclude -Isrc -I./common -I./vendor -I./vendor/stb -I./include -I./otherarch -I./otherarch/tools -I./otherarch/sdcpp -I./otherarch/ttscpp/include -I./otherarch/ttscpp/src -I./otherarch/sdcpp/thirdparty -I./include/vulkan -O3 -fno-finite-math-only -std=c11 -fPIC -DLOG_DISABLE_LOGS -D_GNU_SOURCE -DGGML_USE_CPU -DGGML_USE_CPU_REPACK +CXXFLAGS += -I. -Iggml/include -Iggml/src -Iggml/src/ggml-cpu -Iinclude -Isrc -I./common -I./vendor -I./vendor/stb -I./include -I./otherarch -I./otherarch/tools -I./otherarch/sdcpp -I./otherarch/ttscpp/include -I./otherarch/ttscpp/src -I./otherarch/sdcpp/thirdparty -I./include/vulkan -O3 -fno-finite-math-only -std=c++17 -fPIC -DLOG_DISABLE_LOGS -D_GNU_SOURCE -DGGML_USE_CPU -DGGML_USE_CPU_REPACK ifndef KCPP_DEBUG CFLAGS += -DNDEBUG -s diff --git a/OpenCL.dll b/OpenCL.dll deleted file mode 100644 index 16281318b1b0da59fd0dc74358e20a43ac8ae7f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55808 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 diff --git a/clblast.dll b/clblast.dll deleted file mode 100644 index 68012638d86746e6b6eda272c62c581c11c263d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5450752 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%0D& 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

hU9?Ql5|mhc7GSUI^ER(rg1 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

GVfl&WySSXqoa)+92K!o^FKxpw1QP({K2q7#0 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 z z=IMVglr9K`C)!sgYKJlq^jjfng~tHlVjF<^t*8i_H;qRfZ|9g9Ujw|tev3uq>L+GU zGIi6qUIU!dJYDYq_Ki$>0kFqRz5Um}ChOI|N%)=@@uvA2)+F--p>#$l{LsD}Q9E1@ zgvyyCYK3nC;bI$LS5yxAEtbnYUwi>Dd%gv;?D_Zt;J8e~x1Qo$_I!HFE-MEY+h*DG z@%_3ClLtdfT{QgguV0)5H!-x>$AOUgdY*lLUTOhRqMmdNju& zuG5}#ldU0sMol3u&((gxXxd8pyH`hf$*Luq{CyT09#c&9=~^Bh?-`(JVbfB*aAa5XO=^hw~JMX7tL~r z(q6F+@kO&7qO?nF5^l%J!K{alBy$I$v?dhpXkUY<9kM{EoHe3WI1~tvnF4GbzvHB4 z`+wlT3Ovi@5cfv01%|jciq)?_-Y8a+8*UUEL!A4+>Y4!;UuGHNvoz8FeMHL13uS&F zl$PxKp?wQP=>LFFIb|aBe?WM)6M&VIK&3b`T6o<4%E1ae%Vp(MWfrKMnprBRVYUNy z%`BDEH9G*?H%sLVVX_aIN1*XGs^MQhqyCTmmT#+CPB;MKGwJ^}lxCGNI8IglclCei z472z!vOs|6Vmg?!(HwU}I_)?6ZHe`Ney3txj>|C4GuB@Q4$Yq275{INNrlp^PIp>j5eTA>ew#S;KlP7*68>*Myz8J8?) zqFj#kL}r1po;AzieAa9SY~Cz~bM9jnV|~FaW4%lh`&c%loQhE9PeSR6eSfj9PK13d zflxV3BJ5)cgvAp8R!*#xom9>m%Vp(sWfrKMzF8_~XqL*^FiYi3&oP-7Ph@)Wgk};B zWd&d*S15D1P+GKa#=d!?cDNl7Drb?X6>bTH#S?)4t#TOQ;A=SWSdYg>JT~KTEgn1Z z*p0_tJoe*p5Rb!n9L3`XkNDRrP=j~x!~=4;t7uLvmE+wzHA>XYQaRea(-Xmt*#X#| zOg#cSpqYerOUfAuW&T4bojOat58IazwZlh&P&rwmR=64nizfiAoC*qwBG?ZqQz4tiPqu%3DqQop#oy9`T0;9xYG{>WaPWvJrGMvl^)3<7rkmC%# zb`~wR3=T~>bsCD1WL_eaCPLvK?aLCi!^?osVzWf8@O&WL4+Ov#8+U~9xcwa=0+Qu& ztQTb#*kbc$8S9H?8S6`C8S7QE1F$u-Bd`scNvOX?vA!mhd9zU3weKzV^@;F&8W1XH zNQCFpfN(z$z^`hK<TJl5m!|G%LNb3c~LEw&`Hz!s~TWsB9!vc(!^ z*hJAJWrtg9?@qQK{RL%?$-p>Mr4RZllIa&Po ztekO27^ltKS2>vbv0RSzS(ydKdfsdk@mn&>SYI&9STCDptXIr3)>mj^T(3(xb)n3E z2&GN?K5Soy2;({sDyK(;aUBRh;R9@~oM~6mPK*+LmdnZ+$}CVh8)m7T=`(nO#`PJQ z{t4eKl{06S$|=&s{S96lm>0@?N+?~lZ{5BnBHZ5qgvzNB;r<37{Dcp{%Be)<#L3R~ zR}SWWESHs2msy~4nr5k-j#(p8 z^fUn{9ieACtL&i0sjhsBJHigLs5^^Z%mN)@Kbqr?P^W$CS6e#5**B^qlq3H~cZ4}` zC@oha(Gi{?l=g(eN%jqh+Tj!+wAhHK6^;hNF7yCfTWkmA9Crm

VzB73Cav1*4p` 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 c7(|*;r)Y z#?8U=KBJoh#d!AP)xmqKwD&tYWf`NRg+=rN{*T@KZ;#N;0h#PVysHO~I;W6b#fUq$ zm+-F=Uuy%~IcEQ1v`;GQA3sG`KCM>@!K*gOkG2Y%^0QApULz}p7w=cuD?26ik?qb7z4lxw)fWD{9s z_59tpt)egBt?`XnheCGk#Zg7rydZb_r}4_tM==R)U52B9@v75F_!*`;S3_!;3~8f` z5hG!YTcbj+!?Tg}yeWtSlL>x}=~yS9oBIB?vFw0py?drt#qjRg{VyYo?~=XdX1;5t zchLO)S^I-{|Eziuvi?d&d(?ncJfru|-W*OG9FN!6Zm#T@D_y93G?Brm@ls>Nx%y9)Covr4)0gH{=lm z?+AVeIj?7Lea0^DqJ0E&!^4K8kGF=hcagYdF5??ShzFA|7V&TA91qyknk@W_S`$UP z|MAMQ-aN`KavI}&uLUuX#u!Zg?VRJQNgJ2E&rxbrNM`%^s@+ZB-${(R>5Vn4cg_u% z(rJ7qj;tT_qt9*h);BU2Xk)$)4vl;K>^l=0e)i4dd5iIIWUd>241_i&e)c^88h-X& zu9tX%TgnaT2*PknQ(gc~z7>CYM@lRa;Fou<#J%{-I~8J8IDS_n9>m`){;tJeUNhPt zwJ-kSTkT8y;G6AB{NS7IOZ?!w2R452-3L4Q2&FIp8$bA716v`Rgg@bfAOA5@`6r_g+vq!*9JcqMRKa-iX=>3c!p;GyzS$d?B|iOe!ZoHt7m z7tB(`C9@Q9)htCkZI&XQp^5#Sz9Z$-g>r8b8m^aqt;1Rj!@6leD4aGC)=dK%u9vB+jg7wre%X*3{O0b@m%(9-iq67-(-~2RXMJV?

)+@pLbYB)D3+gdN@%h z+zbQ{2S9T->ch9JaNyxbB45$NWtQdPX64~#<>6-K;b!IGX64~9DPn$fH$w&9is|I2 zTw>_C9u+teab0od-CH@<%f4a}vs=iPkObnjU`G)z#3Xjksoxl_WcO#cNW_Zu^v77l zF98P;SM`2V?xjM0Ybyyaci4>IcA5o3J=OiT(^Wut45+uA%Jn?GWNYuW8qAkPydV?x z1Yw$`h?mV$#4Bbg;#IR0v0trHW1}~#k`TV3Zfcw_5hb|;gwhG2aCe7I5_Q8pfKWI^ zqE5K|>nxnd15m_UUO4D_m@kXCDzi)xPn)HPXUtN>b+Z(4(=0{YGD{J+VN%3rK*URs zTK4c;r9j&Ji+XMYjzrv3oO#M@7_0q7i@3)mzJuvxh4-WyiYpKP=*PCUH2DK)eLKRTS|! zJ1+d~oZ|r-w-d8BNyLh^g7pA+J23+edE`kT;+F{dU9%*-)L~VIb;HYnP*2lDo$vx6 z%&akQ{Gb`X4vlMX?CPiF^h$kSm?A_m!0%`Lv>X|Q3k3`&3oOx^6u^#>fi@3lfp5Y|; z1QSP6&!w2!&N&_c5o4N@E%9ytEDiKhj>CtG69^F<^NJmCRlig-e%7oIRn5f{x;#1)!J z=zK{co)XF}3#B!O-QciUqHg#k5DKS3)Cp}MOx*zN6@`PT8|KR*ZpkcD#BH+_anCG8 z+&4=R56n`;exj|Gc4|DB|aVLmqh&h`1)?=j%y$fx`+6!+Kai zsHYN9CrkrjV8^^|x}Dg<`Ns8iti>9CBb8-5Lh!dWNkgj<0yumjjD3I_u_KK`|c6Paa-IB%9BE|{f= zOJ*tJs#%J7+Uy$G8JH9?S0HFmf%hFqfwcJ-_1pv;iMXyf^VYIsz58D+;ue$m!Z($~ zGVCbgc1&&O91lQCe0ThhmiQ+(NW_Zu3Ve%C5&sYz^2n1w#J38iO`*W!5!NE=hMxkV zp4vp6@Est`A_1_T;IaH=L&V=^6!V^JiIQ`$LU9qmm+jSK2{jZZyc@l{D0Ya(X z3P{3)!}MZ6H#`ss^`v(LI^kYGSg3%n1VF?ZIc}Pr;H^0LJt^Wzzo^iJFpDx#Pk49V zEJZwJmLjg1rHE(EQp63jYhV{>CV|fl5U?bad%jS*?64~xwnEemF9bs2tP*wfWC9Bs z0PGcogV%DHFN=6hW|<-$(~H4+iztzado8rjW+~!=S&F!1mLjggq=?Ugh}WsW24;Mr zK-&C^E%6wh+Kxm#tvK`6vSZ!%W{Wt%aaq|(Ou~*L&co#2&N&_c5%UQtTHmxvYX zr}z$@B7VmwB;wN1h@Ir#DU?=)!n+(cP1FsGK&Yn~qE2`l5I$W6U_I4&f~_6c%`#tZ zi5oJ@6!C&tig?K^MZ9d5B3>~|5wDu1h%=hlKlgfxcwH!Wy-+%SjKVq&n;^pexj-nK zNh0i@3xrQx0a!StI}{G<8vLH~aE#lTFN?S&vrG|J&9))TX|ojZj9H4fZk8f$nx%+a zH1Yi}o)jRUEtGqs&~OFh9S-X=4B!6(p>PI7`2H7YxB~M3w-4Wf=Ff{C>q$^t`rDJiI{n{J@t--4rpLy%gPZ~d9S!Lmqh&i1=us zbRZOtb=Vpa-unkaJ&hd*%pD-*FVf|->Va*SKy`pgNjD-2J zi2E|j6!E|;Ma)2o;1wIJV;ZeE7Xi?iy zfg=%@5FO9tt!2mhzzr5L-=xdF+Ls^T|DlLiViG&&c)*5;yMHGUE7t20i}=IfkVl>b zBL1jQstpvA@G*x?Gprjv4g?X;5Ou=)fpD+Iyxqy|#1@Qty?dg1%m%aQCqWA`^(1J? zEJeI*mLgs;OA)V{rHH+CVmSU^B;s`jB)Otcs;v`~@OX!5>%?w283=_liT6BFI0Ycw zYjGXHy`gY$uf=>>#3h+!inwZ)BAzze13P1uBCeaIh?{09;ucJ{#OFZ7t5o1cpO*q@ z^DpXo05}qHTXE*CWyktf*CJkH68Co!;}A}4iTU0*|L_VW(;W>Mj()#HtXMbZEaHcQ zLmqh&)YGI;+7k+obXcFL8y*dWdKwUQLLLaWeE_VdJWhjO%|PLIE2eHT=F2Vdy3BG5 z!W@5~*fxaeeG+}!XO<%NK8c#TshFjRr)c8+#~USLZ<3h1S}4^fiAi{w!?a0aH~c9O z3TJ`wI^jwntW*N9R}>Cr-+XCJNU$vvg@g9lEJf@c5>Ys4pUqOl-XT#f@femENAXg` zUTysRZBK=W(G-ql*L-%=5)-2(<`)J08;O|9;Pdrx>Ltc{&?h9~^S7N#24mXn$(zyv zW;z_|Zcb;C>8JApaKl*Ny$>-Rz=jhq{$d+1U9o<{TtKJqe4m_{Z|}f~ z-zAhbg~Fo4T14IOULfeSP1Fh30%86YfI7Y7K{omytT?8GZF%XH#ZvvlIjEPJAL zvvlI|M>3k{UuAm!m1YvIZ^?;^Lb;AmT5;I2!={M3;RYZSPK~G&{vHVPuK=5!IL`0w z`4$en3-jfks4lZiCvKXh6SvILiQ8uB#67bEuzj<1;sH&(|M`zn&YDo}Z9?hTqZD?n z!xAFA{|SV`$rIuIPasTs0_+uqgIjLq%gQOrEK@lZvsBKMSt_SymdcqmI{@1-y9Rav zCR>Rr9Bl>8m$fm?jJ}y`MH8dJSfx|qZ`8sqDbBp#pmVIpw_^+UG^A5wOHo5Qh)kP* z!+{szD4hX#v~cwAVXS>W<`(Xecw>Cn!f~x=9+Um>5xcfC?eb_j?zHrdz1jrf@brBKV_Q-cAT*x+q@gKwX;!% zN$#OS>DW0$VVlDeBJ3jqMA;Hy9}ytP7GSe%*;xVad7p-CnXf2YnPth=tYm9evNbE& znw4zLO13nUaFQFfC869YLg})@p5U+*qHZ`12!*ps)CtD{VXhv4g){68hBHL5kQP`? z2yew-YLK`cf7NXP_adgdFuWgs+7Jt|Ii?+PZI}zr~4c?l}G8??Hr;25R zm&nvzOWrISynTXa;nUil`}1~Oy$g& zrE=NL$h7j5A+W&VV#h)3=>5Fo82n5HCv&a zS?0^iX~-;7ISXc~oF%hV&azo5XT>a)vuc*g$!I3wAQk``Bca^ELh1O^6?TZjCWyM> zP#`F0lBg5z4TOmzfX&LuZ1&J@igJmsBIPE9Cxj!-)5uyY;OAnJyv0ikdfh&rJR zgxMK@&C1y_w>omJ#e7*gZJA{%r)QSR>6@i;24<<8HM3OC*!fC<%1LPAy}|`4Cohz% z38e*xy})55BD_}!guE1!J|bIcy{mh-sU0@{v^L26Tn z&U5^wgRAe0Bi-{bPV8}<_$o)|A{4|Jb@ti~BfQXUR)S9z-Yk+@|pi|NB$i{@}hs>9Cy>3*9AxOaPv2Dl1&?Jt%4be*Yv zrlZux*;wKasU^`Irl!OGh?U(&1KjOi@I(R6{go0sr8_9-R6 zjADShGSC3Gm_35Aq0ocp<-WZ#>Nm+9B9!)p!l4cu5Ou?0Kv3u!Q77C72wxciP@#FI zzUe)l=*D|;n6l1%*?q^KNV81$osj9TjLgz~i)QJ*6|;2TDYJCn8qFj;FqQkx3gsRo zlr|i8xWg8Rx*-pQ!dW8fg!=>GD z!7W3L`Lc3mWtOR&hS@gMuwa(TSu#uIESsfrR?Jd4t2FT*=bNRROept2p>*A04|3Qz z{1t_BI1mbFf~XVj3xrR505-eTmK6>jj5A+WPC;gw$|;$pa;j#joN2RE&Wzas*t*#@ zuuYmtxZm5PoR(1TAfdGFu!9}eBkG1jfKWJnqE5&G;d>eY7EXQZ+niPA%gV`QmZ_X| zvsBLbSv){Dn-enqJ&jo^r)ZYSsnATqW1CXWlu)i9l-3+}w8LhJy5U$L6i$Pv6DEQ1 zJq-X0r?l0DgFy!KW#zPFmZ_Y!St_SzmdfdyrE&&lshl;lRLWznST_&|Pc8xO%&qo#;b4%#d|5dwGRsuXs#z*0GfU;Ho27Eb`2-_Axs>TAmwK)d ze$H7%G)6+XUkIfYhyBW7Q$$$*4hV%)Bf|Q3KzMQqaA$6{1@}2K%$Jo@mszHAnr5k- zmRTyNZI;UEnWb|2W~rP3Oy2*WkCDez_J9wMhAC6H+8P?zjbX}~4xQ&+v=08@+jVb# z{5~8VI`t&=m9~eRiaL~9td*{0MzO5nF=ohcq?8>o?^c2 z#5I{^I`OPoI&s4+op`}4op{OY0PM2aHLxo*lkgZ$)1f60$~{gf%^Y@=!`6wq;TRwk z&Nw%m?}SGHVXgsSuP7YMH85Xx;=IfeDk>in_p)@6mR=AN;_EPd9kB1rm6m9#6qsM|0@Y zI_y92;C{oW-#jCqR>%S0(*>kUOzp`|ZFwWL-W^iYVXs4Kqs5{Q*UW+A|0pI_K>wHh z;r+@Q7iZ-kvQ~-aFl##OcqJBiM0(KnH|PaH1uQZ#==TC}Y?dE|YD{t$38g)u@C=9b ziLlN;5cE4B!aDyzn1Tk7eldW=?`WxrE$E>$=F85#F0)MM9)Gl0I`@Q3jS42s(z%Of z>D(2wbnYpdSVv<{&RrAAy+kOTb=XTC)*!+<8bBzV1tP4Y0fZ@N02WSN^|OVmM`8+^ z`Lc7jWtQpOJ+pM~zF9i=z$~46&Flayw#;G*bnb*^5{~gaRbD7}oKRYD*a;3R5p~0f zK66H)WU$I+|S*CJk%~ClHvpuj2W~rPdvsBKqSt@4*CYzKgG(T0i zL3aM%sO1|i*NZQMqN9#lzE#DUrwpJYo__T0z zGw{RL%GVX}@o(AJzXc9enLh>Bo8-PDloo`-_Z(It>V_WxvBrox;cGysF@Vi-j&nv^ z(vdS?vBqSURbysVV`f!jW>sTmRbysVV>FZS``5T57s~xnD9s!;#=^mkJyAF8>%tj7 z6{r(_g(K0C1F&%N(bwa6uE}}=zvrf8(UCJ>_Vv8XGJU;ZmcCvxOJA>=rLRw$rLWJJ zrLWg%V!oQifm?c^+#y0~%VCE)tWAXZY9J`5M}+xmAnb|;u(@#9>j7_ta#olxD`!<^ znaat`QaS5pshsgA=vXReLZ;q8oit136lr3Apt{si5y~AalukM9c!$-9us;wG3TKuG z`vU=C_cQ<&PCY7T=vG^xoI3Mm2#!jPIrg9RQ`s_Y$mdYuZrE*GUshp}=DrXudyU=H#Gi;#7v-`YD{U2@q z#Zf%l)=?Kaqd4>I+J>>-^?G-qEhh2#zg80Mm;|~|trdaPhFz!*I{=?Oj=IpDuT&SR zfES@}yyW08#{*Aq(XLg6NdHHo_6W+2p9i>MQpfw0dEz+NKfCFaX=UY1#= zoL9_J&Z}lA=gchSyl$3q9zRYgP|g!Hlkn9)mz*bsa$gfliw^s`!zx7G@J%2T&JFdvg*Y@bBN4#TnyG#s6?MI&-`TBz5%+m*lu|8I}udgzRZ~v8iJ&W;> z#9B0mzOKU##j6M-U%%-U@^uBg_RIG58^E!GnOn?z38ihJaHGR|M40yiLXGu_Fz*F~ z2W9}Qu@c%C{Emjkd%ShVER_3-P+D`?R~)D2$)Lg6%sI^hdIcwh#wxp21db{Stn41K*NvrJ!ao29S! z%+lBUX6fq#v-I^fv-I_`A`(Nt{-;t-B9!~NP?~qxFC11NLcb1#!YL7)+@ zw>vB&!uRi zp&^`%=CC2uVfX#FO%37mU#5mo0k7bSw5YMmz#+GsphZJ?xlq~?3eR;|o2VPE0D_!* zM4fOk5JrChtg*bZu<>eql=XtMR&K@LrTE*9zsvEr7k^jcZ$JL7#@|8w&EoG`{9WfS z8n-&cxWar{&Z{!Zlyhd5a$Yw}IgcNvV=3nenI8R_rJRd2vHqLq1}Z|i#|ouW4l6jU zMuhd>JZ~^dg!SKmF!}@7D+&j}|SoLgoo=eAkOxo4Jg?wh5Y2WBbfHJFt1 zB@kwTT094{@KM9W&?0yG;@?QlV}~=&yq^O&)>mdN=L(ZJ5J@23RE!6c8-np~C}$mZ z#x0xV{N$@8X9au+U(!>~r-MUoc{<4XOrbOp3Qu%co~RotK#+5Rs1r^G!jKeTa|0Cn zbB;#H?@2iqnJ>$^BC||6Pno5hYi23uS+kUL!|VX;f?3LWiDnYEb4-pQsZj1xp>)Mz zmpN>es2eT^Lg8dYop2ElhNJ*{Md6@VX1*-vu?N#EQ_hJ@4@u2Z&IPlSbIB~_Ts2EM zPs5~~w?ob~YVlQXkrrw5FDiQma3tp$#hJIN9c%pMmUEp+oa7{$F$u_dA(}%u>#&z% z^|;Y(>Oaj$&I z@$5dh8sM#1v3`m9vYeM?mMP~Ivy}6yS;{#xOF6HbrJTo4R|=H#1kEIT{>75>q)@Ie zlolQKpAM@Kb;B2dP&iXWov;FgAt?Y0C*Gbm@>^9nxK&`jEaw@SWy-m3whf6k%~H-S zvy^k&EaluYOF8#xVqMo4NjU?d+^s_Cn!|qLu(306B-V8WLg6GtSl1N@TbTlEE}Yl^ zZiR9tm@g}5Qf8UTDVn8nDrTviDYH~g%`BBOYnIAs(8PG11%MV(D0erZbje}k4qGO| zcpV6ZvqFUN`U_b&{|3OqDOoY2?*aEU-gCVK1})5&l{1i8rgGNIQaNL1@&Jtf&^*e- z=y5R^Q6i%I}6Al5wRxbc7oMD?2 z3uP;m(_p@=oCTR>Drd<*b^eax$}2&N@xJzwY7hc$p~oAfa?ZC>-vv zNg}+z4urxf65;)IAZ+yluvZig1})5&l~a{jrgEmuQaLkbshql5DyM0d%4wOUa@sK2 zg+2>iXe+S)n;YE`5~KfXVMjY`h6wMC1F<0_!h7RDXb1sVIK#yl z_TQ?)!R!t56&pgCWh!UMES0ltmdaT%OXaMZrE)T}RL(j~`ue5t^;J6Rxv!C<(&k^h zT^<0Ae0{vYIP>(uVXUvdz`nl5B<|@X#_r}M;Opbj9QwKrEC1srU*C3xd|d$_>DkvG z1P)cnxfA&M;X-LsDC8a1BI<^R0-?s*M4j*eAiRlmUjU#_tg znPt}4s#(@pW|lR!Zk9DR{&+^yWX6O{zmiNd2`4;HzFri{ohX!69Cnh!rii-X6d)8% zji?ij0>UfF04$tXD5IMmw2S2TT;X6e#C+M;>oUvq^`=?+ddqANY};%fY|kuxy>FJj zKA@R|r$1N9Srf{gFO-g*q_7JemJoHr6c7q0Pt*x#17TGf02WT(g)wRfw?H|Q%$Jo@ zlv$>7DrTviDYH~g%`BBOYjyy(VRjAd0?j16@HtY>l2Go&Lg})@{={J`MBQ*T5DI6N zs1vRL!m2a?dx>%e%$Jq3CbLZCjGZi&%1LCZm&lu?atdatoRV28r%E#k8ZY3^Nhrth z0>Wk-c2A+XI#D;=%VUWqQ77yRgjHz(HY+D8Xe(x%7ML$9XGvz6%2_r`<*b;ca#qb! zIhk21XWcB7GkyxL3%$hi(B3C#%d;afc^$h3Vl?sj*u;-|i3!D-_sq9rUH2UK5|d2g z`+ug6rWoTPiBdF&y@U>XFcuXY-4TBOGW8M)c*70uCB6X;RmnLV^b!N1v@R6B?XV_M zH+&Zea&8fI!YU9ZRRCCHckCth_~;KkIP>KiTb5a7jjfnvjjftxjb&z8W9w#FW8=^p zQecfu&`iRKSIXBXg>okerA3FG;;;%)H#`9dg)>Fe3C93oQUzeIC>%H>^JQP3ky)m% zvxx>vUvHZ2fo++kueZ$(!1m12*ZVLj=gT1H3bpu5OkP8PwD}j6T?HJ;d5~wEc~2EO z)^{(noTr(@!A@c(CV|vuqdAnb4y$4%x{;hOx>RyjKo{T6bAWR$IOLY6gPflxl&%Sd z^Bgwz5QKHZ1wg2=gs2nF0>S_XU~`Q{S?~FKc)WbTd|A$uGRu^6(JbX$F-tj5nWda- zW+~@cvy^j#CidaN``rjw5XxO8lrA~!MGjjg>V_F06wV4!Cp-rT0~~<8qHu7_!hBiI z1DR#YdCe^4JoZo?-~oNZ^p{DCZ7)JnMSPa0LF2$PO$G=%5FrwV=h0+P3@JEMD z5@EeC-zpc0uwEF#Fh2;e*$uX=aB!o`e7U`;$}F?JnKsMzX2xs}Y~5@hY||{;o0eI& zH*J`ZzM7Qi20c=D;s(zhin&eAT^)7!yR+2qt&n@%pIC<<1BcTvAr$q;h0?xIxXxh% zqHg#E5Olak)CnI1!a6Gen{^n6YFnYhb>_=D9N$K>OdU?h^g1hMsl%dK>ab##I-D{~ z9oA?j;U&C}MTaPqd#O;`aM;Towm{Skvp^`EC8AEa3JB}00PGcog8@AAWgYfpmZ`(O zS?X|LmO5NBOC63K!DwD*MW()P%EN>XhuULvTp)EPI=pJA!;G4{b;fPvwNH``$1Vi- zcbu(8Q9lA4PR@j&!y|>#l2CY*!>UBx@E9Nz^)yi@JOl`Tt;{b+~MnI$SYJ9j?+$!jGOM9cDtg9}A`H4*Oq+jXxYm zcEcJF3TJ|-6TSU>8aM~<&IAeAIwr+L}Y!l`t z?NNs;|hc%XEXxEZtz;EZt!I9y*q8Fd@?~ zl9{C&6k(!vSt_g})^vr`oz(R6hxOHFvA*Ie75^N|co=gf+IPHle8Dj0EMq>76@r@X zzGkDQx#YNN>*b$SP0tPQC7Ge&Dejo;l`+}eDaW2LmaRqswO)&4r%)|trl+@&EK|xJ z>|}H2UAS#5`}r3R9jm-KEm4=pd@j4a5BQp!s~3%pZU6M=^jCS^k0&c>?k|o(y21h9wSIa<^T8gI;&@NHi#Rl^D*gSK z#aqIA!Nl|zu2KHym>dJs+>2oD3|ElIev5D2L0vmc|HjYXN&XMRq1oCM%zsS(!C+$g zCp-PXw&3fd9v`zjpfH8K(cNUD7XM5si;*s}F9!eVH9k_G5%r9yO@kf?>%Y zZ@>Na%8qw$#3!+rqJIP5?0 z|C#9-cS8++=%xzP;q#c)Rt2Qp#RzmFi zA@;0d^RUn3+xjMBOlRMD9?yH`w%K8f8N`@IjB&(xzA&=w1=m5S_@_i8619Sji6-rA&;cE`7 z5_QAZfp{N8)CvCqg!>=>)@(@=P|!k!sOsAwNJIwc=?ea<@xK}VH(S}Uy^enk{A=Rh z0{*q|Zwdd}__xeab_p$YjVGHtds`KaGUwUIPlInneg-@zG;q^c2fZXy`)YAK9`DIl z%(ijtD$OJuc#-dKgmU*3O4l8BFNckz?ZHJSK)k;p>V*A)aDM}^`z{(cEj*bn8V@mK z^P+Lv68Rb4x5(C_{nIjW(YS9h%X^%<**5Q6U{aP3L&aCK3ojo|>6fc0>gl28=UO^! zzJOxTfj>Fha;jwyLlnrkjy5AIYPPYx21VTq3Vg$fytzK7mVF)H#8XjoAdmqj2SvS6 zC~XUc9S-XeVP8`q6mFjg`gSLDUKV0ECZk0CwL+<0&go z78S+yQhd=ErbV8L;>stwXpGZjN>Q9^k{e;1W|oTLY!el=4b4^qs>t@a3<}w?NIOod zH(`#XmFW0+E6g$8`edmqZ87>y(-PP+qvIb^YU8J|*uwv@;kx1kjp4{-S99rF6#B*B zpfsiqrEM2V^FrZLhZTsr;W8i;dWonLE&#$uJpj9}&@s)(lSQTRK76ROTI8uT-ugwQ zHDs#oS};qcEt#d#mT4y8sZW>ER)lg@p>)+@Pj^^G)D7nY;iA`xI-vrDk97cc-$mo8 ztnRYeVB@i@Y`0zc$Wv(r*=oB=GNrVtS+-r%W~sCpm{i&kP+E_5|Bh!3o3A-yNTrXT zk<#iqe%^v}j3X*m+A5<@Av&6}HP}&U8O+8a1EbPTIZjH`;dg(Jm39<3Hmb~6k~>By zZ3>0s9M&T0h7*8L=xw4-coYy`Q32Q}baapvbl_s{x}I{GCyZ+ISjau42SaYxJQ`9@ z>CuqX=Fw1@YV&BwvsbvchuQ|`N^Kkv;ljTylyWSDuS7!`MqW2878{*HH9akn2W#W8gh z{607Wc^kVYQP@vtE+OiM0EB|i6LrFG5D%}m0PNm^$HNt#FeiL zQ;M54OT{(JvVB{inS>XeBgHKVzo0gN6ye zzdcMFwsRasFeQhB%5bhwsTTFick%ePv3~ z2OH5>6`g_3#6f>@3x_N|{1pp|drmKVt0IM(60+ztN?1Vw2R;ZFEG5QaF2wtE$YVGgqvU1?UfU8xayy3&Gd zxzdtMxze&(y3&eSy3#7mBwWs(36o$#x#tR{>khlZVcHDUNU8zYk34h~SZ3*T6Rw!*d z>;n$#5p}~75H7q=)Cunf!Vm;t)Q4fxvFh%k*nJF7P)2CwztUDyFg=y@>0Xeeq6&{a&h6O3Z-5f zHIy8twNbm_bRg8W)<*4w?K(yU^;TQ@qYq7?sWV^;|k*9yp%2tgxWU9s&%(BLp z%(BLpVX_rI5^eM#d;NLpF0fZ-d4Li9+Nh&g(P8s!_;lc*r>ONjf7>I`o@Q)*&q7pm z4YcFE%^J*M0_Amd5xwEDKRF4p(M24DnQC_t`yka`_SNfm?IM1O*|K35!S9K(?~=G> zZUT1fA`+O5MFwtk5r28Ox(LO1_S=-vG|%Yocl6>$^n#)@5KTVkEZ_7NbrCxJ!fPD2 z&A88Z+?9>EJ;h~U>|UOU#txUL!ym}FP}I}eIAR>aK03*rFO<#*g$o^4C&GKhKu}bZ z2=5gG;q6d>4MpAc?Z*O77S*&Q+iF^lJk_)!TWVUBDK%wgsit+aRMYsqc$wjsXQ=&{ z5X${pD4lfJZyZ)6>W1F|;i4-_rH$`!4#(xhhYli^jLVvfXyfM4mlGUAEee zrcAXREwgMp+Gg2P^k7n@k3!w|DV0;Jqnj>bc*OueLsyvV>-c%!dpXAEPPEc8M!)@B ziF^!G{!!%Xpc{(}j7n>vp`|nN@HW1jr_vVKFk}3|j3v3h7D@*~;oS~fBkG3t0HM&C zItu+7Anb7nuu6!@W#`m zwuVq{hfuoUus1twiKrV=AYAw|Q760x2>TZT?A{BOA5i-NpB1?lP0Ud0w41{GcE+YX&8&HfZQ3Qk7-hdtrYGb=JHz-0YfQO-2y}d5{p67Y%Bs25F>-~Oi=MS9EXFBimR=ww(s(R|JI(2F> zE!h@R4Bayi726htg6)N(^wSi!%)&B6ZMPE;5}hMzxu*l+%tL_TB^r}Zcr(wmykuiq z!RyJil4LQhEKy9WnwCtfo0d##KqS-l0@L!O%E>S3`!-@w1=;!L(lpMI9j*TUeKe28(spre!3HX*r2v+Nf#Cv@z3?X+?^m`{E&D z+PF|~wNO;Cuxl)=MuhooKuGiy5$3l6VS{Rb;U#*-M1wc;OlwLurgglYOzTP((|Quc zv<1_WX{o34BI<#M5XrQ?!L$mgvWUS}(2KJ7X;p}QpO#hpNh6$Dyl-D)TAk+C(|p~; z49(4_H6Yfe8R(gI+TLQCqMueXrkxBOA8Z?#g~4ltqEN`a*21zxZ8r{tOdla?xmN;V z{}_NlrVpnT9pw!@+r}gt+lpRKwv9^`+bR;pwwh_lwkgw+Z8H=@cgbF2+pJLV8KG#- z!ai$Z^F(cTIS>*a6SdqYfv`6Wz#!pE?acA2#+!MzrM9JPYzrmZ`(9SE*ft_jY|ERL zY%7?Seyv0?bVnYf(k=@HM+rq$3oBSyov7`O1wx`5L@jp&5LN;K3=%z@(w^ZBeQD21 zw$h&SdY1OQWR-R-QKh|TT9$U212wE>@I!ioJAU~-sAf&plM6Az?CTdXYFr0D{c4s| z{7Ke_#A2s?teVZy{8*Tyn)M+2YBmqCHqAg^&Cc3G)lAVho3Lv37U)nSm>I-s_BNrY zC*;nwumz&Fdj}9QKD7f-%e?^zomGHA#xFJ7kYBu+&-9FB%k-SrGt);UE7Qj$D$|Rm zWu}jtmYH6m7`oOiEByrHjV zUCCC>dR|Ybz93oEEM9|S^25nzz;r7vym+2%{T#vA*YAybm+Ti_%mtF&h&seNc3<@TU(#`($4ed-l-NOn^P@G zR%w?d%BfaO%hIl!mZjaG7`i{(%Vtw3_=`}~v9P~dSeK~n{tkqM_lR2Vw?OEu0Sq_c z=&T~1ZeuX?vR)y<(} z{bQ#p4AMf;h>&}dh2@FbZc89!e1WLtQb0HY0$`BwOJB{3yqVARamkkH6|ZMCt4UTh zo06z%He*_5`mAZ0>2nlAcRpV(?S2M?Oz#l2-1mSm*BfAv>BI1C_=Lq9dbZ6=HnzoHPqr;e7TeO#V05u9 zBXJekmNPBcHcByc+w)};bzdl0CKMGdY$ppFCu+N$fspVDQOi982pfU|3^(EUgvA?r z#?>Vo;~HL1#x*62aUF?bT-UT@T+g&*+yX>0ZeK92NXnEjcn_LU_QWee>@&`Kijzh> zv-r(&V_cc$JJTHJ)Y07D%c>A-(+mXTI5YR{r)Ugb(eJ^Ue~xZ`ny(-j0ianJTq>kZ z#SwOyg>@N*?{GlK_#P3y!vUdD0T^z^qfy}vJ>wQ78{^W>^kiH{vKW_>D8`MNmW&%S zEg4sY$c%puGQN)M#lOTLvCna0ltBYO{fr-1{7L3eV)3?JmGQ?f-w&ER2a7*5xCSw< zQNU0C8Z$DUzC4ScIP^_b*a%@zn^jCkcIH~d_41TM}e<pQ5%#Cz{ONIC z?)>R8ev*~#3Vu6g2n@d3%sxS1Z4~l_GmSA7UgeQdU8QDMsjqhx1&`n=o;c5YwTL72 z$1!k#xdE#e<1fm7Z5ki6LVtf~|5EOoZ7wtDPN5A5wZFZAlvx;IaG+4ceK`?!kcHKW z+U~hPARG5M1KIWg!fPSGu*o*V8+x+MN;b01c|FNCFIi-ZC5mi|rX|_ZoTltw3pG{u z_~rW}$1?HR7#s%E_!%&RT+8+OkyEruW{e_ky|Xg;_~i$n$fsCXhr<+QP1$p`0WrD2 zD)f-n;8UQ*{l!kO2DP4o4<3WhfQ#`x_*99aJAV0rm^OdQW|%hr&;bec-PORDZhr%Q zlB-S_UndLr;0TKk(PE{i?eBE$A_#(s_BNINEq3|f%-yh7<%nsmRnaC5SgUf}#e{zG z!@0Lrv$kf%)=MnRW4%O}Ln^;at37%um_oK z>GiZ;Vq1XPvQ6+8PseYM?-UP%M>d7Q54ehZoqH5=gA+yRnIzN{% zdZV_sj@b0cpI2-|Im}0H#xJ$Vb3SsXwzlabPgvw;ytPHP)e?s?UAxfe{AJI9Z2WK| z5R;Nz)n&04P>5SG@+#5`1i2D3eAinoQHYxtZLnJ6ZVWLejwgf*i@!_-c0`A4PdA-~ zh?#QuJMcKKP08cP;$T~7Y^&tYHuJH8d0yrt_=_ZRwZz_M$kk92@BLQgceH?9iw`r~ zG{1u@7pGGYYtsz$*>lmWWUJ`E<9*>)KJiqwZ>coQ!r)UvQ7Ggtwy-Qw+ckjTaz=<+ z?xR2$cLX3Y`0+)=zW+=+#?jtS=e_h zY@Vp?z6XR9$3!i6ClCf40R|~XVvERSX_h9{$s~2A+GeRUH_&;qIpR$93Y#F#RO7=7 zr$#f?=+8?;s#i=DOxuCB#Ocx?H7 z4Bhyy;#p28I8Dg*@Ce=OEo_WoZFdF`Qd}fzxs!pgp%K8aQk+arH;!?BdcrZy4mXZz zYPfMs^TLf|niS3yW6Vx=NHM;*@L|C*E~XeGNv_3EEr>OU+0xhSWNy0gEXP}Wo@r{j@l5m5jc1yaZamYBbmLh?cH&u$ zBGy0eES^mX1)B;*GZyv)3!5dv`ez`ddX5O|pR-K$odCm3buuyCxW<|33D-0)+_;v~ z6lD3cP@?=<*0ki>h-t~SJVbJh%PFcP%h+Che?|=2)$!BkT0!wAjdEu3y={zZQ#9WK z=HOZrvgg_i#M(3iJ=cD-nYgCtH*k40a{Xt};lX%yaP0x1s3hcmVPR#Wwu^y~>s6wb zyAKGP(EtoH*OOW4#^Jjk4cW=BHTl5c8W&Q`k}UVFlwYIl{aOcNpKBe(pESyu#c5j`*Sa*Hrun*wnC9l! zdJt>V4D?+4>L%ivq91jdajgX%9WEa%3}%I*u8_OI!g@sbeglMDUm(Kw8z5{r12D{7 zPbT6S*EAE)b4~N`%&%z@p7}M+z%#$5>38PWiku>5{j_nLJC@r)T&oBLD}|z(h3#o! zQ$%gIHxN=iL)3D+0AVK?fMKROnTcmy<5awaYnljWT+=K#5mJ7D^P? zvJlBNE}>W;S<1P-Un7QJORe`tJ29g8lSVnS_{Y=4wd1vfqQEzVJqOny#x>YW?ejH_ z3u1m2UkGqlS=<@o8hG{j9X_}IPCIG4CwNSv#=fK-M&JFogAgS9xtli;t;H1#~Y)a$oXzFZy>fepOSeEe^EQIn&TO{i}VIVO+4~C*{<%! zN62thY*uS~wY6Pen=Uzq#fPzoCRdBouXp+=nczN7Qx~0{ zsuI9}R7>3rwe2x|HOk_)Ni~uzmz|R+mpy7)y6iF2(q$J-OP4)PF?2gW!K#r^u&Yp1 zv#@7b*c4IQ?GD6hMAUNI1ECrL3@gQ`LcA45lS*jUJCf~Hrz=^nIz5T%8Z4N$fymld z(pRCKc@3*V6hrqqE5{L`;8dX~Z(*lfSb?bR-T;IYmxx;KBp@u70T@<_@o}EFQi}0) zUb4N?YS&0}mD)1WT&4DlG*_w3BF$B5r$}>^^SngpuG~~*918_s6p9ut>}m^3@1hi6 z1B4W3h+6J)Agq!B7^HaVJHGfb$lLjH9+7P2oR_R})~{J9E&xKRyF@Lw2@saZ01Q&S)OFeR>a)6RoAp^aYqvft z=k%`36xHR7L=9c!Ov}1FYFgIiF^F`vTrIH>pMWt&bU!#ux`6SLfj=)Q+9bW3B0l_N zxky_rF+-=hJxt-3Dfo8iD zv;!U9q(#NLiFw{6g-5{xXNa|F1`gVR(!**8WU*gK4;uAoex{l0TZWl0$ee+`9mv+z z4k&u=B-yS`$IqAHDz>D!>Do+fZQ8d3pL&Vffpq*=-U!_JNJ`w%{E{%36tWp6q5GJH zX_86XeH;kf(L9rui-7Q|h`AL5?ks(c!KuDIP{S*LXYM9!yELa-NZ_a-Nl_a-K6S%X!|kdQCGe%UP33Licc} z_CV80!r&31NE1s!_gf3o+>*BYJrGi@=_M`qOCY?aZP3eE`c$u&$g@-B%eo-h%DN<3 zWz7#G@{ahjY+AMlbVGhHzCpiVIj=wTs*q0?;UgS0;7p@o9HOoBqFn+{AEP7+x88$2`0vJY=M}mpE9%JAMu0?gQ_bj-zun^p2myH52cc z;Z3HfST`{O*?Y$v#M(3i2j1~LI8+(8lEpT!(1S*!G=G_y7Y62IGH0Ooj+?$;-ciw? z^h(*T&c|69uHupwddEU-ZQgswbB>UA%*Q|CjZkZr{Y|xouNdeh?<5rEh1|{-Rv>D- zU4g)#5>d--3xpmNz;J8LIB(}`jTYnho^nlk)f%nC@x3V1vesw?j_*a8mbGS{V(8j| z^`eA=>xH643%k+6()iASRNn-IRA-1SQ5~^_IC3Cwbx2Iv9K5)FK$) zi&6}ENG*Tyy(rVN*3|jHs5Mw(vAPs*x?R84l)#R1zt%JqZPH#h5%J@jiBL9SzDP!{ zdnO2ti5X<%OFP(DT1TiR7g$w6twGJvyn^`jO<|2%^AUVS7}T14{L-^FtTk`pHT}C~ znKwC^3QXVNO{`N;g^1}J_&caITmD?NMi#x7>OrGA&385PnSpsj<_ttF;8)P}ajG?n z{+*)PhMU6nml@qU2ie~`3lSgn@YmP4`M>VL+N$VNv<02I(9usZ$HU+rp{Ob3zGGn> zB7A280-d@<_|61`?kT`9>69!n@?BKk+E*g2F!EhgEh@1tszmFenpRy@)3OqcQN;eg zPf{f+3I%T!ipDMM?G{!c!v4QNNOg?}`~L!A2{*tnQ=P0avP#57MoA^o5+AEXTHj-p zNQ--H)J7|NtP(BAZZ#`W3TsNpQ%-9iAz5y~*s`w$#HbgX?~+u8iBRz;tx}oASjxCI zM)R{^4w{!Bd#)8B)}|TgxwgZ9i))I$=LyEOt)b&^5?8o{!8SrsR>);6Y=o%owgW=0 z=ZRYGDL`014lu~|rR~@y3yh3sT4CgQru9X}Gc7JMXRVb*_R6beMdqw$__+4UJ4+G! z-|?FvrrQYxTM9+<7WNbii;1xR9S~ByNQC|GfUt)Yz_3!BtS&N+ad}a~F-?#)j%jwR zaZFQVjboY@YaA=dP8=&kB*#X;v2l{*1dJ(zSd=~0$`Jb;t1AAaQOztK`1__BXRFeD zTbkowV49mNtwXF$GthHv936h#P0{DDz@GlB#1{ng#`s`iaI#QT7jmz$um(}vy%q>L z-Xv-0%=fJZZq@=o;NLN!Qa&Q*@1PnxAWQ)8t&En`Y)3-D-SX zb8Ax+L-!nxPhz7CpMN%WFNIs8-O@E}P&xPp-WCsp1M{&$u4MKGjN!KWU7MWD)$u zsJ1}!yqTjlCF9cgNvNjab6?b_+OPj0s!9Fpql{`lgAP>FJ}&s4D->xbm(cyf!nBzS zzUKlVm3ZcLO5DdPP0M^)BYp`a@ijab+{7M3T%`RzbR zb%6-yw*z6l3cxT^jgL6IoqxTx)qGagTFz%>t+jmSTC|YQT#HumnQPG!K65Q|d|>!= zPUyzhy;Qu-mVKX2jM|dLPrstgEB+*_LSk|0AFZO{b7CsK7o*Cs88y>9ev*o&;LHpA z740v-RYjBfT&%!nH{!R@p`w*`Wl;pb7qT;5uwKu?stjwpKLa82>qIU0AP_dD0T^Wd zQv38N-pXhEjAYCBS;-n#n3JeVHg8&1ve>k&WQ(R{B}*@78r^|Rl|NSn=N1V?ISYHP zh3Rw^oLdBh6pt|s=N18BR~mp}r5FRFyp^wDCCOI7%92&VsuGc6ygZqLvhz|xcdmskFs$v)144>*YD&wU34~R)&l+BeG5H)1GJ3LtHrR^Q8_0rxB)_Q4U2W!0+`N-CKrMaCz=(gh< zCY-2Hu!B&Pv#=d4Y?P?&vOq}n7*We@4Fo3&Fw9iLk@9wlBbDqOsbq7c63vmCR*uxP za-^n}BZWxHVO>mAC1*~4Lch%>25;*4=~J$&_>73<#N@;>Hhn4+DZf=T;8= z_po75&i0uw%5kF!do#g0O3CKaC7Mq+E$e&HwDReuWqq$u4Bh2_G@mXMd``&rFb&-m z7B<7Mw!0Dtsh%Zjxl4fH(*cH=YRm`Z?GnE(+52_L=GP^fU)PqM=GP^fUpFl&Hv*BA z%MUZk@qGi7;~}A-+@3;FUC8ZiVGW|T8v#P*H;Gz$qrqqsz%Vl(qfNY>Z({6p z4r^j`JcoI?SW!ed9n4`~PN#C1m(!6Pxz(gx4rezo^Re53WIsYjp6_FTgY|h}nN3UY-++yJB1epJ)ECZSr}B zi!K=>zV4(AztDW^(M|QlSwxuQ-8xj9KRs`E>ft9TZv}5My4iXkYF_UP%SK@=szUBuu@#F0gc8(d7 za_?WEPo9NY@wy+Yz+O7u#zLkku?mIx}&af^F)x}kK zyQE7a*>`CqTbD+n_%>@=y0|&hs!L;9@=crehVC|Y#_`U=fH1g2C`xm9A#`&VmLY1p zJAshu98t@C1qgeE@C|W@sm8p2-p;$Yykv861<7)8C5duzWz#m`%&Mkkt6DcLU0eeq zYuQ0y+Z3n~Z;5en_%_U>nji*!XYkXnAx*`fG*4$1pZJBZWe4LLT*w;F{Y|{5?A>Gt zac~V@H(GC5)_ZfkV=N!dPQZp2M z3FaXTK7`)CPW4M6_a1EZE6=NJXIClMRf_9fMZvGYRZzcJMaHpA75A3T!p z?!^EveF+nWpobvofYSOukgfs9+toE0p7%a!mz4Q*=0~s%I@>KKC{*aZXO^vorNJJ}>Ue zwBMsg25fv@+?#s)Z+Ko@l@GQDl7jWmHOTzdrS;Ee0@RkBgui%Bt$!9xgQIEi12j`u z|9m3kyz=iz90d3CMPB8foEJAHYeu`6wp{;Qim&k&75l=56|n1_7x#;OlJnwTZx%QV z?maSitn=b#6dO?v^^qI#8jH-?EGV6|>zx;Oo<(lNTUlgV0X=;?QkJFB`O7YZ>sk~ z=f%C|R=Foxj2>XVrA+g)%)AEKf1Bi*E==>lUpxd?K=1i%`6Wf)6D>O1{gL=^89vr| zagCkT)Q`lE@!{84gd-1lO&_AvvnZ>~^sX50@f%%2%|9}p6*4l4G|1={$`xM3t5Q=H^DnQ*+1 zNM^!UEYZ1fJ7N^usQ)j{jl1s0^0+t=?!iBZ&Q+AGuWaj`8+X*#`KpXqpGA{LX03(- zPs>BXkika_CFjN+V__YJwcT+*$Y6hN+>3xVJ~wU{8H`b_eg>lt*w0|}0KJ~fN~iIN z{@@0QVph(yWY(x@$*eJop?lXa#H^xFaE?%Nc3joMDhzA8_W&W`HKLY#JJ7~w#|

    <@%*@3enyX+=9grEE7u3kK4(@Mi_>Dp@5L_ zc_Qo!1+?+`al^=Xe01auy)P?DHeWXG^<-Q{vV2)hq8K-2S~70Nv}D{YMa=(sK#ZFc z3bqtV&X9YGg~bfR{2w4Be31zAe}FbVLv9!e$1ET&Jok(XB^%?iUQfo2NEYMr62-WJ zY00>fX`6^!hRCLt3!gjSMtn5Jl>HkAG04XbWzwMQq&IfcknY6dN8dNb&C@)DIT*J9 z**CQ@#0}1o`{NyAoTA@?HTh)Rub{(&Rrz3H@Ssp~j@-i*)?irMJpzP`ZxXfK{XmcF zbL6IeD#nd+2|LE!g_3jRK4oD=hGEQ9H{}uF;;x~y~el@@#2eVj@@w}d&XrUZg7s=t+$DBiheX!=96)4=;(Ycj*qZ2oP`>*?Q$lI7pVCCa~5 zOiTY(GcEnw6vfc3{E65$BNXf@l$;^Aw}s6y4C9|bNc21r#y^2JK0|J)6TM>i=f}MT zBgvj(Bj5-~m&Z?^X{A6+Gs4;VahrTsOtZz$bwrN$8C-)H*J!MN4ffkHFf#(GDthnR$$}Ca*j*yw5r+{^j{`7q;}uBa2llz--)ij^;Hp z??LvpVjd!Pvc_M$@^Eh4vtOoH9z{P0dkFBArxPD7!^b*5?#iw8%F~IrWMr`Eqvn|X z`EeHsCFjRYS(raR?h`;@lRrQ1gFqXfAGg$O!s|{3Nl#vPBwH1#c|EJplw?&QeRQ!s zGxfzKw@R-&ilDv5=P8D6_jRg5u~4u=C^pePW~JE>3SKXioEvwB zg>@L#c4Z(Wx=Yk@uK{}8o*Q@N?J8-1Zrm4zl5^v(wlIHg+%-T*v_CiQa-hfcxp7bU zzM966)8WEkbD`wixU_|hFs$vK1cZd=iCXR-^Gx{T|J=AEG46(D

    %$nDB=Fg|Z~sT8y&Sv&E=NR*O-Ws29qH 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

    9iScRw^eh7r-t`fDvcY&~%31HSNgXrU) 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

    RmZJ!4@bL>2ce5XvGV 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 bGsC^pJ2&+?ZaFTT;7YXuCT9;-A|y`9~ch3 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

    tQ%{~Hbb@^EqiHj3@t+#5L=wAm(-e~*& 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 z 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⁡`fX%V>bFXA`bCV?&sh!Vmuu=b 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

    QOU#U+%+L4Vgv1Ixmx;V>Kae*#QToq^N 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

    qt=MRlADJ#EExNnd`+;;^gU-W4AG!qiR7 zxMZ0Nd@}FtlezpLkvR%}R^|wjt#UY-C-aDbqV5V5nFB=TKI4kN7$8k@*kq6$CJ7Gn z>i~xdB%zKRnez|kcsTKHhd)+Ju>AFWV#&gzY5*$ySMI_N-^HHtB@+Ocypk zdI=S%#|v+Ec5q?}!JL)IQJlEM<}7B8;>7Hhl^&Byv>^xaV6is5pWwC#X2emJBM+XM#b+dC~wu z#Y6})rn^U4NKkPi86o~IIjA^c&!*@~j}SL#P;n!aL!*IVHz3J>t<|+mxd`!wAGd(X z#hGcI-%1UK1h4m_JJL*Wyr!k|>`rHm=K zv;1`s;snxWO|^(yq~c0e?f{Go4xWF8>3yjht z#PzsB_EOgJ0^%QTAeq9Y#{q8gE(p#yE<56WcOWVQI=y+((2hG>ocIV7Ybfmb`?;`YiH8%Hn15VDh0QGS z6cb%SgKWf)(7s>^!-p+6W)QRR#{$x zY^g}CW?Jn9k>>u!3e;+)O;fAf5YuQ?kmE}fIW7@(o`d($p-#MP*}kJa^P>=&$eOg2 z@uxXpleO=n%Z5!KN^(a_BK9~}u7?I*T?N&GM|Csv@FFGs4?RYOIp+Scj#9%^YUa&- zE7d`bX|mjH`=iWInbl+paNNLbH`v&aq89V4hNwku@yw?dqc%+~(jQ=cs%>UsShUT3 z1U#-IDazdG1hq|On8*%32-(=ZQXu362tbwX__6Te;%{VIXO1xl({v!@N-{bduUcY( zWT68gFUIWWB#;KTdg&9afPo1hK#vW&=o|t1=G_tdf1pSGop>%%~ zK28XHEFsuV?D260sxoOi%**D`~p^ed#KSmK>JA#}N?GxfS?pum7^Ir7z|fgDo4^wvGh*>exC3J}yUrYG`g5 zl2L&`p_~_$NeP+UO(q(9Oj=@(!(O`}lDPB1UtGgs7i&Y3<{WJpfB>W|e0&0A=nfxC zgY7WBRQR}roHAGd3#lOS^?RZPgR~Vrfn=+M;=)~|4*)@4`bwt(Tl@o?Ce_dmf@*ke zt8Vado5!t1xHaJ~`P{2~NSa&8M^CFDEwRUqNLVo%kc5+szib%Mh9pfH8(R378CDgA zkRt^?mg-w!gw%t=$4%t$)4QsHb`oELfO+#hKCuJB#{m$CJtoF#V~;=jQjHEd=EEVX z0TxpOuVyF1$BmS^=BW%64g)`Z=A2Y|4W9A-^yb%4igo-&i{J1jF2WOki0Yw^aH3HUh2 zg^$~Ga5~1~Omp4AIyhlAa+ST7>~Ied7&RN1n%StO@GK;{*9DM9^{p=&{3T!0KmI)`t-7?|*xm#u_($1Dy5{~PJjJ-AmNp9elio+^2`Zz$U z+hG-N?5@$rqT&O#Q6xFjL6UPkWH{60&2f?BOd!cQxCq!Mdq$GGVscr5B!4hef#Dn~ zan~)>5ek@XZK}*Hv=z8*VSmxuazk;q5;!~LR;0o>)DpKWJfmX!5x}x$EpCQxQ-h7u zop0R1qabH}R-TF0_>2hzvH0=G2ORvEE?$~*DQda@>Pg1+n(To3n>5*kWSb_lk!;sw zCz3(-RO636=B(n11XQ^hNubJ&__3(+No!?tGRGV{0E+WaW#(~O75thDVmndgnTS$> zeYVRLkf1?7NXZ5%Amx+CB!QIo3h9EBHw&pCD`rZq8v66C_9G#F*ou%F7VJfx#zq@a)Nd!N?|M@Pl+n4y69? zqNKt9kB~a}cOO-hgW!d~A=5#X^K4E8If^QWZO)&Wqo}g6Stm&)T2PzKDU=+U?$v2)#h)_h8 zGo9$;^Cb)5z(z+Ovp4hH>$>Ms81tAV@<`lci7<&F;~dZe z3O8ao6i~PU3Bi_)BmfF$piaj0By2e#Z18C%dtgPL!=}Yy!^K|MbUJJ@m5u+vihN`_ z*m40`5L-@=1+nE0X$fq(OA^W0@_!=wxB<$c>A;HWk>tPD>L^pL`P}`f7%4N&8Q+WQ z>qyXi#&1Gn!Bv07`4gzpa(u%Gy_ zJEjT3Ct0ryS8TZj{aQxN6cYbhs~eee#qIn=#AT*=@;eom1jW5)h!uB*x%5#_T&Y{$ z?uy&ui7U4t+KUyp(I;*##l7wV5x4Uq5m&Nyq_}t>z{~Ao%jNXadW$|@htLW^BYArd zJeLjnz?Oqp5zXfZ3bxF&hb`0XD`jcM(dn>dLdNNV$vBJ5IgTu4Dho4{u;rc)tk};s z?RH>=FrKw}H*8tN{FCPUv1J+DamY`_mZ=z1fC5LwCxsV%N{k_Fw&q4QdWoEUobWDV z2QMD}VQI9Nk-rYE+|J9`cD`K3;Zx-@O4fuu6<2l-t8gNZ3m`xb+GCN~8*wCZCBvY2 z(1Z_Hb`Glu^vr`r#(ZIU|Zj;_gEZl><)4+r@OJS8yfu zPF~;w+r!BVxUb3JevjLLN~Eb*rYklkAejp}8wKG^aCK*zU>=uzrt^{JcEB{jJXMMY zBvTUv^8yMqlZ1ukn-aXs&U;&Cm?t*1Kr=720?mWBbAjfhGb}2nQE@ZN6ll(tp@p1) zWRm9Q{T$WiP_>)Ra#Y(6=KWADcNb5!+;n5A}1#3^%gVUUb>e>05ye zW(onY**+BM;+5DA>cwS|H`idZP4-4OK*b)qucO#ZD)tea-KaL3kJ7#r>tN1+oVf}2 ztWq-LXsOaDtp#bQGzE5UWVQ=CcakFP%#EIDs*}4v(^My20;Z`>x(ZCEs8c?CL`%JR z1Y?$+*Q4{zeRwIImMZ$$Y={qb4q!jzHY%`l4hX=hnfS4=WATTwg)+xn$Y@Wi%m}WD z>BOsy*tJ>cz|O_L6Wzz9L0~CB5ZqgWeRAaTr@Qeg$Q@P6X&1}2Bq2@U5_plzPe_UV z3|)0CZ6aQ$Kk))y%YhN1#V!c_#-8jWl&zPyLF?;J++f8wujATFeTAg&MtwliTwEMT zx?&H>;-qjO>B*YKi|U}#MV2dYNom=Ry8C&FTSBHRCn z@5=NX)cowOR-Kw3kL~Nb_oXl9nCGwo&%z zh+sWZDuSm;Cs1U$bsz~(1b@jVOZkvAgLFVaup%v}bPE!;VKb8Ock!1E|MjkDf~0vF zyS;--GsCLliSMY2q@ZT0e)&tP2SugZ$f2BB+}B8)1OhS#tp?;oi~%` zH8+B-b#5xaHv-ZHZs~$Rq6YcFfj=vA?WAIdmoC=fQeJZ&2(+$5noRKH2v^SHwFo=0 z!kxHEbS~Kwt#BkL+>sQ{9?DwtRH-s6^DzsPS%b%HS7j#In^|Tg$ZUO=Fl&bJc6>QW zXJNF+sOof#IBa44?m9SOcKeGuxN>%Q9SB@kHZWhGhgynClXg+*3RI}zR(U)Z(Ec5S zF>jPbrMJ*!mJDS#-odK_E{c|0>FmTUDD4}Y_V2){2VpBb^C&JnQi0PPAh3H33<08k$)eC_cjk#(O- zcD}h-Q+n$1cD4@pG4pFn$j!-yA1D=XmcBtM9FuP>5u?6%s9@CPa5GXc>freB?9T$> z*gIz6p}d=XF+6*5;G`GbPxN`^kB8EiPnGkg z;DEz-ief8@vL0Pg7@t_`e6naxZUe7M>#n>I&_fp}uJCln7UXt<;%8(M{4E$geaP6@ zk~Ld6A1y98WYF|)5wIDK&ygCYo$-`vM^(8&v?-1qSy`C!`C=#wCFZ7o00oOfgCN53 zn;klK`se)+#17!c6MJjhKXc76N9-J5vutgak<{$_H*~bj zH6LIH#R7Jduy*8I`lTy2D>>PZOSXu;tta+pH>%jB5ZjqLc^m?+8rMk2g@DqTi>_pV zP&aFtxV*rH>qohhW(vDbo++zGCC!voLb@~M6(Mz|Jg+tJ{qIbjDLrXL=0a-Efo?rt zklb@wa?i*4dJZ`~SJ|F>x{U0(G_~hox1PTlnKb54gmlOJwvamJSF~oE+1&O_?v4TZ z4VXPwruJOct>?>=dp<9@=gGdFk8^si-Bh(r?oQ7YNINr*X5H*7Ytpg?{CH-)*K2B@ z%r$@b*xDy4#}J2qL4VE~6j;`y%;~NcX>=FCkH^xqD@*2@H6K})q#TwjKUbFJut~>? z4W}}!xC_6Y6<1g*R%@P<%UWj1cH&RWk$%meo{=7~K(W7*Kq;K{`%N4;3+4_sZtUb7 zAi!STlNvH*!%Ro^zlXlji91uQuQ!Mv#`h16@j$ngU$MdbGx( z;biHD-e|xT*q3MnQI>-)w{*nPbX>%L&6WsuY#YRb zPD4Cs%?voM=(+)tkyVha0+v+)>%f7Xk(*akb6##>%rh6DbttxIOzcg5CjPB4;=I~1 zzWr6#hSk4v)v@cAMvInFZwIN`;6S}Gyo zXbFD2r=^WjM{CfkL&n(lrMS)3ZsrRG3zG>4k3FAe$64pP>~@+p;OswVR!C(#JHu$4 zM?IqPPHfDL$Jdx;<_t8(R%hLYkRt-Gt~n6Ynqn?b9hkCQOVodC2Sxv}1;3mi{GGq) z55xxHF7WRD{Sz=}&M?UJXd4JlH&pI%<=zjBVpq%UCti|-zeRl)u^9RTG<A00TyD%V1l^N{||X@9#Cg- z^^X&iD6ZfV#l{5{6}2jws%TumC@!(Mqb4mbsYF5rZ?27PqSU2gtCcn; z;*Lv{Xf#*jf;(ze+()A|S{GdN`+Uxsd6vt)mkXwS-|ze55AK|KX3ort0LnCDkA-$3E9d?YJ=liLI z;rZ_L!w7MX(n&?eLUPFzXxNjuUirDRPP2vdN}drYd73Nv&hNG4QZRG!oC6l`=IjF#F zbA58jHT_DSr~F)-uNBg3b6iNBmu9$#J{1tc#JnPVBZG7f=*T*~> zu;pRm-wApv6Ip!PjE3H95dVo2{Yo_1e}} zkP`khKWNX#K&d@H<=YY75Gg?RWPASENt_G@XU}hnE1W~H=YPGa47*JB{8ldwY|nps zPQaf394}D{+4Jk8jcU)I{*B-AWPAR?WB;S}JT6J8K`(D_uA}k~-J%y}H0g!eKsNo1 zu|b=D_y@4*eHW)1`&w?kY^E*+Z2H<`{-ZX1vPgcCRX;e9oV8cbu3!FM(5`=5sBG-| z#N?k~*T<0Ax9iVzRiOP~jt4a~yME*ZjNSOCQz`>?{S~Vu+4ZwIKc=zk9iTt3egBUO z{`cGW??0Y}eSbx_*!O?I&p`J50c)=e`@WFJQr(~{Lx*Ru@888)3c7H;9GjT$ncVXR zUxsO!t$lye<{_(PqLAJ?8WB?0(LFU~!qk7E>u4X!bnEDHgt3mYIvMc#A91QaEBpRM zn{Yt;{uU%mYu`UKd;t6YEac8;-&Zn0Cj0*9w){3UJZ#_ZkHWLE?^j*s+|`@ZR4zDbwLzWTC12Db0>P6^oe>*1|*y3AbsarQQzlF+4tmm-8@zqLnY^1i3;g~|z9JcB*MRo@lSr7>zJK%Uk29ag zxg5DO+V^KNK_>gY!j|9PzCRI#XJy}ScU!=|-&+osW@F#4XS0>jY8c6E)>`oF`{hrk zwC`V$XtD42J;yVY*Jp4r_WdOtTJ1uX-z3LIv$5|_x7l)-?GQa}8a|J+r(bO*ayHPG zezh;Wx|~Go{p3Pw8L4P zL9ZuE`~JY{@^#zQ1OEz`kG5C8l!NzW>wGLE87#mSqDZ zVvcbvNjcp`y4-`_v}|Ehhz2;V~yq?k=Ma}W3l_Wja`^~KwOb(r~21?~Im zK@H8mkL-f68z1$z-2(RgvmYhd_ucOd+P=@{fiW!W3CPQyxBuuw&%Vbwj@0Mv8<-8N zvK%qP>e_7S<$~|Pw-MSN*26T=X=ype2D;1Ay-3gV_;sM=JbuxdjCi1^ULtTFe|8Y!qFso2uEvNEws)~ z71CR0rwD27e@zMd|DS4GxW@9dCYuTzjr=p<`B5}4~ zLZ#G6DS0Obw!29!4#t|jJK1%}))C0ouGv~c+19h!7;8o{TfqJoUdtc$?0+V5#>OiW zt@i&E&yZf9L5O-b6$$0fMh;i)W`xnX_4x6teaVelZN{3Wdu+Aq0@-RcTXiVg={6f< z%^{Kv>PsfBetY`WW+E58rC;q!Pxh*PEQ6?aE2`~=PAQu}oy4zy@_`;2M~XBMXBU~u z{P3|IDXe#Bq_F5P;(XMI&`3E*NN=Q!71G-OniBT^D>_orNkvpVxn#;BT=JX4LnU_$ z>6N@lNNfLVO4$FnDVnJpS#n2m$*uiLo)Rwkh;YdV21*|5O1{9BOzuvBf(p!%yOT@q z>{s$K>^=wWe<8g#KP9BK|1~A-e_JxSyOI+KLv_ht=EvIjpt%WBJ#vE~@Zl9Xe4fMwYZopf5v z6T#Ht+>jP?o?(Sln`g$i;`t@Vf+-5`{Yl;_P-_$p2yc_$SR!h7O1=7Hi-Q%>D_sJAz*+N zur?>%uJ*qai%32UoX00=c0NSyf2sbicynY3-`@>M^!(1e7yXvkBGw*OVbI)PD#mU- z!tMaNBx%7r6riZ+1bHI>x>+)+O=F{a5ry7vMIwj>r}CMEb0}%%77N5bwV$wbgMHr1 zUmUf^dmk)+cWS>wQrc7d?Utw^Pd(N(z9{L`euoszw?Kdu>qWi;?Eq|EY|UYj#1@ah zL)ZmbRcOC{!53N;8R`ii2F>sG5TVr|?1Uys`Ux!uO2S(Aprux5`G^V%O*0NrXu@BF z7TP7~V0{rSXZxKjt5^{yOF7%`WGO;py|NM7N84DTi6lN=WDWRY%H<8Apsk|y?reW9 z9tDo)^O;$Uw<4z+={(ynBg~!ckA^eznYk31#f@nrt5aPS*lKeODD@#q>{O?=XfY_- zqI_ouO)36*XZyQ&wtv{x82|B6CvK-cgv7<)us#G$eV*-~^|JU7`5^n9?dKVwEYANN z;rS1|FtBp(>#n5p{qO%R3;$r<`QjgJiJuJqK^r^e{g14F&6E4n zoKpJ-d}7|cDZ~E2%P>vFKVWr2R!=V@LjJ)?->n*4hbIc@t-}!^bsgSQQ{wzjx7r@A zv0TNLgE2-u`DgGCe&kD?F-l9JUYJMI`v))Dge97=6I@gK2e%+$+Wmot@Sby+|LO1R zo`u{Q{ewy-$mAdV+?L;lhKK!w{rQr0m=E=scbxf9r*mTseth#`^*^aa!dSD(E$ljE zs}5wV(rjg+Y@fGkHpZIw<{_K4Hn@ljukO1&|A2{{F>MWaEsBY&oH92it6nH9JW*)R#SQT?egB|_u_#I!2>V7R^w)dsNMXH0BZWnWN6Mb~ zAVt7p-CjsL6)M@pWi#QC46bflz{ij0Nik|~RD$q#)UD!D^QujCtq)RO0FN}T_B zQcF(PjV!r3x#Y5bB}c*~?;b9B+d#>qUCBq=lF8jEP*8zca(!~iHT_Cnirwpgv>y=C zYx8^|waqtZN}T^$s%<8BS8^S~&_VJSweAc&>(FOyeCGKF7tYmT#aMHBJJkb9L&_=Q z`F9L*f1uQ|Y#__AjwLC_avRICHlW3WIN!e!FNV?hmJ;rrZYfsU%mZc5|2*Lvd<7^d z;2)4QpV2-T`ucx}W`&i}xz5dR>DgVOm2Lcl)CWo^b`iRQ$f&lHH{!+?K4(&X(Q z*dJIA@5l@J2mbl~*yDc7>x5r7rNyAR=I8%c_Xlp+Ft|Uk)jgs8fqJ~z$<3F|zDO7} z%{%;G-5fY`=WcF?Q_+7#M zfr~*6ZGT{E+}P*&pG^b%1Ghbwv_H_n`EhXPf9MBrSx-PO?Eb(L2YL2AoraY5eFL+> z!0X|xi$VOqZGYhXYqGKbZ&3RmKN;-*4vv`L^{$Nlfx^FFR&;~10en;2|9oQJ{Zoeh zftO)=iv7=ZH)Pe6G9qmMe;Qh6CkpAUvk@V!{jVuu|1Z{cmfYPs8$}rFEcs`$|8csV z`Y_=Bz>7BF>;dh6B;+!Ya)02V=LfR?kvp^f&jcCme_KA)Aj$qm;T$^M0VxI1O3&h0 zJ+2l9O%t<88@mqKXq-6Vwj&JTw&KS(R6d`j*%)iyyB^uBH9>ntcy<57v;UdM85{RX zwA%lbo+1733IvI5p&=}PHgdS~n-NC&_4x72Khc)YSTlv?Gh1CCTdiiR4rM#oW@D_` zNwT57Wa8?#v0rT_a?z{!)&3Rh8dLk=dzN{)m}-aTCMwtJNuQq6ua9&`(H?}&GUt{ z_P?ft{r`}*ncQ8;3521#AF*Ng=Z_m@c=qG*XUMB|Z8{5IzmM;cDSOJN(#U3^<^yt09B zLMvsC8iq=+C5BhP^9{8K74rR}u_f{e_ovM}HGCOt47`cA?2F02qNuDw(#9qhRhi*Y z8q%_*HnAwG>WYf9E>ZXz;Tl)O*FOC8k5}AR2)T}r@Bf}id(u54c;Dn$)TQaQslSZI zF2dWm#=bdqLw*D1g)?CdH$GC0h-sf{BGjcWy2H|F=U-zx-Dmz1+bR0>htWmfj;M$| zJYkX9uVVPa@-kDj%^cARX-tSc7L8TbaF^K1pYjz8|0$@Z1AWdrEnT6<^G zzXfwW{TqIor++;igVVn+8m#^uIw!sU<;{>py=HrxD3$*0q=|6;$0kapf90B}(DeRM zi%X?{b1t^}cRv$_doz{(jVL3pcsl)y;Dyo>o82a~oZL?es@a{~CYg>0kAN!Rg=B-&*~9<_cAa zK06_W=08n@`OhXwrGE=F5#~ReD3$&#(nOg5Y@$^9x50F)e`A>_+?%QNZ{|K3_3uTj zfP>S&caF)df5XS6)xRhPU%1Ac|4vEPze%@e(7zX;u0z+qBRFUS`u9Gj+M(&+T6<*D zzXh{B{Tn{T)4!g1gVVn+F0}f0=iJgxo|&Zz(U)re z(?pp6Y@$^9w?GqN{E9wvg!#`VN~M1r)LZ=<%S7ScOr?J_OEc=-?ESc zjr2A7xP&aYNlKy^FHbHUAA33yd#pV6ay0go8HuCpu+?YD3-##`?9uqlirA9nd5g+( z8}V71Vgf-OQsLn+-&f@0$%Sh*t{66L9WPgG*ovy$iukofT}U?}c1+=f*y+U+V&|1i zh`l3LIZg8aN`JiEuu}R%-WA3UaqnUqN{_VmE;BZ&OHzebCBfkWt5O{}1Xrb6 zp|L9QfVuF*!coV`zFMBxRjJA*lU0e8OSLMIh13BoWL0uYo~%k7!KqiJXAZGF*h9u? zRwa2BOSLNL6SpcY2aj~Cl0O5MO$xlPJdT@)-{EcOGd}L-0fr?_?Wn4DC$3H4qk_@c z$fes^1GcF_PB(ux9?<3ZmdKpgtI^mu_+peCnP|a>oAAX;IR+8wMlh;D7!*x45^Uo7 z9vSn=_?9!9QBoE5YSc=dA4PC{^ZZi$MB)*Ghi{%q<1x+{^W6-XLKX3Q8YrUpT*mPQ z{qN4=c1fZlwh%Aw#9c~Uo!nLxK z@W^s}c6xYZ*REI--rZ%>^fApkOtX3;!Xs`UwrrJMp97sYXVHYlZ-(W~=^DRRSKi#n zC4ds2C~x>|*!bqk#=R1VnTZRVk(pf+@*-d0!(=6uv5zbBBA-^YoC)jTpEI9B{F~91 z$)yuwOAuTPU=wl`0mwG!q4H@VX>52G^xmgKJA(fZ(%TWdMo8Te{Jo}3n5X|bBFBEe zsi{!JF0g340AYOSyI?}>MZV_xsu zkV0pJmmNUO2tL+SkN-HWfNKyKC!=mTO(f1p)A?JKc!{5-Sh5so7K{OAIY+ZF(lkky z_*@c{@U#{ub8=+NNsP(6wMXFgC(VsJQ0_fYZp6e{k_h~85xB5%0x$jQVM_e9rPA{K zA@PSH@h64cp*!06EhWBC$i{Ce@!K>dwDJk_39eW`;;CDL&zDjv6Zi`64JWMVipJ)$ zwwOuyV|Ib!A#Vr5R&ebIKGxKV{}3D$n^HLGR1q8_&Bc1MbS??D`Rry+I{!kK4y(u; zzYL5eS?S@zxErZ-5WHK_a#I4-_~x5B@e_%UFXFV8tE?GiiY#jqWW51clW#O{{2Tbv zXaO}e9+#xA9473SBc;~+CW9b&_u$9zzNJ>G%_x(&NCylF^6tEpu5dgq4`a&BoeMxs zd2JBf`U2dJQ*Mkh7g%m2$n7-CO&;z;Zt;bSJ?Vy{4`FVb3TOA3oo%`!q`Wr zZ5Q2ha`CjSqI=4OH0@{6#)X`Xa;D`sOur-t6Y})dbEewawt3PFWGju1eQa7uG*+1t z9b4HmZ5w3eBsFbQWaSK%Gj08b>5Vzl)^1$L>HD0=A`Qc)jlln$na@ofr(SIn4F-I1 zxFGOdaOc#<`ON(BJlGiH@>`n3Fo;X!{dkbGY`cos(#pJBpNhth^uALU?_i$I@Aw+6 zmGJ$LMo!D*=4fnKw52I3rIo|wZlb|3rYqWl=25aC!3Q%Fx(s(L0>(R z%jSHo)fQHF#H2YRrecdwiZ(YO#(wfIRPt<={K9QGL8uLkw6lOnCqMt#i@@^I$c#J@ z>6q7=C(nvUbIpC%y1n^GjdzTrvc~Mx$7WBii7w%^hekJ*f;o7!S=o_Y8??6jg z7WW{;0n1VqLk!C$xctc6{M=9t)`kM9DE1#2Q3bUx;3^#D6X-a@WeB@Pyc7wF8HsTb zDPaKno|Kj>+)FECkC{uVu@uKAp<$Kn<}O?=$B>7JMqj4tl-IOBN~A>N@q=?s?KPf6 z%Y2EJnSXvI5-pRJdm-^D9B2P4qN6atm9k_6f%)q$l> zvDNY`PBj&=GkZt@E8=&bVz56U7D|${1;dmirx1oINeNJrrHtt($}TYF{?rFc1|xaHNJ6svqGR+%fm6e(8udRZ*p?dc`Slwz!c82Qlr`z(s_ zx?wmyJ&;1?-Ca4ed6wMLMN-0W!z>qm1GE9OQ%4RxHW?=gtU8JW`OlLcM!iaprXItT zUbT}RH}LhlSxNfmI@^3ZNu-B{KzciNVOhg^jp50)3qju76-mrI3&a{#E z$ndgtCNw5iVA&qmu=j|ZXMSb1(1KHy}nPVQihmCLlC?_V#O>VQDgG01B!@0&AMoB8aM0 z}ac2<>!cMj#8V0RU5527-hc0I*qQI%j~Sgvfl=)#w3h=QDTEtTaKz( zmEo)n8E`Tm)72dLJw|E*O47&5<3r{06K5jx;NMkGq~sGOD8Z7=L`&3@IM5QUB=!OU z87xQGnP&*nJj0KZ!H&nPdBzOe*%t9R>%KAT-lEl6($tMu%O`;#_;ljO@%iRB;ln8N z7S?=9h6MRMJ6-tXK!5DQib?XO2DFQ8{{RS31|tbn;nfZ?e-*EdOme=ez4T^;EQM1@@FCnD(MDv-&M~h{-@s?AY%bR@RX! zqz4~A5UcKyWik-Y!fRiUn|x&Y_}Bet5*#d;c~&O52tp=(0h!!3S!BW}^AuNeHqXjr z;YDBovwGU9uuCskHiFhEc0W)xN&eddG4S*5ey6uL^Z_ zQ+agEYm{jj=Wr}%_^KiQaZQ83)vYf?bzvcRGjw&;kJ9B7Gw>B2=!@ycwzt8g)PPv; z^d1!CBfQ(f=@UE?K89l@9gG8iqmiRMm_rBBUGhQ<&aKx7|9EAUxk5{->?P8*O9joB z*d${PI-5=vzEU2W)T`ycU#UAeu0Pw*TnWOKG7afiv*oSh)r{haN_tl{N^ z3?_F%*p!yZ*Q&(3P+v3L5>Y<+ssT%T1e#XjY1;f^1hGirKU^F6wXYY5mm$vl6`wZ6 zR5jwmP1%_eRq|&!JQycX##37*SHW530b?R*GZuGamGIv&U=MH&8jl;h;eQ{GJM?H7 zVWo5jPp4hdACH@Oem^{}ED4V*`F|Xb+wT4lR`W98*`J`4?u$4%1= zj4`K51|N?*>Nl)aPZYB*9&;r+P+|m+nnZVKoXw-eOZ+UwlBEFufkbi2!PN5B5t4ZW{J(<74X+sj9(Th^#N$4%PmRaDiugg}al0Llei#BC z*S6B|xUIA~0X%M9#H7dLt{(u8I}mfbhsSN-;=F-K2#@$>TTYmLy;vO zM>sACje~t$iu$_!UOAfbUxwrEI645wZF8%G<7WNZ!ExnQpaRFea;YcK5FA(ejtKN8 zz;W}Ar99_;Iw*NI_LnEYxPJ2NlF0uo8h6@J0W|LQ`3{X6H?1EUH|KYr5JPBO?%N{7 zs-J+yO*w{AJoI1q@0>mS((&mB4?`Vi_7`7qDs^-|T-|>Vj@vQZ~(YJ9(NmJaoVg&0J(R8 z{HFlquKRAe%U!1N6Ul@^lLt=xlmq7zi zP@P{;3PkRX3aMH(3%UmDE~{4M=SYFbwP=n~<~UVy_=wz5p{g+n&608bsx~Abrd>&bb-(m9 z2s=we?pMmElY9=fd`OVbe#&Q%h}@oYwUxs1pTAIoRWr|k@DRDb&2Y0_DnxFB*E#2< zLF9hZiig=Da{s)MNqt1_*mjvgG9z-EAEf3g>pb>2m2IDu$quK2L3%{)<1s@=O*pkX)T51d=-m#2_KL z{Aa1Fqt1EJhvcriEDXtA*Ej$qH)uR=-YVJQaXA;Bm9Yi2&;<@zx_%;w65TRCwGkHA?}rOpz=;9yjSkCv$QX`-d?; z9ygN*OyqoA7XVO}G{E_|`)>^4akmKR;c?dqsd(HKno{t%r_LWb9=9$O4|><(OCc2= zH*S9sTq~t;{1K{oB-rLdPe_T!75rQncU#73@iFtiQl@{s0~)?vyRxYLzeKFpQ$c-+3qt&iM}w%katrUzMW z@^Djfi;w*6iuHLu?o#{&@VG*EKCWO;=i`dq`M7+XkL&tr=i{(% z5DcG>>qSh8^KpMXS(+2T<7OZxEgtu7d@y+2)zh3W5GnDt<||9gI<$yllS_Q$Lt&hV zJ0C|fxW(zDrhq~T5R$wHw3pmJ?*C>osV!l5yB_20nswdD89=Grr5vY&HbwNgf<8dTY%Cije z9`&z$P%$T$M-uOm+u5woKlci9}~di zD)H7TIu&K+juR{%*X5m#8*!c|#1I}=|Fj6P%Gb&^skf(=TBJGemWla@*$9e#p4J7 z1!d=*kK+S#-2p*7PQapgWx`xJ3k)FJ0($JH7KQP+gxLeP0f5Kh@@pj5osUbHEf9+< zaEixGe2>JsO(n2Maa@8w?wDM{Y}BAB1(n<0rX)a*l>Bk0C#j3y%y|jY(*t+$^!ds`(I= zfJv~Sc)%xkS}qs;1e;0P5Z6;*vvDn)S|cTo*-{Cq_%@cPXPq{-L@SB4K%hmLvAGp{ zNQ-)y;XAC{D8$3&mf>DMyk)7*K&R!FDxXgBxx?}yK^gp2`Q)Qn_H+}@S52u49+fN5 zCTq)al)8;q(a>JuH*O0hq>{UX@PN6s&+?|ddVevlH!~iWX|G;S$Td?L>O5qSxokL#Q$ zU|eOrdE;nB;_!yA=cX0{607r1#?_ea=R6n=oi!QtQk>Kti{l9LlIw{1Gjc%wm~m$c zXJT*{Xc@^E+?Z%;3~tSL2g2aKIZ$%;!{DBM$IBVQ;J!JEjf}@RznYIN5oI5~31W~K z+^mJv&rzQ&@-euLe-p;wHm-w@I>50w@4{*_9#^IJRhP5>mo&AamhQf4RPU>f{uHnC z8-rVxO}HwCw{`csuc~H`+`+UU96aZyT2ZJ-K7tJrlv9m99#;nM&cX?$2;y`UAp(0} zb>}fM#28}^re)%vk7FFCn_nEpPT_r3Uhk0msz)jwS12^@s~(sI9+!{AdZ%@z-B-;5 zkAsKUL;(cxI5sSNmvQwuA*|-xKa%vYnq@*NR`aHWaXxOdQ++&+#sO_B46`^dYhbiN za)QTgyRVPOxtj<~##sQ#(0`Lq#ieG&{#@;v>I0nWG)cb2<2Icucw7xC&)(Ggs@0&- zp;7$U<8D{)A|1*Yb3ue-c1cr?&4c@@eNa1OF!-?m@NqR@z%=CosZj4%XR1DR?~9jeB5_eNDUKaFDVIx5aKYECh zIXN=s4#xO++!u0U9lns2zu9suoYY@f{!&d}}^3#oJv@O)e+C~T3ogF39>#JtOIyl8x<%Xm!#V% z`(C8fddo#s@Ja%eN|3U(|BK%GgRQd zDyQ$%_f@Mn#AA~&o%P4#_{_XhYVo)lri{lKnc==_8}sZpUEnK*!}nEt*j)->^&%Js zu;>+r@2d*4=YH7_kCTeshxia4SIY`wR!)P*@v#|&)2fu1Lyjt5T%BWeIm)-xEY|PLu=-a-DZN zi8xXX)`>P$giEz|cU7n;o^Yt}Ng2X!K`(_e6fm+REjYL8@d0q|8@*r-`11He9XNN0 zm989?yQRjHZU~$!d_bh@gL65^6%a1Tl)^28_VJzEus>i+sWht#cpNWYVFM<4G=G=$VWjW4)EU#oni zE08oNXjdcz3lQYr zV@JLZBM7=>zdnYZihL_ltL<%co5F4Kq` z1O3m?orzeusl{x1JYL8?xet9(5$kejU6*OW4IiYb(KIDYbEQqg)=A-0kOt-prwIQH zT^TRmCZD0(K_l5q{u#Or5lPbq{Co?f6%^L>X8bq{K^ zbJW@#ygK@%=3tcRk{mFHK+qEC7_Ua5;&e>H*sCQr2!@qV#7mlLkieQ8)d-?$QT({7 zovj5i${cB{R_5m@)f~k(2dfs*9E>ts+o~};D={imH6~%~igB!Puxh2KnpGMOj1)Ls zndrw{X@kY-3_6SUl$0D>M+uf}ert(Z66aW=nZ(H;AcJ0ntqgh)q!EW7Cxau4)QDq- z!?B{Hkhy%$x{qVs^;8S^bRpLA=|m8G+VSJ~Y^8h{W!AKONRZEW^y%~s8|iSmDs8g1 z95`Jcw2SQ(e%Gw6M1ssO2jSs#Q;zl~y%0|K%3aj|$zhzX8)caN&cTyxaJnvY<8&sq zINi20&<1#r7)n+MeW(qDVDRIF@X?kcOh%bi_fTPypb)+)2ZNM2og}|!tq@Mv!BOhl z6eNRlv^Tr(fr;&;^5JzybNM0=ZhlS+*CoGgfK!QjG16Ey8Z<4MTRE zBRDx{aiz5#RS!aTj~?M5yB!Y91leu+&|o3EWe*)Yr}KiWIg3rh3o`lo3VH~mWF;eSrxKN#_QU? zmG{fF5u8&D#o={*ir1a~n#1d8<)pytdbkd?==)M)O}#=1de^7HF6dJ}d9^glPYV-kdD3ye=eO$yi>kf3^HM>Gb^h79TnLB)2;w|!SQzKory+#p?Ifg! zYzPoK6VI>L47GlS7R|sI zGhH%ZRRh7UKXY%^st4;FA2a3{i4iQX?F}v*31WG3CAd5qi?gU8mdAV!T2d_U+24k+ zyoZJKu)I5jR4ngiO(|I3JBJIhl++Rnt3hxSOR$gGf^Z)nrQ95rcaWCru)MKau3&jP zYs!Q|RPGh~=@iSQ+_a?t&gc?+Sgv6(H#Rg-#3+O5uZ_i4=12$PC|E z)}6T|*yexlnT+L0vIj;8<1))wcf3nM!MZ5MkFzdjDQiZVc3tx4k|66=unu5(;`du? zak8?nK}u`6R3ix9QT#aGCCZyoro!?jLEd|VH*GO_n5Wzt@XT_nM-bd<@#DC?y|D;^ zQRc@TRR|==?O&zJO&%^9j;6;)ZrLMP-VXQ)V0pFfY@NP)juVn#d7O{*rL?TyJtxdo z-M1f>Cl&kGK1o-;B4L2h)H|4E^+DrSl)3g*kO759^$zP1^#w^fw`S#6W%cB zVuSY83f10R~atwg=!yzy_gyc?!zeoo$Y@@CX*QN7fcU$rJPiyBZ$ zG_DM>923JTwTqlfWPRrw=@L@Uh&#eaGNqVHAZ9)^?e?fff?~e^ zPABFLls*VCr#OSBHSxqO46T?&jVWegrVx+5r!EmXiPuG`MX^?MW^wX$Hc<%Q!`qTl z$ai)SHGSk<#rI0gc6(WTFF_ra_taf*uqWFPV)`$v}oZx#X+~e+W!tD~_4*W93yt`9@eOe0z`(SGcGkgsK`a5^FRB&QIfBV6GxSWB+ z5bRu9j0^*go~xGR#G=w5+&8J0j|=(6PkliW?yChr)3eUO%DBYCsSs?%O2j{G!!Zo!;6 zuzWJs*KKAX7Rprsf$6-`EqyXqf8vH6_7plS0RDBGYjM#Tnex3%y_!jX;(g52YBNy) zQoUax6AU0uEe;LrHoG1rktK}8{Gll~)yUb5$6a}i172)t<)s0~v93YI}Gew<}s z)>ZR}b$Ay`C@uLMn+Zr*AL@e~20zR}$n8PR!6z)bu(mjka5!eK55ee3PH`cwSNvgA?sSL4}Pbq@nQ;Z+SXO!|`l=(qd$hjoQ z=aZd;PcE8e(ZDL4+N%kk+N0{CWNkUXnvbAeY_IT(f1~Y0B?#6p@B

    +(3+4J3Oz8o?g5Ee{z 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%0AK~<5jp`m)KW2MCj&?c{$HEx@m?KBSNosD3 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�{*9N?@CzbF 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
      jZPF&xr~%|emU^= z5yqaPokiQn;cbR0<*kSayh&nSNthdeKHMLe3dUPQdDk2k-pw%M{Q#lz<}*^>6CQXM z{*{w`RdkN%461Lw9Z{vcwGe@~nwVD^=H5Ub@YZB181Km6>;CXh;oSo>-c1OVcR3^F zZAaeI>&bge^swjws*krXSd_P^fF{=$^XkCdxw69Bn5kgAtA8iFUn}p?81ENR-hvqK zi#U(#AdGE9TZlG}!#f34%A1J@^SxKh>j!gPlsBEJV7z6O*JCC22bj&bG(w&4sc)k5 z-CqX0vp(T`r;AP#okZ0a{>A+xDvR#8^MItV{uQQJbZcx~#Ptoa^`l&09b5k$=PSCx z)+znEO+6m&Hud&H=&IMh4iT>ZLox4tnCk*AJYQ>>3V8i5%l#U~N_@Y9+4T=csMnvy zNT09$Nxc4ba{Z#yL?=;w&(|1Sh4S`61l}HEUMHBFi$2^RnF_``c&_mNd`Nhc(7wL!t+#gLu`F5*H_2Zf5eoF zu86Jg;rsvUuJzH+!(%u~um2w2l^2rxig`U@t|hqed<|qO;Pt;G*PqDBO^KCYcKyYe zrCz^dWY=Gs*Z;9xzvy_;9IEg6dKgv8+nsmih2)N6UK^Nu3Vp!am8oF7y_EN?-mem9 zV7w=z_v_2p{kopKJJ*nRi|7W?wNxMPc~mLySM2>l@-8uN3(S39N_f9uDj4s)*)rd0 ztlX418)m$d5bAs%WTf-W#(7*VVXQ8iELuJeZ+%oL?^TGvTSCmcPzc_7%3GSLV7$j? z3GYgD0q-X;<6VYOd4I=9c|T4B@95Q>?+DQ>(R8Z5BL6m?)#P>g# zUH_X1_4;Qrvg^Ns*Z+}Rzi5_dI@R}lRYH~Wp4R(yRPWa}FgF2xz{_ViAa7gceT|j) z{Ts}9Uq-0Bd5n~|9C_D$NZyY`SBfs9`gj+iN_i(E!h9bS^Txv5#*)IzXE-45^D|_= zx3Cg_9|$wv8xbmR1xCtyKhEPS3S$}3MA72ET+X`-Po?s%Km^{m#Jt5YS4DaG3LA)_kvvi&p0Qp zpa16C_5TpPUxl&z^=<;M|Ic#$qWwivslMlH2&(jcbzpD&{2}Hwhq+l=BO+W)J?2j!ze6zwe9KE?~8B0N+@S9FLz?~ii* zuaxNeDz5(-Ti=7HqUay7^;P_Q{MFXc&%-A;O0Rz*pCbJIjF|Tl%#{Kc?$-jQ0$%@f za{YI*5`RAfv+M7QP_MrUBfI`fy#AHEQ$0mHi?*lw?$^E1`}HfmU(Lk41~4}OeZbp_ zsbIV{l=raSuQRdxbs&1b{uaAmCw>O+!atGsRna-3GpIh^j$qOG))LU59V`SHl^SBQ0@qV=tZ6Vs2>bqZWMeohi znyFyCWtF!DD>o%}gc)yRgvxsjBjw$H9=x+wkaxQ1G|@>^A8%_^>3pw61l~$wUKyC1 zi$3@~RAnj{@8G9oz8m!U+7)}g)<&PNKg6D|M&v!XoV?ANH=lvn}{Y`!Ov(fNMKNay<`&f}U2V*}B;qBUc@_&nT< z=cnkOt)rg@dA|P?egN;}cgg#>=y=f_s*m>&s+4yf zBJh4F=DiPdPoWP!4}69L^7c~RQLM!8?_kC|9HH{2F;d>^$-DC%@@^5`Ai9?7=iyO2l|}z(75zN?5zkZ6Ut{Z^xc*aY{YM`EdTjj@*T1!O^z(2ps`UDQg$UQ* zOw4NlbDy7;>u<$W!0VqZ*MC^=*O}P;IuN~Ie~aC(Y@El{TFU!XT{Ky=Jk@uq zZ$<>(+G1XHn5(C}H!>BB_jsQ0ex~>9Q0#tfkKV68$L`n1{{rvmx5+y~G)pv{>f_ym zD&_qPBJjQ^=DiJb6VL~rhYy$v#@kkTvsk$)aSY6!uXKd^e05`_&sRC}u6v8TABnCM zT}JisCZS4si}nfcAu(?+%x(N$c)w*T81M6wWWIA)xhZiG%y?%YRNh}RQr`P<9#>Hq z%ZMh57XLBIi_gQee4hV$YxMK*7d)j!e~PWUbNza3eGi_BqTj~WMSTA^wvK)tN+7G( ze^4H*1 z+Fvv^4(}9H>3lO0f%jf9uOG|}Lmzw|_zVZ+ZK%8+EAijAV8&Y-q4J)JJztkjfp^85 zQADRG3?JQm>z>VEe(u$MyPIiR*_&t{bqY@ zF*W7=J0kFYBIbPrbETAb6H~!>w>~Dk<5{^WaSF_Ma}X-;-HeoX{t58*5yqaPokiQn z;oXHQ8Znk8!c}vwZ&nTSq?+i_k^y z*JMPv{>Q|;u`u_>ak>6UOa;9DU(5C1!b<#p9A?*lBSO9Y3XJUfaUOSikzBv%VbKFr z-~DQhyR5v|A_8wEF|Q2FojWGHRhbILyZRB~-JthtSL}YRjoz<6#O~LNIFIWfjBP|) zh&GPHTN^COn;@Xc=XnbJ{u1W8C~q-S!FbCm?>nr-?=N9C-!~EJd}lJ!`R+do-dPJd z-|3>$L?=;w^X-c&zjUaz0ez@|iQ>XGY5XxGokt{>-d2N%foi+(1$o$9+^ zhj1^Hcb(j*WIhX+&igQT#0f8-;efnL#|iH!R^t09%y@?*RNgd3%KIeFAO8oo`Gv22WDsL_$<-MM~ zJ6|L37SRo&YpMFe1pkQVr|35~ML!QeaXl`!?vAIn=z-XpzaJ>NE4IFh$KPS==;z^R z^!opf2-p9KnD-IPJ#|E`e-l#yuYZi(ukozJ&mS&JQA&UteEq8mil zQhoP}w@2^SUl4)!Ju&ZXnEU*&@P5ElFy48ig*S_p_M%G;HxV7$k3h4<`N!dn6jjQ1om%KIfF<^A}d;2r%c z=Q~0)OEjJ8o9`>AQr<_|`-S8&V%`Xtn}9y}JUqfwFy6MxTbGra5}Uz{w{);M?Vj< zQKi>E8WFCadkxMu6y_#;BiGMoIOz4~$o;yGmH7Xk2D9t0icqgV#K^86=W*+PFV`=+ zQgj*Bcfac6DwOvsK1KNZ8Zqwzrs*~w65i5G1-oC*XAAF2bOG-tFymduyM))q#NRPe z-urPLS5X+th$e~_|L$_$N>Sd^?2Z5Xa53*2n5&|^e1-$^?i(e%udx#UeFtW|FC$dm zJVwg%&kHn@D5}u81KXp!kfrS{QV)!c#EU= z%f;?jZ}KJxf=p9E9EUhJ$Mg^d3#~5l=6PdR50GH4-4-cR^s=UFyozp zQ0Mz=M*4is-w)nC!q`)^vuOJ`ysc5Cyw@TEZzVCW49pEcAI!HZQ^9y^DDQ?Zgm)Lr zc-JCS-ajx>-VbdzqI?zka*skpef+p~jjNa;5H_Iu>0;&Cmy zO)uST`rQ?}P2b}F$RGEoZ!g~6ZTgShrWK64w%hb8yG@5~aWCR6JsIDh*=;(zO#N$< z^!1;FLR;l?6+6eVTL4=DKd5z^UUnTv_H5#zqKcv7oz!jm-`s8J%CjY| z$J^be{+KjoBbyFduh)AWf7bim9dgg*?-J+nzxU$;uH-d^aTS&E|2L!CwBm6crv9z? zRQYvXubld0!uVU|lCB~47yLp%Vtc`D*jc=10sgnpfzd{cD>y zGw*1gW0l&KEQm4dA9jP^XJU-&6k^RG~Z`_ z+&uD;U24zuE9Os`XPe(`-qE~?c{TG==0`i}oOYRiXuin&Me~W~x#stq_cFiLyta8M z^Wz=0{|@ty&6k?LV*ZSI{$;*A zBP4YdGSzdzU>in(F&ITC3;xG*30}XFkw;ka;`x!p`ayTBzq;tDaIz zJ>zEe+`8(^uT#&vMZNGE^-u-%u+^sx)%9}o3J>Ud<`DH$<~!^sL_Oa;Z23I%jPd$@fq4bS_(kM2vzGp4KOJ!b2f>ILTES-Q@jp&qh)q4A_x zKF^LTG*6kW$A^Ebo@ZWYp7E0A3(WKF_>iqr=IHzR=ApT|&M+@955H{v%?r&_ey92H zEB3y5p?SvdHD6$!Z^wrs`FU3Vn$??!ET3VX@~Xa{Z=SKh`kIIH?fv=cAG}`h_C- z71sAXt2Yl>KEpg^xxSxop7AH^YaU){@4v4evV5WSONrz^(DyUU3(QkiS-p9l^(&0@ z{fqVe(CW<#|E%j2dp~UJyhwhv^)(Nz(RJQO>V@V7)-N2%e{6l%TD^JL@_FVN)~_Ja zcb)Y$Px(aG1qJG1%ZF^85y}5m-_J8IG|yOX_2&83FBHjdw7#3H-aKUa4D*x?`hLE7 z#^0^4d3dwE|2OrJN>^V58FB~ zlHX~4%|p9%owq~1(7eFLhF|j z$sg4BGt3LjQwpu#JkRK7acUZm9yukW} zBY9_ii>%%}Z23I%4C_}A>3hujnx`Dsb-_{fu;oLx&WPks==*u*h2|OGS-p9_^$SJv zr>yU3t2Yl>KEpiaq`seTp7Fi)H4p#G-an%rvV5WSONr#q>H8Vx1?DMdt=>G(`V~g{ z{%C!FvU>BvA9S5!?}u%j7s+3+zUHBey3RYVUT9um{lby_&(`;n)tiScpJ$$7{R$#| zLkaS|pwK)eLDvPv+9z!JkgYQ!`I35Eo_V2pMhUAo&$oV|NIp^D50|of^N{5;%u}w= z_w&s&uC%`9;j8TZ(&{107h1oRNWP4|pJ85Lo|0ts=6TkyFw)nvzU8dmys)gUQ|$e) zt@9%J3f9*=R8iM?<<$$#3#?x_lCNZaD_gyJ*z$Si8P=~L(l^=qnx|CJb-~r@VatbX zoe{}jqwnXL7n)~OwR-b>>lcdTt6AUbR&O4%e1>_-wfcU(dB(_+@|+cz=a0~J$kusp zm5}%Icd4h%)A|babzNxZ$^SS}jti|-FI=OZV)^`^uh8?<)%?uw^gKn?%JSDZXzCXddeJNR2*sh*o=daKwN%FboX=%D%Zl3Y`tK|LgYW1||^gO4o z(e)`i|Bi)a<+vt`)GOFJ*L?ZGGWz~i`hIAao+mF;^E>SP8C%N9aRui2n{^$sb>7vw zPHUrH;Tlhl4=qriY3HALYemVQGT+f$*G+7lGQ5JkAAU(auXlM_=YOLf-m3j)UQ=27 znD3~n>n66&%dI5u=l)JT@ArD1w6eNRYoY53&6D*w^R#BVUT$76>1ugDv_QRZlAdQr zDP5;stLt!ws&ZVOc}9w^3(P|=RFU_0ELC6rvYuy0Wy{<7Gj?Ai#}%08@6vV1*5OvV zKGk16W15~P->Dbc`A>zaOP{m^^(MBSX`bJ`n!F#*RbSrYT3J`vtsee|_75l2kbItb zMo8BM=HZ3ff5#g2!e-_<>dWo?p~UN?PlkEQ6}rwhFL=%Ru2$dC)O?hBp`CxnF0E^_ zTfKsR~@v>y6>Q~~gA5h;n^xuCk7peDq{`cBv;$p4K z9j|r2{Zae+kN;2W2eO7`jvqNL{J+1nQ|-i;uDt?buUg$hCEz3BSHcV6VK`s>JtL2! ze>to>Q}W{RDYd(YZnAacIOexL+Dqyl#QTX@&xALLb6g?vkr$6Ug>~2x@%lBXqy6rN z`}^_u=kJd7D~a_VaNK|Ex6k@rdBcA{ZZO^_-!pLkd3n8GA|H8ip6>tX7p|-Qy20c1 z`z`X37yJDI>#!vvb9of&u4h?_Ktowq91d03~w`HCFJIb<}A z9f$vv8p^{u1I}0EI9_k4S?oCe7w0BeKgc{@k>lvE|2lRYc?)oy|9Y8^JkQrO*ZY*f1e6XaJTA9*!Hkkb8fKHk48d&Z9A z=c5AF{_FVVdE4TBp7%j`7|vJZIbi)Ay}HYKFkJR=c$f#_6*-Q+@BN;Vqp)tre>l$n z`Axes)-Uq8B;Q2jBQNe>GkvP<*f0~o0ew%;QzH>A3g3z_6;=gq_Wd=CBqzs+~O%sb@SH*{C`ko-Ff4|9zd^W2|#Kl701`Va7{;5*_R$9`@5 z>v4C%OS29hhVvEa$K&?dasPtzyx{@ykNY+9teXjEzdy%0?w8NsH3N0dDey3k=PPnv zd47@SdO7?`c%kpO{Q2GT_xzs#XSvqol($sCt6MmX%}=g`oR z>Dd#~AIO^U(9o>(%yHw!JTzqdxUBTi4H(#r@5hd3zOVKhFt9m$HfJv!BaWUj zoV&-38Oz>$-PO0>fb@>NQaklb@7Mj_&eDGr@?AUMc_(+yo_#xa<#9a+cE$g?hwi+i z`<)%Irgx$v-y3m9#B}C*Bi9cH^+U4XU48FFir$+(VBnqjUvE9n9S@Dk8aj@B@8EmV z8X_*i3T)!-ftRrQz#^I5+k#+R_yT)W@kIl^)n`P&@t8WMP!`wTh zqqlg!ZvDG->D5_|V4kPPxySvo6vswNgvULanb?^a1?=a(Z{O`taX7&TIcA+jg;LjP;_O5o}aXC5RkvZAJHUCid zgv^l-JrEv?9U^;p7j{EXI92fZ>cJ;mX?-V>N-Tu8_oX;*lYP|m2esLV<6xlZ-&+}ls&-^pLIF5C#!w|d*ZGZLuyqWiU{GYRO z7st=1=4NGg>J`o!GbU#Ydw1&9aU^~^Y8|dSHhj}V!?Sa^&EK4apZ~gMjnjYZx@Ql| zxk>-&NN*T^2&;zSCJn>c<42Cn9XF<7xZaRQ$7PMZSuj!87e8-ij?L>vb{dnFInL7j`4av0n1MNCMs($mf^wqzBcu>#(o^1abHlLwRN62s=fU~LWR1nI zfTIL*f}tZjXXCK(S-tP*o0&a4a(YRzMXc@Eahc;D8k#;7SKSsrjgH5UqwQ`QJ~C%W z=Ez24A9^h7rkini^y2J|2mT*>Zv$A#RoDF=phzeM0~Cq6z=0Nece^jy?XraJ7G_`4 zCT({2vYTyFx+QZrxw}c5mrGvSEG#fUfrzM4(I=0tdey3{R*YI9-~yvojaoHo)u^kE ziW;?Q)T&Xd{y)DtXYQRlcQW^OTPlAar~T|N=gfD0=Vi{EIcH|>Okt`ZZeBYwK7g(` zTADhW+pOQpnNq@LwccCZE;W_=3&T@4k56t;H@BVHW44+qwJTY@ zd3a>xaDlJCVauR@AiMH9ajXK&Acmb;|E5LN9}3<#2K1h)QVDf#PHZ) zafaO~`+NL!u9rXGz&K~RXlu_LpC$*@f8}^wi5;KOaU8}c?iU1vljlw8FTFF}6^F9@ z9O0x+{5=-a$@wtYK$q-S+lK1VK3ZhEGT|;85$U8H zD>0pvW0i16LYJ0q7x{1!I`KOf%b#pFPq;6klk?hR#Ebsgd%D%jv3YFrI*Dw5^}W?{ zNO{`{r`2;Z-5GSrbS1rom_PBqnD9rG+RwCW|KNRvv4P^CK0G`yF|JJyI=NMMj}2@O zHPcf=9HqkpB4#;qd-tL4{gKrN$0thT%+|vT2m6^KzU{>Ro`XjZhjT^IH+Q_*F7mGS zyK4@%aC_4a=O@O`FgLhkcxveQ`1Hg;QJlw?fsq5#!y|)MmMa-Kz4A^D6?*2adOWJX;62+f5-r3)Mq(@fW)_Lb0M~@xSJEfh**B|WZKfFIB z{&?^HTW;w*)_DjIhq@1T9ygoT_`jv+=mBP_hdU4V-`siRU}q$W`#*l-z%Ar2-)|<& z-A8VTRMmXcYe=-WvnNtU{!(Lo?Bz;HC10HrGvSoeA4jB~njYg+$sE~+xKsyqL{nU;kkpMk!Dm;ltiY6IM1FQ=Jbl4o}@qEn!@DpU{NOXlAaxR z>5<`66NQPh+poN4_%tV_)4I|CuhcrK3#lP`9~-*jcAdbWMF_r@UvkK6kFVdn7Y^cJJBUWOnxKuFp=C zE9#=Fw&3Z-mYpq4L~4n>SQxpH#N&~>!q{EO=-pxT?qqaF7~PSK-nl1?-?>LtL@n^` zoyU&q_E^NxBXZbQ1;-EX@9F70-mACm+}>W?xjSrD$HN90tJZ6ZBgq|l!>(8%PLGTi zro!aoxe8-b$`;0_6fTTUDP0(!QM~Q#r(-1wOIRCKTgV&UWDcG~;lWldrRK=0D`wbG zqJ3o#&*UyN(J2KrD^f~oR-_cwtjH{DeNkgE$&!Y<^PufROg~dCa9Vk9*j2w{P08YW zmLbFRz?2@ad-&Z_BYNh>um$L|H@+wQqozIAY_VG>w=i42%X+xqdZ=moH6A*whsk!k z$>h%Hk6qCpH%N{*TEZMp?vAu?jQ-dY{qZK7hnnN8CJ*c-Q;f^bgei4)E;7nsH}8nD z{O0J7{m~x>vZ}ytelQXrivH+~{?wA*7dO~Di-wLzL(JOeGVnS5k5$*0>UpKha!^@X-g#$xJv$Jm+N zp7Xc}Hp)DY8#fa&0Fz-~p)v>?n;tz?WB^uwF0Ah~?WoS2D^gD^X{Q#`MOQXrP+A=+ zm@X?kHAjNVK=2@U3Asl$NoKDLbzDN4mV#WT%@}uTJX#gS6ee}4FeyV^*2&P;Tzc8A zkBm=@7Dh(G@iimo@WPXfjpa_HsTD5iO;3fxnd$)?U7)hVLfn#oamfJOWJXVp>)|O; z8edbWPEU-F>hL@gj-_h{YT>9cI{rgZ*gpDkC_P&=%HfjaG0s480cmEl&dE4y^NgI` z>g!J`Cwp_*uu`x2ak=ZwZ8+*Eykw|Hi=*QcXZ850d$`)gwbyCcWz?;`KX|G*P+;Dm zWw^|6zBoB{-IN|HN-Yl+M>ki7)7+tEdYJD$7Ar<2PWShRiN$mBEDZH!axyOYl>$hM z7#knk*4^3J`KCASHpjqlfkVSyiay14hN*4Lokk0TTv8n#GbcwmXi7}U>=bLe=EA9- zEHR-uJv<=I$Xqet(n>hjqAi%w{-DlH7MWE{4D8^VvfRhrK2R!cu1>II#%^Zhu_~)Z zGRlqZw*zOR41@)_pG(!@Qw!mhL)y?gr@2)h9_ZB!n5@2Sx-i0|Yc$Gd+V)b6xDRug zbW$dgq(tRW0o=D8l`Bf&ePR+B9G;YElN6I8Qos>z$QCDe$OMo1W?0xt>qwhz$4Z^H zy0-jWRF%HqzQV+CI9a3lzN520Jt^CdWs3c*&lja&jb4v13!) z?jN2kUgrMZZ=K#QcLj3h-hfFUY`3RL)WmL|*~}v%q6!;vY{l97@@(vtJyP9NHmo%8 zBgHe}^#5CpAlw_$s;<|kwli}a2={`tDv3B-*P`OvlHG#H;$r%y8tiKG)ll zxt56fT-P}WvyL{N^~2m09WF_ymsZs>!r-jIsYTAnW|T3hPZdYT@4w7Lg!E*zlnZwR zyI>1DKyQ=IoWIV-PBRFlSBwi~_ZVT#Fi8&QNp7eXCiG}jn$y!`19Cs)^4dyNDYaD} z&wA8m;<>DAHg#^o9k8W#2c+bFTVar)=`&J-c*~Xcev_^*g^8?GcC{GHG-5*>xsJ;I zsSbRj;>FXTgfb#4Fi7X}@n+edws&r@9hoR-sT$cL?8aifSy~mY_#Y1^4G|Sz3G0rP5BVF><5cC<0xv()ma{Q z-A4OmKoy>0seDdL9Ae?=RYGSuNhQ=Wf~l-Wy{)=!LOoaDyw>W`AG)z@3$vy}Vu_^pPvdIb`d=*1^rX zNXcrO2(=d-U!u4XiPRWzl?G!ZVNfJ>Wvfp`iniqx+YM|PL|!?^OYvmbB6nz*(%v)8 zDW4lT4FAokUmo6!)`yS3%BAFKVj})f3!t!oJn(GccuRf;F6sP*b zI_w`F%(croLt>=Q4r3=JZcD9d=VrNP_MXh7b|%xwC9|t25 z&dpM=Y7WRWRYr(c}JHTjCTn!UHYGrpLlgwQ{wNyYyVN9j70el%E#ai+NG!Y927%aerY#w%U8; z>nG)*7?#}kndefY_j*RZ6NsMYTd==(dY%0pe)75hRi3-jp{MF|YtJLRX{7qR*9!=D z5KijkIj-dI17=fn@_gH3%%42pwzPpRdVW`pb}RXPX$h;bvPgPT4)GW1t{Cf9FCpw< zHCC21-L>Q9cV{kEhpMVh${YXvx;)>ugf9Mk+XY+C$>)W0-*4(a8PERRHZ{!YvGQcF zNi=sMU7xq{$=`h~SpUg*c?wLE!2><}kH^!9J%1dwkm=;_=fVdZl&Xt2*;CPTG&!E% znc?a%w*ofH!_2n1)zyDn$^M=KtF4cy{>3Jrr<`w6x74Igy)!-Cl`AWc_=Ug2>_C@K zOc9rMD!-t@ATcRg!2S)CQKOCKt#|&93Pc-*$rtu7n+{~zM zawxYYe5AWy+EaXamY)BPKki-o6uf=-TEG6y+jsGJ&gi5*C;8K+vFq1wd*h(Q%-G{5 zzso$oob3NfHr|wN?epHRyw#I>tUMHDR)p7sfTU9z81_ow?y>N-+%a(qt_A1(6x zrv<`k<>;8H>ZCp$!fCqX`$9@h>K0OTlFp@Ax>65ogf&){sQ%*pjC0oZGguv}(siYG z8QnZK*>B13{CYlY-uLr3>t9INd3XJD>XQBf@zEmfXOXbB5mEl+r;=+ioz!#wT>bOx z(%x2xj}}R{^*!}EDen;R(IWYsA)G9Sr2kM%7v_&}+I~y6=K!6y2}JEr(rtZjZMvFp zq>IWM-yeC_hxtp$3?7+OV_XtRu+km z`sdjXR@;l@dya6jys}Mvk?rRnNYCHH#7B#?A3vsxr<-gqt1(?vfAMzO_aW0Ccvx){ zi2OzAMONaMV!Ftm#3$1YQgreDWrTj_g>2_zll2nMU+yC&e|fA%FH4j^sfY8#OZZ`| z^y@)F=Y1l5JbtP$C=Z|8U$-kI;c&3R(--^%T&W+m+x41pNA#YF$Sy9J^~$byhVA&| zjIrezW9O`GJ!`_s+LE=dU0<>`3g>^!_%Cmeem?SV{VZ6!WViE9nDnCeOXPpt_)EqI zHa<$ne~;NNIA`oe>6|I@{QvNPa(|*WpUZZ8$J&jyA0Fqim11F(T^24;SZ2~hn^7QZ zR;~YJzSr%zaM{)m+xN@w5BBb5PoCmor^#ZtZ>#aAxtLU4QH|#ZZPjR1{r&#WF&9%R5Qc8Xdb-X&|v0ML7G0#!YI3QlUVQK|zR&S-HP2Tn%IZPB>F^LgzJHh>^j}oIdPFU$N7b@=j294G zQi1w{T2+tpKJO>gI&Z)JAO2t4v$MSND_(K+%U|}=)-Qj_i!+yJCpXnpUR?e2i~84> zZ23*k@5%d^IN>GRak>{ zP);x=7G4i;fa@R!n_&xF4_jdyY=<4t4m)8N+yJ}b zjj#va1Rd~Z*b6tpKDY_q0&fKe_QL@<2#25(ZiZW+3%cP}xD9&XFdTuSkcYRyF*pvr zZ~|_JJD?Blgtx<8a1!o@cR)Y5P=He~0E1A3({KicU>NR!dtn4dVGPEh1n-0in1m^q zhWp@tn1QqKE_gSbgZIFD;eFt}NqL~&j|KGsET|7+K|O#4^&u>%4`V@n1Pf{w3+ijI zpgxKP^|e?~AH#zBIxMKK$AbC>ET}mwsBgrA`X(%>Z^nZ9I2P2mU_pH=7S#X2f||#I z`oCCE--ZSC?O0Ifv7o*K3+g+upuP(Ws*DBo-B?iHg9Y`ySWpjQL46+<)c0dS{Qwr! z1uUo^#De-EET|vGf_exG>PN7kK7j@GqgYT2SWrKP1@+@tP(OhM^)MFHPhvrR5)0~6 zSWt^tP@l$v`V1D-Phmk_#De-P7S!jkpgxZU*6k{R$S;uVO*{8Wz+t7Syj}LH!06)Nf)zJ%$DKTUb!P zjRo~PSWqiiP``@>^?O)QzmElV2@C2Eu%P}B3+j)spaLwYKgNRk6D+7d#e(_*7Sx|% zLH#)v)L&phtztp_B^K0QVL|;h7S!WdP=A93^|x41e}@INh6VNaSWy3f1@(_uP)}e% z{Sy|{KVw1t3l`Km7Sz9DLH!#R)W2gvJ&6VNA6QWTi3RmvSfGPs4%ERMpo6h6)6C}( z1`m8t&m{~V_@JIg7(DPnT|pQ;@IgJFFnHjD`ZB`cfe-2hguw$JR10D7zz6k0!r*}q z>Po`kfe-3Mguw$J)K!GR10U3j34;edsFx514}4HxP8dA!LA4SF4}4HBB@7<;pk788 zJn%uioG^IcgSwh9c;JJ21!3^O2lW+%!2=)ED+z-KKBzXr;DHb7D+z-KKB%uE3?BHP zzM3$2;Dg#k7(DPny^1h+;DdTKVer5Q^%}z9fe%U(1`m8tuO$o~_@G`#7(DPnT|*c= z@IhTm7(DPny`C_5;DdStVer5Qbsb^wzz3Bh3?BHPHWLO9d{A2mg9kpS>j{GgKB%pP z!2=)EHp1Y64{AGM@W2PPgD`mD18)>p4tU^$+DRBZ@Imb&3?BHPZXgUE_@H(Z1`m8t zZzK#J_@MR>1`m8tZz2pH_@Fung9kpSHxmXAd{BD{g9kpS8wrC4KB#?!!2=)EO@zS% zAJkh2g9kpSw-N>qd?0bQ=(wfe-37!r*}qs)sOm;Db6$7(DPn9U%-J_@Isw z1`m8tdBWg<59)1%!2=)EF~Z=159&B!@W2PvOBg)xL7gBB9{8YcCk!6=pza_H9{8a8 z2!jVcs5=RR2R^8`69x}_PwKByVO;DHb7EMf4#2lXz(;DHb7-Gspd zAJjR*;DHb7J%qsnAJlsZg9kpS_YnpUe4qp3nkaGLf(K>rAprFp)`J5scu)o(0#MIo zJviWk2W9Xf0QEf9g99#jPzE0Yknw{C2VC%=3_b)P;|UE8xZptrApjZw zXmG#<56a*}05TrZ;D8Grl);ApWPGH-0T(Q1rN&LLjW=!)8K#$ z9+bg{0Azfo!2uUMD1#3H$aqbI11@+_1|I^D@tXz*T=1X_J_I1+ISmfD;6WLD2tdYn z8XR!JgEIIKfQ*NUaKVEz_z-}MpEWq(f(K>rApjXqYjD5? z56a*}05ZPT;D8Grl);ApWW24x0T(*@SqGn1R(Pd z4Gy^AK^c4qK;|PF9B{#dGWZaH%uh5p;DQHb@F4)1uV`?<1rN&LLjW>=(cpj!9+bg{ z0AxO+!2uUMD1#3H$oxiw11@+_1|I^D`Hlt$T=1X_J_I219}Nz;;6WLD2tejT8XR!J zgEIIKfXt6HIN*W@W$+;YnJ;N@zy%M=;6ng1f70N93m%lghX7$s=)ylJSc+?0myt-g99#j zPzE0Ykom0!2VC%=3_b)P^IZ)NxZptrApn`5YjD5?56a*}05V_K;D8Gr zl);ApWd5$f0T(7}V5o?{%`CULSX|FC&Za_(*Rxym0h;pJl{9R0p8vg*C| zJHOUOzw?XYmme_Ol|E#*|FE?msI~dw+V7%8{+%B&>AT0R-l?@g^!%o0;-mCiZF(D} zU$*+Z&BsRRUvH{KE!lc_z}AcVkjdAK4f{5q=WSRvo44CaIH zXXkeLkXbw|A3oc5aMNG^$)2xzD{Tj&Wi9&KF)?fVtv!g2cb9vgkCgvqmiI+Ais$$4 zm;HTZIarh5LCVk8KTj^YdE%o*4(1Cfy5|s|{Qb)sI&C+U_40hW_{)7wt-lV!xr8pw z-wZmP(22k3_nKwaODD6GqPv3lO&>MSYwyEKXH&vztSnLfWcxL%(_d?zv(ICr{T}IF zgYF69CH(lu%G-)eLppEo)mt3y>) z7ccLj?=a7&m#|s7RjX_L&idc0NWDbAyBTEt3kmyJ+sRk*7f*NVcbRniuvzIoXm!ge zI+Cebq#oMJRe#dXq`lOL2#BsdMHeqeFYBco3)p14l9SV>?>6lM4tKfvhVdiI0{S$R7{ZAAf22>qDpQhLW$1@;8^Fi|5a0 zz2t8do6KLbyrOfyuetoqqSNSQiSieggZOBXdS2N;7xg2p-*58Qfo&##bLf)&S6VsT zA4tz%ly3V4lWreY+YHCc5$P^i-EsrnwLfV5<*{*p)^%O~dC}@uv1#RAIbE$ssaNNR z(#t(he6)zJoT8KS`f^P7BEtHI>(gx^{yg!~@?!o72>Ui7svp^Yh3$o2HwO=_DUg4yl)A z;-lqN{L#LUJ#NVTm~A&$Z8wzk#9zF;^H%4l=+g3+`|)~zX}WSu7nMWu5fC3O`z8Dn z_1{^11@Z1Dt2${1t)HrYpM$*TVe4X5cMahM!b@0LqVkFjUY!r)=N{qPdj(zu z$h)7yPdmzchh;-~jgwgOTD-xqiiIWct4;G6h{t3UA%!`SqBz|~oV0=Qpj-6PsV~4E851&sC z{e+)jA#6Vs#H)%%$N9kd)ObJNKjI_Ayo_D+4eQ6ATpH@auaP(5FB~ye^EEv-F+MWF z)nl5O?DX1nh}||aK38d}`4H53b$`bdNydJTD z&Iwhux@f%eIP1k<+s~x;Bav>N^`i5!$^6CVjaUDynKzcOY5i9~e6+}RYlO9ph{_@9 zbUaek$+*HLJe$zT`1lJk-3tlppR3Q`%ZQ&NK3cYm?&rJJx{Zj^mHa&P3ss%$$7RA{ z=fvNUPSV-5RMp9OyhJ#ullU*hbW#rI7wdJ>J{}=HTI3>a`!Ch&((>o0=+g4n`pfnH zq&&&@Y!!T(SZz0q z@+Wqc_-GOTYbm<8zua#ae|fC78%F-(x_PVf8|Yeo)A(!0X8D`3x^jvxzTci;z3jLA zWA*hC*FC~|(dpl+*Tu^*%X-j?2uPY+;azb$N_yW)3@ZWC5? zU098kMYfNwE7?zY%6CH#n2##tP8lm7+MS-<9Bz@JudL^FjMiD=Q=ojDBY*7ZEywmB z?mu$kaQ~ss+vVGsm5=q>Z#K&(d*wBimCu0Gd~THdHsk+5_mTa_?(9F#M<_`k=8kt> z+HV7k>7ODsig}#BC%eZE$oH<(K4xsoCgv%m-@Rel14D(0EhNqB85$&K(mTlaMxtwc z=40CCWocVAb^5jwohSJ6$x*)g+1Fe9?y{OMc$-3m`F|?@YQL{q`3!8eJ+MET@MrdR z!|XL(-pF58_IeK=FxLc+9gpncXjk4+934Goz9SPx@xDRcVA$J#;6!)Nq5h-!UOp9j zoHd@k{#Jg=wVoU=$?J5{{ieuoa-3D>c$4FO37Z^Gh`;1}E8A9Tk5BO@y7+r~}T}XT#!0{9TJ}``xN;4`Ju`y49KpSR!4TzdZh%@#mv!#^2l@ zru$nbK3XJyI-vffBW20T-`XG7`@4p1`u?QqPkwY>`cuY5iSkPD@xQL>q@LUVtp0p0 z`_m;}^t0Hop0S#+ED|sEEV{NoH#!F^x)N4nWr=iRlj#QNlH&yN*ZLR6Uk6tFxmb;r zCGr=xH>+E-I=x!2OG|eSU0S+6@uFYFO1iCoS?^EMogrRyWvu9yQ*>$RI)9a(Zi#r& z&tt`(kJVUNBtEL=9Q#eed93I>tj5X`>BJ`Mc^zF^d2^3jf7s9;R*N&1$e)yV)#_UR z#^@ZZ77!-oGEQEe9bOQSdn)~hx)1m9+Un@*LX|k(!3(ijaMd$Dz$Zwn?@E``zg+*3 zx5J+vo|xpi18>P43%}{dN8+N_H7Ap~GbNcjn@nc1C>L|$>4ab3;rh<$+Tz@i?@cB{ zl-_9yBc-{6@0EpLQ8Q0(Jk^5Sen-;(?RQk%i~rlX5JTPHKRh@!6gkhzetc(@_%sSv z$@p+tWpD95b_y<4O$|g}PBe`o{Mdo{K=%Ga$sL)uQB78G6Z_G6jPJ%Ms>wvMsv&AE z;*vcUZJu{*Vx_wMT@FiHf?x0l}xjs=mVpcwgA6 z`FdEaRgaU6$|uvK{U-@f$BCj5quZ;;VBWOz=pE~(eD>>)@-@xy3k;_UWA|>O(Vrd} z=G#-rUPaP5-gV;Un|nGFY1!B?J*v@s>_M(Q+c&zO85uuCe^&Q>1RHO&k)C>dCr1Zs zaxd2$mXgih?wUMO7g21uyPug|ZN1j+?P{di;Uu+xbbOjGAW#?5p~pJHWCh!8F|qos zMw;D;!>6$?r8d9#FZ8En+6&`@xnoC9^mZTV?C(Bud*`v<&2pz9y1Njq>OFS+@a8M8 z?C&?7?3H0#ym@$J#C*qsFV68bPFl~D9_1TQmB3g$Ffteqjh{Zvn+ms5jkQaEzio0H z*CSi_{sHerq^Xmm$*E|2StZ|8mG>0(hu@nqAFD74%Ub)1znkP+4#x<~ms+c0`7A{> zlf#4ka%kUVK3)+X2j&|Wbu#H)k}~rx3TiWF{p{1Da*u|P$oJ{7=tCM(g1b!gmXSfe zGhsKlo^~g7aW}rh!kDjSyywcO@jW{&LQ-k&6A#hQGPKXq_%frthB?R>drHB2j~+U@ zS0CmBE;4H1gQzk-tqhpDx$JT52%pM5z}Ina3$OUZ4)v6^dgq?7 z1(S-r!*XJb)_01|`(E?uSKGhxdQCo;Tsh_0&z;#ZXZRi7+CC+Us+=IIM+pf<-HRP> z&TOlk^P>KImBRzKd7>Qy`=7MasL4xQ8vCl$jaTBAWBj;03?burQ#IierQz4R!w--R@JX%- z+sE1-&^~n`vqCw|a-%`M1Zr9iUmmK-Z7c`<6vosJ*^b3?RX?RY)Q$&aADK;TCX*i0 zniT!0*|+H_$k(T;EuuC(x#=)G#>=Nos*~h6xp(=XRl{t@O36OHFH!Ct;k}J`GPRkA zZ#_CbnArOD4YoEF)h|17XYHn8R<_g^s6OgOX&-0CH8UbCV2zg!=x&$qY_t2}Mf)I`GEv&|&m`NVBu zs-`4z1SFegtaLlcV=TBUI_PRntYninf6GVjsAMyE;jti-?o;a0$ytAY*c&jGXJ|As zdRIyX-JKd)&6!N`B`49-Rpa+_UZ6|oJ>(;jKeB7mFvF4UdjHs2GnlSi8VGx?>NevO zJ!hKU7f6{loxh2JyRVHcE>F17z2T1WehV)v!(uy75Zw%r+x`%jIJ zk4WEc9=l@W(*@2?a$IR0&Ksg$)qZd##uP)o@n;HCDQ8sr_)JT>wy5Xtzh{f>39o0*(liF`D$@g+ z(wSyz($La$;>x@4>c2qIi+_z{J?ygpIAYpFsFC`Zn!v+JJ@qu ze>fcNKiqk^|K`pk2Rl)kmJiArK->PrpO6{x0~OpS>5*LF{a6%ZwB=guS{N5auDrbF_0+1U8l zHu(l{c$y7oq~?07{j<{T6r+)u?0j4BFq;Lw#l@65+HaL|$5+}4*E;rL-@1CSgAeO( zYog?deU@DdR8yUM$zU^k`h*O6wwdlmDuvCG2QE=zcfy_P5~m5%TUAE0?R)RpwlkWV z-Ls8r-~;0$)1zbIR^bzU(z8g%vhzmF2K~zQ*K_EFw2QKJf%q)hE*6(&5!YFn{64DOM{qbkw*2tQ7pD&}gHvAjiv%GI@olN>ghr$^)uUsmqjv#PcvqswY z7Ck^56`r*i7m}fo!9qOyBZH@Eg9D9RiIah8p3rBkV5%o9CzIS#;Y@Kd?#+w^MI@&r zvPg62WZ%%WGceIN9MWedh6nfRBYiSUJ8~!g%49k8vl)3c*Iaed?7TDaZ&@==H?!VQ zFHNqhm#7rIndheHM}`L*UI0OJ*7~emBr!J;s_71&nyJfY_X0I1>c1xYx+ASu=@0Ts4#9QJ!ZObnD^>_q9$-CU! z5D(!_X7*#3W;{frYX*(+OF)y=Ye18Hy?6NZ@PM5*kPPiyI-+>WG;oQsWy}q;=S@*J zbMNI;Si0Jc!knLFQNfX3JtG&!D--d9TXnH8Fl6h3rfY|vaz|^Y(X#W% zYNbz)jq~DrPEO8}p*{8(v*Q(+co!ta+GG#Z&$;!q%o*e$oZ(uw8NJDcw^-7{v>{F> z!;Au?3Wg=YoV4Q|yEkjn4bvp9t~G{kVvaVb&FE74#;$fse_$5+*1K}HeGJRD>%)0o zAMHS5rMWQEmJ<_A=`QLjRbaoq03g~g>B;k3R-|Bi7LM*cG;*>`85{_qz0t3vqi2n7WUjz+#4I#Qnikn*drTy z`O>cI>|>!iA383V7$JXOJ8B9iD3gA zrsoakY>WeFhwah>*cEct2xH~I2~QMXg2Piz(j34$_v!;XsO`{L8AHJL&M`z}TEUoXyKs`zFS;=5pEPjA6qAId!Qf$S)8T86j#0;_HCqp~vjs}tOw4b@bXfuOLN<`OFIsJ#18e{jjqG5nMKC;(n zx5aLb(3vxS-4Tx4Cad?lHru--)uPZ2VuA3_$QwzThgyxZ*Vj8Uw=Qz=`rEQgI_|ot zFgumYhl#ruvND!QIq@>ky*Hd3P==&4IT&T>1^yUW@NuI*93SQTt5ch}BD zGUWj4S>NJ<(cuiL! z2Sj}BK;7D!Yc%H4LwLl5k9&kyTzH6sqk}Q0{3Dk|%;k>oA_wPv;%Y8jR4z8iC^hP` z=nl+#^bWr?BxQue3IE!Hq+O}#vG>mH)kYnq=lzFx~I$}7`|}w-QiP>%9gj}Wne|+39H8EX$ru*h_N5p1n4TlZs zJK{@c*ichRPrdy=g_dcD4e1qP<~NCId1mg{e2I-{<%C#M>Ce!Bw)vK6M-AyaBC!ih zi+GlY{ky`kRZS&*QCp@RHKbR_|2r*H&WAOX{;ao5J7`GX5nmcDv#ye!V$1vzy+9IH zIlsgYXSvw!@V6z0;y+JS;n3RtYCk?fmMB>lz4KSX;rsj!7e|ktx`(%$n3n^dnm&D+ z-yMc;2bABz$ZHU}03~lX|Dt z?{(FG*R57X#1hw)iH{cfK+7`WT z;_vFeulket9AS->CGsaW`JVfs6kYuNUGuCLe?B%@jx>L*|4^TkQG~Ky>F}jOb(XCJyyW)@th|R<|6Bcgt3w^}p$;4B{ykl{NWAFQu%YhB`r{$=M||iH8|wZe-QPvx zLmf8M{b#*S>iHt^qI(i6n zNvxzhhfUM%d!Esq!-{SJo2EN?h0&eIif$P@kCjF8Bki;Wd+zy0cM&VPHEf!0{>zMR z1uHuBf?HKtEKA(qL&Qt?ajfWcOS->Di5J~fFEly_n@snG;)i(A?Y{C>CErfq!zOjI-}b%C=+0rKo)@sG?cn7`cOEOcWo(-6 z+|@>R5i7biY?|);D~#?ER&=djk*>Q)yp;DztmxWbnXbD;yy!Ny8C@QmmhO|pi*Dan z8eIvSrrY#YMt2e`>CR!(bo;*A=+0q9w}4I4o!n$}=dq$&#-{1cy~^k=Vnw%xP1Bu! zwb5O|imvrF>AH)=hxLaQUAs=#T_QfLzt!ckT^FcM&VPHEf#h{B=fm2`jqRT)OTe@nQX8 zMc2MLU3ZE2u>Q6fT^^g3?vuoa^>@9|m9S~LOZ8N%aSkWzD({v}d z8{K)V=$5f*x^p{>?jlxnYuGg1`F5kbgcV)u&UD>H;=}sGimrWEy6zJ3Vg21;ba`xA zx=#`x*57WUD`C@go8D-2C$W<595zk2Z;#QP!-{SJo2EPYCZju#72Ps6O?R%t=q_SK zw}wsX1uJNt~TgbhT* z64!0L$>^rAl5QEh8mek_eQzwGiKRhtbVq!~O+(fp}RYooM{r*JpI|Skd{|G~LjhMt1=l_Cwe--OSsKZV@ZG z0GpAu3IEtbn95r>Hc)x z67iyIagDAWo0jeh@uF)h7@dPn)2$LOy4)$F%VX2ZyH335ItGl+#ir?6292%@E9EF* z({yb`qwB+p&cmkZa;J@M2rIfdY?`j)jM2?tMOVhA>AHrDZWb%L1#FtGZ`kPOv7+;_ zX}Y0%jP3$fbj#SJPR?8B?lrncuyTB?VUx#)=pGs|x+k!r)1&FS72;)o=rN^SzoB;;-2zs00XEIw{Djd3Skbjk*86KA{!!wk99K=5 z`g5?!`V-yb#EWk0w9&cPG~HGA8C?%n_J@a^$I2qxNBzsz`;Be{E4nf^sgwQDHDh#h zSSg2(UB${0`4ipDS)=o@qFciTSXtt_3-2UHc(hf7oRGiLT|tMwiEmKM$Lx z+xHQpdjKoC1#FsbWY*{&#)>Y$rs?Lt#^?g9=vqHouaoQ0j}kBC*!s1%s#juNY?nl^ zh>`Xjey8qZMz??!U4Tu~Eq|TSwST?!hfUMvzrp&$hW@a9Dd{fHS%2SX{b7^-q@H`e z$>=_gmGb)7HLNUAIYf8vn~m-ftmxLTX}X6#ZgfvzMW??dT^A59{&U}Ibb0JLVOiqo zUiE*Bt`{r*JZxIJ`{s@A0j%g2uxYx||24Wrtmp!4GF>@7&VQTHUBXJcZ~gZ4^YkL| zlHYZ#==Aw?-4gMlYxxeNYsW4UmL)2$q%>dA+g+vxhRqVupxowS48_ZVFXEA>~#rq%Pw?=`vyv7%eXrs+QRpwT^s z6`lINbe&JUl(*&kjjkQLE_#-zUL=2y6EET2KVWn&HZ9#v7mRKYE9uT*({%YCG`e}L z=zMHa7xt$=WONs?Qh#gMC9Et_{zNzb!$!A)6`gu0U3YbaU9GPWJD@rps$xn1WV&o@{?qRIx0&JRY{*y)*U`5yZsr2*y zqr{8vNwmx*=>>UhD$zL$K^H|X>W7Bl!mW=KqR&;CFG~M}MG`dSz(Y5|ky-tpgi^NNL zulQxt{@Ssv62T%SIzApJUc$Q{H98lYrrY!@MmLC+<6{n+)X8^QdwU6Z$pdVF zl_g47bpEdyUE8wJIoLo%EODLwb)%cXioY^85D`mU=lzD!tzbo`eluMc5HH(xJZ5w* zHV{2aCy}>-U@JE)g%~y7rHZE{{#_U(sC^7+o(` z{CU_ko%6>=H;WbB0=6wtf8uZCPmJzitmp!4(qAj_5B{mm-xqFGuOghsE@5Sf_J`<7 ze`a)RSkdV}PuDqrVRSxLbZgi&f31IMbaPnI`PejF@K;9X{YH@DV37n7!&X;SAmscR)4LpCQ_`Rhy3#mhU(dMWP$ zRww+$b?WboE{AQ;(9Kv~xq)uY>e|+_(;Z~JVHl&-NVZKGu1#H+(EhsZVx!vL73LU({<-7v)pVC-MEbNV&g^l>xTTilX)t z*R}tH(e+`obQi2{8Jld6aew+BjlV8zmTuna{06$#Cyc)iY?i-St6ONGQ~zZA<*-@) zW~{D^&8n9*t84q`Y~2v+Wq-^y&;?f4@-Nx``dBaiyau{ut6Rr*Wwe8?b>pvu&C>Z+ zx7tA0@vp|8i*+*6U9h?pY*xCte>48_*sT3gwz{PTy0(8e{v2$Uzd5U0Y@lm-()eq~ zX8H51?m`3Iy4C6b$o5xay|jb*2D(+NYyHn#RX$^XxU3g{v)HV1tXQ4;uk7O}&wBAU z(?GXmb!!cDj=C-MH-ybPeiyASXrOCXsYm^mC2BE^JnNp0_%`fv)v= z#$N|E%ipZkEi}-nD~!J!Hp}0P)s-9Q)~v4W`Pu%4STF5hu7NJFx|T1?_SeUH@#i(r zEnD4s16|h(jK2~#t6qGoTWz50Xfgg=Y?i+Tt6OQH%e~O}%VV?rm91{6fv)XJ!lscH_)wGUF(ap{kg0cf3ppAD^{mo zlI<_gdhs{YK(}OdYYlYHmm7aW*sOY9w7Q^yuD#Xx>%(UGyI^(84RrdY#$OjU%ip}! z`3-cfFEjo+uvz|Qt!@E3PkqahHr~DB<;Gt-HcR(0t6RjDLvQK+uDaUh4?CBk`J`=>_Cl6Ft6OZKyZS4PKL@*z;qT*C=VQwmx~pGl{b956ci!rjuvzue)@J=- zy^M6{tU@mIoTrR!VWY6D%zYmGk_o8@o8>Q)-)a<4P~^4KhYWvg3ipliFv z_;avX{^qQ15j&KzKU%Ie{@SrwI?w7ZG|;VEoqm0`zY^=E9n3e-ty*2{8?wvmvR?en zHqfnDow_dDU!L{iZ>E86$?Db`=$xGKH-ydFZ;MtJG|;tgHvamsS^h3q-7+?7|LQHq zUl%q@H*a-*16}L&#$N|E%ipZkEnsIe+Ns)V{N=D&x*4l0H_$y{b$VO2zY^=ic8c{f z^7pvawQbM#H^h4JH;2vg7g$}(j_msDW4-wE8t9g-ZoPr7tKIl3VYBwzBUZPD&DtN% zPUCL~n^oS6R=0}HYR?_Jj6WA!qTI5ijVBkZZUviFj@%8#UmlyKD_h-C16|v0c;GG zT`%iHe+_h(tgdBWcK%MXKHMMJtnv6It82L_JAZ?$7k_iua>oAng4MOYB|F_g)`$ME zS?xKnx|X+Q>s;1{<;7-|cg5Q)=*_T6mDi_P-4XmtVB%h(_7w-|qY*erh+tZuo1PIno9UDzyt=dEt3fv&CF_;avX z<(RX&MeIyQd0TEZ{@Srwx(BRo0h^Vsy3P2@VM`h5&RAU;o0aaG)wT6x>xNh#_CpPH zU$DB?!`c2^)`$HNHme*fR;P|+`^&RF?1!*f$I+u!x86Y4bJY67X8NI!f7h@tz_y*ZO}SWEqH(e4&Ji!+k7GsWZ=lHK!0HyTS^2x7-}=KQ>p5PI2dr+Pfv(jx{yMP9b`|&c zF{@j|mNUw6Rl)khX65f=R=0?q$?(^5%9a@i&{IljHDl;-x)aTf9xlbDeo?87qs#N6Xs7jwj)DYt>JhaI3Z2+IDLl zYxCB+)(%=bWNl%jG*rOvsp6Cvb$X&OAfNk@zhxOJPEQO^P7M#3pejv{_fOtmm>3N| zY(&3AczEn|zxgO{H5`8AlWn5)6NRzC@lmDtUy1X3t-s`RS&vix=d-TubauTiuwHa4 zDLSdA+?m^K3ikO#!rI2jdPz4;=cef5$HN@!CEZ1Ad%~X$R*d*pL)CO;yC~h{d$!s) z(7D7%i=01(V!Egt5`R9X3-d=fXE%&=@p7!QUUYi6z8s<}5g#pbUhoJf{mJ$hV>)Ti zt0}sd6MyKQs=uoV2ZWRUB%LQ`syaDt%JVr+^CUy-Q7f=Cq7!+qv7+YD&7va+EgECCjmdu9N8E3EXT|Sx@0*5bj_5bgZ7iA zOO|6Eotv_MlkIAC16{Hl9q&u`mn_FDx@Owd$_Bb*IdZh`w0cgKV`c+gvK%WL=#u5g zy+6I4lkI9|16{HlOX!-}A8j8<*Cop_w1F;Jjzx6M?2ncYrt6aB=tI{`IWBCVOO|7O z16{HlT@R$^FS$SFH_#=^v5Kyla&&wsU6(A!>;}4IIabg$vp+iMhtqV)a?GM@rW~sq z=#u5=_(;0HWI1NhrR6WVKUOx-CCibUO;5M(INv~*EXUFYx@0-pzNWcy3~iuGmSYiJ zGy9|Eqv^V2Ir=uxCChOET{HV*Jw^9s#kBuxZ&NZpx%TUBQ=h_m*b6f7Vu{8jqI=+* zjjrcgjINAL(>?g@MmO>uM(1PGbdP+m(S7Xuj4r^Y>Avv8M)%N<7@hhAW9s^-NEWmm9Cq&IzL5cH>(&)r}ZbR{$!jd^OQ~4j?Y%} zC%-Stqsw7siSj3Q=#y2Ql%qsAsf(B6JnJQ$C9KBE68Vek^rwuj3#&s_RcC`0Biql% zbXnzCMwiTA#gY9({H-ij)6MeN`ssRq@p4@I8B>ltR>%A&=f4kH-7+>gzf9X7?LU>B zZu>=(ZXY%)-G{7h1=~!z`g8T^%I`eY&sE#O4ub8UufLxl^;r6as!ryOzTccb{nO3) zTlksg{I&jUbN7IXz9KJ4gAONjG?LPgCVBy|TG<19Z)#TWV`AUG=)=(k-D&ruzW< z@MF8H?cl8J)N6X`erG59_X{^vb>Vf#H#FzZy{-xM=VQJ-ZY)_mgaQcTbtAQPIEeS zFkLs*Sz8Y0P;)x(=H_(%EzRjvcXK-D)^y#)x7C)zyRD~g9+h@{EcB%B-=x3R!_E0~ zjx^`5jBdy@mr8p{%il6D8c4QhX;;bowdb4j=TcA2_**{KoIllD?=L)`_f_|YoX=f! z&GZLDCz|uOjIJ4fE4Mf2&$**He_fO-S$}Ee_3muW-|X9)^S6esnewjRRqs#g|Ki=% z{qY*vA18b2?jOrEJQ%3z!tpuVCCi)UZ{Z!y`Sbgm^VjM&=T8@!^H)MQL-}Nh`scLr zdZ(K6w~VeCe`>JaUwr=SuwLqU2%DT=#&wHU7i^$g`N!J*)=}(H9bsv!14a)^@CZ~OZ);htDe=6(dDpNI?w7ZY@kc-4>jD}{^&y2%>I~9(Z%=2D(j`Z zt@mV?!)3kbW;f6!%MqY!rd{RkZLSe_W>Nye4&vP3qQ~)aBlpp1*~6*Op^;16|uhwf~dyE;gxKZBnQ4ukkC3)SL8I zVw36So78zt>K2;R1x@N&Cz~sW)1?3CUtX7>ii~kYfb9( zbaUm+H>vZQ)Gair3!2om-q&0?oF;XpCUxZ|b<0ia)cwtsqdi3zKhN~BUd}UK1KpC< zt)=LszuPy{6ZT8JSQ-C$SdEn>>aXJIUShqZ+j2Hr*US1ae+_h(tghu<4g9e_^w&W5 zsMW2f=%hT!@oC?=`gCQ!aEW-)KZ%v=r0wsi*AZQ_h<-k%ll)45Un3$Qx`ifnOHJy6 zCUxs6y7>NWf3KSmhMm7CNp zrRb!+w0NeyFZN*Ce z*N08|llo4!=fx&6Kph8e>2G>d>kU;=9MDiW6gn5j`?~ zW_UmsCnm-x_L6YhqVaR-vmN2~&Du_JpohowM3HZK7sm#QdU&)nQXDOgO%-B4Sm@bh z($Z7o<9ehpai&P7W%=pLOLx}4yzN>qbG!M^UtW6pGPk?%xywth{W7;({OskW=UnD? zOBXLMz5HcvxAIe$m!5l>+pT`)^3p3^=636!zP$9j%iONzGPfHTIaVAg7AA{_i=#(R z-BTQx%553ltkl5B!HHsFs(4`fH2sKD#_rYkPYh2DkDa00&;|OK!r->?v5~X-l$BL< zQ_`hO>A~WC!*oGrwH}@fyPL_;!pMl}Z7Tl`jC78@bGkTPyn_U6s<|*Cw|T4HVjT2u z)dzd}Z{FW?ymPA_KYe<#IJISR_+7>E)45($@@G6eG(I`CRkv@|W78uerKyR^ACxaD zj}$@5b9!QYloCntiiskHd938`7#o<4znIxmbC=ow&lF}#@;pGF*qaNJQ^m3FcAe^1qz#%dA6It+jv!@F2NOMz;l^&Xrkts?4k(z^7Q{tZ3uIUiU+% z4@jU4{BWnU+dl3c6(8EYV{o#5v5h8N%F%lu(>_>dr&sKDdng+f$D__pF*rUNb$2>I z4;l91^VJ@9q3CtDhV9|m;^+U?-R+~-;_Z{ypBKfy;bXVo;kV+!{epk!d=vAPz`WvQ zFx+3*8xD>S1-m}~w@!bjyBj-sxoJCjxmhepAHI|J!Qi-m#JNaEhn?ZV(R-p?-qD-4 zrk^)&eK+jq4bCLC?WDVN^qxI^knf}7rvjmZ#m~N{tAp<&KyE>%GvY=RnC|!A7fV>c z(b-{#dy5tJ{~xvJ9rtkV6eN?&D_zN)IU^dPIX^dMFfI9}bR5v3Gz zAW}QU0g$?T2*SC0+?P1g&!28Qf4Z^Odi>+YL!D%??&>H4%yCoS6x-ff?<2C1z6;_2-owpcv9$u@bNv!u?M)Uo{% zxOtmd`_23LEgAc_%K4onbxun2BVOhGj=(|8!bf*2dmb&NwU(-DEvL1Xt83j$Yu&4^ zbw90jzq-~JX{|4+YduJ7J*ckrWm@Y?sb%3SNA7w97e~`c!|Ga((przIYe9muhia|5*5kC+W2xnsZ~+2%bUcJi0D|}J z=l>AlqlV5dw0Cxz(At%qor@>8=yY0&>zhm2`PkKYOs@@~ghHB#paHuvN z4GzsFk>OZz0ws;BT?w^~P>5j+E(D zp#NwB*^c`-fpW)+6Nq=LIDvl0iW5k9tT=&+$BGjOd8{}!Ex&AS^?TtMYtW*+vUuy( z(o!*OpA@5`A*}*ESObRb-se}SJwJx60-C~bgyb@QUQW+F>52wOv&Tr3KhAOo+C+PM zyE7VfR2_S@_I%~1*4r1ao;`W>;>VZrT$oqTS}pC0S{d}{qVPZ9L;DE5Z5q9oK^I3hP*sZ zU$SZy^ZgXx7f(7zub_CX4EN^38X$yV6;REe4+e*$VgP7~t%3W64{dBfr?W#_SFzP8 zb_TF7%)#O{I2jeY(B#`NZw$A(N3=)4G?>FU1Lqz z8PxQ<_6vkDZp&@grwC*JaDtcEnucRA7ls)uvmSY2Bs_wZ11R3zT^QlALhdXUig$O&xh7k7#|n0)37?6P10%sX>A zjuJo1%{^ZJ+u^XichD}5`@=!6Co2gk-#Wn{cfT$0?{^$RJ^{;@d}B{G!ue>O%vX#B zyv--2h_1)tO@1!iG4Q2l{?zDM2&L{T=IG5cI519S&^A?vq$vJ@RbJRp(L+&nB6v_r zhvIf|1El-YIvb;-nGZ)5+n9Vhz~MCanoz}=k4Fi0n)E8(b6|ZNG;QNq;P|zp8VoLhV*d;NJ#UC%h;X%}23l zln60O&#Uk}V*;T{=o?gVKCt%Dcv;B}lN=0T8@`#Dv-Il)fu!G({6xYmK=HB*uTLnt zs7X|hfrus|O`z733L$IsPWt%epG(;Ct7+ z8$kWP9(N((ivXwcaob;p$ekS+)jYWV{F}G%0oxfIwX~bhe!}Oq!!EpJj>S{u_jS|A z%Q17+xYXpX(JOxkZCrZ>wJp7VeDa!CYNqGqX?pIs{mgp5+DkE6-mtTCEZ1OeDz^(< zm4dS#h^qmv&fI-jcUydzM9RmFadFW8b$}cDGrw2R5Q+hsO0CQ11k{DA)M4Oi!U9CX zt(EMnX*#KBBb8U_X-33@5)JScQ=+rJptv0#!;wM?Qs{-Pmd7 zFBN@8b%?Xu9pVBN-VxN_)l(qgAcj-!w2fPZqIlgo+8q3)GaSsp%%Tbpwm>Gz`Ob5x z5Zkak);@VpXM{NvLj&?Ei*$F2`Hok?rP>*)snAx|zg2;uzLi0sc=%%d<@2?lT6lK; zKYx6(vbi>g`&m&sQbQ${0PX#Dp*OPymjT_1OAsAOH^sZf z7Nb8y=^K4N`tzTIrpJX6YrZQ+ekY59_6aw!+kS@r1Hdq%z`&!%1x%VTYw4_C!^J{u z3msCP1zK`sFMtUnT*IT1pA1|b?)us2$#_RJ;4WcWcLnLMmM!zjE0FTI>&h}ploakR zFbcu^LCU*OzXM!KZk@%N202xoI-jOpO*3!J?W;9Q6E}Rr{vPh6TTp}curt}8t zsm9uLo{I=;)F)bUmP9(!y7*LV281Lj9OxeW#C zjXNu!o$hrGK0p?he_Ok7X;Z;Ces2v2?l+cP;f=+o?e9nGwe(H#7$$W&XSLTW(Wws{ z35Ux_)s5tJe%){tv>ST|{4pux78M?_X}jS;o63~vMgfsJ+n7-lyqhksQ9B!r??UEYY~EVf4g_%3Nh=E zIA@NE_k$B&rjP;(5QV%!_{TlbDWwYnwm;}Ezz+oL7Y94>6U}|Cn5&HtuylIQ&r<-#=D%B+{eOJuiz9>9^n| zN{2(P8n=W*Y=|=I_PR5N8^TSx9X?rIf5V$6D~<0%q}e|%7K*bdcb*o1hIqPwpa1>e zi&IEuXSeoyw~zef<9v|Mx5Z#Y?5UfJCb(UF+0EYQ;o=pPc>Z z>;SIBnE9Re9cY6`U0j~orHIR7zL+1@u$bcSe=n`__0N8ll;-Bb&hvWoE?0C`dju?@c+iVqGMCi0EnJ3=f}B7?((;&cqx z{N%9#N1#mTn-ZhVa3+aEk(`p|RMBitRu$tubt;sush&kRt6~L{i1bE}oj?46?$j^~ z-|qK$SU-h*i)dXXbRM?1_cJlNn%TarW40_1D5i^T!fX?%Zf@=j0{8sc%{$8_rWvrL zk{yN_kR*F1eL?Ino8l>_c&bxO+1gZ7ykv%zO?r8rYRiJ`@29@Oey-f;kGa$F)EKG1 z>0#Ln7+F3O(=&q%nhj1#I_f7)uCv8?@N{ej zI&~31x;s7w=wo{=eY}fj8i~!#b7I2kSKF6VXs7XLjH9+P4E(pEHeW;?*EMZaZ5pR> zS-dl@Vs`rin9}fr#;GaJ8!}S68tiO=vxM1(3DeYQ^Y3eDSO9?|jKO<3IiVTFbx6J2!} zm4DRk_FzBP$ZmgXIB>ruMRcS7lU%#gWT3mP#k;)$Cdu*zSJ@kLO|St+G+7CDio?N> zxqX5!11q58u-^TXz3*|oj(@)Ew`2(Ua!YRCslubOXmvD@D;PZdU|$#0djzr6jdSKL zqXr>lejP!Q)A|0Y zsLqz(72?t_b8-;d#F25{QD;e%YdDF5l^`BRa2o;Ij(og?UI?)p{!vN@WLga3G($tt z-x$DSRjGFv*DQY@2zw~V#Sh=HQ{Waq-}>I&Qdt`jhbo;*{-}QeV_W;W*FY@>1Nd*> z6|PV7TN)hTdx{7u_ZWhCGA&@B?=ITww3W~h@Az-;ii8CL0Jn>MV2fPpL^c%ZGS-b6 z$HC(3=fb_UR9(WcxV>flMn(^=JHCUG6VK8+P$YQr;DF_e!q2V~11@hK&%u0dpt>b0 z5m0b4#f^u57JAF$TBf!<853#kutRFQ0|uf5w-4f3OLV6qxncGD-$xey9fAOF-P%tH z>}61~b5bx9D@89#PrV=$?3X2hGX3)O%Ktl-R$bIa&361hm5p+w8%S$h8#CW1G6O*t zh7N(z((M#@U*~rUf3u%nuKq01p_SD_ghB+dD2E06cTABWyju6jCQepY=+pAjyL)_+ z+0n*$OIe4Y#209}+JngYQ_T{kP~lINbn|j^c~*a_H*alE_~ttz+tOgpm~TxCRj0*@ zxE~?JUVR?8QMv1slajp)mEC}QKzrj*cCSg8h9Al}lqKD~+`Q-K?Re7>e9spcNtic% z^VYV+H{Wo&1z(L}&E%I0I?N4vJl+U_Dxk828t+c9vE{ULk7M3BsYP(xS}yTiUacne zTwbjv`CMMDHvODb4Eg6KE>|6{J#r~JiiweMtlxrHaSxNX*-SGNm!z4~pC znqeQV2D#M0(e~yk^&}L1sholDvGo^x^SH`m@Xccry^|R#r}7yjFOE_xRSp&EoPj&> zsXK+2IfQH+`m5Qqaj6}^^O=`H{je^`{nsI9^&e&B& z<4*O`INpA*b=+t2S=(^`*!`&ISVt0RdtB7>6xiW|JkkJ_123ynkgJB&mF>YIO=3=KY%c+z{jp@2U4Dl; z^R1Ixcb$0_OJ?3A3}Vc}K4oeUPN(lJB;eJinS~`xW2rQaMIZaghRH-UIq&%X%FDW# ziPUf8a(M+lx9|9=-YYlMgumJ>S-R%^9p7KY(nBub@hvNWF!K3<$G5Cl{K)4F9^bNJ z^&_80cznzI<$W9Z+`{8qeo@iV=Nlg1@W}272g*l)mzI;0?QQQY%ZiwMj0obOktIu!X__r z^lb!&!eJ}g0L8jWTY_!rJZ^F);6m0q7|`#G-e-R*sPx@~;-&&_+;G;z^}DNw#HFU5 z+CQfEUF5W(7eGOS`wlugU|&@tFk0u7h#@6b=vH?FHlItju38c z^hY@n=n{GFIOg47yx$}Z2ce~VpeJ1CG-$hM;t;bzmXbjhL%62bm}Hn}6UbVpQ=DNK z+{lp(#6>Ts^ZCs$yHpWm186FFsjxeX!K9N+JZkjWFxkXMcWcMVHfXd|TQi&bXt}m# zHusTGgi1KxPggm*U)$#wSZ|7G0r%~C!i+W< z`P0R@KFTP#QyF7upV`PhhT&E4P0Kkc{m_N_1Nb_)i+r+IE!-NFPt*%c4l)HNuu8{{ zS|0>aM3gGC!NA#EKYVZiV^V5}#2sCDD3mNU(0AB|R`TE{_OZ47C>-duf=SgKl2TS^ z>E!kq;x{F_~0GR8$y0q%71WH%py$$h!Rc>-djW<8SYx1v$Mh({VA(51fPn#WAt zd~36nan4%DR zZcP*B%~@x$zsfPxHC%d?ZNakmfG|P@nTttTP*lLvQa6HB*-Q&B&|!*xgVu8K{uo_jo|L?z>O$=1^Ok$_`Wf?_X*yW`jr_i(zc2aUgQ}PYH@Mjpu&pM8AW1& zfoSM0uzFgc@VV%GYk~9CWjc~K17-`ZGG?0d&DFz`n+CW>YtZ)baM*z@4>BK~_I63Q zSKL98m?bAhq9*!5UVE@4bU-`>eTrn!q zxP(ei588M_tg@1HYzY);8_88V0MmBMHr(V&Cgdq#Etk(zaAx!X21&Szsg!H!X+Dbl>ZpQY;h>-DiHp6X zUcyEkLCEV#|B-(3luqPYfmt4rH@Sgl;bwuMR(I5l%Pm#2Ij(n^MLIu1+I_lU9@v1K zh_<&x>7)@Cybum}H41wZL(>%+m0md=BYSzbO1pDWXvG{<@YPr-X z6C78Xf2!Ubf<4ZN9+OnZC|cLMglL`2xPc?CS(#>WuBhyB7T1cpNzEV+C4$6oa3W7i zsjVe$(xi+@ICs!OfJ2h3NL(Y@dwA3XV)0LsUFK)h@OJuf5fn=4M|6%5t4)(ODxmu| zZYqP51zAZ5Ms-^A2${Iz8a=&;TG>x7iN2Kh(L)4>y;sOQ^ede6&DKIa{~pfw*5^%L zyhNVq{GHb580|L$(I05dIXZhCXyI+D{$zTzw#9d{#2eu@9zuZ5>Nr}w>4~fS`I1%% zN?o-|xD({7A01bf4 zmGIW+gjN<{qkc^9jVjP1K@h@R`k-yb^?{tFF1xr}zMPyVy}=ePjWp3y@$?Y`j`Yvs zknZkM35mvTuQgf#Zv;Sz@8vi=4ATgfiHq>iH^kfB*Z&4enOXGIq8)M zg|nf`m|@{e;c{8TVU}YvhB$;{^Jx)>Sx8_6W<3eKCJua#@0vIyqyd&L>M>q-Byk`) zi1oOS;6j$z48kU4Dg0 zJ}Av`{n69)hj!uoZf?tA!$4k1CM64LCAkUf3vnBC6QujwxFRSGv5^fS-zN{TF~tyE z1tkcNAo4v7@d_zl-nS2toSvRL27tIy@gBF|6wlZPOc~mCP9KK^D)G_A$~CQ;0lB8t zX$D-?0ar1gww*BGv$s#paQNo))8GL7n7nP~?um#S%rRNajSi3^6aa*(g}0?eh=dOS z%1f(y^LE_~f^TLJRV=ckKX@(+X@4lzJnsyUP=OK%Ui4&1t)lOj~%FkxE1UkYQP0>FhF=IJ;?MI`=Qe#VGFS( zBRmC%92KZ2Xw%*reCQNM$9<-5iIqMNL4AW%i0BzQ} zkgvv_=X5W0zW#P4?&eCx9z;CoF$MDiK)2w|Iju;Zkk@SSGjdf7l&$ZuNU z=>ocN{D<@ufY=%IZ-BUh=BQCj&XT&A73dIv>VpaO&T?Y^*5qIj_aKc!*5seWp*R$0+io^FRV$Fbi0D+|_tk`|BT9pWwmAm#x=7{P_6s z^QRk6S{rYkK6<*+g3Cke&5P%o2|b=%ySVGe@Y_3Ph!?Lnrx_zuZ#2l$jm@>^W=|{T zAyvwq5$@&MrmN}-4nY8=7l%x}PM8;+K67g$vE%WUz8*e$f4sX(d0c??w0{Ii{>jT9 z6aPs4)i)UxbMKFi4oBbIxpQ)IvbfJg=!4PXV7PZj8N~4H&I>%m`tbRk&M9C|57E&b zTswDqceZ=53*tj7bhh~Z=%5GsiF=8fWiWpn9jMA%(9#WK1@6Y-5O%3{@!}<3dw*W6 z{j|BZA&xWULBDbPVD>Qf{`4PJKM)QZR{Z{E*u`6E+C~@ z=U}UMhTq`d)oc^FT5NM%Y3&)~ZJxY!Hl}XGez*To`j4%+mwW&?{sA2)Z6z9DFWs&Q zE~0DAX=&(%FztW&-YkcM!8uA;FU+~gEVy>$%7-pnjb#QCsw>3P^hop5TR1`x;%mMt zwGdI{z>OR!en05#cq(*tZt^y1Bjy*?#dSGsR4xMGY~o4i>FwTn%*-g&n3)k_JZI41 zu!XFl`6=^y>WF6R-LLFVL*Hz@uPW=g=q+1u=|QX+GBegLcEc@J+~-Io(p5-T8*#Bx zt!}Y-y}HHb_39Rz*Q;Nw)C`Ngn%nPYY1e4=`K>b?B>u#LL6Wy^WqbRTGy9C@^vY5T zqgMt=Qi6=p_gO2+HI$F(GuW8d3t65@1)5GO=|W*ws(I?}yh;T=BUP!uCweLsXdOTy#)m#q7S~GQ`^c-Uo_}T%|%2oLiXA{?#ly4l*2}co$c;! zcbjr7xh!okl&)xiT7irO?`x-{E(%Y8F-Q2{(+#K@YpusWZagd`5JGjD&4J`ySaBXJ zi95%-$>1SZq0e7Dgy!^e^Odruc?g9EH5a1fK<+PI9Pht|FuCr%OtE|zN|P`jqzJGM zAFR=9-^EQa>LIy=m`r(FAG_?edELa~JF(b{$f_8kJ{5O;Zt9@RH?(*c&QISJFb5zh z!MgkIZ^SwCQYW^X{m>0ReFrP&3cBED--YmCcd_eS;t3+ivAFg(79eL@yweBBQ!}IM zL1bB4Bmu^|?l-uQU~3Ncc!$n);3=o}-FX;^WHG^^L5Y@_GlLAorG>`aTqICH7xQ6n zW$iAtIzQL1fxF5zIrP?N$J`7##J{dLnVzkRn>{dLnp}2I| z;)&hwZn+c7PdsX?a@4lMQ6r9)IG}IroWedRl?ea$5ZaFuA^*RvZAtU;5L!A+tkacc))}TCYau7%vv=bcYCr zg%L|=lrcXa4!a)^)97V{Ie$+vx|zudlnXLZp`n~`mli0!(HC}Or3Te#yx8zkC(}%D zi2NG7X0pTp42~_zLIZ$mDN+y`u<8(gHa)K`^I4*>=dnN>CLR!O(UQCaDbt|ajw0g*zuu)7AozK81jW3^oyei zz9nW!Lo6ay=WIfRuB+|x-bsD6ABXxMcwN3ccb9(BXo;cR%$-Q6lnDb4}UUp!YEa+KD2u6X)RRrP-wf5oa4^D0i5HBW*3*PJj@>t-R_ zs2w^4Am4Cv)G(irVg14cd-5VRfxbC(NBSNFkTctf?zG?(B@NNj}usl`yM;aS+N* zvlwet?Gh_(5N}uJQo|0AoTk`}9GI{B&aUc&OTiE|O;9+zLM104f3=bAg7k%@3YjL| z!PRUBooUQ$83h*eHQPbqVsQtrP&^MiSZ(;QJ1C;(CajF=7S*NGq4QfzU#Kr_*E$oW z(7*9)Wyi<*DI#v8FTXGP3lrnoUy3axlZav&{S2a?mzp+77ugYQZ}RF743lU?f(bFf zi8v~nB!tsUYECDDj&yu{kZ~Q+b%Kht_GC0~jifFRRxpi4a8lbk&5Ou^5Qp!oLa4P> zy;PIX+{+lKVotyLIsKN-siNwMuX>VJO{VY3erft63U%BCelWXSG0+GhUs@F(CRAmF zo%D(i6RIK+qgG``MxvL3xoQFklF+L7Frn%fzA8RUsQSQH#fJ%1zw}k{!BkDQI&jJB zy)N&-`S-dCFAzAQc!3WFELBy%_Eqs=LRCbeYOnY(q3WuyiVqX2KJ-=bVM5hMzA8RU zsJiB>;=_chk9}2qFjbvk7PO(ji%27{_9@i$&TtR+sI>E{x55abTJiAkKm)P(ySoBx z4~K0U(~F0D2hLEAp!9)v(A7Q;l-+f=#j}_48iPEfdr<`1{iD%0>;Y=U{Q%WOln2v z5V{QCq5Q(dM8@s!jiZ!vrE;PZRhtW1u-iBR0yYf^p$V7X!2*gs`x8wNnKd6)RQ+`h z6~vax?v zfnLNY*D8H97s6aSie9E=aBhoa*;j<%Wh;75wS=vDrPuQm-}bzNlxG8x%g)BT$CWEW z;Ib9{yNAiNbHU3`TjZ{|tq{LTa!;sAxyx4d4rk>VjVO27s@})0qAKMsTh%+=RaB+i zWvhBGyo#!nyKGhOmRC`gvVg7X{q!oTQtq-<{o8}dR+j{?uz{3uZS(8Bo?)*mz(Tpp z?yL7Htf)%4%U1PHh80yQciF1m>#(9K0JPTDN;ptM?q zE*F;hXeB0?!Y%T|bdn{8m^O?2F>O|2j%l;VE7N8rMwvE?d^2rUVw!2Q$V1a+B?g){ zi~KZgR$``Uv&dW1W+ld&Hml&Xuuum^2(IW=FEHSc+D1Nzk$nYv`N08LEYvx~{kFF? z<)9D$3?BTW&&9>JCiYJB)x=~#?Qpxd)oYKATJ+vQhb;+cjh<-K(ZJ22_dS)U))0(Z z;8#(i%i+UGK&iV4t?QoJruM%fahh17kK^P3VrY*sh!-1c$>n2uoI-nafVhPo%rm{t z+`k?SJ}e$1fbvfuh=2N1uifu-cfS2sB=-N;?}z^ik^bmrA*zyFo9jcRr~*D|$tF|! z*$CSlw^(C_JLrz(aC}3GI810X+`gziM|T<|?0_0a#8@0>{N@AZZw5W+@09egHHbPN zBJ~RVM@PjXgVhVyA?6LAvttP&(ex!~QUFtiZ3K&q_KWs#@6v(kx6!@*QG=R34!$Dp zHbsHa``w-_an-CcH9A!h0;x!#6}W^1r>=3ivc%o7WlO{d-48w_EpglY3BXa%C*M|j9# z*c}`rfL)L3&do@FQg1J@NdClxUaJ_$IVcgwQ*&YXCGize$D-T7o7%q#UKo0j zY|SuagU)AJPm`HD%&whuB$_Kd`cdk>8!E`gbfXqMLTC2!GOkS$_r3lI!CFNPR+eMtwC49~_)H7fd=pYucC)UnzBe8C?D z(}G>1;cl+WZnAlFpErv_Ry4P--X~~0hr5r%yHx+D23^uAE$xyNSUu$QePk1dfV&J$1u>t7(NT1;&VK6Nnl%?E za7o_;s6Gi%c!=p?a|c~~!pT8s#TL?X(4>TI-@(-e^WE%rA#}`n!Hi+@JDNAb`#KQ^ zEk#A<3MBgqH#4E7TOoEl@luzJ!m>U|HXPQi=7(g0%_8|Z9fwqv;h~s-Mu$pps04UO zaA*h<kpPgm;bWX3SCXa_P+)3!p@QQ% za_)@^#1sy};(8`)A_Zh-Z4ME1h>y_;@xyn@+Mme_<(w1q_vwLl^w|W8Fq-lkh#xL& zd12wt&Npt(XTfq51{BZ78FPDz5RM^ES1WVE=*2_L3l_k}+YI9jQdi&}Ks60hnK=5Y z8Qq{%Hu~xuMF1IFSINNlxrfi6wUo23udTNpBM*;PJ0n86Z7cyv z(z6MSZo9-)I8s|@NG1ra5ziw6AWs231HZ$QuELKW82{)2_HDsm1csg{6NYSDiK3>@ z)?xR^VJSbc*QfI&%fMCsz)tZkc4rUqU8bMWL#)hLN8|~nkNNk6E09?xC*3Lb%B<9j zS{v9tH4RS!MOG5Ylju99Gq+%aw;nq~Qa;TX=6*(sGavh)2qY8BX@X8M93ndPHlYmK zEW=@;S_O}f7jv=$q^(jhM`X_mL6Gu*qZ4wvj8mwbF!2(Aw_@CMvojTEYW$Q^0Y~Dn z^rTzJLpzU?Dg_A2;n!KY_ z2#Zko;scI@9tC{HNdS}dr^=C*bAoVZq)^TU zfZ!(Py~X^rRAIW3i5ZWB+R+(xJ;SzCG|RVT(fcmMv6U6Ljqx6Cv3T;+zSLq$hTCUC!^U3mgc z=tD(EO(yU~MZ59@nox*}j+#v1K}Ear1e(x@ijJC0;LD13nBhl@idx1MZ59@`~^`QzH|(iDrBBU6R2oc zo`Cmoj1$OADJ+QgNBenShJbYexfisaS%GR~Cr(WY8yLAl)7;O?pn58b#5Q2fDK2FkyKt-IX4Ssnw(D&y4U&gR~j*_4e{8CsRiRhK*2acEU(zPjA$j60H*=B&$| z&N##xRjII-JDqWuHL6l*FLyfk#~}KsO1-_@>3lJ6I#tT<zLz_lFUL)% zN)eu9FuUC8!j4wYoIeI(8atmVbK2$Z53Fos_U9vzrm^$+2()SJd_Dqk8atnlK%K_U z=Od7(vGb{-PnUbXV80u4zN+kYmpdPr^Ty1l%8Ylp^MQ45%zUb>dY3$(v65qzk?)e{ zGgfr0viV)|e8$R-RVKhop3hj}vC1NN$@3X2J(dlGHHIK-B(!Ei`#JT?(iZyPi*c~m zvBY6Id(Jt!HCb={{AFh`8pTP%ZA|jA;hCmBLXhZSkMvv!6VUhFHTIi@JL9s(+5B3p z>H-Z@w{GzSj2@HQy&c$iH7bIJxJp}VWpzp59xQbwBj;2G*ivh27;S8DO;X!QDmz{{ z*V*{Q2^xjSK-WVoh)a9JJ#!X4;>$l6s~ytV9v{kUIKytczXzv2M7}WYd2qrP+T)Mv z=?rKMJ9uCh@8}#e?=52EF&SwVHurknoS(|2#?tceV*}H{MbB3F@6yU}&Hn&}envzne zreYrci=&E_ZXXqlI%v{nVytmK0uWo{0pgkzd2x;rLH7zFi7Ugsxv)gRW>c4|DOYuP zj~SB|?cfY!!;IfB;N(V@)V@LY-cg4*Fn$d zV{R@9@`Fn!E)YrTzBAE(c!O^qM9@b)Xs9}glLQ`Merf!!GVf;dw)|k~}^wK6QZ5Z$)>Jp=kJ7eT1*PGGa;QqHUC@~ zddjCug`Qs1PDu%SO*+h3HtoFp*Hb{CpYDo8ay+8w(JqW2?x-)bCT;hQcRC{9 zB8`%W?uo2AEur_F>>l@ec--QX5s-8GzFv}zCrQguPz>U4Sx~O1RFaXkPA+)zg@N*jrb&0s&opH5J|IMLji+UNIk4w z5OJaBBMZ&pVAzI^wspL_i?j;Vppi+BS@9qmKBN!}!40DOzcW9FUzf<5SU!KpKkxk7 z@Vknh*TS+BVkZd8I4hSYEKlFL7iu%jBNJ|?>~|u;pQ^u1SoY>DWF>s^`1y;MuQgBM z4Vm(dLJ4k65O?F?2Gg}{AwRIs6E6pX<}aitI4!jKXSMD7)$OTG+V-bRFV@mWjay5f zeU^M*{_HcE-XnSQcyj||iqwyIWxSh?gm$9>w1fFEXd5{??&DnISi0|w;^w2Oi^UHe z7<*6!c{K20ulu3X$Ffk?-KH(4jSTh3iq<>sP$;4OhaBhVJ!~#+TXt#c!&k8t4UUgS zNN?lKG!LJzG67@J>u!-gEEXFByuy6+z6~n__|IXS>w8Y)Jst!p+8kg6Lef1gZak8m zLcW~PE=-j~hD*Dl8+5~SGe0(SOSw6U1qgYWcZ;`A9)Y&}n;NP3t@ujmF2>x%LKa4_ z=y0VW6I21j0_!0mdsfVK7WWnlq$FKJ64ZN0miOR(F!n&Xl_A6&WJl2-bRZ5RNq|N) zhnn0o7;=3f4w?;A8bpjub`bqx@*o>i48n=8*g^D%Fvu%x*ZcM%6B`i+;_Sg3TvmmZ zZ;EHq3+%$KJ9pUpc5&jXb`bqxnn6}|kkv;tK5KW`Ajr{Thv3&@DFFV*{%`)W`pdE%^%`k89HaT$iq`QOXQT!Hd!)UUi zY|>i|{m#IPGwp3-VsEF#YTnDsl}9TE<@wdjNisnAXVDLt?i`{hPnL&YMR%)dcdJu$ z7iPyZ{zIq7Ghm27c;=bsy1j)IO(a~LQmpj3KfH({epJi>40rT^-E;y}_y54^dL3u%p9lKnZx)wwG2Pf$50;Kyd&RN9^Jf2yV{J0$IX{R z0N=|)DE>DdqUz|lA=clnnEl1H!^XM~Sj5V~;8>0Fe8P6LAeRi9LzV#-mj^tp0Bp%S2Z`Gh31v<87gUj8d>F=_pac5&Hkd!-fr=h)_yPR^>`V}R$(TcnMOid z>i+0(FzVRe+AR$J>+v4)##*}pZ4BlS_jW5ZzFGVSG9d5pIX0~M<~&z`&zKeRgyX;d z2UCZaT#h90Q7h>5+&%vYIvTf~24zF2?xeC?;!!xtO>`Qww7%{5%M zvZtHhN^Dig`pn<_dwJ)3OgyAod^zlXz}_fQtWH1*STItgz&-p7pxVli!W%^_-0-Mb z`gJCx*ottqy=^7ij}=4&HLrG?#ttd^M2bF;f-6Xn!ua!QJ!kcB8RhbwG-A zRx=^RN2NT8L&6A(II{0MNftf?F!!E-Qi(|yKO;x^aUXWJ?f0GS{mDe@A**$EE|qE- zEVyj4l?)X~k3~^KA(|gC)2$fA)|KQL+C;1*0SW{TSNOK7Jqi~}A4wq_5J#PzSv*!S z=_JtO$Gl4Qx^uKSkjDr;5k)!cTmcz%XnLu1)ByRi328D^C7K$VH9MMaj6qXJPCc5s zsuoQzlwun+9Y?MeP0ivj8%?i9aDCVYIYxTu{=)Wq_!3!X9F<#*j_VVvI*V`X_34^kn-zHo>rQ5@{eQ$L3+K+6=}0QUDFWbT)KKG;)f;^=q?12z1X z{6l-{>~c;~uxfu-=kooVi4I12M!5%z1|WO$4lTf1%raFL^=BPwvuORkOcI zhyPLZ?MALv@2~vaxBH8QX8U_Jhwq=^X=**3=>yg7eQG@pB8s?&hnrzcJVx1(&M>f~ zMfRuZU*_f9>dZ___v5wtZ=B|Krrr3fU3+@AEg|p^aXsSA)d4(<_4auOKB;()S)SmO z^A4KAqqf}&^d#vfRa-d=5EP@3fU=lx^Ra?gb^X=zCX5QRJp^4LXjZ)o?Xx;KEtf8g zhwt0iAAOKoE+{Fmfmt+}3$LfdXg=}5Qv0}DKB|A&O>g6Mi*I2{YOm15qnuPtImnfY zn_fTvXE@GIoW0QVZ202k9B4CuYBu)ZIbQ+5vB94q1Rg_$;R%{ICkW3Y?Xy>#Qr{RpzRJ^6Vsiq>~F5c2E617)Ul!~OTZ;#?z zQ0nTLOWSnnZ$_jHb!lR?!uuJsbR6^+OH5NU4W`Q&2fdKy<&pDw;9-r@QLlX$tTKD7 zNl&z`w3Ju!FE{x|$zo+>C(-DlcJ2|j!KA15lV`=dVLlh;*p2D%v0{>>d2)s3FxO#%Vb2&)l zc87z5bQ9FD!3s($lC4oJBfp0?3mmkzF&*6PyyHC(wE5nSEQ#2r237o~@}mAOrhQI? z2gBbGn^$J2%2#Roe9eoaDJl}#%2&+nR%`)P9Uu=sCX57VzNf`g-&ccHOQF@7ZfGr<$*Jbk}#*U`UJ)g{Dn#eGN_!nZ@53I2)X&uOb$F z<*}eav#(>bucv6X6shcJWtw*8*so60&Yb&))3h@OUo5ED68=p(1xx1SuT3+aIr@)% zyC64lGs^WoroNKhXRzEi>J)~ydN7?2(Cuk1WAX+a+j>^m|v>hMqh<$t|S zHM?ECP8+Da7~HVh0B)V~SE1+S70R$PI@`McM!C4j<={-(fU&Y$Z6Li3!*o+^z&R&# z-f@n-ttQ&Q*41ePG9T3jbi#_acE+5HY6G!G!0M71AGLw~?iN~78{j7j@vADtZv`Qq zn^Wq+oCTP?eINYv9ny`gQlo&E8!t;@M-EwL)du|S3py+SqWQTnP9mOrZ9uD08^DU( z(5emev0}Vp7_>*;dZBZ#4ZwHs8~vUJ$vSOdqf#5ly34cyyg@vF`Pu*`zNOj#&Z}wz zJZ=IC)dqNPjg<#&0Bgy#0qbE&z)M1cM3{GXQ{+k<&2O!jXRPPt*bewASI`F7Q=$#< zzN>0j-%7ZYv?^%>Is>B(OzKNGC}~i( z!iVqp93&+oeD>y1?S}s?s|%B6j((cy3x9-5kK!pJVUb2^$k0}aWPr1Pi&SvlzId=Y z@&AI;7yxxJLKdpdsDI;#PGAh9r_B|@2;%~2n_Xbk$|!XOF6&XRx7$eJ*31w1`cfs) zwc1ywM#&}5)m^IKtn;qL9`>ZJEA(_W-h-=RS5u|s_H%M;@b z1mY|qF(!USFHHP>NzjeTCZP(7?H#+F&8FUjMb*i><&gMamUTy|Ql)jr-1O3;_}aKb zIOO(}(H!YNrtCNvl(=%Z8_Cc>Eju3QmQ0Q{-jDSfJ@`Iyxk_D zN~vhtgeuhumgA_>wG7#2?t@wxQp3h5LLyXQdmkbvT#}q%IlENp933xRtTcr0f}M4e zo`b#B+UJe8PE!vc(`k(>C6XBbtz_!IcKiwcIuuLQ@#k7bWrE;pZji;rWF~#r?ou3l zD2qcF+3AX#ec9JY{BB){Bye3lZubFFA2j)myYHY>Gw#oJgs{x4qi6A61;LqNLVCEg z+mvrLl%}h$SetOJ<`T8PH_cpNiz0?$)?LR&qsrx8y*lE4>C(BOmKS{Yn)F;r+>LND zD{)7nuPBxadRG$n>wDaA2Ya#ixYwe--V0xx_hyN>XIh5@Pt+23#8FH^+-Y{!;F9wb z_l8P|5_fa*8w4RMFKMcnG$8J^T?LL-Chk|G<9uSV3X+k2Yp`?X11L0wWcrN9jwG}U z*&I*0NAHnUvN#-e?jW%ZKMdf_tvQpS_rSCz&sN}}k1E5t$&q>f6vJiVM!5y$k}*k# z8#QYXOQnNNh@y!6%i9$#PZN!6ytq~|O4&Orj^gbEb`)X#<3~wWk%Y$z#d1y~wo{24 z8{cWwWk-?!h|@YjJcx@kLb;uap`rF?6N);;2pCOsGuf_EiiTC|oJ0VYI6N42;V<;+ z0-j7+JB2i*uj?>rEbg;La=+wHAaWt>rr`o%IvEiCQ4~8jCOAHm(oI&Qyc227Ny?Jzb>JWu=3%i2AprPYw=_V)Ji0rJ3$vS#P$XLT&uOwl;r442-a;>|FA zYfqdaLLA;H~eD-_|lu;)VK1RAM}|F z>Sin@Kr7DC&%neW@s1l?zPqc*RTdWh>>`ek_L`adTq@jEW{j8dv3jyB1g81Wp}Vvj zc-Cfrk9b&w%x*~#BFGIRQTZQq$^WWnBC@9=AP`@TR%r}{nGjb}@{@o^e>G3r#Dxq- z_={bhJD~nrvICy&$_}{SC+xuL9Ec=hZ@B}iocm7P4kT>Nav*;{qGD{59gwlG0~auu zeT-0f`TE*=>+#ygL%sv)5Cw$tIg&LSEaxk2lJHk>`*xvZ5tIaH8!>Qg@wsq$p^0jN zS{|M_V#g2P$vH0g5m?RYc9TmaSCBS#)jI4l6C!KcQ1iRv2oAezd9WCUDl`<2_ zF+&YtR(iC;X<|1XpZK}K44ZKwb_Pdc`C-@bCcHM!qjr`0sqNihn#AW8({6Uu}1@f;8p~z}p{ll?)sN&A}ZT=Jq$)trVgW zy8e^@cl?p&ZpnLjfq5zK;+79PmO{GzUHSdWnf8JWGvw-xjxSf#^46Q4`Kr zB`5+pX?(8y-r`JomXahUU71s+BBv_nU=U8GWn&Yj-Sn_|M5vp#=LB-pa<(HGPKEoL z1IW`Dl%jxN4kONS3NL8EmEFvC>UGyX;13wnmPl6XY~Z-yzA+ZH=% z%6;rhxh~TdQiMQtR(b@&>*R5=ClGkDAVEDjA;dRB&`D{MKbPW0Y%$1tBzc>IlxWm@ zgOzO0{g>Sbhj`tkbd8sgj*5}Ig%>m%E|xS*6c4Y^bawUmHXx%0&Ve zjOS+#;mXju7Ez}ZkeU(+o=L+_uSHa~7R@~r`IN%xlpEiS#B< zcwU))_P_dn$Dd?vYiaKvTr$ll_l%;cC*OgddT30L8Jc2cy@(pzB4}lHg2MDNs^<%4 z{*mU7(-=#~@q!jy+0AUn@4QFPgHr$f!-=R4!RDrvQB!$lW30>ylcr=2olR&3L?D=4 z&26;G>p>oNN%YJ+eRvxUPour#)1frnyz3)JT`7@Q%ccUrAEBw_vQPK)ALYi~F>K5X$7K=*nV zUjIYFvxkrH=HJbm;l(!z$})G$8ylB!yBzQQvdd+28yHF^-yc`pv#r~-8)6@i_Z`tZ zZhwPHu92aTyJllo260kp8TZP<&wOVSK zb$7J~@1Qb4< zLLg|k%KCIW!;e*4C+1yIpzhu-@V{isl8v(47H_TcdBGxzrppV!47?J;~4{jZ;Wc7>*rm+c`QkAz?3s2FwNov40` zcnlpre7Ht*-{}a%H`5pKmikbV$-uV>ANIN*I(Q_jKv{RYz-!HIKFRu_-8=5Ur4KKU zjXJdYNQxS@kjSgMd}S9&Y2a*md^GCrbm$Gq3(JSkS9?r#)9Y>x+rzU(*@wsOHuDDk zH*dfqad=jEYfE>x&nKcEzIgd_3&xY5U@`Cyt%u)=uar>8wHO?ZjW;5#FPtaG-t7)C za(t3{?ljn7kXthu=I4rGer`AnJVp@#X~#LM9_Q`L&3qXAR4nOY=pq!}oYx1Ar(MXK zw|W0>-iGek{~JvgB=2?m&c{ukkoLejY~y{P{@xt}EsY-MR$~Xe6RrYsL<5^_G2Uj& z0qK8gxWNtJ=z6qZ^glHmWZX8`r2t|UCpij#^4okaAiB=-RiOW$C-*;Y0Tzz#&;=PN zKY5$4RtPVHN$wZFkwm18x;k>X z*Bfksp801d!g%g?H;wAiEs*_T&7qteOK!*J(`1g=3;(Nt`(i-tdQG7ne^h{DsFede zYJ9}Kpgp}n;xo{3*g|*m4R&qukJ;b&qk0Q7Pg0q? z(|t7q{t=!=YNn!Q*$hfz@``7 zy{abDA=@tR*VbezVO#U7+M1H4)>d755bFwyxH{lcFR&u-V)3f;*JA{(j*1(-og2c@ z$V2;q#Tw=s8Q)z-+ik&-yg)?PQI~#$gI%t|ZTe!d(i;u1O4s)mI3j|V81KqxFlpFwRP(%Z zWf~$RTMc~WEBE>fnWL-hX$=A3-AeN3PXSHPbss8NNr5VwFP<{iO1vOk2aBh{87CWR z@vKz$%+)Oo=d-%!U0lp?rCnJ3tu(dYYL{_Rs(Vtm44iP=T9Ym7(@kJ&eCD*Z#V`Hk_C8Q?gQDd$nA9wZ8Vla_xupwc)aq&m=x3 zQo_Nta&5*}k`h$x;Nx=b$F6pG2c{5~OL7k0;dnxj$FD>)YbuAs#0zEnGm0kAHdPP9 zZ&xUuU)y`H?Y&TVy`<#L$=CK?jW4db92jRV_4Yzol*G6TO6Kn%{7>FU30gF}(cX1- zZSPf1QN5Q`UxIRaZSRfNW^$O`pbge>Dc6YkO}nN;|V_Zpgj1_bx3J z!}dwR)O0}Q9ukoZ+r7`PP@se?+l7q~mPJjhBaeQM2FJr~-0b0E55}-=U%~<f4)9i<=gjor#|RW2`&-B017RM&(?Thp)w+@s02{y@Sa%^JCtey%XkgrI7n{r9gCS8+u zJ?)}s{TpXzEiZ#DoRV5;nJu><*medcKZItP0n*7O{ zl~b#3oxRw1p%XlVSJh2tHEyMjFRV zZ~7+~8LkfXx0u&X3W8N6Td$)g$#R7_=xY54g(GX*0%y|NQaE%I4afTdN72 z4mKkW;AbvSPNyzExr^9fCrY=@hl9G?SuEyhA3PFixr9A&No~G?5#Ck1 zuerJk_MzE1%Q=|IZ2Th*sE|pSp!|jtUdg?(rqgkWFxv@?Au_}C{%z8XGB)5TTVyKZ zuIe&5!5vf(4kr`H2d+0BMEP7Xskp0QFO~SQxfUubl`j@D&8Jb)3%=>YF z0peg3BVDFu=QE0pcG>6(5igNNR%ORT(nC6@V|nk8G#4W2pzpG9A_d?khEOAVCq=$tx82`E^5bFf zg82rh019I1ir@ylk(`~t4w+4eAUFyP9H%G%`=eYn~0J2f;#`pT?S9k!V!in#P zwVDF7Sgvh?l5m13iRnz~f<+O`PK+LKl-&O;UKf;?zcqrGBmrXwy25cCd{@zdxuH`L zHjJE0<<5#=CCo8IdXrDy;(zVlN&9Rh7K9p!J?sMDtin6wM6~D>`~ATQxIkN^_X<|P z{znHe6lfp>Jfpxu+?AI(75+ky<(GCDMogIPy6ohDV z@E1^`3c=f4z>*rDPxOwdkbbv9__=s^WOmcB?HM?A9BMk|oVA;RABRbfW5L=zYfO^2 z<3yS=+}NUg07zXt6OTN9qLA*OEg}_F7k;2j(^Nu_doQ1)seEcAo;%sxtzX3q7$8gX z!_~>_Rg8*BbXHe3AO5iR2)^Z@s;ljz?e{R_`iLH9FcGEtlhdW$WX~;>N90S7c8m7H z(NPbKdiuo<Q8RuSy_43G4kuPN%Rz1P%~p@}<6C`q;zhqR zCudd6bH5ku{`YW9mHuAH8I3?b{{fx-bjDfCbTqT(=RB8T8SzkBKKY3su}^|GYYr-2 zm%wD^lpC(O=*>pCY)2K2q!ZV=#PE0r;t7TiNxgd z0~w(xpK7fGzKg0u?N0PZlS8QRH;FfPsceFSsr$Y;Z1+caTeYJ*8j{{zp}X33{Dbq| zXpko*gl&S0dYAU_n@{iojF4v!&fz&PeWv*y{7>FwGse`ONz`8E)ZqzMEZ}@`_uM(m$L}_v3ZGo9lcxeACxubr9>fkDq22AZw~!fpMfgy96C~_Z)TPX|CiHwrdo_O*cFWDizJQ@IHGVX!Qd7;i z(fX0P09Y$QG_S#;_oQ?53O%n3_vXT56EL`AHGmx)3|U= z=?@4|{7HU7?k7#bGjjRQkPrlUR|$k@wQ;>>UC=)26PCG0aG4=BCNLZw@r<;?`<_&| z4m8kfjv*}DgEk&?--i1f9nNef;!SDu&QZB}hseLk4?t}!hd)8i!KJM3{P?&U&UCsU z8aH$)h6X*!S|8$hdZ20#4%o<7)`6aEfbTdn> zhv7*8&idQ$hl4&6_tO0j9(j`TQGy2B(FB3Y;~&`5-kuM* zA(@w1Nakf0l6jehWL{<=nU`5e=4BR=d07I(avCXFy5WfqconT2FtW+9oESxDw(7Ls|Hg=Ai4A(@w1Nake;B=f=ql6heQ$-FRu zWL}s+GA~RZnaOX(7y(YoEF_KSBxM$od6|V|US=Vgmsv>WWfqconT2FtW+9oESxDw( z2_*Bv1d@4S0?E8Efn;8oKr$~(Ael+4#Tao_$}A*}peSV)l6jehWL{<=nU`5e=4BR= zd6|V|US=Vgmsv>WWeFtn!UU3eVFJm#Fo9%Vm_RZwOdy%b=EWG{T*@pYjaV#Y7Ls|H zg=Ai4A(@w1Nakf0l6jehWL{<=nU`5e=4A;a^TGs@d0_&{yfA@eUYI~KFH9hrX(GiK zRYb}xB#javWfqconT2FtW+9oESxDw(7Ls|Hg=Ai4A(@w1Nake;B=f=ql6heQ$-FRu zWL}s+GA~RZndx1{7{yDWWfqconT2FtW+9oESxDw( z2_*Bv1d@4S0?E8Efn;8oKr$~(ASqgAG!+-3V;L>vE2B2C%tA6RvyjZoEF|+X3(369 zLNYJ2kj%?0B=a&0$-K-$GA~OYnHMII%nK7p=7k9)^TGs@d0_&{uTon`AsVrPxNalqJB=f=ql6heQ$-FRu zWL}s+^6M0mYQ8X#T#1mBG7HJP%tA6RvyjZoEF|+X3(369LNYJ2kj%?0B=a&0$-FFq zWL}s+GA~RZnHMII%nK7p=7k9)S29TEHl9@j$=t@1msv>WWfqconT2FtW+9oESxDw( z7Ls|Hg=Ai4A(@vYkjx7cNalqJB=f=ql6heQ$-FRuW zWeFtn!UU3eVFJm#Fo9%Vm_RZwOdz?IK{B`TJT{QbZ(#E>3(369LNYJ2kj%?0B=a&0 z$-K-$GB2}`%*!k!^Rfhzd0_&{yfA@eUYI~KFH9hr7bcK=Oh_i~r!Mg`9~9U+(|qmz ziPJvbIDjvzdTTmw9VS_-OXbS0$N7sQ{uW{~t_a~N$Isu1za?DK!Y?+NxjOghu!?`) zlQ(fifGD|z( z=)KHRt48l;mRdD>KeN=T(L0)@R*l}%EVXL%u4buKqxUsStt#HxtPWPV>!UlS3{_aF zYgY25AN(tJH+I{jqZx-B2`c1Qx2TjvTpiBECqaXU` z>--oDw)DW_dkqK@yJMiG5uS{*0afwQmkP*HfTVve#Q@U()Nq3vz|r++!RUW#ILLK= zjO+Xu5}yVFKI@y3*ZDDuxzpQcH+^DFzaKb?PUcUEfL8?M31g6&l>>zN9x+@kdr70F zL-bqj5I+`oY4T-w-0ZL<>H9cYL7#5CS$nlv`IN-wtJmwu+1+Y6Zuw!*-6sOFSDv-qzl`uC4GE7Ae8qXi z*ja>`YCvv`l})Ot-ACe}LmCa$?%XR5`h47hdp|)`#cw#$}zQOVs}L@iS2M27h6Vx;i0E z&05AyY5JmQKL0EcE`|klVEO~iJVBW_=V249*(6%tnymyZvdvNg1Wu=98&4zCl}cLc zc-9{)cmuiHHmu=tQ!2b^ZHs-ylt(AB zJEB$H3#N{@I+}*d7XRtr|DCz5Jb?6fAh74R?9+<@s6^9`YdOz3s$kM1x;Fay~<-zt%gnT~b5dngZ5MLVkTX)4-bp6)dw zj~*$P3AT18cxd^qS=a>osxl64DC6AYGt5X#^f$McmPUFsZg6PKp{wYjbnGf%ff@N@ zr1QjQw(d>{F_e%mj;{?TusEWz2hCK6uI&_TD9@ceE|sD@SFBr1BGdXw9=x zdGI)Xsn2H?CF^)d9DTQ%sAB{5l4#mG6&Izy3DRN^5VfOegy1-|2cMm}2XvFEJ6tF= zuhYDV1pEt=ZzA2s1qOv&6OD&ctewXHngwREtUs?J8b~iV@0kKGKkMsBni5JhC(US7 z!xTyLYKp)i4ZoD6K~-uR&%M6n2I?~X+irgC5ugE#`f3CbObZpS#wNyddE71W&_`vi z%t{ax*{GJ^E>7NKlf*uQbZA4qiHcYuDqvD}QNKsfZ(EQpm zpxSPIvc+r5Ky-z?P|JW<0UYUain}Q2P61$v%Kz?DBL0gQa9#!8(!M$^qCy9lQj4fo zwxYCuZp8tDknDu-(hBQ((67~ad7#{wz9t$JjYQzY0mmgGX|)<`ZUL-Dn+Y2BM^NMc z@Nd+6A;UdXFJD1+W_hhXbfr($S9Im>?37EB1Ol0Mx|Azv+6ZC@So3+zEBbtUFrt85 zc_WIYuYP*IjElAgmL|lpg0v;Xv7(QujVzaEW@+-weSj&_p8506oq{oD+6V9bhM&g{ z<1I1%Uy^$7i}H*adkiyVyPMZxh2V|IO@ZgmHQ^t&sU!XC^MXDk)dDQka? z<~&gkiHmAve2I&iO6!Qtsuc}S0YqN=_+}f2aTj5;iLeh4pVnaGtTk@K#fSh~Pq)2C zJ435`(B5nDR_qEbI1D~gzt)|(S1*3tq?ZEU15O?Sc8}?Xmo4BK#hYazH=iJt33lHL zeFQineoA@rr|lyZ8vC-nhy=3|B(L@R!$w<9M9(il?4p@*AYx8d1ib(yWh*AQoX& zky5B?636<39{EpFfca?82G@xzuQy*keYEx{ky>8kdIpz9cw*@Y_cuGgJL$#E|Key- z6_ZV=lD`w0bSWHr;-`2<*&BU3cW^Hnj=miWU2g*pmG=QNpUGE$5?E*&IrXj)dx*lGh)M)J!d) zdE!t-E#Wtigce*IrSI2U>(=V3eo46o56c z*uwSwelfy3d;Z})-Q*DBjweUE@$qnRN`e{R4CH^(IL0WT;1dRdl}!RvogdffLWp8z4pd>=C>1co@ z4_iWxWSL{Sj55k`zkAg3V6?Yw-BC-fPi}txH%u)y(C1rQUA&`w3IlEuO`~oWv98X= zR+Tg5<9yLCuqnI{ty|;X@`Y#VA-Ga^`xuDf&@1(1rEeLxAPEWC?(kvP${Dl{{qA7e zc4qTc*h!b4*bN0?ZQ>@G_fUmWpra~4!xOp!;}|H!a_uo4j}Jt5``~9f>IgH=pG52$HYw}d&GuXq6otueiXv0{7m)o@-ms_+6co{l>eNk`xILGhw@ z@UCKmeyRL1&P-l-#!Q?Ox^)4ETRY50gCx*#u~_M!sh^&(5-vh07hXiB+c??`hPrA1 zRd&(cs~+gH=xw~0PB{|&@=_R8(`siYA|OJG?FodrgC0=3C!@0D||`5LFa#-+<7{g zY?zXd6<3&(Oi%e+zsA_lq*tYY7JYTA3Zjm!`OCZ3uZ*Sy!F)%eDLu>0V&%GHP-|5` zX20m>)8yT8FY*w%Jhwzsa^!Gg0vqKTWCpyo^yev*%IMs_g!NLex$C{el<`RCez2Bz z$t^7?*`|nT|MGP77hv;T+5sKWc>Z7X5p6*y`J#2_LRMEi+ z9Iyo?9o!T&Be3kj#ZN*+6Ia(D&EEay*M%jon*F+P^d9t}cYM&7R)MmRu;AIjTDo%U z7LNYkq>V$f(eZ)bWKPI}9Yny?wlUpk6gJ<`wS9~ZvbN8L-xjxS?Z>gWHkZ`*Y-ML> z4n5p1pT_-Pz`2!Sdo1^h znk(VXuUJfaOb~5mHqNhV@@mv;5Kt2q3ww&=K@O1|Z61$5zusEt8WTsRbPQZuv$(nr0vy)YODgZFnC2;#6jnU zs7#%=pVWzNtBuWMA=>JJ(6YEcMsXL484LnZPM9y+duU!+vXzt&zvqi>{3c{bI;{Lp zoNsTZ?H9!P^>((>ueH~BzF)T5J{}HX?NQ5wt`kb`VSBGLvb`y$a1V)Tir8y_4M;l; zPWK)ad${)grr7w2TH40X_%F3s>E|Y@$63SbQ~-F1=NiygwO*-Dl#BKGQ$>B%b1Uli zx;qmMAgFWZ`h@L>uBSV5nz}5G+ub@X%@dL!Ru^q6VzrVVodr>ty6pptg&uo0za)?M znUWpZ1)1!vg7cX#b(`+PaB#xDxZ-&WwE1Pwb^8Opa_;!=4to$FL;G=mO?vP;AB0AI zB|ueG4FEoR4;#?vu(RFW?QT1&f?^19TU$oRG;t4kZn%+FA` z?Pu^5X0UF%2eh-#6+ph<>yCKQfPsZEY#$!HTY4Z;M?EElRu;8J0EB9qrJYebVRuk$ z1e!iGOpq!!Hj7gl#^p#*pnQ0{=(M-ryS)JF9vs5tH$rH3r&!Xu03N0qXu6T}Eab?X zIiUycj5&FQig%kMro*lhw5iTr98+iDAv}dGTPZ&G$PC@pJ?KIT;1+Z_;2iPz&i$JO z#+5PgTL~Mb8`DwEZhBLCeOF7Q2l@xv`fkqQN0(>I-FDn6_$$!`nl>2|Q0X1^hSSAQ zM4upGsuZaI9WM#Wu#f;nl}IH(6?cUrguR!Yc!>y;!SG-dw%_rivjtrL6a(la!k2WD zE7&;K8Nl9hn~#5W_wm6ZAS+XcAS0sUxm^7H@6=Lm-9r74Igzz$Mq)u6Z34QpGXJ~) zPOZWrK9Ztf!{<1?0y@Y%cuO0?IKhSA44C{O(Vn7$5kGnG_|2E=%zX0`;|ObS2O)?NqK+feL+fyEhOiqsH;rcs%NIG&IS9tc~yT`Em%G^BpF^~8v~hge+T#DUWR znUnv)Ccv&ubB7o?pdjM6#BdRe4U|$n$pSgR`mojpCZ&vLFOVmbGgmO}1+sE7^eMRZ z@~m7t?&C!JlORtZUDv!dBEmIq?GzPK!#^2sjb~O!vocr8Cu2!v6IyFz4kiD}k#KV< zY!BpV>=5KvXmPt3?6=_*JCNk$qEmSaJejXWqLVFd8m2B}e*(iEyAtWZa=wX6&lsF` zFlHxE;hemvUE(&8hF&D60z5C6Q#oH?Y{Avsv^05U?Gy1W&xJehSNge2uu|W*Ni3d`SG*uTrDmHk-q8Dbv|I7<%w4yfYqqz-i6PX=Q)(nwdT?8voahj6o0}jC zd|aG}Q#!e6L@5P?p+=J+u`Cw95+qbS`MA5Z46pipmuB6OV9Cjz1+tL2w=A%!-Vh~H z*|uDa(d83E&3mAn;(zz?P*WlCNuy?Ymo5`EAKbr2O_)|6-2dpPsgU@jQM0^D)1&6q zNI2Brzb~Q%ehhJT;dVdLLSN!me;ndWj(9XYhC$|H#RdU{(a&kUtJ)k|8FWenA3lbIf#7Lp2~i4a_WU(xqailNzcw-4Tw(zGfSH^C1!q##*xp|+vz9w@6Vr!ZjLB&AFqGIs(&`1{|5Zl{(9Vn z{#)GGzd@Ve7M#T%_;#oN_YeQ|KjF*Wqxt0D|Ng(~_y6Vp(trQ^2mSZu|EB-`57+Mh z{onPw|M$QCq2K@O|I~l;cBlW38_%`7>;C<3f7kl|-+!xa_di^_m;Z;B`+xsuH=qBi zndkq{-upnwnPqojZF|?AjMtzfCd@h{eD>O_mPYF7ZfP`{-I=voQfo#YwWg2Mqmgzp zDOGouS~aS!s;R10ch8z2bKqb&KB3RCbFvU)%YPsX2|)ouHaLKY|F8rD4J@$yjerG) z*npCdL`j^S{O-H=eeb^eeP7jA-K|z@r|U@lRekrq`~KYb?tAaPckf;MdCsrh;&lEw zzRtg||71aal5X>NFx)>6e89hF3(C3n3!LAqF!B7|Mc~{Taa$;mpH$N(jPYE`S9nseAj*d5WMkKesA&a z3*OqF7ycCBCBL21KN7qH1$Y~t-dCjk3-BKL@(JF?GSm0ZO-VQY6a2m{t4Pf5BBlkSnEyVqnq|GY2h9!k20D-2Kb`yZvfrJN7tIV-}swZF*u9guSR=Z55W*Qc}jNxFMdKL7OXGArrs+5CQ)^V^jC{L{C~ zi1fn)R{lu3aY^T&zMS_YzqTpo+Fz3Vq@0`b^yR!R={8L{A4$50lAnM2avqR!j+=6> z{bkN?R?_*WFXw&9Z^M-Hk)+!Y{`sdbXIs)eH050TE5bh+*9YY3%b7?yXH7XDNxHU_ z(?5MVHzmJ&rkrb=oZmeur+@l#-jQ?%Ou9#sZd20vr!VKYl(TKhx%O8%zYQs8`jr0p zK=RwP`ANF=`!cTOIU@7b0hzBhY<_=D_}7+kDNmp7l*|J*-6KhNPvp6O`g9LOp4)V5 ze_iS)^Uj7meY%IzE;ijGpHAk}4SD)>vqkm$D(5#Y_43cVU*P(V7u8SFZAd!*9Fcjv zU65|=Z*YDOJ51j{$7PjGq*wTl-s_->mS>Kkv$Xe7}f)lJ1_gi+^tZR^dZY{k|soNxE5i9*}eo z3;6y>(rrk4`sV?u-~FQe{x;{g`8&B>{`pYSjTf}bBT3hmcJa><>1PiL+GXwUaDE#i z$NY0s)>9h==^jbCO{t%Mj!QWo7S-?Xa()jboqx_sx{;##NxDsGfB*F3?^IEKe^2Ts z={Dr)(*YkC<HO38v(18XK9Y0~ zh4239)7>d(m$k2Rew)&s{^`@*ElBrB(#;D0{L`l!DQK6qezLoh<7l>E96geBvyz{GK9u}si}L#w&hMeD%l&g! z>enu+pQIZXzWe8O;lqOhKCJz!@K5-DPoAe_erOl);gO_k3*Y_ozR1DrMfv>;sh_mV zL(dOs&r?P1Dd`RfzJG2?e|b<)&b5EZ`Hjo?^UqD$ube7sPf6F7_VCa9(w^f*`TZ-& zPx{HYJU69&?SlHTK5+IFKd;O4jyxZn;rAo=<$3CRKK`Sh{8s#U=0Ck4uSP~bfp4eq zdsg0%UXk$V`K!NjUfzz3d<(wa2i{3}i6a6 z>+9P9obvr*4xW%tA4LCw!lQHxjn`_uSy;)F5$XA}-BCEBZNkk?yVp6AeA-=F7hv}g z5%Q>?fyqkJ_8{1Ft~3{8I2`G~E_yLVO3t56a`KC^IFe#_#}*N2dh}3Q8kf7IKU=$9 zU#L-OeF-W@k~0@7XQ!{6KQmpKyEZ#rnYwV{ND@^Bs%*Gw5IRi4)nd_6BinJQ1J%RB zeJvP?>p*b-aqY**x;#|yyaIK}%x9spQ0?|!S!h&Na4`J2QECDy1d_?Og8HAiaQed3 z<+;l2g{ir7Z(f@5r-yKT(d}ec+WT-@~6QM=$xQa`a|@x*Waxz_aC}as1)Wu>3pl zvlkpcPT`qQBje-Snee`Z_w;*H@J9YXKHg2dC%g?jiNE&?@J9b2gL;2rqG zQa(KM@V4Oq?@~TX0xiYa}=7BdeKPC;ylZUyN=~rrWDuW&`J;1hl8~caZL0@*h7*4s63j6I9c;rW%%qIiuIhYTn*&ZNUM zNXHG*@jRrH2I*uT(!>da1y3Mpshkh<-D@=JQp`En>@9kmK)5XQF;~xDyg(ro&%Jf= z3>PwWFTouEj-Sz<$pVP@`}On&zR{}<{o+b84;1pnf!>|AJX@Z4hZUntg_AmTGCZ`L z3JxwD{@5A}3teWEVr_1c!5k2CMN1#q98wMt&jE42VHd`_Jn7|h|Ly>>9olh#$D!C3 z5f2JsLb`|)@_3`nV3V95Rpx4Uwc1vGI%0<##)xvw`6X#Jp#&uJleHXoSZi>$8~b22 zG}dDp>p3*miH5i&M6+IKwc2njiC|$)`#{@qe5u07xmJUh$ez1Kyhx5G5tbV+a@b{O z6`F|7e7#4i19HnckK``a0=8a@U2?~mI>duUS$wlLTJ!7}6&nS(5`Cpff63Dmd4^>7 z#T>O~oSfIY4Tsyw^=iv)&_MgVQ(rvn+5j#JeEW#o#v&*ZqERTJt2h$+Mv;U?P$Z;` zX#=>s-ipsb4UFalN4n&n*fncS+!Q;lFf=)MOWwiQgTL+Vh?CLiA~;wV{=S`;Q*iTO z^B^=qG>#A+roKqQ(MaKR@XFf>^7w)>^&c)&{lXzbo6xAs zUpY+uBI6^@;(*Dr^KWd8^ZC5MFE6QgcPub)gWEF=A)&K+?gj(Fz3(@T7c&K=s& zzvi7gd=>Bght3`D{+BqHBgHK~^eCdY`A72Uo&2w2dLw_d9KG>-`SiYs_x?lWyZ&Ea z7&%pel(pWeU5d;cMN_y2gg@;&?$`Sj-go0wkmCu4d(uYG;@zP@|=>qpm%_VwMv zHKc2_eSNn(71`H!#|pfCeRsRzb-@F)DWWkRpraD30SYR?8lasLtO2Si!5W~K60BUM zRM4FW)&RwcU=7fk2-X0ViC_)Tmk8DXWr<)7(3A+)05yqV4Xq<7khA;xZhelI>Y(=Z z-QfgctZRjF+DzR6;v^srkSGChfKUmD1LR6T%oQ#B`fhWM7TRlj4I5;3pg2Hm2gCuA zJ0K1a-T`rd{0@i%M0h|PAjJdX06`uQhnD5TEwi_P?N;VxG#Ckwuxk#v}NRd{Xw9*o&if>8ti}dCVzr+^9HFd)DL;@DkM0SDJzRLTp z*~;bfpP%+u_)_m;m`QQdlGM<0`c$b@d%aG59?>@{l~G(rdw;P)$0(JhPHUyjCmMZJ z-WV|%m3O&OLtP*mIjjt4MR)L(#GRn;sOS@QXBV{Mrnid%oHgd5M^bkudjM3#ck}c{ z3cc^w*-4EaDD7_FE;Fq_IeWD$9l?JWg>8}Ed-lIA&;y(M`}cuo@1N)0-+%b!a`dkM zcjf49{Hb#EMt-gwz48CP9KE~1D^uUiKV6RAsXr6b+r<^Y{(W&bU(-&0|GxPCeeqZK z_2=PM_fWLP0~9fWH9!j^SOZirf;B+@B3J{IFM>5d^CDOS z)GmTGw9aK;e-2xoL3TQ+PHSI(zOO$Y+rNm9A=9-MQt22OWaASM2Z-%}I6!g-!~w!P zAP$h<0dar`4~PS#ct9K=$OGcgvV02~@!^u}>(6&c8@SMF;}%4E2Ryzn&hI0Q-(gZ~ zLHW3V`{MD{??R<{bXV38!wpoeWcN3v<9AQd_3=J;yNk5o`}e)ycefJh;@7|BYB$u--0z%@dvEHYJx@pvP2UITq1%5pt4IAb z(tH)~{bv$i4*a*Om%jf$l%qHP^X2G0_=S9Wum56PzB|8kVdP6C$~XR%e0o2I z_x?lm-TVvX%6I24=F|H+-un;HOa4+!?`n08$4;%|(2C9pHve*#{&Pt2^}inI|7QF? z^;a&8e6d9RuWy#4w+Xy5^dA1za`dkMwQ}_CpkCI#Ag{jnzFLmn=HDns@6_MS()$?N zb@p$u|Cu(Pbnfy+JQF#?BZt4BhoD`9}73ErJ zqKt1LZvnSlg_|QjbN9Y|VAk0rzdATxCl@-3^5ig-YwdcYwY1`m>^$||b%Nun*QqV8 zEcD3ik1GoQdbJLD`l~mWoPFjpPP!49w!Q$jbig8G*B;KtmaFfzI`!VVZ>tuPIgH0| z`HI`x^zYE2L%!Wy0Ntz2&aw_szuQ|G7)iEQdVCkc#=Av#nQ$wxu+t*Phir)I{99F0 z)4hPQx|HJZ&5j%#@(k#JU7;3UI8#7$QrtkAWuA7uwuu;_Gm82Qj*se{a zYtteNTbJz`ML%4d;Ojy9SFQQj9 zs&E2!)BD1#CS6ED^xx1-t!9Hg*F9cqWtf^2inwW+J49;}?L5^kwcdm@ic~LtduvjV z*wp$K`Yl%c%>Nu=Hd#)Xai2?t56v4v(s;fEPO`9Qw5p4K@*xkeAQFuQS1}n5>356> z46sQa6pv~6PCohJd#1GvuF3%JzQ00l8au64&rQqSFt)k#^98hmF-;CCW-m>jIe+>5 zn-}TM;jzhMlgSVMVEppL@e_RTpCr^T-cg<7-LW;ug6{jB9?7Y3{DhMQ3?t$)=S-d; ztMCHcJi35#H)?C*xB(?{KJMJDM*5y19T65mm-?F8gIWx?_K*d#`|bxR-WBbW$NzD; zb@*N2m08!{|9UxkPI^S(IFn@bjJDG`aN)WD88!NR@@7Oh+`FJJdb~n7mk*RTicY~Hh8}ILKTFs|; zcSCZ}FPwI2cSAJw?uLHv?{0FG6MJoU6J#aH!YyuaM$7GR4ke%dbVhJbk>qv~I)P`i zmF0I-*Wta7Y-6nJ7_0+ z{*~8$_x{%`y>CXl+IU1CB0iCgM?}qT<0_5+>nt9fBVNaQ!oP#3J72>y!EgG|d)oif z)5a}2@V{sAsC+(d(JO#cJd&F^cz7Lsi2gl=N9p`$f4{fC-`iUURn_I{+7sFDu{xWM zRSx3-&)wfkmBA~`ZheWuK;by&a8h^RSpOSRQ({bcbfn=F!CphGX*d!ZDV%FPnWL{E zcaV8|xtXb}he$$#BGP^{qhXLk4;~mqvIxT;GM{MgFE*^69et@ z)0f_46j=gfnixpqgfa9fT;K;exLt&H_Eq>9&78#%ZQj|ITT40gs3t`C29|T9w0V}i zNL!3`Q}#6*KNhkx@4F0DF=XkQ%z5@4vyAu4{j4jH{9n)LQDoy`n& zv`R;uY2n;iDmRE!A+(EYnW$p?!=+(9x~55q(dj7FGzX1aaW_tDkv|5SKdj}_@Odq> zRsp4~`=_~&)%SGKX)dh;{D#TuJHmva&U77TbI){Hm={du>CI(gcaHCB>ca&|DTP*_ z(C=LJNhohv9PlaefW^TsA0^A!#~7ehh@2Yp@aK2$`r(h7MngYN!lPftj|e_)UQL*= zXvmWX7jZD3Pu4A?czA|P13kHI@z})YP|BaDQGAv-5U19DhyF5-oyX19KGcKDo5|$|D8|o$o~_U?*V?7DPQ~l&8PRPc<(<{ z-@E_cg^}k<)b|eBGq3$V_D!LkiQYZ@K4s{Uer5byW?XyD;z|0IH9QkM>Eqj(@V+K^ zj|4CISU%nzyr*<`@g#a*DZm^3IODyJC*ig6Oz@nA-zF*cb8ga(y8~4skT9Q2fs7x z9!a{jT5@o0skVH(as!YtT;*#nG!E`!&pPW)b-T&U)+$A)AzgxFqPu{G6%Q;T*XaHy zF_unx5n~Rwv0Q*r7bn-o6h#!A>f($`Hf5K7te;62ZHOMCS76a{Y&~}|Nb5QNggt(> z(pc1Fsxr&zcWoaoxHQ#UX~0ubKipd3wUg6d@D(tBTb4TgJg#6+z*VX>q9kEil&52P z?exqQ)|rID-@>-))=F|TS(jxOHgMR)B7n(JyvEth8t%@nKYy$7Jl(1Fx6g2$7i%`E z_~CV|^lst*8vgs5zx!F)+4AB{U2Nu}<2IYWHA|)Mt}idwsN^p|A+TKU)e(_MS0z_D z@cJ|=lczDde9hOAR#T&C%hN@?ajMaJ@(On3E^Q2*kouzXY0x6&sV=H=TwOFceexRJ zl~dqYg}UZNN!CMaj;(_SP8%hyMk<`ao=2X9E(_j4 zs5m*>0h^Xq8r9BVUd>&KSQ5ATI59Ee(xf{y3~WkU&v0`hlk%8Li7vZk77~L(VK5FR zxyyiMN~!IYW+k7!ReDbzS8gY2C0DIn0}LF{xmC~Uv4OvS z-%iDdo8+iW8w3gX(isNM8&7+O@ET`dd+rR<6Oy$)v*w=f4Y`88tT38O$0YTMAWli< zwAZCjT&LnGqIi-B@`i_-8yg4*{&|!GRx@v z$#%AAvL%4yVqDoWlPxa`FwfFDb98ha3+}_~hhCV>Oqyvg$(;_<5|B{xLK*q@UvTEm z37KwbinvBaT;n3f)7nr)e9RM;DfHxF+O`~Z?Yq|-*q4stt_FzbV<_1@*o2F`oX~HL6IVKr+^x{SH;T1 zgj%7uP;Bt9zR*HUgM`iRo$)>CV_6rQTm_0hi*_1Hb%l*npKp>{uK}$sOu|VkzOb+Y z_ZRH=qElO{Q4+ok#5)M;%opT*iorpkCo)l>!!p~^ ztgNz;v)9R-rRdsHU>8drTIecd8a>EYN44I7{@l6vK-swIiMP#)1HGCwlkanm5lFSF z!8aN$s67dORFFd}rxDyK$D`~)pzE~V?N*2Ugrr7UgaE=fKx)+Kh*y_hg#(0Jt4psm zD=rK7<9X*Ffwu5KcIrD)kTV-R|LBSvson#N9d0Od;k`m!i3+FcbU9`e`D4k71X!_9 zczRmD`g31bO;?7?>+lB9X*FGsKrnjr3NRPNa&4S?1#ra}c(F-pl{OvqFvl=BVi3ac zFb(p6yGT!|YsSxS-;^RHu}$Brd+W zE0b_+4iyq_G3!y(!*nFNUJ2pROGYUueAfqs=K~=kLmyftq+;4B#7PZ}+4Ld|-9>t* z`Ks#QLWga;&P88dA)@G8^!@o)<&;Y6h$ySfxTKf-NqcPN7PmEq0tIXLzg|g%rh2D? zw|hFe$=x}I>v^tN=yaYOpKF9PPKNlHO!}eRgM%p|+Nak;xg5TBTzJ{Ar+W$+RSo>nlxY^B~kk_ZvSF0US7VqUeN--?nI z44>;%o85M+TU%5FQpS9A_zhM&mVYDin|pwp&30JkQlCPzFVw(USLC^!vl>vNrR6q2-z+?BK7?p1w9(h?a(C3lo&v9416xCPiZ5-g70hi)w>e zf8C>t4FYcIth-H5Zv|SBgsyAwZ*svjU+vb$lGkAfK`85psaeB>bh}174Z!LPWXMpZ zPq|uqWv@=jD%oG5(hYD7-Cnt^JXXeSrOyhweD;1hI~S3`PhV~nhUTUoSbdas zgf{7ww{=SV@(G8l@NinPEnvI;cNTsBsB8Xix`#PPH_#5IZb2bsiEFfsM#J{j+cgXY zmSrT+uAKWUT7aWyIV@tg#+r1v88mXbrO}S(qn$KpC-c!JP8ht26AIDY;-OwNu)64q z=!w2_ad&hoM&e^}6I=>y;LwWNz~U7(g2gLp1&deQ3=T7Ghb?rM;gYz{#R`t9S5NUx zLMK0;wYLSYoYVIOubj)fF?i*iG8A#U#IW=n>dqj|#UUweIe1Yg3hwxV87Aai)pTR* zVRphozDv$%#Z{^I09ozA0|C1ZtoA-bJ^JX;&m{+!4?4BV!6u%VxI{$(l^K#lNidlr z`i=BKnxw|n>&Bvc1+^MG!*#P3iEf`os;)3e^;TOzbRPOdtc^$`Z$ckLD(9?Lo_hg_ zu>lJC9K>8*yzW*-YIw$p6x#i|w&$5vPv`33bLgr8vt{*rR8SZ9L6^j@TjO_mYW&bN zy3gozLAe8A9(_XETaC&}la^OH;jI;U$>W%@-D-P4^l~o;9PVS%zLWVE>Vtt)O8ZVq zP`@1?pnjhu^*dXa`4p+rG~Jom4Llt5;+59pMe6s-cdYtdsTQ`S3lCawTrB-Y*Mb*o zFGfjCA)SQvW0DLx-1Yy~-_lqYgh`Ur#l>-kbn%9m805u4p! zWS`G0p}w*BTs($O=Jb%0s)rP(d^soO%cW9IrA-&Mf=+&SwehqU-f3OJF{Ke`-M9g@x={$wvMyJbpi|2F*Wpd16!pGvw{!`| z3gS?BUBabSZ>URtVedIWqksXMgPW^VNKt8lpDJSVZl*ECXvco#+$E(2Flw{Xx`ng| z5p6|y%jyMCHZ-?$w=WES-I=tmpjgR}*3s>w_KuzbSHfK23miq!p@Y{6%2~-MiN=Li zwNdLXKr={N%IFRtB_Tb*v3JRv-7&Yx3awOlp)5kFEVn3>6Cr$nf z&aSCFv8NXj=zjPVU*k&-;{spiA|Is*vvjypn4YBNUn$H?uv#BrbPmGq{(1*;uSRzc zUB|$F9(AK$;}<5On~;^YQx4B{?CTAn5WjDUI) z=xeDaf%ORK$qh9YPMv5(faGC1(|JA_f7iQpBgKI)u;0q0$2ld^jwz#5lgUJs$yjQx z8D$f60w#4_#4Ti#sq|!Ao)3JrGl&oyV5N&3hSnKNRXS0@!;Zdx!Mo0nV{S{D2I@*U zv>bk!qIW0Dmc8pFLT>KI<63r)7t(yuV7^$0dBR|xD8zipV7}xrqefQy>HSttNAC`_ za;DFpH2gT}`H{hV*1;VG?2Pe#i({HoGwPSgW*gusu{`Mv&E=(I7}C#+VOzf z06fCfZZgbIJAd80kD`6cO7=bzUe3I!XHHuE&=u<2nAb78xNrKXg_?%fCwvRc4P==r zWjdjzBs>=~>HzF_C=F@J(|cl1dbb}I2Yjqx&l0FIIlFY4 z?elKWMZ5GoBz<=d?Gf$Kck`^jj03z~x-CZwCF`np?$TvgQ9oO$@a=}J($`e2Pnu7_}g7himOVtTrbMt@zYWe#}VTZ}qmGsVc% zaYE5YcFm9z!yXCJeHscDvcZB(z*g zNJb+Wnz3ySIAlMD!n~$1pE^||3iBj>vqRfxbdtl-?JRGFcElCJZE5pJgmGK%R(h$K zj4liSD==upR9RhWAr`KNY4r~ajYum}#c8o=`gb!gXp~2(XqvUDie!wl;`1@DK?t37 zwo^OWNR9sJ+A%dj#^5hU8eLwQM-wdcMyUjlN;oT-chbpm0Gn9P7dk|7fQ+g@6#Yaz zYEZh>n1(@CYneJPW$Gjp$?&1ht;n5)ny>z@D+$o1-l?MqBrHk!i?3d-n66g52@Iu< ze5lcAcRhNj>_}EWpVUibM-|R?1}aFoyt8Iws`BaSNvI%w8)zws&JYE<6yi`qT8Nqt(%yq_XeH>D+rhD7RlT za>49K^qnd>>uh()eBX6lqDWm>QLcj`=2Bt^{Vm&k>g32-j$Ex?_@K$8KrLh%ZuU2W1aMBXp_Aw314)92B?@N1c zW$Fi}8*gPrpb~id(%uWI;l$OBOMCKJ0ORjE`8|Zj;pkB{KSv^;re+|L*mv{zzS!p# zR1o{@Sao+c6Ue2^uAhC7`@iI8{#)?l$KiLJ{F46(Jiiss2Y7xcNZwyL;a&JP##_Xb z@HX(w!}~SC`_5+=?-ZVScwfSMqJLlTJ}khS{WlozCY~-|JRh0z5uL9+8~nmkc^?69 zwglcd(v`uxSrYGVNxTOJZ=o^We1E03QajUXub*DIaii85b-zas9l;#xUQ~`aO-8-x ze5(*(-2J0H?qT}Vx-mM(Z<|;hwR@c-Ne%Xfy+a&VfZF9ZeLJ`3aXhI#uj84=pI;Wd zuM6IRPvqnMAl_5^{}`S`?|uQ^=yx#QDLe`9CZ2iuZVKLqf_LE8#r#H6_woIA4RFeT z15cv+Wjyofe($emyjSpa`Qw>~_f^6BRl$4iKtA3byr+D>h^MP}0p94pDfPzF<%_58 zzpgU)L-qL%Jb&ch4*mGM@cRMquTn<%(1Y+kf#;*|40s3d`@z43-v%#_-U!l_p?Cc^ zi;HPUh7iaTR zA-`wv{=j!-<4pW|N{{#c^BeKyA$~t&+Bc8h=D%Bx-l^YIj$ZQbm7})-yfWo$|NHs$ zzKZw$L-n2g&2jruzssxdc#===$MD{Nh~9zkj?3p^MRXqm-^TwSzFhsDnC>Qi>+w`X z?*aIpNALCTjp^N|-zE5b_xtkced5zGy$$>>Q@-}Wa`YYmuMEBWqvhz0AByRDzU@`cnS; z*@E}emtbs{6VLVaSpY-{kR(|hC)X%dZ$^jtRBGc3lsCglv+J5gTxP&^AjM|jh6oq( zVyI*#bYob$RU-jZ>tK7k%zpE5Dsb!Qg!dY;(uPXC7IijvWI5x4(7ffK>d>;jIHCJn zeQ{F%1dAgueoyxAkLJ|lFj={2ie4!mzeCKLlnvCd*$;PK*Pzat)u(rF=q!Jw7QLdY z?08j*D)n>HtF_^wk9sr`p^Z;FXMA+evdQra6z`?5RGcc#ln|LRmArau0Jk-iML)Y znLN5Hjz0vUT85JspPW5DP@{pb;dbc4N~c3&+I1Cwp?FFLl4FMMb&TbM4LSDktz1Vn zRc)nGkd3Z!T@`wMx_|M`d+$=w=)~x~cO7-=A43IO=I)>Nit5@JT{y+5#U)%37?p9s zgCP}KK%&d0Ksvu%T`E9wgtdSo*+$|j&Hzen9#<68nXb;P)WS7PNf2e0mq2cPYNo2} zQPi~IxW&TTjT`QhB*LcK*DGPYfG$I1Q;yL<3e$ogXIBTVoWsl}2$#^TXSvsNS6Dl{$ zO%N}$(;U@zl0aNO;se@xZU>_u-%5e%n{TsDwQt#z?0VPRo?zi z{L&?(SjZenu#Y{GT)swsXd6N6%ExzwgVabzoDUY<-Z*q94e;uAnOCs}Q|piDhF(}q zr?**o$*N{r#)j& z**R91_!8(<=hN(}(~Gq`D0DUH=MRa6Nta9=-L*4+Q@?K-mMuOJ7bfhIu1b(wy!X@w z`&Y_1&QWcLjqkA1C-R`I)y#p9al^|=5Rnm5#U-4IM&yndC>Pk&zmALKFlYT_fBaWCv{6yyT z0Z(3Y*U=?HLUR5rU1g(>?m66`6Pd2lr$u7|-1Q<)2>tqADBa~-^)@-h?UHL;EIcSU z#0`3}4izbGC-$hEh_peWp&3lSJN5aMp7T`LB3#+Vq03R=ss^<@eMp%^*HN7UigZa% zne#cf?R0v}QR>JVI++lZq%U+$OvJU}Syz;s$Wh*k(UAl4kj7PLsJVjn5HYqp?sOiv z9HEd&Wv3zi&74Guwiegs;+*sPcVm|2$A_EY^FVVYNS_B{N~4Rd?nIFOx=XH4_)Jh=N{S8z)$Ch*Dkw-rM|oTFy2_%zh~$>M zuND#8!ck++YQir{9`{+}H7w2iiB8{RLw9e%pBk1+!@Ka|(xgXX!<=c#qRr=oDn&cJ z{WDFpNNON$gX8o)yxj|Dnm%IuwLNfR>$`N}fvpoIAwZOK*5=N*2AoV^dz>fJ!ymz? zBPyq&m}PL@mtWDsGkDlQ@Hr!d49+0KEo`?hBa^*1!L1QACw(#qaX=^ko2?YtwyzNq^9dC*2G94m?kNe>kuHb@+W} zB73e){tlj-40vR}JdWR|%sKfny#En}_a6}6@tKkP-;6K#5IW`iop>I9DbOQ(^#}N^ z&&i9*cmHI$@?Cv7zkFZDd;g*G&3<-fcl~qa%6AX#Y3-x)+VAyK`Q`f(-un-g z@6_r1_B%Tr@TmPB;&++$+dNmUd^caqFW)cVz5h`8uAiS7xtG&^ix&bOmG8g|ew+UC z9e8j1-$UT#wcih44D_h~-No;=p-27i*AyO=@9yl(NJ0$2NB6&Oc6z?10R$1}l`KKHZcW<8QeGN~dH?ojVuZQ>kL-oC0n;Cg7 zr@os@Oz#n%L@&9SPw&U@-hYVRo%iDMdD#B_85Nd8r(U3J@e-5 zwaVG^GgoOPhhzMDvj&r5dB^tgvI||PHr!3jB?|t){$Aa^LEQL_4eyiDwe)&5Rp&s z&lds77h&En#QPPW+%tG)wX2JZxC;4#;ue|bFS-(9ZRx{Hvu9_x43H+CojPk7>0gy> z;1bmrikgl7Rmn{HHG{4SIHvm~KHJM!i( zO%cCTPm(vjA*mx>Tv?t+H-$MjyS?z&bfr)AR$Iz@1P0!b?2sU;sF}$JZ+ulLpPaUA zK@y}sFI)$_?RjDHE^BaPIm`XrTQGC|mTSwc&UymJ zx>aYHF;89s(CKe9;9neloe!yXK9^sA>)g2uvA61}ioA9CA+O6f;n=G|SDGa#JBPc) z&|Jh-a%|{*e)3+5k)OL}vLCFL%h9l;=9oJll@V>>-#T{h46B7|%^yle8;6g8JPav!y!=ui`9So%rB&7*-arL0Xw~y47VhrShU~wcfkgS|M3XV`A(vTS2BP`y=Th|5}bc zB>Bc$^x?6$&EB%yzZPi%mGBu+p?cPI6iP4)@U)D_~n@c ziez+#U+()W+)kKL>3GS#@-|>p#zue8@ifV38YJK9)$K{_az?Xl=(U8G|U`fKp(gyod)&0f|}<#5S_`uqAQ*aw-SeNb49 z)eP=xQ8h@$=2fE$*R!VCy58(ETevP1;uhO?lpJiRu`RYg*~!5^mc`~cqPgWhp2a?1 z*ihXUv)C^dW1q-kpD4zDDU0m`-)DML8mQ0q$bCNK^oSkfLk{heS+0d(^cn8FoW%|S z=rh<;S?myVK7)NaiygwuXRyy?u|s6}4EEV9b_gb)!Jf`yhxqXs>~mRcA2MED_LgNj zt;S_eplM?7S*-4&Vi(JwI#!8T@j35<>=3itTInpnj2a3TgclRv;A74sDb{aoEa7m@ zPwD`KexXHO@h6M^GiFd`0u3PyIrjxVAEVIN61<^$z4%iyGcSBamrHSjr zq=&5(t;+hXf3ww~6f%A1u9&ka=nkHBWQwHdEEigRuWg|FT1T}*ucM(gathqC>*#oS zJbvh~ClD=<=_Q?B*wwLLBKa$U>0&>+KqeXvUhdPX{FOvdMjh0A#FoKv(YzAuVug|-&2II%&UHg(lWEOy+Zt7ROM%z1Z!7(nk> zBzF`}nvgtlJX~o4(eFlCps`39OWq_!?rOb@L5__m36iu|rP73V!mFKnuUCUyYB?D< zmg2b{>Ew>T^`LD;9Uxt$nfi(}iK^>_1J^e6Wfp6%${vDR>oALzbeDrKL9C=v%*2Zd z6GDZQZ4;9ejXE{F2zL?9Y4u3yrH7B(D}fi-JI%~qn7&#$^XA1Lc}&DzGQIMtccieQ@t0d=}Jvhgx^7KSgKy|)#8^>8I%>@p+h@w9} z*Gkg0uO3M|d4Wn{2WFOSOeR~KKSGAgnRpU(@6ZQxXD^dU7Et(vwa%Q;HUK%Pq7 zj~oKBfz<;OW!%kBz?Vs_SB0ddL5JXuSPCNUU$W9XisfKfM$%dlOGG}lC9SBJ+2U_q z){fCi&rze*9LZcPNn6bZ4##MKFZ5P0{X3aY(KtvL(|c;MSbSlHxC943ercGyE~FgF zEDd*VT^Pm&OK-cfWC@tV?l2Q5?O_-ML#+ryAwn-S?~2BDD27Qe+$axZ%8vJtB2>E6 zDlnAOxn$A}-e|4XIs@7|B=-?pD|L8guFx(=)+6Xd`|HS6S-|;4;BKxXWu*c>%v8I# z=(OAKJ88-1ymzf&W6A3poKAcuVYmBAuCTibA`vUl#yiOa-%auGk*`aC32&cb^~ zm)^9C;JQAwi|}pD;b9gSZrV;~HzvSqTBsZ8l(a|PBs=?rtb9k)QG2rYXL&AbbE!WsGoXOvi0^9suzTzEyou_y>6w|+Q*&otpFWE_Kai@YtG$JrP~-ZW zmZC6m>-)!iKtKFmS_->uWo_tu@zAc&MzPzgLU#!L;bFC<>t;tsmRf}J)gW9O-(VV;a`0`LiJsDK;0ZjkYeTH(D> z_Z^qoDYyc%st&N#FO44L$7d7RGtRZ%Y}Po$%2Tzwe;S4<%ikRtqk+lWAD~+wouL$4 z8k#2gHpgXJjW8(nJh{h**q)f1IkGVwmq2AEn;T4lPv%B0&BT}IE}cI+eKwkqFJqmE zbJe3x;yo=BvlMzq#(v(!5=#N<>tUwoH!};ZFcK*lt;83hyi7+FgLz!_U#N$&Whie+ zLlPY7F1a^w+&TWmo8J?AV7vAwsVtv#dYpzikFitE-cOv9R{gfOvCVkASIw$ z1{73%HHn>H191M^)$@BQRO}p9^wajsfO{&W1j~LY@lJ|}&^5LrA7Uz*(Zb;2g+n0A zeRPP!v>+91@87amFr~@VGRTB&E-KQI83go`9@;~!J^YA7;q8D7Ty)=@V!?eQo-ojD zTs#SSWogKWeq!qo+VJmjI}owp^LMkgeFdE(Hs-t?h(gS_1Ife8w*$$;%(nx{!z{7` zak#r|2Qr69RNZ!~OE>y(8*U-K+^4KUwr06O{f8%DoU|seUaVm|-$ZnhMyfv|wf^mD zy-}Tq@d&i~2XWM!8VruXjZkx;aqw}Qeo)`QO{pVE`h^0q_$9wHwoF@!r9(;E4=0&( z){S$e^*w1~*O>?2f(x@xtb)~2nkezHC{|Pj_ZYB{0`H&zVTVp^*N#vc9Ex184pcrU>koZ8BHX#Nygc|q3S`}JEXNdjX4lnc?oZxXK(0wRsqcj;>inx~A68YPb zQ9{h-uFp`%D@=(lmOe|N$TJrcn{v>|mE`W=@R+lFL>e6#k`0qIc(7rT3w_ji z-Z6E^6y)6)W8#o8IYss)0M?reH#@B+g1OQ0D^5gxq%0cBWFYNE0+8pcoel)U=$Q*| zR4%-EX6iy^W_qS_Zu;UGx`ofwBm$kEa~AoEj=SPR{5Q4t-LH?w%DLord)fDSS9_l* zz0+5h3-RY69c!JVjoR%R+SNCT zzk$mB1kmo>N@ze|wZ84aW(wW7O+*M%KTHLnM;v#2M^(qU{c4REo7PG`2x}KeE_^sO z4SoHrm_;}M#djsZ1OcK{^hSV4wH{Idpi;R2t88`T8y3Z78@5nfO{z};bjd!D%qMM; zR|Rlv>qSoUL0wcnaV1qg5=GY6hl&)M=7Z2Q0H~&k0VJ7JI&uV0xD(Xz4ax%o-X*)30!K*zJ7 z7X|cU7IZ>DC$gZI1oV;v*}fgsZ6eeSJ)*1YWoyU0 z8rSMlb>iV3`p0_fOOpqNY~APbloQ7y18zn>UJ#DjX=6?2Bhm| zK)P-Qr0Zrtx^4!f>t;Z@ZpY%fxqh$ec0AOLK)P-Qr0Zrtx^4!f>t;Z@ZU&_5W3`p0_fOOqnjO*qkkE+{=P&WeUx*3qJ zn*r&%8IZ1<0qMFKkgl5n>AIbW>*hqKs@qGUZUoYGGay|z1JZRfAYC^D(seT+T{i>L zb$f~GmYMX#KH5)hNuO!Y!E~L~l;~i((iWy`ZDG3F7N+ZMVY=cLrfY6tCxxXa!9xps zSzs^cz@`K?;TkFQ1y}jg9!N8&rFzB#&6>caJnMmGRp5Zr9%$AD4tUN3d1VmI@rf&k zAW(tT6zX7_lNP2qXkXq{5i3roU|~_ zNek1Qv@p#{3)7smFwIE|)10(0%}EQ3IB9_qCoM4IqyH>%}EQ>oU|~_Nek1Qv@p#{3)7smFwIE|)10(0%}EQ3IB9_qCoM4IqyoU|~_Nek1Qv@p#{3)7smFwIE|i#Tb45hpD$ z;-m#eoV37*lNK0p^0eWk)$yEBoV4dw7N$9AVVaW`ra5V0nv)i$IcZ^)QqsR>yNzanhdBS(xUeg=tP&nC7H~X--<0 z=A?ybPFk4eq=jitT3EzM3ye5vfe|MyFyf>IMx3<3h?8dxC#{ZWT5-~zNm`iZq=jit zTA1dfg=tP&nC7H~X--<0=A?ybPFh&RNehfPX@L_zI(?v zCUKaDn{xF16?fm#`;MnK+L?-@g{@E?5GH&5*8lQc(n!#VYO;g5iyG;}OZ&%eU;lJI|D(A;N zld6(klJr~L6} zQtk7x*QLwHkc&_UZI6#REg$^HXIj3LANfqGQvT#KsY>~k&!j5lUp|wnl%M%bs#5;u zGpS1XozJAo@joBg9Hhny{ZAJDEgSi&fgb=X^p(c4oe@Z8N<>kJ}Qd*uXj15SJvDTGw#_ zxnAhceSELw)J_|Iv1M;uLHBMeHFOE%Dl&ccD~1tQ;*-{qYexi1woYgi-Wv>+%=w`( zE+9}~F+5|NKeGC22EP-tj^_k&a_=h~QzWgJ@Gx0|XVNKq9z0Xe?It<}?vDkM%N=UvzMW$h! z>%V>a(-djUGl<{2_W6R84HjqB#!3zC3M86zC1vEp->1*@=hWV)UhrOcB|wsJEfpX@kU8 z`x{;ok-(4Lo=b-dY({6}dBqv^#-d|O!#eExvYF(`j{N>Kl-|Zd_u}Kmhnbqor&*cFeHL;RQ+*C|x(IDUeD`r*sB@?;LEnq&9vGUkk=+&%4F+<*azBcw^z%vf`28r7|Cw|n8@A;~ zlGU4NB^+k?-SEWoS5iIp14;CEl zBsVGv2>3uzIzWkl7YAPJUz%T81C#4dK6NZF&hsmsH z0HkE_#iWXBriWCCMoOzzM(%||goY@;r4Pj}>#RNG=f4FSIWEqzib9Ri&B-OrH~e}$ z5)#9@x!KnYghS{Z)eQJ8fQT;HxVsIyYyd=pg)M!w{CCTM?QY<;h>(^0kX!d03PWz* zlkIODu=#K;;WrR^vCad1e;e;Y^C;EVK<`*;MIg%onI(c~)jQZ7(at@AZTv?*I+I^y zBpjm2{lxm>&=%q}rKC7mQx2)}5u3K7Ug5w+sS*W3)hki7eD%fiFsigxu;hrgjBw1+ zBSk8f92yz%I7rDt7CBxUyt8VSG69}ao^q5Y-)N+a88+0DPrDsGjMv2YCy9E03Vi-a zM_vs|7}+mTtyD%wJGJ*0D|A}T-d`(SIA`>lIuHL#(k>-$?y98U<)xRVx>^pQDrF`(wT2+R6{Y=r*^8J4^h2=vMUrv zm83u+OqKQVDkA^CPd<3nz7jf(>+Qqp$rw!ik?(FiyDhFzc201F?z}@%W1Au)l!r(1 zR^)}DQ7j6}3yZW?K~nJ6B;@rG9rAl}0rSKHW)y|c+`EChhL%9->g6)lMmY4^Ia!o9 z$;MKNrq-~2DRbmPG{YFBw3$#g4CaAdVzU)WDc=J5t&6Nc)KCk;E3BdVZN~zk{L*D= z9|YR)&8e@1Y*QTWu`ob;aiQb`1)&ocu_|;x_l-9Fyz?_#Ku?OWifHvaxtF2;grkWK zExLHFdR%fVjNEMtt(a71%rbb35-ZRSy~VsMRu;wL#U$IFtTMzhl@5YxU(~<|w)i5g zxfnF`0?iADA~_Sf%{GOMNSG(KSfh(IdnmeD-rDi7;Nkz1?c#N)KY= zRFm%eE7cC&J6c~}u93}(oD3dGmg=`_Op7~Pce7pHEyk{;~hMW>2lQM9PN5E=e5 z8tFo7wbq$yUFLQ(ap7SQRWupeMPw}MNZyyer^s?{7~yRsW65H=!5Np6NA7^-W5HIJ z&+YrijH38$E>K)BEkm-50giSHKxct*7%3=GE0AwjbB%dIQ{b$d)8^e)cLZ=QZ?9gA~Y&=??TNMkM6>LPIv$WA(ReES_$ zXR>)$X;2a>0c0!*?dm+j=<%J?W^2`zVcA8FJIEZzol}wUQbKpilS=r#BB9@ExA!IV zjc%=QUq)g7Bm`c(B;J?Mej;JfC=8mg?309ZmVISC}u$?DJNd^&Xb0)umRm+K{ER zTST|o-9jUU{Vh;x5*zK+XiDDOTcC`{`Nr4-sjU^?7^N8*n?>8ZDc1K~>&<2@-P1)| zDRlg4?4~~Bw`AB&kbi`}azrm&a{?4l2tSydSdh@M0 z^4<3OH0`YD5NY<(^qKRQ&%b$*`ogivW0T1b{$Tv_#PJiyo$|2nsnX3_XSv>k3Hko1 z63!$FX6M(@Nc(%Rt<28*TPofZX`k5NC^}0%J+=bm$;`FX%4`6M=`lWc^1-!+IbljG zL1#dD^KLk}8e0e9&re@^Q`>HOOF2G5az|8Oh-k_=QhMlxQb#IPs!x166(v9O=FIGc z>8q79Z(jU?w_cl?n@%@$3e9_pqr#-Gv2fZy&MIy8GkD`hQ^WqoZGUQrJSTdS`j6~| z1Kx-2jj6$I!%|U5!r97U$lXW|Q{p~yczACp31Kzjb_m_cp*Wew+??-s=KX2g6_1`)(^5Hl08&5AU z-v>WbF5jEKtz5qMfLA8p@!wG{-!B92u2js|!_^n>{m0e!cb3cd!S5=UZyW8Nm+w8r z56UK_??$;Tj5c@4>o2-PEi7Us9pTWsa$sF8o+FN z_cp;@B8u+h{ARB-Yn`Ok@xSRR;C!`P8%r=G$gOq_QK0aJZx2^t#@xl7;>FsHDsK6S zdurSsTR;-Jde*y%V<0*1xIqpT@e|j97n9aXuM69-M2uGbFE}H-5QQN7j-`C`T5|^sLcki zk_oO1Il+4y^+<3D4y^;7^y07;x$?H9f936zJkh^`X$oz>T3_tl^u+rWpE&KAC3n1E zP~5`JLsXnNi59qx%if46A&l&%O-yG!LE=A#U{)ZwTdd1P7zeyKXj8{d%BkuI(*&yzU0ArADp zzjl3}B0WVq?z$LwN3uhLsG?>jAH4BZEf^5A_D*TL4tU%3>Z4JwZlPCp>}aPf(Z(iA zyh+Bx7=)3la{?;@Eb=r66O5{hkuqOx-a3j-f1^=f=%KI2Qibxl{Q6tx&Rv)`dC6Os zADZ#<&6OJ<0UxxIo80cKLr5)J47cpJn@Btp1Dhx$tK8OGOBF_@i|wJratWT@-gAFP z_=-_hnnY+MT`U^gNT`kXD~UIZAoN#~rdR(`4g3}S*qA`v&VzR9!qWLOlg_t0J%V!C zLl-%zIOO=6rK=Mkybi<40!NG!U}0~)U85zNV>tamDCbYr8sLRn#4#d8+ti4Y4m}T( z0%K~-^*i>R^WQtkZ}Xb`%|!N%gjbV=1r zr&u+)hKX;SCWm>l1YE`fz20_)dQ=N(^s!{B(QToYLfaW6N!B>JQ6&HgIxHjs8kjW&DOFM?v0&j49Ur(Y;Twjmtv&*!?ScvEA zam&Q<^|*2TUe#(P;`e$Q<>L0H*ukpNFm$XtX?coQsi9#8`&bscRD9mFB&Fi=rr4$8 z@ut|N;u7#g6U(X9=EGx>gK}y)sKopPZhdD9$F_ z)X2RXvPv#ZTqhCN+;~*QSVw2s_c`I>z(aijt(J2bu@`(! z&^{sKa{`@~_B`n($#E~eijS2%9TN;6yfw+jY}Hw?G~u1F537Y=I)1D6+0Xk5>a)(| z$@#Gex+w0;qC=ue+6b6yCz)x()UzK?T<$ zc~`ocCh_3aVj?}#4H~{E>G2fBWgL7_Z--`2R|| zTG{~<17|`=v0fy1UREVC(}15F!=!@sV4(`75_2Z|5=`kqs$(5h)$ z@))4x4CJY_NH^5ahvM$6UJJa#tTd0}bSNw%Zt>#GPVo91C=}?C^ zq!x=^;$VfiRITG=g60M2;aS?n>q5$*%+he@)`g)bQWuGbhUzrw6r`6w>GyPugh4RW ziZB!+^g{ElXl$otuxrY=D!K!gtjmD$ZZi%8HfL}JWIw)XZQE1Bq*KSo9kEV z%hja{tpH>_vcHZ@7mZJ59VtBwe3+?rZ%Kevx=7>>AhLlq%O!xV}NRmt3D9 z_kum4I^SwFsI&8K6SG6FvyukZ&O2VceC^U3xreK-PZt1?VzMv^An6FAl^Bc#S zrVB8A4a!C3agsScmR7>LXz3jci*&q2b`p2~Nr&Ppw+P?X93E!J;il~^%+w((=1bXy zw@Ej|e4G}t-xSQ`31iTDI~1hsgd0-i&#`_I4|D#&MY?d?Evcvl=?krC%C68u+q-Wr zsry!Hc`j>nsXs3>pnzm|KWhEp1I0Z4^?Ke!^%|_YPfyLAd42jU`vHEk@oLHq<5Ww# zQ?VgJ=ZlB-7GqnbgDDJ{@@w-@meBvqJL-w)WEG|#|IJ_rDPXI^8MrNG-(Xg0efkLp zpSvHZE}lfePMctRG@i{d7;YJ@>at8hL1_V5tf6La$uiwsaS6Yt$HPD4)2k0%C77(lTUpy`C(6x}lpQT5Hbjqwu$^wajsfP2Cblgdd6mi>=GM1;Y&9r+Mb$&8k*3Wq>8bO-Zpz`C9W zp-Hi2v0&(AY8hn0HWw9paA*&)_V6PzXH^)uxb;CTBl?N0L-yePGiwJzmSSYDS7Zk= z=j}igV!jbZ2yIYl>A%^A=8q&>2vI1>8TSvzRbNE!7vtq3w0n zC1ijfj7w-EMLhK;uOcN(;t3>$taoPEVQbPT6Y1*mvrD)QDH*o zT$*=8${m)D{H}X}u8r!@E8O5ics?WrbNk{Ef)urVsTy=L^jRs!yHwKcdGqylT z=<++$T1N0T9H`PUpXy4EEWL~F@s1@ITj)1w1UWW=rmGoZh8%3gd*=1(uVV9UmbpW4pbmDUYL#80_#uyWa z=#slTo8&9*$eskidUN4sr`3c*3p#$qiKz1l;cV=y!Q%yx=c}C#1jFc=3vW~|ym@Bo zLS<%prgCoj;u*Sy&(toosLH8yhr0?GbtWnlSQrdQ;JaVD(^^JXsPtNuPHhPy1>y%_ zX`1%3@AIzqKG8P&EOpu2AkDUB)HK;fg;knxAmy%U)bT^EOzv_e8gsVR!3bLB0pP20 zv{AcVL%VjWP4rp0jzGua&Yu97r$!J#< zfNj`3snP||CHp|~n52?vz^VX_ZN11TIn+hv6IW8@<0=`NpNbTk=7Uf=094b&0F_S+ zQ2Bfivw&(C@>vb}0HE@T0VMGWg1)TDW-L4f|hR6g~wS9qKQ(vfCWto2(4j3 z#{`55SkQ3+9nXSZ6wr%V&Lbu%DcHv`gjn~dw` zx{a#au~0Vx>AD$^uA2erx*3qJn*r&%8IZ1<0qMFOi|gk4y{g;sP&WeUx*3qJn*r&% z8IZ1<0qMFKkgl5n>AD?{>*fZos@sd9ZUoYGGay|z1JZRfAYC^D(seT+T{i>Lb$ct;Z@ZU&_5b|S8u6P>DVFNL}hNY~APblnU{ z*Uf-*-3&3`p1QC8`@++pCp|*hl-REg_LvFzq>*uCtmF9ZXl+!gQ@IOjp~& zbiFN1SKPvM%`NPtu=FI=HL%px;bnonoCBK@*o12&lkl_$y2;f5&v>9&6SyqTdZ1Yq zIN-DgnstE#p7TIn8ANk@(r1!)FwIFdy*ilYq=jitTA1dfg=tP&nC7H~X--<0=A?yb zPFh&RNehfPX@Lml-sTiQ8kzHifoLC)Lh~V49N_ zra5V0nv)i$IcZ^oU|~_Nek1Qw6KVi78r5T0wYdZ zV8lraj5uk55hq`cImzk^#mT9_Ne9!Mv@p#{3)7smFwIE|)10(0%}EQ>oU|~_Nek1Q zw6KVi78r5T0wYdZV8lraj5uk55hte%C#{a>wBn>a$+0laNek1Qv@p#{3)7smFwIE| z)10(0%}EQ>oV2irlNK0p(gGt+T42OU3ye5vfe|N98%|ms&l$x@dv0Z6nv)i$IcZ^< zlNP2qXFBPFk4eq=jitTA1dfg=tP&nC7H~X--<0=A?y1oV37*lNK0p(gGt+T42OU3ye5< z)^O75c%~I6?U|&7X--<0=A?ybPFk4eq=jitTA1dfg=tP&nC7H~MVz$2h?5o=anb@K zPFi5ZNehfPIc+#;bv)-3C+!KWg=tP&nC7H~X--<0=A?ybPFk4eq=jitTA1dfg+-jS zz=)F;7;(}9BTiai#7PT`IC+jZ8C^dW$9v?^6%o3ewSjm2-{iZf{<0c5M5kMSa#4|P zA;+$?h;+aEqOe`TG8spNxKc;oU-5Um(l^huyBe7Ra7S7$3331PH+iE=Y#G^6;en4UQ?9_*jpk}Bh;-KO!`XIe}7Yqx32_-(goV*l-` zl}q?%OsZ1;-7~35`FYQzD&_Azld6>8_e?79cRbTu%lLoK zP%GsJK9g#nkG(EkK8B=(I%s=*%nti*@E@OP`BHx5GpS1Xlh33o>5xVP>Y(o|uhC|$--0o{&gU7F{;L*9Io15D~%6H4%r z_Kcreh`~}qoX@dsgV?oT>75e9yt`Z4r0<$+w;J9L=^E&d|bnDTILx zS<@*BK967s<6@^a5ZlZJ?}STxvZ_ff3l?Jo8yI3qOj1}=Wxd^}wMm^Rjj~zC?A#@A zoE)-~NkonrI_==?Cv;@zhavV?Mz7H0wnQp6aCXE?dY5-aOs(sd3Vt0z)-5CF8xpP|2Jh3gZF-B0>z$*yfM=r;V~W zU?1Te9Lhd|U7^FKP1c$j(=*~uW>*s1v4JgSUt;JHg5R3By~!>Zv$-rvnX?(YG#Oo} zQEbl$TcuDfHdjKu4#9R!UQ-CpqUj_j4{o(MkMV3CC+^(1_fF`t;8$hc;sN7yNGqX+$C#MvUG%RvQG`{s3O_oUhp} z>FE?JGAPXNPd>e~l}nQzPDVpsz8gw^6967$#pp{LnIdwvybaw>8zi>c-|&)%1b#+W zLtQv@6LeUfSIB#;5gl6^)?wF|%_L8D|*hSRoxTH}1sB80@+5k03KfeY>;PZD8e9R`WWckO{*rh($cSDZRt zE;@PxR*TzM1c$6W`*g`YqstWC;l^cWl4T2DW_8QOCCu16MyUdtwX7enZp^XjykArh z<*I>4X2GOLGOqxH8B)!cZq~2lY}07mOLUQ~cr~V(fj)tuDI576F-fz={U~a|em=<_ zzei)*F{dpQw&h2X)thJ}Hvz&CMTepR!1lgdCm%Gl5tr})wA3_CDbA9|0&Lg8^+n#@ zS1A+Oy+_D!V?wcun~in1X00yt$fZ0lZsC$1K}&iyc(Jc8-12_r)x1RwER#0TXCEMO zl$2K6hqg-=Zq^oVb)6#(=TG_t_TP_PY_++x0*wF@K+xsBTYYwIv*mq$5C&V3V%+QK zZ%ika31#G2ptKFi7Knu6gdt(xVKOTk0D+FKn4=WeOb@AaQK3`E-_xpS$oLOe^U*Xb#cxi+tAI)CCxYddOQ*m!@9ZI*9?S1=pEGz_$`2lE*)Y|HUI?S z^}l?Jmj7-@`K31yNNX;5bT)zaDaVIZ*od}fKPFYD37?FWO0_5cYb%w}(N69C#R{EP zv-j6Z7tR^IrfzF`-yI2kligvHoC(9&26YNjsBcUsM|P_M$(Kn_x1oEgAxf7e$|z4v zlH%Gafi*<+2FkA73Kb}X>Egp4jjXe;gl;w8TUkO_S4ekWq{tXd{gI2)Il&PI z)(%OHZHkOgo~_FZLt`g|MOv#MDYQrRkMNM+lM9$97BJ)K3*0sI9w|MwzKpdIuB`5y zEXtc?W2r>rEUaG&HZ*~Zd<*h`(q=;0Fqj8+iOp6Y@>>^KfoLeKqZWi0)m^P_hOfL! zoT+^fXj`DTb1R@d76xc9E|mJj8uHyIbU^owR@S*&Ku?OWirC)oT$`fFmksov|>`3F}p2^6=;XvV&0Y6kx`d3$+jn}46#h5gP_{x%IhO0YKC5*dEtOw zoGTkbx7ntU5ef6e7Hf2|W*SjqWXpHv`R6All1_CMme1}=P@|4eBh|*UBUhJd%gb-I z+qKS!`?%j1TC4u|_k8?EKl$x|JoCjFM!?@s;Q#d>of+AXH{XOO;n8#PcL%(0!S4@& zcNb6kc)X+dKKf$;?+yIk_)lg=zV^+874UNNMLF{F{odab=(&7>ch^x1^jyBbH{iK^ zf8Wf=DN2A3mCt{CeSZ7z5BP-k41V7eBwrtTTD;dw;%yY*ec~tLd^dsjVNSjl?>VG< zr10cx${&k=75I5{ZGAR?r|ZphAAY~5FV8#bN#FH<2cmZUE`0lC(4%(y@t>R-`81xJ zcy0; zJMM^YH~)0NqkLw6Zf4}ms-24HjUb&J$9eSb{+V+0X7A_I`!e4950&rXpPL!^N{RB_ z{rP-)ANz%v-l<u|Zk5hfJJsbHg`!HjHRyZ! zj%RNL!3`6{X_Mb{*>k?yt&JtG*I=iF`=s!)K|v7fw{i8e3N>-JzJL|_jVj!0$i;ow zDv-e^Ri$?mH%&#Mc!Msi;^#^iR-!N)?PBkp&RiExH>%xU(x}gOs-1NgEfJCOZX|EN zb{SgAPvL7FXYTlwoH*|G3Lrj*%dLEaiq15Sa)duR(||J5MWKW)gNe+}X(9+_Ho^N1 zAyQpNygyuYz2Qvxj$)QP%2C2Bp(}4II#=HIWavK76&LLahFps^FWvJ!>Wb5KT3{4cbiTdyc8%JW)}!vv6(3=gaq@$U8l?QVq6R5Hq^LnEiYDsN zb~~CVx|E7rwv0|)Z{zy&jg{sC-BpgvjH&&uB;tW)ojU-|*y!Z~i1-t1*UX3z+R!hq zB=bPweE_N40(X?N1E#`B9XcK8vQvw|DT6<@1`jeWGfI&w3Q@NCFdRJum%f}GB4|&X+44U@_ zZ!>7S;jo6704{Iq@A z?@lren?XFuOIgHO@f_&CM;Ys4%46pD-=>UpG37C0|DDQM7gHW1_TQ|Gbur~JV*mZh zSQk?sBlh32jCC>PF=GE+%UBmv9wQFkxa`hkcW$KtFDN`IconH=QJs6ema}JoI{=*h z@iFsaQeA*?e7DBRzQ=dv6DnAE1j%sHqwb~-wVYfgeStJ{_(P{&J z7TE0qoGn&6^L2P|=&UErmF0Ol2OwuJS)W|n8RK7xL^|DIz|B3 zGfCrq;BmnX!gVbUT+a=Si|z!)1KaopMpSxmE7`5A@q532KvRK99tOcmKaV6_4J)Ua zuposrTn~dxD{qhQ20_AA5VWFdpyfjGz1PxnI70#3iX{h*UBJ{EIPl3A9?s#16EXE0 zN4q^-Glz%G-dHk)bu1lSRJ+|3G!A+Ny3@htK|0S_tlzFLR>|=Q&WsLTdHbLfO9$cR z{GdC>d5rhZ`wAm&j2#q7d}fp*My?ztUf{~b0z^>|0+D#oI3#N@p5l+i2IC*Apx}Bq zQN6NEe#7cG-LA-RNAGGTFC?QlW;mRHlPp`v!+;vrZrIb1&!*>+4{}|JT%0?7&_EvK z`!e-YsoOdgIsZRbR6KS?jf&^~tGcS+H8U_d^ylyY zOMiIue7mcwtFP+w^#lJ&kz#}9Z54|eFTLoxf?KJkY*+_KUyFLN_*xW-#aC~GC^0G# zn1&fOg%rf(2$D#>!c#hvcVz8?>``BZ1=ePT=sU2|QB~3>ct4?(02GjgLj*O1@5b&j zEkpVwk}^RZ6Q)n5s1u-}|EAPRb!eCC6&@5>)xgdx7I>3~`e~}3lduZ>qM9Y_zFKYI z01bHHCa)_cF~%sVon&a(JdB9i+Nt$f1{Q|?euWyjrBk@b?VS9KtvqTQH#K2H`-;7V z?|l2-q1G+h^{;m@A(oXqc^(EQ6`~)n4hbg>!#PI$E$Q(5(Fg#Eihj-p&lRRV8-5-K zk6}Fw?$Yc9Ke_<-u>&6SiN;U;S8V)RfG!q(eKGP2Y>JIv2hds1TSZE5>T|L2YXZ7R z{6;=+&Oa4!wDX9O&Y1;(-pY4h$oE+<>U>85?g6^Q7|va_ybv3|_^#Oabpc&0^0k1x zvB+2YQf&OXfG!q(O)tmBPkF`6PppuyG@q7&tN*l*TO6v=4`;#ZfZ)8w6NIG#?FxT2 zv38<7BxQ|eRfK3(#TZSs3;L9DV?1sxo?lPrs{v1>=qk?a*x-6XSvKQG}pnIl==N$ZV@GGyq>_IS!No58Rm+f zs*$*~LQ358Q4r$l zc6ln?Fl8~ab(`5b2WC6X!WJ6~Tqa750p!CetB`DgMySGVcp|}?Q!P4)h!$vJInNBM zUX`3en6lE(1+o%Ak|s|UZV(Dn$7{8eJdgs7HVCfd+(teuhip5754xH8h|HHat%-6h zbirzaYdzlTwcK1B7~8SZg9l9!Rv9v5t0D;skPtLM!pbGHeqeCK)+;4 zRY6O;OyZe7#9)X2?>yk`kB4bokxQIKTS)|oyNVKe!Y7!SR z*y64Tu?$01C`nu*F(A)lIW$xiOK80k=mivTgq*Sj7E&{vEL$!XPqdoJI!UJ5$VQ8p zJSQ31aWJsLdbLT=$)JO!lIBlF$Uxzjk^MSbPfJB1 zsaRdC>&QGd;qU=c-8iP&9&~bS#Es?E0~k zUR`DVF?QhW7JVF{2j`k%8r;d+6LnOf2j9+7lpav3dZXAhmyI9X zA{8W;7>#yiHwm;_<{P?Xc=26!&!!w@zSfbaA@}q=6Z%CTV@h2EoebR_loL%4GWqrY&h#hM3Mg}|7=#31vv)LPi?oh)wGSI4| zNoQ%UriyAA7LfX}wAP(%{CL5kVRajZYB9`(WP&0z|21%8@BdKy|8>R`v9I{D=29^tIUdsheZt*93I2 z$Y<}4jb8`Q#lo)v@+p?|+TSqq+r7RB6UbkCebM9d;>)qvIaR=gRwYiC$GCt9XLOAt zKUaVz$NW}KotgrZ?nUtRusWFNO`iz6{&0pQ0F!w5J&ArFtJX|MNYwL5ech2J`ADONZ`*ck#$b8xe%DGWo>DtiowoEk=jIgIc@ys51yT z93W;ghU?fcVI9KYL(5+!_?iH`G!I`ykPBkmR7K8UTa{=3 zqAc(tonRt%;LWSEHvDj9qL`9M4IuKD*c!#rxwuglvC?Zi?A=E8u;hYL z8`+zddL!_KRbx|rh&1b&C0Fxc9ovxFNdnbE)FOrE81_@Cw2b(MmXCDkl^}(+M#wPJv=c z)WnFyPFuYbIgh$sBX>_6pax5g#R(VdlX|9uE8MjJ>8kSh5)IH z5Y-pi3fc@6@Zb(Xf`DfQp81>pE2P?+uv9^w{DP^gg!*w+6W}4PPS;a-~FZI~B za}ie$D3!QTY^jr@4yW|sTK{1ZTyu>@bYtHUK?>~SVqv4jDLO?XBa=@oti+Jp$N?P& z3uu{|?fh)d!cbERM!~>QKa(RTKh}vV_SbS7idux6_x*;pq0F_wfZ$x3sQ{s(nK1Zs zd4-h{w;$`)mfkU8R?1B*gW458IbY@4RFthP%1^T%{H<AlDiH*TMHbz>!JE|RxN!w2SD1%xQ+Rkgpu-&?y(vkXJ z9W|8QN-}(>e-I`4>x@gcWB<>n@{Id`M)wH&es+tmTRDNvWco{H&6U0upH=F6103eWj~W(1}9ITtB>4uJYbJ^xa8LHyk;u za#i`^{d3UAepso2>05bHAm~{Svr1S6s(^_jyxxo#$yQH=v&``FvAmcQUqr4BxSXCf za2+kI=-|0(@Xw#GMJx}Yb1na*n995KzfH4*h7xMpcc3a@#_EDvt= zSeeU1{IFpbt2}xTvpl@7h4~4u)N@1w|M461tb$h?S>i!`P~Ijj zEKcm>(x%~*zP{l=iRYC)%n)(0smu~OQaO0PMt7DcR=e?g0uyDI=l6*o@PDpf%k{%9 z^N#dtxdj<%xh3|ZLQz8|!TkpjuD7r@X9KntI8EetpjXrxY3q1KwXmK2pw8_V>;?5m zq+T%gwd}Ti-GI(=7xaKSvt8Ez=`6K=Zddev#5Pjj2k)qYuF8Y=RWma24t)HTmI-a# z*lBnjHduDUlM$kMf-1y2jlzhgTZ!l3%pkr;9qY&3>6dS#Ydqcd}uofx5+8OcG>j*QZf z6O8F;ynzh~zty6OH}_3VN=~Nb$5PA%!3Z(%t>?;&6PL`Gsem^8E~JGn}-qiZO?o#ngV!orh~Ap>4W#Fa6g(1~{vWj04% zjQVBYTBP27ikdHmACcZy1U0!HKhI~_>&6?^#4D_>YU6MaovD{FIn&Focso+qIuEH} z)4EiCrr`zx;$~i&;(mxm;b9z2yaXq>bj-|v8W2ybjPkPwjU>Z3N02qoC@U-ho8tk8 z2$7&G#enDVaafjmKXR%XLB%RF; zopr&IiZr(mb1WNV!cTI9P0i$WKd12JB;q^l@_JI}Ep_qB@Kylmn#I9&9LVGJjIKsE zZbd}a@0bjom98|jujuMdFb2@o2ds#RcyX=}X?|y{rjaW@rgH0H7&j)l9Vl}oj0aEG%~9J|ENAi@`atF$dM-c5u1 zg=yYwtqU z$MXC9Y8f=5N}-leyTMJ?U`+)ExXY1<1+zd+Gz`n9fwx#m65HKC;FAQ@JgapA-hLCZ z7_MfAgh8HCQVdt*g>Z9QOuHi0hyYQzbbgAii)32Q2zS z4TEU_TiUE#&dV_t!)6acOSH>G*TvDo%xhQ0s}Cx|qBL#8$exE|HV!dlGWGoqOt7dQ zA{|lxX=xMBL5o%gGuUF!<6UVrqGVpdPG1HbZ@hpcb8lKv<*0U%J zNT%qhhUw8kCEMxv${azsA}*Mik-M~nM)7%Bc_oXp@-y&rC|pH^D$u?bfhtLkAylD= zrf~NP3K&!(tS&n6n~kv8pF{g6hE6k3%bh0vfD7HBb5ijqs2?OZW_5(V7mHEvzylt< zd3>!sKqpYzEHjot> z99H4b0E86^O*>2^HJeZ^Kmk==>Meu9GODbYWQ%PaL$cur4#qIiWJ^yJH4-RDHmvFv z(F|$_^4#tULV?0q96MaoC@wK0P*sivnTGZxH61M3#h@%PWcv0bEGoMlEk*r1OZa|J z#IYZ!YA$MM$(*sK+%gxX)DgO?bQ!o6V{Y*+f!vby&%Oj*ILg8EZ#dAwH^;Tn1~zSI zHfq=)L$p9SrqGogT}xRJ;}BwyW)-nG^rjzcbBcW|Vrq6$?eZZ$+3slCI0eV;gAOTR zFbGXxfN_PnUym?y7UM}VNif`ts_iIZp@xm4jX{jNi%3jHRyfctmPAGwOhg(-;HZ6y zI0!^ZG&E@$&mi`$A6Qr-+!f;t3rlUN0Ye_`ca&j=W#A#(=^(W_R(&OPMR*}nO*IV> zgf7-wDU=u;kds3an3QlujXW;V#{fH~t9MbFBeK~s-E8=z$qwmdS(;?)nspfrdc+Z7 zp*dmcik98*1ZBkTN>^vG6@0`j(3!-l6NQ+C;v+HDRA2bZQexkPx*_OqalM7tC|Ki( znk4iZ)|r7CeL+5aRquqX!UBt$Gi+H5(HP1wRQo?Y4HR=goB-~g{b9BE|7rFodot@L4W@E? z8%^xpp`l?(&1!yIOYa+Ze5PmWAft4O`ut6v%ET>%0j7L<0NywmY{EBaQmuXPFEQQw zg(rKve5$8S?qZneX$Pr|4Krd#px5WvM*FI^Bosc)<1w6R46sAXp6hX?*`djvc>~RO!q71O!TdIxT{I7b`iREd?EdpIHieMOC5mee8?_1Drn-jOHXS?k$I<&2I?K5*11@nVm}h7hvb=9 z>_-9hpxg_Y9U^aM>NNWPXPDbyL5-c19$0f7Ecif2{b&=8m|BnHL0=><9WovG!t?F0 zi~+;+9XuGOs>Ki^9dS0C2{3g~#+j;l{fP<=7qGYp&)MRLJYf<$W*?1 zVIGmH*FbXbv|^N91a5b06;>BZ zueyF8d{+~xv`TEMY8D~I?)mm#Wv55H9qQ4TgzZ+4#=x2~H0g8AHL{8{GSJ(bo)Fpc z22qmQtwX!Dq*lSCZieDuU1ceP{~0YQP8y22&L9I!KD;bQ<;y~0?_~W-uQ=h&H8Ee9 zr1h*gG==+rG;Fvd37p0EtRsDg+5T?$Jw*83<@>;0n#19T{k=TJ9m980O5cx-Ul-8D z!mnp*Z2asW#Ky1m!`S$B0bNY;eH0r%dv7>Dymo3+eXfGpTJ&+Ag5M!;09yqc4Z7p^ zZT18^)1Qk@!eBY}09_qpNr(1lpXRWuqF}h>Px6#x16{GBE>JJtvv7%Trz8J;(f=F0 zy!QhbfN<9Pvxb9v+^0Gn))PD6E{qtAlw&6R-t?_bw*qkdXL(9D3Is;d9Rj~+ZPV$n zp7s4FPbszV+ZO{_KgK3s z=})oAr~Dk7d>ud+OZm18$&V@j+V;qgDgW$y=EszO@k8@tlCN*?aQTja>X$n_A8Vm7 zN5lX4xO^qfQcok%*+;}i*R)S;bX_B3ql@3qOvj@CPu>rQhx*ggiZZgZGT{QaUtvjy z-?@$S$}PTb%UaN|o>RFD-a5%MzJe%R^21z~Mw+hBK(eGn*bW$eX}Lf*e$f5{T>=uvddz#BLhCo*~}# zqI8%-TMA!;(@d|iRp48mVehfg*=>5O z4fl*ui!4jSJALTJIOCKI&IG~A)zXzqAan9oE}14%sO{^B!0C|#=i~W%4xBFnQvyvd zFPUz&p*Lod;0p*LPr&Pe7xM6hH3xhfrNuhPIGwoWdwQ(RV5n3I{6`CIB6mx-@ZmG9~QPJtePz@;JKPDHL>)*SN})yPWbMMD_Jz#e#Q1-%OB9Vl zFBPFSB6o#AN!ogM7r46%1g*Kd3)H&U-Cf|IU8q<=jb&}~S6XU~)+6g(F;sCnNUyGk z7tL`*2Z#T0BqxUU@K&UFRh`zn=?hn@)268D_!8Y}AKd5)w_y0H1O93kyj5eyC;b{z z;LL&Uox))yzg2>-wYtjl^LN=~SoYSkdlq)oNwIeLAqtt8giVP)2++bCXCKC^qYT3U z!vr0=Y%w>ZNu04Gca(U`w=+J|zNBG}Y>iLOn&5CYWeyD-29D1(PB6`!t?cFG%EaCo zQ*uxcm_^DOYn0D{s~T%-D&Uq8qjQ<=yhHPJ^Y9PaOxPq{pU{R43YlEg4W6Lu)R-1+ zb_;xYqFWu2P!foPCPP=guCR&|7Hqsh?b0f@vQ7j5Jynm0#un zkYQ!O$s+vYY{6gXNGmd$W29=MA4;%IQQ^;2VNBJ;SUKc3nRb~j)oN+^Z&8mH?bf4o z0%5lv#d}9|J#T6ty0fvVh`W~!UeRwpBO;St6w5xl^{BkmRoqJk$IpK2dUX1)rbl(X z`M+R1TC{sS$|t#Y>(SkM6gvXL77dNowe6tY<55tezutJ%s7LkRzrnF+(eAP6ZXK%C z(A{Iv-8wXUrAeRDgAU!kvFLAd|1|2NEuA?pPx}9A@z%Uo`wOh$nzlm2r<+ozn0z9w zL&-H^gH2Od)9R+_Jqg3Qt#L(9MoDgB=!@j( zNxP#wPkcj(qv02DHGhj|hCfgrDG0h-NCl^8@9o?74}WhO?-gh~NPmBMAHaP;mu-1} zc@nsL<8``Bz#RwVE4_G80T}t-{%H6eO3>*N0LPEcSNf0$jHHY7-hLm@S>KC~BwriI z8;g9lgJY9VJv27?lrgc%*8+5rEy4;W{1WU+EF~NQG9T(M*l1+^t%l#WMLJz2;I8y=IybndF4pNBfE#l16+75yBtN8U$u-mU z6qxCPP$qiMdfO?n}t_sJXfq;O*RjjF- zZkuj9w$A5pRwh~FpFP)RQ;UlRWM|+r(`J!>PV)AJpJ5F@XZym>vWA}>Yxq3)Vrf#* zoEgajrq$?4>85aV=L}v>GAxD5f$!>i6ALG**_rB+pd;Y+IIGp!C~kVt?H7C{6vq=aN!!YwxnI(KgL2r1n0 z%hPf*3i9&QwDO?K=T9ukn`mYqhA3P?z~#%xRWsC?Q*FkubD?gbiRwR#{Eh8rp1Qau zSg#g`MP+iJc+KJRX3n)0%XcH;GOr2`T>oG(ijwW9b$C3H!q1oo!3Qyr7BAc`K*8zv zAR)}&6wvMoIUSy$kJ*^&|2%aDCSwo-I^N-iPxgkT0}6cZya5WD`9gTVuL5--8go9* zj7fhL)dVY1_o6X`hxq3}Mavshehjz50bfU}fp`26fJrOLk$P0{nH?h^L;TSA)LFA_ zgH!`mL}!#6!_9_-^Q*N{stt(%hgnM#?%?MCD|La zT%hvTgm}vO^r2ubCYJzo2iAHId!%VAeOSobfB4Gc4*^xCHs?1EAx_+j}NpsG`5^mPu z^=ygDH_y~rA4gY>+Xk86X^t0(Pih%yv}QijLG93OeAraxS(nNmH}nmKwUBCeyXv;|%MY zkhvvXp2JtKV(YI6!b_m#pq+v)HO=XCd0pUuFGgoLg5@IIvb-5nsW(-WC9cK(AVjdF zD7Mk4jMo?rmEqtoin)3M;6v_#n9`-CNGB6 zJBwUibQ5`l4rPQy;pvg4i87=Ian^CymPetrE;}Tx7m{H897-=)8{NnA2@OfKb@jC zrFXh5mWC59w+J_AMn?)4OGZTr7h`-fPZRBqYWRx$V3Qb8F3a-fYWaJ7jiVg2{gM@s z!vp85^d)(zTrkx3l*`tmSW-mP0V=8KmY?929;IMXyB2rR6%E;ks4B3E}HeICqLaS*OEwt2ReC9j-^IE}hN+xYTW4kHYmbq-&@&({=dF zbUTy&`M`hcI-Nh3MMrgb`qzVdV~tMd1DskPo-Um8b)Krztp!}#5KdQtbbrw4N&ze9 znA3&nN4kXb%yjk(%yc`G{$$|qZPNMUeap5>!qZ;^?md6j>8b!XT^^n;QT|uybfWyP z4W|?3e}hgZ%Kv6_x-k9d-q5Pkt;Tq7H`DD*`my}ax=ZJeXRMfBREry1r-3bUTy&VG2h)#qsawr- zwvWtoJCpv!z<=l`I{!3`@3VZR6Kph6jz7Tf(*NjmrvPsFGJK!tG;j}mqtju#Dg8ct zzYyz*`m;_a+R2cDuzfK>w^spBlM!@rX1bk8e=4vYH&W-1?ZLKRL0I~+{MC4!4&~?= zRS>pMi+aI!h)#!l2`ys^lrFH*$o#}|?Kw=R!}9M^!{bG|mZQydO~;t&b|(Eeb}XN$ z^M`E*rEgL}*uD*>KQKk7!}Q173c~hn{NUa&Q>VlFugndn!*tn?)#)((sS69j>i;Tm zk5ARx}U7M}1ZNN1YDqLtkS!T`AK2NvAsjaOp+i`H6Jdmze47 ze=*bTO!~3?XEy8nvHf>l5uW}P;9hiBs)Q=uVx#So6ButY1-HET5~}bUI9D;NAkI8*DVP zzUIO2v47X;uzzi857+-V?%eW_PB#m1%fsREBHf7_&2(yqnQmv&zc0%1n9hGBVEaD{ zls2%@$aEpaCUBPq$0_zF!_$T3eaF)}9k$o_XT#~Ro#k%Q>1F^{o;Rlp^Bw8#c)?6p z`l6X`XVO0j_>X*9=RW~(=_>_F2iRz2`cV(v_o_~pfu7xFIZ)n%!FkpjI^98l`v6<> zGZozLdsC-FJ=F15WPbO(qthY3K#!SUe_wV3${9H72(lkMT-arfa=1AUuX)EcWksp` zA~K!wWn}k8i~H8rIU3(JH9n_UsfL9Z>>JQv`cV$`9?UH=cpR$q-2z2rjOWuNT|c-> zgLKUXI+^d0_;niS2I8l@r^h=GKbwUv?kmcVo9?Fcrg|t}yDG@WI)mkpabx>=0GM4j1J7;n#KUtT+o&^;{wqiY*K8v#`p<<2`IHZ*@E61HiSX@{G|2D<|6L%{|Slq|5ZpUnds$EAzG#yU9{>?*Ji2ODKO z9&D6-7TB1FqrpZQjsY9Ld zd4Q&eG0KXjpYbq)O1y`{WBH;MES5>!$dV|_$Z%oytN=y5SmoRSg+9(GsZfO#?2Vp z6`DH6Sl7@rGRC@wrkOF;IW(<|vF@R1XN+|aO&8-41eG4f^^E%&L$xF0rS#M>Okli$ zv5hg-Z8WKjQP-d;W_&6^CBS%Z#*K`zeWPh*j5-TVJ7d%vXu27rK1I{ZxIrMO?~G4l z99Kp1W1B;hz!-HAnncED5L8kbqs~HOXN)=ljhiv*O*9RRu??eXW{hnXO&jAs5>z@F zqYgvU&G>ABN+08M7%M)KAN3`g1jgeC!u*N+Q3s>3Gd_x-5@7s$#*K{6W!%E}e8z2z zQTL$fV0;KcrHe7@Ks0@f@oX=eI6uh~B&Z}XK8tZOW7KhIvKc$d;rv;3wYtVp7>8Mr`A-1vXdAI9qSz)ucOS1I?&;TSNO~8@$wFz%gKS!Jy=mw z<$}vaydJowD&+U8UN{Y9aEFhQ;+5m&{wjwD8owAHkxUr9z-#b0LbL598%+K|*BVH&$OVf#d=g1S z3jdrzKjdCHoigxxd{Wj3SDnjQ6T-|^*Z6}~j*#jK1|cs*-ni-@b4gPPEV3DL9As_{W#!naSUXazmILgWj1)_7bfaFu_(%oh)w&#iEH)w24KORa_kx_nM7 z0Z4lQay1b2z-bEA*1s+jFGwC5Eb$x_iC3* zWHE503}6B{HR6B|QFG?O7=!ADS`A-3LlU10zO@ysgnCvhx)_Ne_eEh!Y)!h)59P9E z4J5ld;DD3?cDg;@a;!2=QDaB|a2KVIwja(57~6)3->*uMOkO~5tj5S6IEVaBkySKD z;P65K6%L|M-O=K$4nb*EY4wQe0r07=ak^#AgnGuckb+@627kyO#-jcJwIM4-2J5Cxz8*e_CG;iu z1j;rPPRF1Rc_(+a(Y~0`5*~W1>j%_iG zIHtmJ(KvYafd`Guk5)*(G)UV9*v1YRrV?gxL70KLV0JcBnW0RD*_~I+)QD)Yw_1F+ zj)N$G7YAJ~wBg%>E3njr7hw2el8$qHaAX=Z`36@;5Prdm#4_mDpgYc@5iR-`K!eT_ z{hAAZ3O*UoP(rS(_0Zd7)vbj2oWRRmRqzS`oX7(gG8T71i$3ID|9S-&=IU(>4u~KELfo{R1@?86%;~7O%Pro2r(0XFu$g%Ogrbz z`NWMb7aAjFp&=Zk6Gl-vr0BrC$m6Wc@Ync4b7l$ti=pM`_-NDt1(;r+4af4mP;#8! zDE{ax!Y>oL4hzB#y2w-QN~^{o=z#BQX!XPo->kzLvcds_208Rt3GZKIMDRg(sF;zw zM7+zqE>|GTH)EObgnxRx%L-TKlFmoJG^ZG&v13-96UxW4-UaV@)kpIZEDND)a#Xv* z!bO$?$V8~{`nnPZDd@GVrVM&6z2ZrCYdvCe1rO6Zf-ZcC%vS+L1LX**a!|(76B&AH_N7xBmWO(#5B`__n4d;}%#SjIKjJEo zO44I}tJ3800WHQa>yJ;wr`I3C_@9hV#BZcW{u{LV6%hHU%M%d%@IRS=$d58D{|MuM zGV7q^Hvq>nmPle3*FcE_Tw*~{9{8V3P}Cp%Po~-;PqnC@dix=)r-v~9m*KH=tF`i| z7U`*m9GCu8A_mE!8uAuftmJ@rEnuTRVxvEnsFVolF-LX04v<63ziQE5%0wJaDAgeQ z7~Q?#8{!&3?$uD=vDI7Y$=ytk^;5=Wf~UHKKjgKrCcx1bsj&AF4g{-(R-Kwe@Vq zay>Ac@u3{v&Ug&tV#abkzLc?CFLpDQ>*E2&a{aT8v0QI#V5~C#M#e`nZelFgLz@{N z&HgQnan6FKmGO9jN*iOjU(n82u8(&xp2+l_jOG477vst7-_3Xm;~vIIjC&bRW8BAh z4ta~UgFQ28e_j$=HJaXjM`#tDoUF;*F;GEQWi#@NOX)(WxSNJn{htl0OJD2b&Tcgx`FWu_HSe?$F)t2PhkIM#!~;bFqZ4%t&E4T z0%&8r2jdRLdou1~Jd|+{FnXd=TRv#s@R*W1PTPxr)+%DC2m> zV;HN9f5+Iycr4>o#)mPsGd`SgDdQs;2NfV?3L2BjY)Y zn;Fk#+{!qaaXaIAj5`@0%eb5Ie8#~ zi*YIA#f$@tmoRQ%oWr<@@o|h>7%yeq#yFR82jhIkU5pDD_b|3I?qgiYSh<$cyMl2% z{J! z#WOBtsy4lvGO+`zb!aWmr~ zJfLc2Jd|-e<6(?D84qXN&3FXkUdAIC_cI>DIIe}#JD;)2xRSAr@em%Mr7|AM*v@zu z<5I@M83!1TVBElXB;zK=V;HwEp3k_A@em&1bub>vxQp>H#yyOOGwx$Ng0XTvrFSIb zc*bKGtBmI}PG&rW2aMT_hchl_Jc6;C@kqvXjK?r;WIUg73*#X?ploA2oN))^5sbSS zk73-ycs}EP#zRyZK*ZfZ=^f5Ef$<2&iHzqnPG&r09EH!8;Tadp@QmFuJmWeUK9RyV z%J7VvWq8J|l70%&w@Z4)osyn$x1_fbeXpcv+%M@F$K6QjA2N&R6BrL?oXB_t<77#n zO!V2(pK-DDUqJqD>Cd=M`lphAqx5IoEO93Jw@RE%xLx90!krS^33oFddMe>w#$y=w zGnV7RbRtvaIGnQ)4mMN1$a7b6p2_4&Jo|UEgUa{~#x}-(W1Pykg|VISMT|=szrZ-a z_*KRYj9+5h#Q0XmEsP&z+{X9`#vP2eFz#Y3=K(#8H?e;o<3|}QH&cFeGM4ikIZujb z|Et(Pk#QwsIWLp*xK#FcvcH_S4`FO)f35~fDPwsKD8Tpu$)D%Zavh+N{j=C#&hv-L z_}E|0Yg!qf!~Sv|KwBqZf3Aj#To;h*2A%AG1BdTsd@mU(Unix#} zjQbhC$vCc+(*HK&1jes3?hcXvQ;g+0$kB{@*vuz+{pN0 ziCG@GuF}l@jqGn{f4NT6%KmblL9XMCWcqgYm+Kz!9A2&ib+Uhm>5F+Ch=)B&H~Zhs z{=JOlx`)E_`?7yO`xh{l>r#n~(5{nqn;Bou*v8>UF>Yo53m9j!ymJ`0v;XOglR5lo#+~fHf^jPQAH=wu z{Z}&XW!%iTpYfj<$JJ5(U&lCsaVz6&=6^8bMD{OcY-j&N7$>v;D#mhMbOGaR_WvW} zV#a@E>}I@PhG%>=fn4D;NhjzTYvfWB)4| zH!?nnvF!?yXC~uj_TL~e`=>H)W&iUS%XRW(#_jCiz_^sd&tu%l{%0_*V|m9i?q>g! z8TT^wF>YY`!x;Coe+lE%D=0m)8OLoPd@AE+4zDs!VE;14jqHCo<3#o^Wt`0XXGzTd z*D|&Lj9VEuF>YskJ>yQs_b~2ed>i9l#)}#E zGY&9z@Q!R5?_A0gCA5E;0q?d`&*J2L(sJIRE$5wLJQs%sPX4l8Eo`~dEKi`|`4Keo z1c*G@Ay07N`3*F9?gEWGnIQMq0?ouNH4b(LOiwlRMLL2O9U6 z(Z~}gxc`hso{+%v0BGr;nPq^QY@2+{YGc4$j^&<)DKpFxtSWl9abY%%a1?x+alEt+I_qlPOy-1P$ z57wI`B||xZ>9PJKDVfSr4dc0@OyEEU>r)bNFVrxeBUrBS$9k2dELL*ZpUyEY*68V+ zQjU_#{&emr8#s`mb458CKRQR00}_*=b415!cOTHXprsmrIyaNA@uzb(`HCE`(zzJB z=1=Ef(zWn(uBA|;r*kcZntXI_DqEw+`i%K6^9$>B5|oBaAD!b^rsW^jbIkv2P7j^C zDAM@RxeB|+kIr4?Knakca~R7F<&EW&uB>8zIw!MC%YQoOmZil{=b&;GIX_8qeHrT=ov+H%(naS_PSDap=Rb5z z=P`7Q?K25tk@cL;k1f&CMd$GrYvo4g-*Pm$@#Iw!NG*|mV>;KCr^$n7cd&h@bNSM_LtTH!b9a&h=_PCdR0ByrVNO#Gljp|L zIj4O>-{|E?=kW5id?tOCqsaN3?B`^DVZVm@O12;D*NpPgInO*rj(YApKxB)Em;bc8Jwj->IGJde7J{GKB6XeNOdG*9TPZ(zX0I)+1v$nU7hJ zb~KbvSz3Lhe9G3^7v)o$CO73%nx@AnpY(F2e9F+;7oA^Q26`5A+jxEr^IuP=l*`UJ zOmgLF?TF-BrpZZi9 zLz~lEq}3maM{i#gPo|cBBVTj5()mfV`~{kxC%(rSFpe8mXz7vXCuPl`^smzVDSU>e zS7bg*{fptTCYZxZtwQ5h%nvzEk@+XbB^2LrS~@AdBCQ?~eVSITM4xMr2V*}$8y6A1 zY;Cf=Ej9Qfz1^UPXdET`ed3>HNI&{7*V+a7r(43?E&j)A^@HS*S`_mG`7P7>al+Y# zdVv1dll&{SbC`s^Fpf3y_ksp8Vyvr1?1$Q8#Oo~na&#@@m#1bWmZKJl>ka9}@eOHn zr$G;r3;j2qYsL8qo}!lW(s*3X-f(=5^+rFJOZtS)6&v}`xE)KC42{#BT0WyJNs!Aj zpJ?1(&a)GoC!icS9wS3oKc7z+{~P_iJlm1s_4g5Ezh1?&51I#5aIKN;)4{VHiOV#3 zsXfZstMqqj@{_-w9>N|?KEi9Yawe>w-zOZ<>Lp=08iVkN^h0VA6OTx4%Mu$ zt*hrHt0NCOV84Aw?z7K`5yR2Mkr`$*5Jl|#(k31`_RvEPK4|o)0}njlfCJ*=AlCy7wP>-PKMIM?h)@b3I-kU-ny$6UhDK#goKK-WfqEiQ@Yre?+WUP=g79VKv^8ry@B$ksD|~NGymT1u9{K$|eh*T-r&WRPM{4iy z8Q!&HB9#AIlHV#%AG=%A73hzg-o7aAf$yTwM{y5)AB8@Od*FvC^ikXcKSrUC;*Rx2 zmcO*I9yD3%0n+UO?wi0}8mu2Z20B^)aLqE|L!E9IU>jf+Y&4P%?W_Nz(_y%}80lJK zr0a}8hw1nc+@%=`KjJ?Mmk;Sq{KQOWk3fg%u)Yu26oF3UAGk|{`O*`CE)qX`Z)ExI z0C#CH9UT$qto*Rt`VDl5rQXQ>Sm%f3Q4BZ{Y&6J6)`J!U9md-RSOpu6k3_-HcEsEUPGmb(CAuFECwnNn2YwW6GE;f~YEu4^FstlyJ8u88c+6UokHJ9IAL zzDBYW>d2PqnQ|WCt*4pYr5?KJ5^~=bBD?4$va^?yt#Z7QpKU0mqm9$Gt&Ym$Pqk!s zaXR9L5Z$Q$`QBfm7alLWxo+;Gre_KPPP=rDXB3f;p7IvfXd0hW8Yk{`3zEOb}D(%Z37zE{9q z8f?ee20Fn4f1K=`XKA)V0J&#$6Zb3 z+kc(emi1k_*X>R9Z7{ylzv)`$$Kh<(5bnH+Z2J{tH@1-dBgZepH4LNp?%;4z4q4B8 zIGl8s;o{;bT*#8HDI8y}H5}7-H zOWoa+|8X2{^h1PYeVS##()}h5CvmKHOFQwukL?b&H?gf);)|xo`Yq{}2lKikfY%$PbedvqAPwltJ2UrDqG?E`7{Xe?f4Ro^p zqr0_!H5lk5Ka{W25HHHt9f1z(`{?g<`NX^yunO*Ike|^YM&1|>d7@nCCf(6Zx+9%@ zjP5cly2;PII_c4zG+P zzJFqWZ5p-IBfd?X=ct2QhTyI?xPr+E>p*!Pp9vS?ZDyeYoNm>W(G8X`?ON=>J02mK zinyc)Lf}1Y8F1&KYZ+Zw$WF^ba61z_AvxUhBS`H*j~{M}s#jPZxbz3skHocsf=tP* zhg%;#PH+?#TP}9F%JD)gWu?bgSfpKk#Fvmm5J-m|uVt&x^1AT8&ZRC|ftTZfO*|iK zgL;Bx(`~6Qb(~KRzf1Yp&i2Fa5gyI>$6LR6DX%QBXr?faFN)Ugo4(iUBgQA?Xajd? z(7nSzhxJj?js8KW!@89SIMTeZ+(3u*G5}Zw8;#_LcDseHBLW@P`yUN-7;pTK;rx)! z4(`$*U1=1$77JZl6uQqWbjnZR@nSlxdL%VQxOxKg#o6&4@|u8+jMtt`Ah6?}C)kmoOVfjix+rwJ(2 z59`gm9&Ppl_k74Ea700oJB0vua5E=f4B?oerb-4#Gm;)(;|kVmQ5u%GnGdY1NA%Sk zS9x6Caz$AlD2Mw2Bjhjhal#H!73_*RVE@TwxXrN8uS<%gh5qF}T)L+_3ib7*SwEZW zb1Gn!d1Jjr{ergJLKlcY$H6oU!?hUbjC#$wj@x0N!*B`vQTu4Pn%cpit{{5~+nEOt zzG)w_hc=U)y+4JM{oP=8{74FiLZ{+Cj2skHOFZ#;cz^Qm+LvrAzan<8V>zt;61Op3 z2g@h=7f<0N-y1Lg`?vS!&ClDo?unPq`f$~>(~kRF zFgK8reo6o7Rpk#qIO)72hQBxB@aap=x?$f}Pd%^Dam1rH_ExqwWn5jltm#3|OH=l5 znXq!B{m`s4SA6SfUib6Ap3eW{=}$a&LhAkZ-1hA=AH6cNq+!Ce^#^atzwG-?%t$ z%(aWptbC($y33KCdj2JsUOT-c@2o#=e&ED4*POKYp?4P_u=nqZX8q}b`yU)NtU3FJ zF;CU!Z29*vS?~HR^{yYVv0rn*&h>hz{Q=m?jC7x8p{oMgw<}l_gxidl)OgCP=_KoN zxboTRgT*iC3=JOifpE(8S5&xybQ2`fN%t%tUfq}r%NKNB%j~|`>!_d|c}x$6Ga9UF z>VNh2hV7%1>s`VjT)sSiXk&ZJk>sAs{_W!l_m3fa+&HqEjv!l(4^D-6q{05T$q+Bf zAx%8|P~pKmPKCz~PboYBcpBhof~N(ZHh4PV>4K*Ro<4Z6?Zm^Q!efIc6&^c0rSJsc zX@I8*o)&o8;OT&;3!WZ$`ryHVvqt%x#L%Cs+WIM5rbNUT*n6=UPsZhcYoiLIg zL(RhQ4H4+j{U%XEh!l&U%|IvP#iHvm&|%T^S?HP%+&;aXdH~VO_0Q3%RNqIktt=)y zWj@&_&L%teShC}@$d>Cr0ghkc@R@AOb%ISxIea?VW0_wlneey*vI89N$V|dR*}r)a z;q6@~2+;Tl1^{(pf+E}V9YgGt>F^)(vjecoF2;Nxy@yVR<(mlDW}#!KSs308bSk^Z zdV%iE27XxHEfM%3-76Nlo+xzIdTZNLj~Dr1dae#+2rev#+` zQRte%T^fm6Szww^gskU=`U?8hi(HM*0cCg)UM@vopL(mmu!a%8VHxO`?ymH-@*3i zGYF4lx&YG^vw!PpM&EkA%I==~Mx$oFGh(q|3F?6-S{v%R<*=q3avHeR@%r zyR;Jy+O>MJjrql@Cp)-2ekncq${TcEshR6d-5;oYd)RJeJ8&kszrtAReQ9@cK5t@q zt^0_b9Bxv<&<*8x{o-H`N{g%Zm3t-|8`jFm89Ehpu=|C7l97Lj~%Ah zd+cv)fK{;3$a;@-ZVO#q6uPYzy8bA1avg3~oLzhiE&#So#7gmYbA3#`n94Vq?M$|( zu)Tn7*)FX1wk8TM-P;eQb`vXK_azkm#7oJxUB))MH~xiib*(4lbi*=d$R$#N<-p0& zEX+^aa6NxfFJ>P?^2qtHl+$V_^L$ylBY!NH+!5yTD+R2AI~rMjXy0L=!}`!}p$o7a zSMzxRsUM}iz4McVjg&8a%-6ckjo(Ld)j3@OT!{jCoYhr5D5uq6okXKX$WQX2{}W*- z8!0>v-_Z;fo~U;HfA`Duo^u1+9c(MFkh^uBDxYq#XZf5Um;T0d;DJd*i;gH^hGT!D#}q|q0Dh4uoNa8>P zhwWar``M1`CjSJs6WLB?JCkiY+r@0V*{)+-y>XGKXJ;{PV!N5`tJ!X0`zE$q*}jAA zHn!W@euC{f2g%vV*gGUu#OG#PWqT9*cd`8n+udw$VY`Rzt!($QJv5&9e#W?u?QLxL zv;8C6%IhT8P`2aP9?5n*+oRb|V0$dvD%<1OPGsB0b}HL;wu{+zv)#aU6Wgt9ce35f zcHA2zXCm9#YzNqGV!NH~Znl*-DV)l-jqO=%r?PElJH&Pa+f8h@u-(CS58H8Dh`){P zVzwLEZe_cR?S8fs-=c8EY}c_Z>tQ3~7PdRs?q<86?UIr*_^d~HqHIScC2(5b=~YTf z0*-1pwXM5XhspsA3&u>Dpp@blp!{njnNsTY zgNKTrxq@#=Rn$0w<-)HNGs#z>)2+wygIoaj8r*bcpHj+x${q+{r6`pjuy*==GN|f= zj{(&LUC5#o%hrKk2*XXG2;rH(F*tnPC+J`i^!PRIMsLUmQ9V==KN=UzKROl$pJJ;H zcwtRfd~6ZEmL${Za;t-gB67Y|r_=LF)kQM+4=7Tp(;pCDfz*;^$TZBinsWRk8GgM; z6jNzdwo;1Sl`MZMSFKiXIWxvj$b~b;`Y!7+6^KhhrPN>L^Qc&dsy$dMO7%>lmSHSZ zl+WtF`Xm!YDSQkKzLr!zSf*O(B4#Sar{{ZE&gr>tqLcY=$!8-q&~s-GA8V7FTtWPD zq$=x$^oN0WohM|d{zfX`qg9>(qtobO5)RWHmXCw*H?{YWc-6+x?D_kCkiMgiQh~jq z7JFEq1lv?83SCfkeQmgu=Q+e-T| zNQfE-|CP8>cPSWnu_RCjCT)~MDE!Mm1)iMu zgs^S@eNx!x-u|@kKcVm$fuH&6S%JU3Xp_LhCOj|fga=xJF(afh(g&BNXo{1fwq z-O=-BVVCaly0CjLI&7=pd%i>1sr@$zTj~Bt*lNe*`l*vsu9&u|Xv!YNDYj(?9=qZ3vXnoc zTJ5>>L`TZUf4t{!YscrM+^}K8gAbp#I%Uhvt1dfwmOrI-$jjM34fCaZv+ar{@64!7 z=^y*$wyhJrDXV_>PIl+n@hP^n_4lpVmYdQ%^Y1@SYjLKmA70sb%ZCo;Q<+k@{KoSx zT3MO$zwCEDSv**u$NzTrKBJE;yn+4RFzVGaDMZJfvS`_)1Lk~%dXav%Es;3H2=S+e@O@taE4q}a1B$cel1gp}Hn#eZA!VO7duXMcOj@BVsH zO6lcoXS>&?q?CW&_DPN6Pr0i3hcgcxHZ$d=jbA*T@o8zwSts86+1_`Tq_|7&UHIV_ z`6)NA8}mcP<%?4;TbZBw&RB2C$z^Yhxb4!^l+WJ(>9X7;U&^eDZvFVxZDlDNPu%2t zrlLIMgwGasr3QQ{bKX8P{n3pTDU0ep9rL$y%TkiR4jyvYxhJGteE$&};|rWAfBy8~ zm*2g*Dkc4iTMwPI!kLmAm;Lpf?-iwNc&78j5B_B5e6XcFI$@80q_kC~G`C&dw)z1_ z%2Dq;c>BTroRqS$X;*x8uPbHwvTs(UR2HWkc*nb+Ovx@xSx`Uw^LgL_gH5yzi{3u@>?^Lg;@m~A zJoS*UKP*}f=Ke)1(E^+3M0-#&5Bhcys6Mg%hx1)I=S3UWD{wmy*LH9#5%)NT!-HB4 zw-`as2^-xI<2EGv;Wni7!)-+ji#D!bAm4a+&`oYb;#MTO;}{s-@m@8=X^b-%!@E5}~ z5uR%qUk^6QbrU=o&tKs|x(DDvxt@my{Wrsd{;MDZCxM*+nS%MFnXUU2Asys|GwI}~ zD=~k;q<-@6(BiJEr(7p!9bZ3q`=d9V`1ltSorekU^80_9wbv6bowMeW?+%*p%@l4* z{Oe7wOQ)olZ61#g=eASF9C=~t^XGlF&+|{5HDRAmPksE-@ptB60j7?5>y4u8Ha+TC zwdMBPPkef0=3ZY{9Q^Q$g?B&j!^8_ND!mjl0*ZL#dH*=%rVH<0aqD$U_MUUk(vx~h zwls{m?dQJK*Dq}CY8X>_v=jExl5=NV_Vmg>yqbR8R>x7dzP>Pi!6U)1KDan^(5jAo zZ#nEU@9UG|U;Yrd#sBf})s6z6XVNJNW8bq6ojmKUY5$pEcV4mXnOhG2__zxbr^X%P z_vMW7iPgo_8ONmFIn*9J{JU3QymaC}o?E@9>1ygnsuY<)ps0ny22pb@YR;zxPgXe^>6(#M*;< zzNz}>#Tm!H@XTK(EWiD|*Cu?}di5=T6O**m&gUWyS@DC?^x&NIjFFoM?24&6t6V(@9dUEq=Rf}#OoAlnw1bN(=P?PJ@{safBf zIpu{VEos;8757Za-Ve3(cE0e@@{aG{y(e?X=WVB}?@BsiiJE-pWiLMe{dsRb z_jdl-9q#4VpX9mc+yw`YTbFejsGqd46OKE?xALyC&u%;SsL$W};fB9&{rufSzIIEBeA_GeYyUfYzqKnWMnCvw>a+7F)w!>lQTh6lcYpn`ryOS1 z%GPZq4L{ud;_`pDs>fZ`zw+|iNBn%(kW+4%a-8Qcj~+g8>=RGl_R_1}>z|(U;>hK1 z{JH6xr>|`N*V6F`>-+W{-q`wWDE^3Je>@=jgF7#Du8RNYUzhiKHXoA`+Hw>7Ok zYTnGNYldxDdhy3gl4`&6UHMV!J_kS1f62)BzLGBw@IF31{rvBqx#r@1s_#DazkB^L zDWlC(GdXF>Su1ae|NMw9C3VBoAC$HCu5Ij&|DgG~&L@|j8^8STtGZs<_(SpZGu!t( zG%I({dC%k>dWZ7l5$|>6)?eT7%={OV{`PVIQB@~jd2aG4-G|mcA6)-b-E|LsP@li& zrCWvSP?YOGe&s~3|Fo@Fef0YL@2>Zk)gC|V{HJ=`00Jmyxy6!TlQ)_=fUaUWbA*$k#A<4(0$q0zq|d0Ll?P0Ju2lt zpSE$@&}Wvm{rl^8-^joIqUtw?Z-w_REB3wapj%(N|Nd|GyDYi-;(z9Ry6N)CC4X6z zy#F`%UaXFuTleBS=`TL^_E9MZt$gS1^GZJWy7v5MKe};s;j}#$7JQVBx?PEXYg^&) ztdrhNzwfT8v+ljof8%qDd>az)`?mJ6rCpsbRrK_?-c>RGnLF=Y(dpginrr@|JeIwB z;dvX6+cxL*!o1!$*FAaU*zbm)k#*eK?%Ot>n)`0t)i+;NqckqqdI<7XQZIQW{)?d- zgXIY$ADeT|54YEio_P21KhC@S)A0w{Cg<+6-=5dcU+{C{Lq9gw7H3@Be$&>4)&Kl* z@u|&ap^NrE^3XT$`umMj?-^~s?Sk9qeUd)wvdeFM=ba%xzx>rp4SUqL%mwa4uDaU( z#hqK8o^t2H|1g=0mR^_`;qE=LD`g zc1vMz;XNPZ|8U5#X}9EUe0THhBMSaq_NP-md+_-qQ`fwr{NbSMKdgCw)0Y#coplC^ zzx9yX@*lo_dELVGEgw%CecGDbZ8N8S(f-wi`|dx=b7^jM>;A`-rj8o2U_|4(O-Cl( zJoocw-Z<~R>HkPi%l+;(?_TG3wh!6sy;J{vdEpa|$IEW(e&d|CKbhI?aQ9vM$d#K$ zt$p>e3z9^Ii67NFXTww1PCR(qh($SHy>QFTwKpEU@uo9Z->_*~Fn;#$Gq2g$KI)&X z`7?5#xpU^V4?pzt9qVTtnLBmHbE8u3yZGn8oYznM#~&{ro&M99O^f^AO8)SrbB1{i zd2x?1KYww5%3ZfV__+T+abq`9Cz^WOKU2?my|#bK!p-llYo7MetHYhg2j4oh_3p(d zOnUA4EqhG*`K`szUodXeggak4`hi3LG4zSaoA!R-*-!trWXsaw*F3w&mM1Sf{=?}F zD;~eFwRqaB^uvdqKl+15e;)PYfA`wI-dXX}oLASZx4-*f84i9NZ53li40);J-MzZz zS0DK1qN&&2_}(@5INsahob>R}V=lew)qvx&@$dih!J2(WA35c)BTCnfYQJIrOXpUf z_C@JCo1cAZ@;jcr=bqC(?%#X=dCjN3oJ0L@UhwCdGealOxzhLK^aq;eJei)@d13us zz4CZ_y3hIg%1x{9pZ)RAqr8sepBVGz zLw~vdn*1-Ww}15AmUX{(4x4=4w70K03gc7a&wb?N1uN#(zMp*KzZMo;`_dWzkG=PR zYGQf+{}Vt#Y_TJ@sGwNT*b#LnfD{!qDhi4vs0c_EM6m}e_IR%ad+c4YUD0ca9eeCx zMZ|K|>kS}?iu#{t=a~?=_kKU0bH2ZGe*bg+|3&l8Yo6KJ+1c62?mjcKEjN7LI{xyP z^Q+#}9qW=kV(+?zdDdS)B;DV8c8GBE`hhtyq`~^Tkolc}v9EsWP`HC?Lx_SjkLb1QPXRkp)wdNBv*>1g`@E&XMX zHKqM@=1L_>_sSB@%4GUGm0w13bxoJJaj~X;;*iPze}QY-(tl2LJUsg=ZTTnmp;zGl z)8A}*1zh^CWc);W?acqAlK<|{JcXH(;y(+?fA`1Nm;Zmh3TP5%&YC@E?!2V=3l=U~ zykx0%*)P8?U$Jsk^6E8f*R9{MQMYOHmaW^i@7TF(_ny7`_8&+&c|V^&0B`sckbT1|KMSI#-qnio<4h?`6BCO_N&)#-v06K z{f9q4{$ej2@K;E!XV+Y43O`V!GZ_(1ZRqNt;kX*ZT?IsZAzfZ3eICR+X5$b=pPnkMx`i%eE z`~QD?`~U0mcXRjX?&;<2)1zlE-`;)ts`~XG;5TrPf56}&to;Ao{{M>dm;9~$lbhN< zr+={hy$$?7&;m*mO@Gq=a^Wo)=uBzxpM~_l`{V1I@6Ug?zvgSecbk7`|Eo$NeTB(V zopueENm!_ie&^pH)_=Lf7_D^t|88%KW631N-`O{*)ci*P04@dL1{3Zn;CTvMuF=O9 z;&Ui?w)6KT(*wi6g$j#C{FE4fqR#ji#^+}e$xpV-V8VOn6yo|O#dP3_7%av!OeLE3 z_~j>LoGw35;rSOVCDWz1t*{tzJ3KiSS_pCJSFRAMfe*T9#7`@&vV^8-^&)dM?Y9_8 zKa7}f&V?o}nJ=18%r}o&;^45r63@5!^GzNfRaugaq$IQFm15XGY(OF@wu_HB2QvRd zaT=l@L&P=osp#s}%>MxaEdE8)_Le*J_{E{eITMR36)x3_NQJ?)F{mn3 zC8``%f@&;c=@?K`P<5yp)EHD1ssdGxDnT`V!}L(~s5(?FY7D9xRf(!Vm7_{fjbAZc zR6VK=Rg0=YRimm&_N>l}^994!YK{XcO zc2NzedejtD9jX>pgBpXXMpdCIQ5C3iR2ixS)tHalM>U}8QBzQLs9ID_DUCr^qpDDq zs0vg$sti?9N{yc|Kd1&&J!%T7u9Rw#HK;MD>QbsgR-!6U<)u`HEI~EqVZKVK0a=fl zQc88mT2xIbjX_qUs!FL6S%E4qr7~nmDK+L|eoLtVS&y1hN_EKEQmR3YDWz&;RVh^> zD@v&xSyoCV$Xty%nEz60K-QPi6lAVCWNj(cAajjDR+my0GFK(CqLj*!xyq2aN|25C z`_45JnX3Vrs~(wa3bL-0YLU5Wkh#Vnb5$dARUva#B6C$BbCn}=l_7JLAe*%Ksz9FE zfd2gyjMhcc8Ttlfcil}5bXVIDd0}FM!bC#0?|E7_c#aQIUo6*b(#n3M-M!|EWEuX% zromL>S?dwxsb$@T#-*c3fhNOpOyy8wxNkW=UlK`lu@lOlv2RD#F7p_+a;%CRy1ByI z;r&oD<8}Mgyhg#KtGGmv`k7MtPat)h*=H>c^e0x!yC{!ajwaWSTE_jUk06_S7vJPwR(=kqpHT$E;Wnvbjb_ z>#Fgrvhrg^r)vIV$sZrS$XDhMAdNT1&uW$%Musjf z8nrjUj|{3Aa%4*SShA>k>bE5e{fXuJj)pMHNaE9}j=Dv|VI)Hnq3kFxPi}jA9vZcB zBpL28sp6{+-HGK%d9$B}5K=Q-Un5*UkobLhSb2nN6tSFg`JVn+5NUPMcHaE9-o)}z zdtGnKv1E`_v(5Fah7tR%ZuFlkS+DH8pz^>_GPi8YKVJ0>B=$Nf{pU(t4~58^*9#-B zj_CFcn>w7ls9@tbae)`n9%;DyUXKWzXJr(*Rb<(v<4He~*tgOu>Bg4CG4QWTwI+m- ztNOe9z61r4vdM=de$*a74%>Uybq#AxvUWAJbl5PK%*t!y(qPsoQn%>Ih4(!MlM2a~ zG+`Bdh~@Yn7bWYXiT8jv59`NUE}-!Qp-5G&i73!;_8|CGU9wM5|dbdXr_fX z`SqBD{_`LQBc`@HGJ%kk%5&?6j&vopBF@%~INOn2zO|*zZf$!aST*ZZ<3>Bu>U;Uc zJLB4uTA_(GLlZlajvL3-ROfXjHMOm)Zo4FqTeSy1YBtrKjBZ$daGJXpDQ_%0=)%#S zr0e%8Pm@)5`n)vRQ zH}RK^BAXlKFI_Y#nC#OWwRm6~N}~N%duN>=OS~Q(vx zr*Bj4izdo`wkhG?J;<)LZr7H)@grL$%PhLvs>%6$r=d&F1(TlF^@l>&g_A^&yyHI- znh{&oZ(VBM>O+pd4_Ub4MIh<2=81n$pV8!bMY6ls^|54%L-T9bwl*OuwvgJ%D>`>C zKb%+;G*!>A7(DyZU<_Iy;tB z?{ctOmxJxd?D_KdFSLFn>e3HIfXhfSy-tC9#@IVmo4Utd^s9^gz;lX{D2I z>Wm`YjRS=jz^JB-{u7Lv+qkR zA|Bp7_)$%o$hQPpv>i*dmQ9pW`klED^h3r3Nz4Wo|K&5I;0r2DLnR8^4~wlm*2b{|E}`oSvj+Z;QQO#srb3S&q^d-D!O7sfC~3`x1I{N&k%` zalh$XwTg};Wv1qh%^KW~Sok?8JuOBP2V;SUMRYVNlkDG6`g$O#d@%8r-I6h+s$5F{ zwIvPCPP6)4Whfb*9P=~bZ5XM&`TX~cN#4YI(u$!s-vyBuoh>{AD@Ku!QHgQJg?_}M z|D(m4qU`=-R1P3Kbhj6__$iFFrr$U_=oG|o}|E6+ozp+G@&!x)1?hD{&2G@{5XRA zXqfrEVJ7|En!ED)yJP<3WP{E(9=;1BS`SURLA6z+ZHvYA`?-xFD{toPJ=n;d%#1%W zX=Bz%a-&MC(A!1_(!2h|l__gSkgTy8!?K4*5vw)sx@J~GNJD+u5xtLvlbd}Vt+I<~ zIb68*Zj65znJsg-X*gR&T+ZJgH$Vs>q3uqS{)!&tLV;thOL#Ep^1ScjRZ;HbQib=~ z%BQ10yKV6K1hCaBpvQe|^xZ=wIiAB-RpJs?(GiUrgjD?hb{9(xW z>$#V5p1x#!qp}2FH=67}X0{0SuHkQPH@df)Ysyzb?$~E>pT3{s>$CQDkjc)DU!sXw zd$z3<7e7y7=@dVof&Blc=XLxU4($l{gZGW}Xf;U8^P}5?^(=fYwxxVqDVPU-%_V{O z8vIX%ExcbG??=b`$MODj^!d#U^Z)-)UNoWN{VDzYi#`A0&jXD!_;&T>4{o+KMw9s= zvhe1aGsr~S#1Y<4=8-&8^6uVW9!XdNu7iDt?L|LMUs~tXsX}1mPpzqR9Z{> z18XuG&(BENMAWB#9G|yg3%Q@2b|7%UHd6GYZ2|NXe*ZG9(yXDo$eD4q$31o5L;9D0 zydb>kKC*pe6+QGH9+#cmAvr#UyqLV@W5?iwq*is?)&&C&k=wWHtb~5WMz8IspR_tc zh+SD?UFRsdpz5?MpzLqNH~iHC=x=XgU{kB*UsYuh~VJfBMTwUc|f?>SCJ-S6oN z{g5~PnbIOH;dkP3IdG}p@RMZN;fM#-JWi39eomRuWRTRXbRInp@4K_T>KzB?n^?xE#*GJa`& zdC|D@r1_-}Dd(P_C-tXYi-3O4uLiEk>v-YfNdRrt*VJWLqa?exdR*DVHI$fPT^M{XI76Yow7XSLDIE8EM2VGU=Jq zA8CYkj$H@+rDuJc)~e(0SIDTNSq)A$zDjDhPAdAa@G8kWqv-?vsJ9+nx}jg-HS%DQ z^Z2>vu935Liw1@^yG|OdS#ufsS3kK}u1|-8>txyQeZw0Ly+NjZ*rPjn_6C;EO`;yM zyT8Svo2295C)f5FZ<0<^dJVE2c#E_UhDSnw?0Twwo)MJ{#LaMIxueoRDh|FeB6XaB zywt{JK|k$Y$JY3V-!qW=J@2h z$!WJq-e#W-KMQY@F_Uh6gMQtv6Q0Y|gYS?nbDvckGXD;7T%YQyIDUt;srTXp^!J|Q z=67YB-CZ(pTJoBw-gil0`k9eUCf+6QXs2K32QK@3c3a>3cS-h+xpNg(_ek}(R?Yuv zdykwOUiTdI55HYbsVS?yM>Zu)TruMGJu=op-FDT7d&IfWc^>o|A9ZKn`OQA}NyHG( zS`#PSCt0^Xr8M7qpIj{$a0dF5v*UQ5thjtUcV^26B=3b~+|j`g$bsr>>q9?tVR?r} zzaM@;vNyHZy(IGi>G(@RmV3pA#MN1ej4)x>)#V{b#m|VnW<06`@A{j54?CnM%RzsKg#wgx&K}=9s1SJzLd3Q zM&MH-v|ix&X4X^UH@KzHVeeD2>B3nn=x=}Ye%aM?ik^}t5mW7x9G(%YiJ?2k`932_ z^Bx32Km7cl)>Dlf_3KO=wA&e+gDe`x*0ldn2ICwrY@zBUee zPR?!k(XnUJbJ8F$VJY<6kF8N4@B836N&e(-)9U+kvf!uV!LL;^$xp+!ZP1^;%cz@w zZE(pXcbe>4|GZZwS?Ag0RP_;=gm&s43jO>mdG<;gIwzAf?BL%wI+@0+e)IH%J(*-y zbH{Ax|DXEc`1Mh@Gs&Xsx99Z8&Lq=%tgY+tIg_mNb>0Bu0t&CstCd>!1v&ZGuPes2 zenC9DIXKGQUyyhAKiz@x0_;3`K{l;U|NY&h7o_a1{K`>_UXbW3AxB^w!N$$gj`|&Z zK^(h|Ymj>W1+k0?`5}Aog3!+7!(n`ZZ@GEBwtRg-qW1i9`$>f?^5JxFQTYa0#N*8A zhcND-eP^HOULING+UMk(fdjKhrlP%cWJnhMJ(yn=#v{zKE~uzlm_-(*ocqyfeHPiL zY+|f&Ad4(o()~{ur?BBkE9sFtStQgVyW{xmEaJ67wYqsh7NMQh+rjvSu|IZHo?QDS z8CS1r=V~opk`?pYp4i;=C83?z*Tc95UDVw_w~ly8e)IM|T5H@(GGkJ}56#S%#J>5U zyD;A2>#6BNr)@7uU$+tn{#=JzZTIdaagV+|JMh~} z^2Za6&*Tc(WPhyJTNod4M)N#!U8`&oa`Q{pMv_g>gLeJasIswr$R_)Cw6qs~^%a>v>BiB0i(ZlGZ@)TzTlb1MZ|vX;<2B;yzEMm&^@;@7 zigw;$F2@rq<5d4FnK=`{%%z4g0L|25&)FwS@( zK>d??=pW7(+P_9~06q>S#YF~5dY#+2lwg^W+4@_E_0UUy`6 zMH8k|FELF<>s)@_YW&I8Gu1%qFE5$C`LU#aW4s1e!H{IS7~Pnn|C$b0 zR@7wg&51!xK{cW(YcabH)rhLF!}U;8P>raH+RUy&%|un$V>oIuY6_|z)us-M_n+pQ zfcFxPr*le-r}I`siZfW0oU`ITt^dEB?*i73FxxK7cF~p1BCErY0@NQUKc2!ruMgYft-CWVyYX~PE6nE$@APFk zf;T}LHJ&7Uxj3mltZdRC307MRn8*Ugegn&*^Npd6xE_FTsw0h8#AwvjO4IwCj@UzrHM6JYm>h;xge zW5?-NaWM<`iVY5ym@%EIc2H16d~oS_bZYA2a41HgMF2hfQm=v+})F1*}&#L;~U8_n`+mJql5dh`y8F_kv!>jvrjdi3b- z7yY-@Ovj_xLSxamuxC~2f47(z_I?3c5O{Is7aSWI7A4MF)H`^5X!K}^tFOm?7r9CREK(>Fti9NdCBx7cc?&;MFeUGKtwb&Xj0ZAIOQx)(JC^$2Pz>PgfKs0P$@)VHXgP$iAo zb}FFCP^+Wbq1Hu}qdK5Ep|(U-pteVKK~Mdj&_Mvg!okE%h{q9&v6L_LC< zimFF7puR78Q+%3Ed@NE=+J1TkkEHLGiKXp-EY(Spo^<;?<0B+)@gb4{!7-A)bV92>(G%!< zF-D2$(sk%uPLp80Sn&%DrR$FhrApHXgX|S`(f_dY?%jIy=+=|Obb&|HrKP+#UF7g(5?vrz;^X5Q8R-g7 z7}zpEydI+K(`%$C8stYAGU-o0;fKwS-but$^%Ac^X+FiPI8eCugu6VJE?d8tSvqm1 z7%aUgnrd+vO%~IKSq+QVg>bgL;xM*dxDqZ7gLpk@4j|uNH06<0dsB|3>PD~oK!G8L zJ#jxl;aIp)4WT-Kt`|eKuXr6Tp{;SW`0n%WG#rjBOFv#r71CkbfvZT^4%>GcjN66z z71_eJ5BH#KVcQoEzZk&sQM^9O4_tk+p?oY~>^h&#`^eH^`Gk8$xU1m#g}VVB!s4;~ zmkf8Kxr9Z93g3Ivzt*%&N7K(qX8Qvn@Yhlz7vn%YxhVuyh*m?mYPt zOpl5){S_NP1A-IiRe1D737xB>4Zp77^VZg_q2jBE{!S;#2^hlLR#OD_MF;*t`c)17 zL8>b74^kEVgH)B^AEYV){~#5)=pUqCz&}Vu1O7p(Dc~QZsssNZRU@BA2>gSTW57R1 zRRjJ(s-l08ssj9jR5QUpNL3F0L8@AucPIt?gAfn=gH(0kAEc_m`H0luAEaym{~%Q* z_y?&faGoML_y-|A_y-{#_y?(~asDEjk27L?@DI{(8TbdO#_)NKz&{AWf}MfsT#pQNL7jRENQ_%NI3@lgH%=EAEZj>Hxg9| z{z1xW@DEZI{e!?bFOv%VgAgD5gH%=E9|Swj*Q5mhAZ0E12f+^hL8_TJkCO`ggOrWn zAEYV){~#3|&hI1#{~%>O_y?(K!9PgVi1R*){z1wz@DEZ|fPau`3eE?m2mc^tE%*ni zs=+@A*ioSp)t-s&eoTQq}YMqrg8%SquI_stWKAQq|zRQhM+YQkH>#kgDh( z1jYHL=y4Rojo=@o;W6MJg!niQl^pzoly%@Aq?!r-L8?ZapGpS)LCPxd4^owYe~^j- z=dF@~e~_{P{DV}r;2)&Q=d;p-e-Ie_gH$uYKS))E^IR#xKL~d44^owYe~?Nh&VQu_ z{~%@2KL`r`K~S6*OAr1*$_nrgQk8&zkV*{Bm!$>&AZ0E12dQenKM0KTXc@sjNLdH| zL8_VHAEe6X*NOrEAY}>o2dU`5KS(tO=iSnRe~_{q{DV{#;2)&Q=i}0Xe~_XK{DV|= z;2)%_#(BEb;2)%H0RJFWJ@^Nys&M|U6z~sHHiCbUssj9jR5duSm*^j)ECK%@l@#y~ zQswh~Wp1GULCV_a)ISJz@DEZ|;XGg(@DEZ}f`1U~;2)&Q=Lge+e~_{U{DV|w4%9zL zRg3e6$-qAd4E{l?a_|pQHSqbwhK7io0{%f7E&=}_l@y$3ECu|7lx5%_q-q5JAXOF4 zKc)o#AY}vi2f+^hL13JhObz})%6jk*Qk8&zkctfFE0chKkg^f{gP`Caq{`C|6a0e^4*o%^M(__(HQ;<`3h)n7R)T*J z?BE}y%I8Vbf`5>*2K<8%5B!5v`TS{W@DBome~_vQ{DV|!`yi?U{DYJY;2)%_0skPx z!}-?K;2)%{6a9m9KfpgoS%&klDZoESSr7g}Q1A~@<@2*iz&}V?4gNu@D)0|dHQ>B$ zM(__(P67WQRXO+vsq*>UME@Yf2mc^d75E3K@_F72;2)%H1pgo?_y?($7#~MjT!wh4 zEQTi??RF=su*xm@>u!!cPyAWk;%B!$;>2)gy0zFgX-A6=@4DUJxOMD>K|i~#?Dy9Q zuhT!e73Qp#j4@UahAp4-^N@E{;Wvx^XC{BICe*)gx9iHX2Ex_5b~$m^Y=rTKuMaLS zt0(y0cKT3f)r)QmE;rs<^S2tpxGPhGwvXJ@ty!f0!m?2{h13g%v-w`m!rg)#XQ%3| zgo*}T5D;$JH^JMOigPIDh_qLe3TQM8^2uKBh(fsR^nKgUv^K)Ul{dPKUwX6Kr5Xb|Urheq?a+=}UB9mEEOb)b zZhqiSU7?b^)~QVu>k07-x0iQQv=iK>R+=<9_fxkzKMUrLT~STQ=+`0EC#0oNbfd|y z&m@kfdGmgD4Ba=qgO%W*QMxn5mYehA(7wzFV&U{Bf4-?|EoquO2? zdyxnYZ_Q~lT-I68uRHi^hP0dTquNuS@CMxk*Ec%?+WjUM>NZ?tF-p+{=eKJmSl(Ec zy0BVT!M@S4MiV!76c&xN-@9~Lem7P=U4>RZe16{PUqd+AW^2Tu)J{U=h`LWcI5!g( z?Y18{^`xuNtAl-<@@PlluleDYZg<-Xm0P*mA6nB_IJNPc{k(OJ1!X~E%cpc6JvY*3 z_llt&!hq`qGd{dReN}i0 z0Xu$qcug$H zEu{}0M=RmW$z z`xn>WUr*{OTolIq>EY`txO|#jeMlWI!L`C)pF8&HCDf^SW30u9DnglCH#;2dNQ6sA zg)=k0wKmPKc>eeNrtdqn5&XXvJa|*yTW~qtGp%d3udwXY`P~ntzJgk|(t7blPa(?F z?aN80j>4U~UONv3_zG)qKE`!M&DcE^-G%y7I{T&O3$^wCpTcA0LxZad=-LOS0xzSBoA(`hs%-{W7}?*$WQZ zO!?YH2*G(B`*!QmdH=aeg0A%*#UBTh!o7-#n+iuXGR^lmZeYTMOY24mGrwHh+Pib6!1Us4&^Z;zhd#eS}3;zB#A+dI?>IU#*s}?JlgJ zli(^WyX1PWsP712pY7-@ zSBL(>-45Dj)q?#5$A`|_&vybk2q)H* zzuj9mTo}J{)dK^aPj$IA<9d=;Ez|s*eLL;WjePAT*bdw}y#JU!!l??m?OPk%g`{y- z!8dPt38?|jvlkufEL`bz&f#?jZ{fN9)6bjUdz|JNZs3kA!3YY(^eWg`;fY9md zlf|R^`Ej)uDz`rqRc>4JlbD`OA5l{_&lT11=!~c_hrWoaYSBI) z;wikNMKxIO5mgrbM%0w)4h3M>xQrB4y+J3c;?Q$ZGvgb42D|G02vK9IZxU6JmnEup zzGETSwHcwJDqrnoygx_Olun(#i1wM&MAa<2AZpB*3SS{S#d4sis_+e>YB#=R;hWoi z1G{m;3{kc9uZwC}Te}FtkfT)t!yF^v2DiSrb6&t6oJFxW! z#LKMnRaDgk)lXo}*&U+NuM)|ZXHU*b{)!Nq3lBH7*y|&lo?AuRiOzQ$+vZ~Zs(E2T zEmxUr@dhu!{>=NWs=(ZCmNUnk3G5#!d^vqQfAiN+p-tqZcPpQd5j26C9cvbL6du%@ zxVQF2wU9sSM$CnG5yHAZR*cV^?=N_+N|`-nhMy4cAaSms4HWj=4s0GZYP6up9{u&0 z+(Yo|x32k)cS8k-=$(&etQ;UXgobwybqEy#+s@vY6-xxe;|t1OBkhDGW&0}gto()H zmEza!O!pH;-a4}8(D)%j<>phZh4>+Y{?OX6jrWEK>R%4_->Drd{2G0t;hZCb1j}iK z0q2@m6mALg9jfed7f!cyZ~Ir#VBw-$_OSL>LxmS!C*GV+4-&?n_}*w^xxqr>&eI($ z1oRbb$GatU?iMIi*;vDI-RhA-mo#aH*Q&fzB`7ZD6O|N8UoWxAo_bH&zu^x^;KiW*aUl?bH?1qQ2l3aU-$Q$_`*>&@Xb&DN8kq#`fy>DF zC}@4(&mWV{L4qJ@{F3^dV>uuI+N|1nt4+jj!56d(fzT zRbOZinz#Dg5ZVLh`9W%E4-8$;9)Im&YwVS@Hp*{HXm+ot!J$S5Z?hfri$B8voLwoS*;tjDqQ1yAX5!wT- zam!3-4}xC}n*!~@Fh}7KvS39w>4AFk$0|f0C+SrF01KPaHq|lN^1l+bbLO zlZ+3(rd+CYEn*BdW$T8!dHp_mH zY}Kl5_Tzt$@vo#;T>XELIQu7)mbv~Q^~Hs%IDYsCSunTo<%3t>$<=zgC(^6m$>YT1 z6V&^^lLa&CH_rX#J89oC)$g~7-^roac+K9S-*No#cVZt{w54U!?_|6_YU$Am-^ryj z-G@fy7LoF6E$0tPFCuTQNmoXmE+Wfb3@>wdYY}l@@NGzwg+(}ixQNW{QStWjfFfcn zJTF~JXt=Ib=c7%EaQtu)S-5!a$65K`$mg=l=eKzJjZ6`eg1=w*Mhqv;R{yg18)^L0 zu0{P7-^jvtkGe%n`$o!qJpD2&_#5e4=k1ZiKHtdAvgtj2I(@_O!{5l(Mj35-mHS4V z4s1F(H}@+Uu3bLk?c=YcPRvF7n2TS@_xJN!*E{f)oE|k+{a5l=GWdm}-|LxQNu<4D zyEO7E>A4`(+RgtfjvxL?bagMzYu@rJvFJ7V%iWqZTpU0Am1MM&tyuEm3vmt&ueI^v z7hCqbIehvvIsYNk zrqRC7WMSvu!gsIzOwzU{B>FD+Oe$VlQ^jV|XL4{?`|KwnpGjoA^xV}!pK<)~XR`Q* z+eKsh&*bDYuNh7bpGmo?>mn1Xea7*_pGhrsZcTM=0lD1CBmDD=0uq##*kt?d0vtbF zK)Ts)vF&lNfM{a}-0r%mfancLuHMV2T^v7LK<)`O>K0*bhMkWJ}L3bNco# z!12QcY#Q7L^)DA@oVD(vV4D=(8JXWaQtuqDROSsesn=Tc~irX8c5r*ZCM}A zhot8df7!1slCI>FWnaB7ojj3G^h2cKW%lNi-ParE1g*~}e+DEf?kvg2@x%GVHC)y8 z&vE%AtN+v!t48HxKi_=vW9IL#9li6(`^uku%5}~sy~^wy^s{+BsZp5q&bnScxp<+< zi$;|xi{pp$$y(p1BbVlVBAv^$-jVt06Y*{NaiXeIiq;@ArN&`4btV9^C$BQChAgv(hO13r;&86$%Wy*`oNANMGlx_%<_8r*jr5tZ|0=R345W zroS_3lU*FP<&jY{>{`}coky0~jJexrF|~{1hx5os&nveBy7<$XzM(3M%JR|%f@-+xA%VpOti}* z+S>|g?TUFsZE>M_nlz7uiUWvqY5V?TQ=j*_IDR;n=v2;9+xt{oCiebzC6`p`G-Sz_ z)44<`4j|4YWzOdPQg>G_*-$mRnH&8*-DZ^<82f83sg{ydH6tdN?$f#}% znYE=Ga>%;Pi!=k4=a9!Ow6jtc95VYso!Sc~=8#Eo?(@q=*G=mkKfFF>Bu78Aifw(sNOs6VZ4;>xkJWvo*JW1iAAVld&qywgu6eyj4Dad>}wNzx@KU0rfjzyQGA&c{S(=Y=vA4`*tTmj=}B3DFyi(CoWh|EXo79z{g zF7adgTLsw$8TwAbB15jmP-2H%9a)ZC1K9}~-Z24-0vX=10gDTAZH5vhGQ24O79Zp~ z3?(XLc((;C0myVbk+`Ul>m!FEH$aX-mLn%1H$>JTH$qNAZj7u&c0f)>c0|@8H$mQs z+!Q$lnRnDoMQ)CEJ#q`=G~|}Z24rXCbmZ2^naCZH-y*{t>#!J+T^LFVkvk(xX!{9u z9|y8XY>?r`92Oa}QY8AG4`erFIkE?`6LNQC1+o{i3$iz|61fMm4{}dr6>=}+0Azk% ztC9PnJrtR@12M>h(4K(I&wCB>5VR*D^PWChRr)+1XX^Y*F? zvH|U7ku#C4k&VbU$dW?#Gb&-w8^^hh0ti0+Y%a9u& z%aP^C3gm{!O5{e!D&)q+Tn$-^Tpd}5ToXA3*&bPsTn{-Nxh3*jxnDw#Z4y6_AsW?U8pPcR|)8ha(%1=|t7y zl8J1EY(%!^7jQ$_{+2_QA=@I$kt-l8knNF`$X$?C$Wpw(QzKg;#~@oHYmmz!Ymse{ zb;uQvQ;_YE^~hb2(~+fk!T1)r9C9JDEwarpw*M87?U3z}oshdAE0LvmL8(G6hpa}n zMUFwXN7f*BK~6@N%GvSSiChjj71%ZmeBNy`Zk!^;v{q2Hmhb(ns z>pLNrLv}&7MfTzGTeA28JU((LkB^+d<11MFBpx3*na4-o$>X8EPoMV?|gWFA>%Qa-wC*%q1cB#h~A;Y z5{&tZ#B_sbNx%}0>%r(^SVD1q7#|BuIK~gh^y28KU0C8V-SN2n7)&Pww*#YGVS%3e zu!M`F6W~3Iyj++)62n7q|De2~#9(|c#DuZ9ti&J{7>5dDhzHPd3v7XU;w*8O@cSUB zFV1vi*Z{OcJ#nU^!T5a%)E8$-clrc_El_WOJ(1bySZ~ww4X8KHbhHD%uY&pm+#lmZ zJ#wa2toF40;wk&k9{+5CdIff#AE;lzerSh!C+f)hx!Kl z%eN2p&Y2RA5A_e2Zy)L*^8`$1Jv*QKjkXVI&U7ulUl7lk z)*@c-62x*T=E>sv#SG_{d3-p}oM|oP`^84{dzp?KoOiGvJl~Pxe)cx)CyanMuNQ3m zdT&!X!g&hM<#;`Z^A(t%7jWJJ^X3m`1e~R-5zeljO z0F2Mt6L-^bVeLcl`mB8@wnvHkZ{9w@@lu)96DYp{G^AwxX6JQrJ7#_!c!+IngqR~% z&x+4~R?pl`L2_4_A#ALtejwcFk4tTxtZE6R!+t3I4dU) z)A<)C))Tg$=J{axFWyg{FFxj&<;&M}-mrWPFy)iw%hxO)P~VET%kt%I$~Vs!Zy#BE z>u#3MNO~<%eCD$4cQ@4^wtX1?%oe`=;`R`>UtHhV_B~AP9ov3!eqjz3sJ(9V)4Y9) zqrbe64}N4>K6;z-$;!WnsUEWJs7!XYo!+K#)vWygc{|Vo@EXdt<7cWrY&*s06WdOA z)Bc;MTk^O@iY-CO{P(42l6n2HrZLeJWTBfFK2#SV0}0e zCD-Sz2wY!*)!lSldHM17mTj-6X+K$fKT|zo@nQ5kTUdNwv;08%Lri`a7N4JO{JN-@ znH}P*%-SK?dk+kdbRG@Tc0`|hRISCz8&Gu024AKq%R>u#uR{CAt#eaz|s zY_E^m?>?}~wExA|`>ch4dI1Z6Zp_Yif$On<-$U0;N@=|0a@-1W)@_l4A@*U(D@(4%few&8Ka^=6*dXvI6b=`cH{G4ecuAW60bO z$o+(&Xy@k*_XApC`~zX9wd1&W;!ZOIoXy@%S_ZxD*;!d=0#`vko%aGHMd3&6W zd>HL-k@p~TKL@`~EJXW4v~xeDHL^_%D{tI`Um)?uRXh{1)xEkqeQZBHN5( zImqL3=1)AKOb? zWFNHqB6GiIE93yQ$02h+dU@nfv@b_aK;DL&guEX)8JYjC??nC$?WxEod3xyA<9^pP zv?rlmiS|y&>1gMENbcvafcCd&=l2&9T)#Ei3(-Cv*$3NGJ7k+UcDxQC+adG>x7% zBHEqM-WQqst(}lv&^{JfgWGF>?1T0oWZo~K5^@0A@i82oXoBUhGTKAYz5+P`xgW9( z#+M-{p`Bl+aKE@S+LO`FeyxlB-fhsn6YUAe+z;)FoQn3D$THl16=V$_4}zSA@#iC_ zBM(5f!}x8H-=cjIatfyJh+K&F5agX`cR;oo&&rQIJ)?en(5^rZMf-Z>1Z4Kqj`qVrjz@bk@<3!eKem5Wk$0kf zC2}gVA95P0NDrEcR_xOb`7!$?VXVe(VmDLiutXJY%`JNXE?GQaujk5#;=F$g!U20 z3fx`?WEZqgMNY!?<;Xs0ABmiR_WH;HXjdaUVfyWnL(#qgS%W+US&!*8MNUS081hc! zXyjC6OXM`C;_v9*y1(exDtT-YL#u^eMV|{ITdw;r4L!nsAPwPx;N`N6;s5<_ym|%sHAqeK6;7 zrR?yO)Z7kFIn9|r<>uR;WVXNXw39sz9A)+#kcF_%2x{jkfIrHa=ANg|{4d;F2Yx$v z?f~=UvV}d58c9=tIaG_&VSXBTD!>-zrx|4`XUK~)EoEL#%x^QAKILW$drk)FnRD^H zQ_K#Z=60CHxFqx6LH-;#61`2#4-|q=9r*K|Ao_HeE$sQtNK<|pb8jV&KgyJUW-s0! z#$l%XF&=9=&Wxi++h&H(knjRj6+Pvk8!A}-Y||d&4I-@%5?k~bFU*$KgO&) zVSm`%XT{r(G1XhPK0Fm?3*-1w_6cU`!E^RtGX}p0ti=}QhYB;5C-WO}uQT|a!B5A% ztjrG$<<09Sd%jv+e>n4Yh%tQf?ZI>Y2vdDz_DFHAHi*IeAjSD(ewyO*lKCx*=VfF5 zCv!Wb59cjg*mG^})doK?>_7LO1H<_mWU9Z+56HdQ%)bup0xvJ-=O{j38N(-ASU>c! z;+%94!u)3;rt)I`u5i=&!Td_a`R9Hg9s=x4Q{m;u{A1y!cAWVYxi=mB>fm?eUUu+X zgMY60d}RJX?o9_f_?`IHfT10PPqr|>mbsmsZ^d@tNK^e|{y+F+3-b%}-UqBdf_eR6 zej?sW0qn4S^Z1Z{aeKi0c*Xf)erDdQfllH?w+!j?@?y+;J4op79rFb77K1ZC<2my) zlKH85FA3I9!kMPd+f(M}E6xw|;}oAijEnb&F?_Ox`L%g(3+`8jnbWzQ`44ys@H`)W zlXwc;KVohNe~GyrN|fh_`xA;8{OB-iINu&Wf1K$#34Ixuh50xB{(H#6<7m16Q+yU~ z{`<-Nd3@`zzffO!Zh^ty3$upv{6HQc2K(h^e%j*lW;5=aGx+^^FBRy=0efFue^@^N z-g^b?P+y9VC-eKm?2v3>{RCo6zu&C(uut>yF%LK2U*^}JKy$$s=6^5F5Azp5d%{|n zVrFL$XTCn;P*Z*w!wl(cVH{^_9~h4}{eCikfARKlH4qC6iNvxDopQUJL~2!0A}v!@ zA}wntu_#+#Vqxtlv9NKLSlV=uSe6qcmbN|;E8G4OtMbDnRu#e|Wh%r=%2b>wDN{)+ zDN}i)q-^E=lCrYXlCo89Nvx}6O028qO027uk=j(VliJj9mfFO=Y!==fa!!}z z>Fj#illo=`Qcfww>7`gQqd2}BjcCIT&z8UwV z_ChlrLRpqrTwbt$N;8K1CYZ4|Wvv;*@z`04^~lg83G$O^#*kmhOtw9+!~Qs#F>K!l z8G1m${)d_|tgkg=SU=T_Vf}PuC{Nh`LS*RS1a`Ywy!`u$zCA@L4lrX{6(t&E=+OZC zlY$IA0mSW@G1v>u81iQ~o0snZ(buXpW7wZiGln{^Gh;Y6^k(cy`K=kl@sQ0aP9N%{ ziy8N(9AL(s&~$kS+^Iy-|8U>T z9-!)u|uyD?B2LbbKhtS_)rZkGUl#T~ia*_1v2=)uEdf2Soe@~CS zD<_2JDTby9@BaDc^x(>c<(|JahF!ajrdOo!?i#rIDZS5-Qpr+dcRc@eT>c)9-J6#V zXWM{xE3urGwzG2n`*tB5YQsn|m&He*^!ji|3MrQkhx;qI0%rB;?{;LD?SHSuCGBv3oj}uzq`8Itj-@$fOUZa}wGHPR%NxXiJJndRgyFgwo*VHu zNwH&9(hjv6atv4D(Blx4U5l5F_iy4(3tBrUX*fnuif~>-3&obw@gR?o7Ti}roYHpI{=mD){&{_P5(aOG zf||in`1g41olkP{2tbX4rS$gT$r(IjfIVTg65_+0{PA=PtbY8{dT_rDcUiDL+^d&P z7g}vO4TWPd;eUt+r43J0p{_&Re=9fEUPCJhN2IvEm)0rJf|qWd;KRn)JAx(Su`zA*6KmqReHan zTv**@?^`HshbM~g>j(FbaBPap8O|;EHD&b}e&gV24%BV%<(Z$4#ZP%*90q&#U-I`I zp2I^P;hbje2&>P<=L0-xhq}YB5Fl4@)xft0Prl*3dE@EcmQD-G8R`MNb&SX7zvJ-C z!TgsT_7$E)z}8s3V*A5?U*HL?T+E00*$U5};AutaTtj&Aae(IyaJI1H0B0lAaONTS zPrp;;3(At_j_*zyHp`+d|;Dz_Et1g1rtA&tB%? zDQRad2gK%Q8vOQ-k#KJ$yuZVP_L_ux0O8IiOJ5AHP{F=}wXCC61si88OREYpnGGKS z3P({QVeg+O9;oM8sPQLL{%M@SzcDQ=Ww$YzOTXV?n+UM*gxiw}VN^?M%()M-c;@CF`MAXQK8UN9d`~M&O;Wg2kKZKUt@$@|O);g%LO+&b zalTHo6=bIGto(n@-~q4wAO}ZH>)*R{V)g3P^G&?5UygO-9wSX`{5dSGy{4;)AstAQ zrw7GlLH}D~0K5qd`hpLn_d^am5>xGlQ-P39%)JBQpz0OJ$Aju7ET1B3@AiqHDx0;l zLG|N)i0?PiXooKZHje#$i5PE|?K05Jqep)MRrMXQ98@yEdL^jg{JvG7#;yHVgUY|; zuK|rYziJ(*uB^)j(3Fc0Hi|4gp#zn_n70X3Z!vJQs38rvfNHD!DXK=Ax)nInW#%?e z+3{Z6L6x(r?*P>&KM~dNb<0kXcaIg{r()Qp*bPkcA*y7}i9NvD#nbnK%I>>~?^)4} zv)T_FGy0OKDf{Og0Mh{xa9WVWcdj!G_!ctM?iSI>KO!OA(hq~bwQI(n>OqUP-4dNSz9T7F< zX{BSplImfis-@>eRcx=DDu!E55LID!OH}3SrpF;%8>tahw?AD}T0SQrTsI;~)EL8a zQB#UK{tn@W?8Txg=4XqleCK)+!eeZfi7Lx}Evjx>*HaL#xxY+Q$%ogX>dtmK4dE$+ zw4&sxgcdRXcW}sIoVQMOAn`VVq=j4&rC-Z7HhZh@Ys&jZ;O{L~Ru{MSfjW?QeOa z(&Km@){`%BXKDx&Ra2l9RV_^wHPiS^RK>+I7sUOT-cnRU-2seslbDv%i7E-WB&uT3 z2T_&Vt6qfl6x&@yRV^AWsy1M@sLJxYMUB~di?Kt#sD=gh;(Kva=|ogRgkanMpRw5g`z4}9S~KPaaUB8Wud6@nswRxb*d;u z)#r~AHS^p&Q6-c1h)V09s5)J)s4-P*itTYqWM@$|hlYwOc`-v&)tAkp#(cXdYRa3p zq8d+?zY67|nchlNb+dk=>Q2Xr8Y8R})wnZNRQZobqAG;%Ov4(8@AXm6a1%8~GfGrr z#2ismy6<3YeMMCLZ|_7^^s6Ag_eb^6nQ4!{qAGX9h^ok0#<=NWQ8hj8i7E@o7gaK# zrue=fwQDD)l>$VS+)5BNX6kBDbu~|jYFPhBRAZHIqAKF*+=Tt6=aHzY?}4JKn@klo zv+Fvh%9EmM+CCB0P^E~4KdU3YhsdzHi>NyHKv6XrlSPdgzD88-?c<^v+h&NWn^`ET zDzm&n-2Q|*qAILfh$@@!Dyp(fPf;@y28(KZ87gXwSAwV--8@lcxhq9gblEPdamrCq zRYxv}s?NU4>=j;$s&A1is?0-r8@8|PFJn5mfvAdrR-#J!b`#am%~w>NL!hWJmSaU# zJxUN&xoe)N>X?RN9Tm9`I}>Q|lIVs%rM4 z#w>OcRVL{qsv_J|RKv{yqDoqfWc>fI_AT&njp_dct@1w3^dF zm$X`@RYY|emD-?cbc-oPmLe#EvOzJZ3adojg0k6ek#!ySpcr%s>oVxt+Qt6A-}lly zbM|EI@ALUTpU>&{ec$K%exK)g&t=Y>nMu!&D~!B&p2ArFD-?$2-=r{k>D>y`k3FjK zqo)-%=f18mI`Siht$Sw_hGzV%Fg~+L-G4P7FhpT`YMH{|9+MSj-Jc7{|;k6y(&K3 z{q(WZ&${J(Z5aeTv=b*Z%5@rsh2N?sxw_bmzjLJMfJocK_!`gWW%FzweJ<9No*kV@B;e zdtN@=oib(GPw%yiadZ3Kcl>!5^mlLV^VzI()=Y4RAN~7*na{_$lh4^}*@k;c+#~Xq z=O4LzlDpvEvwz%Y*zWH9+mC;F{E6e-@Yt<=+YT&tCqKWi@QIp`yFO>^>Z0-j_sx}8 zJ$%HKL);s0K6YK{#Lp^E{^|T)pPVqm9dN?Dw|n0-$t~J9!=V$m~}&)!n`Np09epx1am?lx|1Aw{@!f>~nuhfA-xF_ugJ(FF5?Aeci_&+vD&R zhfQ@CTwH(M*z%rk=8%sIorOhaKaO>GuKDtz-SGd;BwzjZrORJIePDCN?Yt6pRuDfFGMWfozoaTOf@%!_i z>0RmGUwv``u3mf-q`2%MVE}6mhv{>`3l{*hN6 z{rAJCx>Z|`+e9( zR@nuUio$OCgPChn{lBT)aP;TBPYCYj_I+#bK8Z=YyD#qy4td-Cvht!A4>@o4lF@GI z#=2RFV|utX%N}@r;+~~$(ch=Oy>aUl_s6=^7q1>%<{m%m!)F)I`@B*ge|x$0XWlk` z?(`|{?E^wx$uzsRx(4BVQYIOZ|)~?j?Jy>=is}ANTv5 z-p4JzwO_YSizl1&XtFyy7FfNZC;tDU1#7qe zv3$B)7~a2k=79?LgrRS)KH$I^?&K9ykIg?}n)`mqV@FIbU6yK3yRk@kli@v#k$wBUlFRJeUsqdcdv#+ebc<57e+$Co={d`RGZtn2eLkhOMw7+}n zO_74*Ufkb}M|W>Ka`La-*r>97+s~WgzWP`sym{~#_uH>mp7ZsU5%;sBwoN_l*}3jf zJBseQHg}F&wBgQ|-n?+O`}k2$_lmz6b_<^D=(qGQGu?rsKfbnPLZy4a1;_O-eRh<4 z?uvKjx;Kt>$KSR8Nw@C&v2w4#H{I@Fg`giNU={e2)e)*p!mj4iO?eiJ_Kd5|e@WRSD4xb^c8X9%@=%WQ# zrtT0NHSXmN7^ZnqpnWRF`Q({tyMW`(;DyXc51{@3S359njn6JJ=>NC4V}?f^&W{2^ zW}=PD`ALjh%R{3DeXkyQxg(;gu3!SD3&wx6f{UY=c-w1~@mJ3MjQhUmEAi?q%fg98lyxLS{gBO_IQRYNs@ zf$=x}0>91hLx#7?V8CF;=>K@3j>9E+>o-gJ$lU3LtsY6w9EQI~6X2))jPlXa^@G#s!?S!|Big0^wkqeBa^YNR^E{`?dKpie%qN05QRtUp>&kd-s}=qv+HLG( z`(N_1x{Sr^E=}gg_|oFwaSdpam+|m4!%>=n+dDP>uer(fU~I;z5PCL_YhOO z{;#>o^`%K=lPQn{<6EOoG7+dY`>I~)L|^Y z^M~=JMNx;}`IA6AKci-Y@cmzNYe77}>rRKzlyOyVO`W;?uj?S!oiV9jCUk5J$>UnE z?&vS@B8%raNpKQAJgduNqeb{rX#2e`P|M~Zk0a_!vmA~^PnhR~?yhondN`8L_!Zz- zi=v$n{axeGvf45}^`#}iqXn=@Ued!;B>Y3o7U63XZE~z0+y9FmkD0(dojH}E-BnH0 zOd?;u^E2bg!`99@Y0ODbSH$7CH1ZpSKPlSeQNx<7i@MUNQ;dzrcen=kBk;F*IFe6Z z;18V|VYI8U)nRKA<8lt$)b=~y7*Cp9FOD-F-_d&4i^rZ^Gx8$X{@d{ax6&ied%RF9 zX#91^bth^`{g-+eFL-Zf?iFbNFY7>Uzja_dY0M{tjd4<#QxE-^h=<`_M!kG&N#W0+ z?cF!U8~?W)cL|FIa|oEeJf4`BG+Q6nQu6%jv-3hr<~g;9xmerQ=sV~iPIM$Aw%kGDtTNg%tMEIkk%_-EdCgUny z>mZ)!e?3il^hjk)?zI;{;~(Eoc}c^>M#atqRILh zSDMVL33C#N6UEk*k>4QvNzvvUYFLwTsVhy!b#Uxw;BWJAB%f;>*wm>}hW3AbF9}WG z*MCn8nMXVB#S+ksia0U{wz;Ma!ry}SFXnPxd6js<^%*FX4U9**R*rljz=& zJsipB`BDaswQ98g*L}k|jNx~_Fs?M2R|@OX1b>}}Bl+t3FZ}Ij`@IjKmerQ~hx*bi zhhvdiT>l@2pIaBk_z~f+M%ynwwXC*`uk?ks<#4DObDE%6C-enXHC6q>-`+)hYFTX= zpZd})hhrJm{|Nltx-eD0@K>YlS3k9^wv4azg|_8zD0~v?hhCk~7gW_$^$UM{7xAfO zwPk$jOS2q~)nZQBqwsUUHZO);FHCY#RrOCMA)yNP2 z1`o%}PYHiow8^7}H5r$>(q!BQ%n3hMw(tjW04l_ui`FTtG6c(35$c=^TPSSu54jwub}lyRvmO~#EQZUX+OhvVfp z2!B$v$)kof8JD`!WZYKF$-v*{;duFhCp$HYMVmZoSd($7D^13Y*W>*^bRr%tFTYOs z8$_EtYFLwTsVhy!O<_(N{uU3%%ik&dfv2+ds9{aUrLHs?H+1Pdry4q8kCvAo7ydfY zCXX7{WL)Y>lW|j+lY+m=!}0Pvgny@KlSd6}GA?zc$+(fr<~db=ta3uwx-#-(!XFoH z&Y^}i8JD`!WZWd?w8G!$;duG&!rvj<0@u@G(ayS;f67|EM@Ngub@mqvHg|=UOYFTX=pZd})hhu5X3H=%M zdpMG>>IcVK6m7rw)Uw(#KJ}$p4#(nGp?>%i9**Rz`h`D*wqJZ|S#24g`qC^%jWwYD zt*GC_k$hD@IM$+Q`^9&lWwm8|>Pxd6jx}IT68?mTBl)U+;ZLFM7oS>ITgIopG|S;w z=xWseH0t+oBwy7JjpITO1#;3kC z%i&n$8r1&`>i2LYU)2wewJ6$t@u_9CWqj&OvmB14FeeFr!o!h#Rlo43(Dr-oKrO2+ z<5ORnf3+nf9Bwy7JjC%WBK`)R$&C9E&4<68?mTBl)U+ z;ZLFMeGhK6thS6#eQB1%u?*{f4)uFDlCSCq$66F^?|X6jsAaWfeCkWH9FE1VNB!_8 zJRHea^$ULrZSQ+>t7WxieCkWH95wcP)c-u{_i!X%)enxfDB9jPxd6jIcVK6m9P_2KuOFwPk$jOS2q~rEf<4@FzSR$yfCYe+q5yvj(eWwPk$j zOS2q~#cx6Vub_SpNAgwu;8=^I?S1AzAGNHuj8A=Omcy|O<|N@ycsP=;>KFbL+TLdm zR?BM3_|%tXIchA4`d>x;9**Rz`oXalMceyXi`BB)GCuXCSq{e<5I+fj!o!h#Rlo43 z(DsW@Evqf#Q(v0pa4d8i>VFOOdpMG>>IcVK6m7rw)Uw(#KJ}$p4#%1?CkcPT!;ySd zzwoEf_KQy~t1aVGUz+7`EOI;Qe;xIEIFhgG2gh0zZNK=`vf45}^`%)3$5NP+gg@co zNWQ9H_)}>6#iy3lmhq`C&2l&vy94#Vf%-ih$yfD*V=aodUwmp=Z5f~X(kzE#8O%w- zpYU)bU)3-CDYX6KQ_E`0_|%tXIUK87kNV$4{T`0wtNOvQ7Dd}HKDDg2j8A=Omcy~& zov0uFgoh*fs(#^5q3su+T2@=er@l1H;aC!LLT{md4@dG<{oq)OqU{%-T2@=er@l1H z;aGSB>W4q!;Yhx!U-(mK`^Bf0)t2$8FU@i|)`~fycGU0TNWQ8c9BWau{o+&0YRmZ4 zmu5K}i{6F$;ZJxtlCSC){uJ7N@u_9CWqj&OvmB14F(>pk>i2LYU)2wewJ6$t@u_9C zWqj&OvmB1an@~Ue2@gl|RsF)BLfbDswXC*`Pkm{YqsHz={qLZD4@dG<{oq)OqU{&o zftJ;l@u@G(ayZt2IZ5~v9**Rz`h`D*wqJZ|S#24g`qC_iW1)Lc|GTK)!;ySdKRDK+ zX#2&dmerQ=sV~iPIM$3gN%#{Uj^wNQg+GP1Uwmp=Z5f~X(kzE#kw2jRZK&VFk$hD@ zIM$+Q`^Bf0)t2$8FU@i|mcpDQ{0R?7@>Tu9pF-O&KDDg2j8A=Omcy~wy{P{^)bHU) zzN#M_Yf-fQ;#13N%lOonW;qTudSc{_V7oS>ITgIopG|S;wv>ElopYU)bU)3-CDYX6KQ_E`0_|%tX zIUGx4PUu6_@8L+ksvjI{QMCQyQ_E`0_|%tXIUI{WfcoK2csP=;>KFbL+J5n=Wwm8| z>Pxd6HMR-$e}wuy9LZPpgJUgSTp7%;ZJxtlCSC){uJ7N z@u_9CWqj&OvmA~^9zy-wQNM>H`Ko?!tVPlGi%%`9E#p&Pn&ogTg*i$16CRG_tNMjM zg|=UOYFTX=pZd})hhwpaQU702zlS6Fs(x^+MbY+)Pc5r0<5ORnr_esHWs(e{f^Evqf#Q(v0pa4h&J>W4q! z;Yhx!U-(mK`^Bf0)t2$8FU@i|mc*RUr>Nh*38K3&nEQe#! z$521~2@gl|RsF)BLfbDswXC*`Pkm{Y!?85xgg!(49**Rz`oXalMcXevwXC*`Pkm{Y z!?F0|s2~1>ha>r_e&J7{?H8X~R$IoWzBJ2GV^5&|&r!dJBl)U+aI8hq_KWX8%WBK` z)R$&C9BaUwB>V{vNAgwu!kTu9pF-O&KDDg2j8A=Omcy~glc@g-)bHU)zN#M_Yf-fQ z;#13N%lOonW;q;7VNMeMgoh*fs(#^5q3su+T2@=er@l1H;aKb`)c+;w_i!X%)enxf zDB6DUsb#fgeCkWH9FAo$CkcPT!;ySdzwoEf_KQy~t1aVGUz+7`tnQDf|0~q*;Yhx! z9~^5@wEf~!%WBK`)R$&C91FIhe)tm}j^wNQg+GP1Uwmp=Z5f~X(kzE#Nz4g-jru(t z$yfD*V=aodUwmp=Z5f~X(kzE#;Xk2%_!AzE*38K3&nEJuxPLH!xj z@8L+ksvjI{QMCQOf9F8UYRmZ4mu5K}YsQ=;{0R?7@>Tu9pF-O&KDDg2j8A=Omcy~) zKcoI{P``&G`Ko?!tVPlG`@JW%thS6#eQB1%u?XfQ;ZJxtlF#3Hwg`Va+Z+6Iu$s)7 zCi7q%X)=#mb&t`^Bf0)t2$8FU@i|mS+8bNBtg-#B?0*kO^40za$65q!zxdR$+A==%rCE*| zdj|ExU+dvWKKDbD@VBAeRSs6uZ$B`OG?_;g@+jVkx;z}or)C%&YgOdm(%IiN4lS!K z*Ma)dEQe!tn9~S<+{2N4#%~t>HnjcXQ_E`0_|%tXIUH+c{Xam@!;ySdKRDK^$oHwA zT2@=er@l1HQDe`de)!`aj^wNQg})7LzxWQcthS6#eQB1%u?XfA{}Xy1j^wNQ!Le3F zzEAzsvf45}^`%)3#}cd`{IcVK z75P5(Q_E`0_|%tXIULKde)!`aj^wNQg})7LzxdR$+A==%rCAQgB5kPuN9cJtlCSCq z$66KnKJ`<}YRmZ4mu5K}YrvdF_~RaqIcVK75P5(Q_E`0_|%tXIUI}q1@*%p_i!X%)i3;QXlF#Kx(VTHK)Xfs?VOG-bYmWF+4KJEpZ4&q zE_2-}eBRi$7V=}z4(H5r0@%7T-k((oe=XWw)kF+f|Nd?D z@a!CFwhNy(cC-tBDmkGV3h`d{GH zgVzpDvky;4*YD#q!XL<;<#=l$ms&PgxnHO+&2l)_iaFKL3uEibcwEGVzaH&o(YN!c zWwm8|>Prj0=zmYl)#OxaS#4R5(ihs6 z!=Wb3X@Xvz&=*wIB)?VoQ=&}*HLS_F)RiXVrZFd!H_O@S;YdE~t^mhc6m4&8`lw~K zWqj&OvmB0vUc&QF_!AzE?RUjN{4@Nm5Rl<=oTn>=b*lly_X(q!B?=7jT6 zKen!nwNwdz4DEW+xAUlFwPk$jOKa*P&t?zL&Y@bB0u9MQW4xo%%i#bW?Bs^Mzu4-u!{uJ6fMc;C% zWwm8|>Pu_tBF|8-Y@VG%%?jc3#%ioIn)gF?$q$cwlT@ChIRzpV!^jM7I}PD3x5LbB(|Mm%yNm;^gBKoM_MCz zHWyicn}=uTP%|xjUFDGKV!c9rvg2D_=1?Jg-nwj#ivJq+Ke$zbZ*?q^UoZTPqHQ%S zSJq8kX)8Gg`^gD*YJ||P!uB8W%_M62?I*^O)&QQ(B`aSMOY+t6FMM6) zU^O|HG2)n$6!Wa6v;YJorp)v^2z1r z#&yEqgmwyBs2}zNwyuoYYTtn%^I<$`3Gl2*-cAqCa+p(4#APnh?EQ=P|3T^M{>97l z-oL1LCV*Y9xQK6K%XMW<%)jv$czkxm=R~c)z~g&JzF+M41zt1aR`j3c1hI8x+$T}t zkE7kyy&yHH>32RcjxmT{%YI&EIf9uE1k&LsEUAl(1^@T@kEfnsp1RiGWi z=Dp9ceroz1$BZK_4W7+K)>ZG}**Vlq3SU<_SWV6gy@}^)nA0NWSv`wf+nvH68jR<4 z=y#=W=TY15{9rt3G9TWv@cyIhPGdP zYFTX=pZd})hhu5hUjjW3NAkJv!{AtpqTN*v-bi zEyABd+wc32)Uw(#KJ}$p4#$$16B>eZ-NTW5#;*X!S`=-+_|&r6GCuYFjNAs{ONuu6 zY3Ny#dI=BD#w0h~j{86O@qe}3ssDkjCor_rA41z3o0F(zwPk$jOS2q~)nQH?dicNJ zB_*rP`1Qh{>>@t3thS6#eQB1%u@vivAODxUq-3>K{rG?4t%cC`tDjm{TgIn;mf^)W zIemmPX~mMniZL}O(U+Vv!fBm8%#5A7jAOA&r#T^@=AF81OgQY+VJv=DcQcl7GLGwf zvLwg!SJrTz6QAKEa1oz$QqA!zjvuoxhwy*RtJnNV;qVD3{s!xbegNZ>4xGPWO!a~L zlhc5)vd*ysIo4w5Y2F-;wPCEd|E{@5a4daEmfk{+b!3grQZX_Z3&W@5&QdW#^>Xek zHMcBlY>t|X|L1n$U~1U=h#dfPit`TG-GF>?*M63iwAMu|k znz@rX=0xW?bwwD{@=o0%T+dgT{+Q+X+cNWaz%d(2m$nSfb@@9sMkWx`-OjU1_qpgHTllK1;Fy2 z&cMC^`m-UXGd9ykUeh?Jmr_QqRlo>v?i4r+1#y zyS%{Zy>~$-kj{(h`1wxy!4b~jhekLnLeQahO+fXhU~DzVkW&_iue2*X^SEjlb1+wO zb=`%iy8v~g{`t16R(+}S~LdCrW zNc-OOIgfTKkh*688RsH1ej5;{r&ChU%_-PBFKTNjDeUeP9?&zIC+g}uD&UN&DRhQo z?TWE>1@rUb4(RV-4jf|B$Vfb%KJF|miJB<#S3GsH|A5v%+c9(gb{=LCUvXU?Vi+e#sZlO z{j^G;s)Or4U#~y)`xfVBt#Q4H*-)$JzYL@eI!X6SMhBeHD+-+vH3d!y_D$jZo@wUV z?2~K8lWW73oySq;WUY7IDO&$wAoC@Mb_;OVx{Kq3as2jqyHEW1nC!KRi}-0%&pF70 zmNfa0Lp#^T7wg3sebw=neOx-1>HXe%ou2ywFm|r4rx{557|43QG2?zUltITDx!lTk z%dR1W6_uFZdX zfio)SuI{}uh3WiM&(9+%UJ=hM!71YU? zzSA(x$wR*g*b`W6`ei^|Wu0;$|4-qF=|_QhDRdSAdjV@rKLNzcva=e%PXha) ze=iWXUrvkZw*d#D|2l9GFm3u7U@`hX0!x5_t98E^I28Rcz+u3!=|_OvBXfWwfz`ke zum)HPi~~mjR{=)@>w$cIT?^a|m;~+)ycakY*aGCe!&cxpU<$Yga2s$uumd;&xC1y5 z=v*_+nFJ^T?g=ag;?nAj0qzA119<~79mt!GDj;t(765sZ8w2ttV<~V7FahN2!D`@C zU;~gx*gD{Tz$V~y;6uPlU@OoCz5wLW+zyNYw*&VFW`G9(e*_)~3|u?SnF$;K{1q?+ zJP0@ecrdU6$m4w`a27BMoDEzAJOo$^$ai+l!1=(< zz{7!UK;Bfo4&+UE8h9k|3*b?}oj|@$n=-R&VfO;1cxz1UwP=B9Qm5Zv$(Ae+8Zd{04Y3@Fz2#kMngY z`U8Qd0!xA9Pc%3c7)Sp^gUii0kvDqh0apN1uU2H?Wya5OY0c*KvEVd)-H8KpKxhDV z1Fi@1ylw~byxs}qv&y3Q2z6dZfIP2bzyNRskmq$1kmq$9un@Qn$n!dQ`UrJihk?D( zp9$o7odEK@ZUpuP-V5Y;od)u}c9xG&_tyh}Jg=*OJg;kkgMq7nJg=L9Jg-y0A;9fG zp4Y{{9ih(a3Lq|J&Kw{sjsbaIuK<=k;_T&+90V=XDK`=XCoj_g(7M?T0IRm%`$o_r6GlAPoe>Cn3&O-lS zU;?-tNd2pTtmg(G>$?NUdN%@Tj{a6fSh|B zkaO<__5f}+{UMiVe*#GUn?TMluh)8i19D#XOEqsOki30>&=W`CkpBeFUWMA3(+_xLo&71=5DD(fxgZ zw9fm}z^?aA8FP|I+mT z1*G-3UhDM-l3x$x>)``H>ONxpC6f!CvU0p;WAp2XzyR46<(4Sd4yy zS^v|o((%6plDniqufr`s*8dEUuex->&<%V{aJ?mLcaMmAirbcQ&ym!A1uW#4_wTIw- z0Ga*An3KgR>6hc=FUCH>d*`&#rXFkKHesLa_k9kYpYZiMxK78P4x}Ar`t;L!0Xbhj zXQ6&cpKg3k5oWx=8eI$dHr_fl2UqIsNmT{&+snfA2n- zUg^S^e&!Z%TJOXC!Toslg?OcyFZ+Fm=Q_hNr_cOC^*kjEozzAh&%r#}Zb0szoIZI@ zA3P)KWB9VZYRqdrU-MoC(!MtRl6`tOqsk9*`sU1Z?6sy2{C?PF)D7RF>zWSa+EkhT z0w9mc^Gu(}z(&?`sF#s{2G~LEOwSkKgg84)!FF zd3+7z@jenadCcQjAoU&xGXAGP#vg#2KVD}l${iK|WFYUSF90%bE0Fim?LfxyTaPBO z9`U5kZ&+^jO*KY#_mKCZ5RF0dE+OMqR~of36N*6V!c z02#m9^lN}z|0_+O$UJTYGLH>F=CR4(Q$QXEe=~g|`TqcNe~h_P_ldM5Zho0xU*7z} z<^mc2d?4$;AISJ$0jV<^H^+>77Lak*16hCDp?d%S6UcS$hnwaiU=+yxUkmJN9d?R! z2%Eg71DQva=`R4P^TG7b12Uh>fXwH5AoIE1;C(=KKA8TyK=MBYGOqy}be||KY4Yrg z`vTfrpjr>0S`VOF51?9)d1gI;YCV8zJ?5MB0IK!Cn*_BUK(!vguGS-TMd$S)Wb&H; zWF8f!KNHA2mYF`0`J4^pdRz=-KGzt$1<3Vy-t>v&zXfDoxp(P4Q5rtF(Z|OEJvtYt z)&r>41E|&msMZ5-e$?>+ROwz~zjQ>xdS`WM_QtJU!>jCU)J*vcd1WkU!fXt)J z^vi+F<5<%tGM|%y%;!uX^SQv_l|bh6gy|E>e-_BRc9=d9+3I`+Tck*=5xL26Uo0F$m`h4rcacXGN`K5;x0eDL zHv#0juLd%H1Ca680U5su$oLNdS#K+l>;D3fd9(vn9zgDg3{d3*97UzcIOF5R_XTd`l~ zch~-mssBe{4(0{!(ED`&5ELf_WW5uBJ%ANJ);kl(dZR$ry9h|D1+w1jOrOYlZv%3_ zZUnO4#|%CVWWC>-K9T&NfvkJHdHp0xOPl(l2kFsEfXx4KU^n3RK<2;q!Fqo!12X@6 zfO)`AfIWeus`UOk7RclBMj-Ql7sxy&&(izp1R(Qn0CGRQK3ngnyhHSU8UbX!i-6oe zD}Y_Ce}`EAkhw3M0A&6ZK;}Oa$o!)~uKyw+^RERm{}n*yUk3~T*8pjaK<59n=@VJU zD?qOQdqCFlnZdsUx&EVY|Hg45`ICUG=NQu`N(=6*>#GCO9tAT0&w|F=Nq|Fgk@8}#~5 z0dky3{((T&5jTCJv^t!;%=a6f#IT7&^m-l#WIk5`c|2?eGM|3|se2SocIL4f$aoI` zxsGoSGwV29uj6PS;~x*?`mF?ZwLTSMePTCG0~^nEfn1*ikol}O;|)OO^SJ2~nb$Kw z=JhI&dA)D&b0GKc;G6U~k^Ip><`*@6qO?e<&i4Tz?Moo@897R?&tX8W&nh7Ec>+k? z!K3y1%mgxz(}7%{8^-AMc^=5){bL~Gm+q$5XDYC(^@)k~iLTRmE&?*2T3|Qe3Nu~@ zWIp$pK9PAn0_6H^0WzeJ1~Q-fOrOZ>!{b2a^$buQKL+0iGOt3jZbb421DW4U(=Apkdr0c&0$n|~%SODAsWZgxjUDw+#>W!M?a}khnFExE4<6j44 z{M&%6Yoo!(fUNfu(sZa*I6d7g*wJ5-UgR6nP>2}o--eFuJ8 zFCgcu=XvIPJJio9$aMMdTXx+SmLc9IEDq~U<8xu!7eMxZ1oFHIT(8%E0FeDLK(1#P z$m3_a>CXWM(60t^U29B#1(4@a9gyq0#`M<#d!ye3Yk(n)Hv&t6 z>rMY5;Ar$)fn$I#nEo~(E+tL}5SI>Thw10yz5tg9CkVtP*BNH|6Mz%YuK@CpoeAVR zF90eF>iuvYkai=G$H%=uu6qW^^_bn%yBTs!5jy39M7Db;%-jy`~h+GnLv5K z31SV#W6PbR^<=-q^O-=>tX=b^=6q1q=zn+~aN~JEj6*L1w6+;@DoiIhSFiI-Ah}1H zJ~_0%0I4HCM`7%~;&Yoe^qWuAIxhlgJ%=6j#l0%;GLzW$zH!LHAMiyQPY$KO8C z))?e(CV0I41xVWlrd5}Y!2vm89?@Ka9SMeKs;-@|FBO-pQiC2Auj=u`X_~g*$ z`ow39uHv`&#E%`8U4O%6o%M(2>v%0d+BVZChjug2TR&rT^?l#8PyDneezS-lH0ysi zkhaD2$)P=E<9ogj&NyAILE!5DJPvE3*=rEPy7D+on)M!Wq>g_8kn2xBZJAwv#uwl7 zW{jM^-JHJ5dqqpbMNW7}t}||X4`=9BoYO0Ms_SAdj?2i=_#P6rhY-IMdf9zk2QkmV zJO}d}%v0A!&%B)8-S``YcQ7-CHc#s}XZ7()4nBW_ z;DGP&9#8svPMFdk?^8t@gX_VV|{6Bew__ z(^v-A7<;`@{6ya%H@@iQj1QxgE&451RfKa*XOgWrB{^yHTMFKf5nliL?&?NVl4{%O{!V2REv0;C-V zl&aTK5H&0NX~9R);-zuZ#Mq!pJ@I`K*lI3>*fT%%@6ZCq#49sjyW99nAqvhG_Uw` zJ#T-Ynm4JZGpuGfe&dDj+U68HxpAF;@eO#U1C7udns*wIcAx2wepBbU1o+={B1R|r zn&#aKq`hzY^Iz9GYk^9~^S-tg^R031xRou;KK3K1vC5D#A8Vas%z7?0>q`#pP#`tD zzbj;%uI^XoNq8=_QR;RblfT+<6L3-W$pTSssYk;tX;?Lu2^Zrx*dMTYBg*2f?2b6 zVE9wLzDt3$Yk`dOS0Inq-W|IC8z41GCiZlO)(pjWoQL4}8no;93f!pUgul|f^MSNi zOuuAr+)w6|I$6ITLzY~RFy?*>F7=&ey{<(D>&$W8VUF_$zR>xEzts9y0aae3c~4U0 z!c^G08ndu3gh>oCU}*MQsBMcKz@3VHGRSNC@v_dy`- z8Plhq_8yS)<@JsFC1L!IGG}7;I+)+lHNn5@JJ3dFy1^_F9GE9 zzSYLx0K~fkXC08w`$m@xJk^5PvqrnP=Lp!xuot+iChl>gI0L>lFk_i<>wv0%<#doIh@>&gX)sb-sTF zGT$Fff7mnHKMhDb9oV^EqkZ#@Bi{m(Z^+~^0myh2rcY$PGlASMQ8SLFvXqH4{8=4$ zCXn-20y*!VHl6S1K;}F0FSaw6(xr%C}ME8#8$<1u|a3^oi764P?FzW*kjr z855`SIUTnK$oV$_Iq$jWb$$ge=zM1YsdF5V{&Rt}hk(D7Z>z{RY4W%i$apQLPo(Zv zAmgOWIGW0WFX}kI2GUjoIsY*r=l%61o!@RR>wFgisdF}v{zf3}WngE%{@0rhldofp zQNsJo@}al~7=U{KJoS$1dz%XQt^q%T`x552-`hIhGl44KF6PC|ywEnyI|WGFVESFf zt2gtUcl5kNfV7KEzpHu8W?t}JJ?|JG?RwMiYF@jU7k*FAI|oR6#PqwG=iIE*p3_;D*ipL|6B)QE;qr|8R>h$==T~>^plO9s5AXeIH2shv}0; zTW0sO=XosS=;u9wUC#nDN#ysF*3-Z9!0%xOk96i>vwx!{yN^4871^Aef*wx60eNZs z6#;dxT6%cEIsA1z`@?h7;uQr>kFAAHsAQybFt*|o^)t}yJ~aP>!_QK1)?wU%Mm8UJ zL-ZkrpFhVfa9qrpT9faD@fj7K$?-F>Xy@R2FzzM7DutSJC4p53t@=rz)DexvL3_T`+C zf%sj|HQjdU>-+Iy+>Z}7=b}CjBgm2GA^$E`_h$sP zzhsX*+~@PRjQw~0ma!I^%fY2)(7cas=%@KF18MK|H}lK*47oS%$$Ra(CvU)f-jmZ} z12pepAnj?>@A5qp=DrGEs6fw~52Pi4%>PN#Z!8?C?mN>!TFIF1PCniT+xK2+=xo9` zYluI9&tw0k_ur*I>ixF~NS`{7YjEt9<32TKNay>U+h;gi%=|jcr>y~I%=vKA&swJ* z$h{r&%Kbh~&@7=|wEW9&6%f7Kb>1Z?f8>;4u<8x+uW*8piV@^#(U0%;}V@qQ?$ zuY)Iw>OEF9^mpw$N$0|18rFo8$3R zAgvBa|FuBYx89650jcBN&ndH?>&*Uq!tCFC%byUyZ|(*-MVkT{Tz%CmH{XNr#Jq*j zr>28kGUmEgxl`v+ZjKkfXL9kj8BS=pK0eO@(w;K?lHGgY{OPCf5zKMa2>xXzR@7Wa z76Dmjt?9={XuZ3Ew8w$;zYOF$q)mU$NbP?V$lU#|*R6<`Hu>~6dh>wfmxOYiz^iH< z)OpeY?#a-nug>JM1{f~Y{1bq*6+q^5k?HR+{u2DKF#nn!>hq%DUuGyS{~?#>!+=xu z-=}Mf>Aw+|gf@?H9&0?_u|&?(7~}EIvB%;ox`l!CR*Nb`9hsSosX?lH{u%FA&kD7WSXj@xp#_CKx zSD5;KZ~B}=`!$gHonrbIoBq|NFLPrqC3ud;zg@uZvGBT3kFm2czt!k|X5t()Mj!vj z0GabL(|;RC%Ng4F*{S!tO)bx5pBKz;LOlE4HI4kZ|1)Ft{yU~j>n;WI+@zoOm8r+O z?u=0~p$D$NgYo)5!08s(_eE)pUxRtEy|m69K-wFo&-&$a#K80Vo+UU=^P@o838wEC zBaAtWK@0Ao=N%5DU1<6xKf~yfm2YeQ}_|RPSb&0=PH8>fP9^d8C+_{6F_N^ z2|ADKfV5|U)G3&#_xpGt`%{6`yBf&r+(V|{f0BNkod%@;EFk$K_SCPl2LstZ14z3E z$o;Fn2T+^mly2|u3}4X?_mX|_cNK$9{;NGQ{CuizM8JSUkL={$q2{Y?EHFRRbLMG8)EoRjQg$W-+GolE*=Nc-&g!yixlFd&(Y&Q18Kch8J_wMQ$DWcoyW*d@=w-&_Y}>a z1*ER`8As^l8A>m;K>I%f(ta>~{r4#F+^rnn3ER6cUNS`;D0YEx6RLdt9&c z8X(uR5yG_WXX`$n_e&5{-oZV}BIi(AVaLp`qde2vXt5*xy+%)bl3;)qJ&|`rtU~z3Vwf z1?F-8GRG8hByKb7m@@TETde1Q3Z(yt6ZAUdn*EwHAm9wxp6m2k(cLMi!TDdF<9P3r zVu)jn`+(bmmD#TW8N}slK(jfnzB9*Jx8LZv^wWLqR9`tht?>Bvzqx{EVg(EEJ!YIo!4)H&N^H%@p%hx#eO#Tvb-;Bz+#LOy6SmI^Gq}c$ zJ{!l+*;*&7&)>PMF!4~sCD@`{Ogz!|`}?`|KI^p_F(Sy-S_s!4zV^4CuGi-~AZ^%k z-KU>65x8r;%q_H;^&j1@igLX{YPo!(0SpE_|*!636;bJpb#1?{L^U%TVX5;FFWWIuW-4nL~%^ z?*KA~5vYebOaij+0;4DCxf_ABcY&OnkB1J-e+rP?vw)nt0m%HPoTBre17u9~I=Ec_ zeWxgL;#d^=v>33#@ZJN``Y+XS{s1JmWEehg*rMMrB)IRu;dtC=v>M*PQ`L0mXrP)W z?yHiR7db>9Cv$hk_4-?g>k9r}_Hz98Hu-UscrAWGv8jBa{s+${NDSC2sCN2`8uzgfwYaLuh%R4ex(+3;^sc?9w6;u)0gYg0A6U0 zsTW8)(e(9iZt|S?MI)UXu&qB|UrS|Q{q1^Oa|h!4TPM1J>p}Zo?R(W#;KP6R}@ul|aUo z?;oqdO-A+j2=HlpnR#B_I-{F3$HjBzIC;nCIB5bmVswr(y34KZh=4N!@43xy1X{bt zyT#OdZp>kRt&i&c^a7CUMziSMKeo?#JlDPZD|JEk{%VJ&cYh`K*Y*DkNXtJ!@2|c< z>OE-s51amW(=R(vf6lN!knyQa`zw%n^~P%oZLoQ5DK&k$|5B(~KfmhZU07P3Gqv5E$dr-J z@36I8sIMnkeZHRsCjMzw&C8!{j(Z^e^7PrCxh`SLiTzKqw3ezRFGIo^TsxT*78Q+K23=kUC&@8%3l z;P+Lvx#}}(eZ4JmB9W2KCTu&AGxxddmyE@{`B{IPR)3cA#tgOY%$e)&ha98XHCcP{ zf8KvLVJxCp`k#yT-Huve5WapVQIi=11`_k;sGOQ!x(@)z7^zKjU>+5glZ+2p0JvlFp=bO}F zn??;@uZV4)Tz&-CUia$u)A82>X`6tY(`v@arR5_p>dAFr4*GNU|NOpss9R*$=k&2Z z>)e(C!;k5B=L2a^nf^YH>$qnCS%>}}4nMo+ci_9@9lyTUtrEJeTXk+P08@X|^Cq-v z-FhJFc);`v{$zALpAW>LHyb?0Om*z%q@UKj&@)B~BpbID%(eaPutX`8jK*p{%SOb(izR%-(Jmy(`d3KF)aH}wGE%v6)cO8({2IRbw zw{(5efz1D9)8DUMKc~AJ$Q&Bp*8Hb|v@!2!J;tG(3uG>rn7*ptJpW*gCHv+(gLA%h zf*JgtDOJ#_zS&^bAO`=1cyldli(?&`-zp&E*Be}GFbQP5dkwY#`Tl$>FaS&e`Tl&H z!44o^9i4&C=y4+Xr9l3@iiyBJz^T9>@K-?oy^7_gPbBX=ApZ1(a~TkSQo_03^fv(U zry!iyOrOZVSMdRG2=H$P{{iIRtLTn(lJ)X$SMVDXtl7CDdtdeeSMEzvTFvp-t4;5Z zsX)$c0CK$^1ag1=Kf=xizUuk?|EK#^tJbYecc&VUHyL6Q|GaYl z+zZrx*bcQH`n=mU`27AbsQoYl>Ukk|L+yuQ8@dMi-T<{99){Wv&qM8pT~N;p+2cLy z*AHqx6hiHXg^)*gM3zJChiy>$58T)_(0?w}^FkhR|2wGtaP+3G!E-|~&EAXd!~5Mm|9-!F z7C8-Mhlkf_iN6N2#JS43)>-b{?5uL`a7LcDb49u{)0yqeaSnCnI>$Kkos*q~&Y8|) z=R)UV=L%<;bG@^|xy4!S-0e(TWBImoMxA|~gPkLsdCqapNzSRxBIj)9eCHx(sdKe+ zopYnJ(z(^S)7kI^%QM5-$=TC6$Qg5va*lOQbQUNoU34XeGF%PkKjk= ziM6-dXYuqoq@MEW8@}dN|JRO>uGic7Z$O>@zH`6p zEp}cy49ccLod@T+|2ow9@LTu06x(_6P$;_?X2QAdzYTT1+va|+TkSkJ63S*moj(`3 z{~6Tz@-O!fy3Nj`|Aw;Lq0VH$G|B5dG0?1yWzj;e!Y2JgXc7LgR*h3 z2b}Ky(=Z$V1NYn9-ZglB(*P(tAMOq3xW5kWgJ0!-k2|^s>vA}hT?u=^d)@yK_Qv1k z{-8U%2G4sM17)|szVLDPzk~hoo6WcOBVd30Guiq24RwCm?EW`U=N_F`WbZwfwg|p1L-dW+?;;eS=cBZ{(`L=UL zoqe5yogCQ}l4I$XbKjCZK;`#B{xNQ2? zT;noIY<(UEW#__r@J9Dr+-KLfeo$5lb$u&$|HS+4`gSpt{Q`A;>+pd23!vT)c*gy0 zP}jGXi>!S()cyAa_vb@h-&VQ*1Jw1c#e>%WaH#w8Gu*!u>iYJy`&*%|Z|M(N|6x$~ z!>7A{2h{cLDfhpJy1q4k*!sty?&I^_za8rOw$lCYpssJt7F++rpzga*bAKMx^=*aw z-$GsAnm%Iv4~4q#Kh^!YP}jF7-QNaveQWus^&biM#6QRVMNrqbweJ4~b$#plnDzfR z)bD7QyT20Z`nJjaj3st`%Ym}iV|O{STn7Z@;=f zV3}RtMnl;gsO#HO_p6|;Z)uNP`*5iHt_kkn3w3>4swZ-^&bQK;7@h`aj5It zJMK4o!me+)UnimqA_MD&6n6+^%m2L)oQJ*S9;|e;4Zd_M`iKpS0`SC@8xg z>iYJu`(Hp^-|DZh_CuhqZ{yvc4|RQ8<^Fc4W3lZ@>wg>^f`5Vgk3b#iue;yyDZ9R9 zL)mFi*SD+Oe-`Tc_L2MTpSJ7U{!mr`4}-<-zX@ab-@Cu}D!aZN31wG9UEl6=e>2p% zWw-lHp0V?X&MC6}pssJD-49>ibRA3l3{VBzYOEgr(a+d>;$K%N;djxR^HttQ7H=+; z-S58o$d*FQ5ss@E-9n$cDP_z)AOG{Yo3Nkkb2pKOF-;v3mMF6#{c&d*ZLuJN{Zobxx%@Z0ZJTckb&KSGV)+jF z)bf1+>VD;v&+NQk4CQM+*;}r!=92vmbv+2bj;5ULIhX%@Z#OSV9kKt5&pD6Rg=_Y6 zWR1n`0cGReSD(O#f9p8FzI&t?iE#^)#9fsTHyVmt{Jh0|63TvXUwvf#lEhVv@axVc z_{FR*=@#C;j_n0C+f%#`RGlQ>=_R%IcQM;yK}PmZnP1bx+rIH_p>C1l=X`%c+2+;e zPoU2F_>;ZfXJJ9-PZ8s!M~$yJ6;I5)FTR$A z^!>^(ac`ukQTNi34{qvc(%aq#!??3uK@ z$6d_!b^OdHzI|qU8izU7Y zmUZ5%{MF`Zx6|ew3^lLXW#>c95k7Be{?;ASA|1!Hh_o0Td~@aR&s!AGrtvY(-=aQ0 zAuIUG=3NbCe?iUL_G{bT9?J5dwoml!sq~!hHAZ*X_=!+<8`SuRe0!pvWj-#?^}G|x zmbjmlM9(T8qkfuOKN}at>ltx9BfnTagP?4z`)Zf9NTR3aZ>?u8k7>>43|mE7Oo`Vt zqbcXZFKyo6psdvv^M^v&3GS!TYcO-j%3PO*zWxUI`a7~_{dI2^>CWe|JM($$Og@j@ zY_vTSTI(vGIkZnJL;E(z*Wo3;F8>FmPXmvWOwU=Ki}I<_Gy9=oYS%BDbt=pC z^{RH+AxZSq{B`MBN_&Cp^_%P0%Gc*mU!NzqUoW$9B$LlYXYv`i%mM8R>ZLV^q#fR{ zTHhn<7UkIjoHIJ|8hl$m!`*VNKHHHNsrhztd9|kd#cAC=jdM?P)_F75`9IIuSWH{dA6DOE zP!?Rb`P_5pc=Bs_lSo-cG*ZFO*hlSH3j5*b@s~5Na?99oP^922%X1EtWesQ&$(}ke z5*@T3@ALPMq~+QB`#TwP1_fwb`5RV~`l}|H_y^l{?^k0j-n93&J421@1vwHT`@0`} z{<($4zY5A$K+TcXG8(*2bOhumj1)kPoe9%mrTYiAvhl;9UKcvq{j8j(Xu1!djja7W zp=k5i-`^7&^p4e1{kH9&-B9<5X>3;>nNWUDsMoE=d;gm2dvvJ9KN-p{h0)jULB(mbx8>gk z${!3B?*piK1^ZZ?S3||S4K{%b-EZ8}+9yNx-vBj!a4(zhUMM@Xx5fVeD$iDZ%%1?| zPld|+DfeIW_6@%M3)qbIgZf&(5m4ifhpK9#r-}}YkvwVr`Mp4!|HD4 z5A1I3hd|ADtov6&9j8m&f6Cimb$L0&9?SoQ1ge^`7E@p zG1aP{p-;rG^L$@-CBClL`#S%|eYMNZPqOYbe|Z0wCW*HsAzq2c%lCDCi?8!1-B-J8 zX_9!Fzg}h<_s>nap2GpbbLk5b*M0^4q=l{}8K;>pF(^CJ{d%qVz6bZ&tbM<4PUBv? zNu>DS(a3UsV#{s)$NTJg-M1$63u_Q*5ewo}wz9ZCL0K#AAAkW>7 z7Lwl&^kn?A>?rlk<9aR|2et1e!TNA2YygX(*5YjEe5kdz$XN=thE_Y*L9LmMusN)R z>2NDlyq&NmenXD8RxktVJ(^CiHS7u1ZxGabF)`Q2+(HC|mga29yThKxwc~TRR@>wX@@~FI4T5p=w?LRqKmT zwZ0Ek>-Vq){LB4<_SSwcRR6!A#y9O?^R%9FID9x*&#_xif@8qm#p!L~MT2F@^;7*tcd+r$xG(7}L z)03ezJr7FL8Bm(u3cJEZ?l1H9RZ#t3f*s*IQ2XdZsQG(zw0QlX_W5N{d98-hV)XU)c1yh?wGRE*d z;Q{HD!SA^I-lxAmS3Zt?F+LipT4~2>yiYX${V=>e>yYM=zJpHU_&Yl3@t4Q(cQ`v( zv8(<1k>&TWd-*-=eo(c`RFh0Ro$abwruK{QrODMkZVuEMTL85tA9U(GCI1P0?fd7U z*23%FzRCGH)Y_}LN3J28BBg#m^$V2s>u2k8G}M?WP&wTPm18wjZoT^3{u&LH+ci+R zEQ0Cqaj4_v9p9d_zpc;nU@Nv?2erOi9$@|qs2aY5nrF`;w(c*0@}GiQ|IH3EKlfl8 zmk%|r5Gs%Bpz^*2YTYe@I{sgVIu3q>vaJ1^@w}QLNuRS@*y5jaX@UQKu>fkG2chPF z!udSZK78G|2}-BWoj*Y7wF~Mx+^F34WoxK@ouTyV<=h{JE$47s&zC@1!{JuXTqyg- z{clHD-5rjw*{LuLol-@r=>HPQ@DmU^n zlwUo{^l5ag>32L-UeloR>VKT==l?+EF$*e>*zvX>)38^O%l95A`xdHys}pVgb%ydsK&``-P~$&_ zS`VYf*!U?>>+MS@OZ*#mrOl#|*ZHaW8+Y+One8B3t`8Be58<}py21Tj2KR}qgkm+M_YgCT$UEI-0+^S76`ytZoqt)>M!n|5WlCvDR3P zul=SP#D&ZmgEh9BzJqbf|FqYeB7f;B9Er4q>OTr8`?T-)F_I_dSbi!2hTYR{k<~HnWguh_^xK?Z*~QLGcT4T z-n@i(WnOo_*L@e1Ep=b*vbSImKlJ;v=C7;XNlD_jTN7Vz9(Cn1e?b$g_dX~aUsJE* z`R4#MU-&YJPi8M)TnJ81e|7PqT{c zS_>sUb~P;W`5yE6zl74Oy`K;5yN}!>)sIHzvu~^J8s&eVr1sxBtZE%oN`Yw({fv4c zUbo0*TPFp@R@diH*7#QQ)h=rZgZ-B9x~pR7*_;`Awnae${sM))&Y96B_V@EG@;BM> zGa2Sjv3c8G91Z3j45h(JsQEu~KWqQyk$ooii}V=OH`1YAcBFZA)5<1g{4E`ye=zg& zCpCky4L`CRD?c=Dg*v8oI(yTubI}3bPl59@LMd;{d~Wi?E6W5 zWNV=2NIaeuC)IZsXVJEtG19#Zjl}h?UGb$B?@K7_d71h1pyE`xpX&RTr9O92p^Ynt zvi8%=zZzr+h4Iu>P>b8OxoH%9}108~BdBfFL*4vb{h>!0-Zxb9sPjrGRGc!XIOWdGP?k5<=6?>#-hvum4K=?0C6?zNP~#7Tx-T0Bb-z~xm0woy zdezPRzC1IjuItFN4HKwuF}leXLd9AP6>EiWFN2D;-dO<^YYWu9Vl_;IyWLOYSk?A+ z&L~XB@9P{4TjGy!KM!W$kAuao@1IaM^jfR`M5vt3g3@oA`&CdmpENVdzkI$Cs^7Cv z+c)_3HP@Lgo&OtUE8km$s_Amr2tIVZ`7c1#)@qjB2j2!&+h>rw)yPiw8{J^-?V$R1 zgPN~DlpW>mH^652E8VYzx?fMf(Z&yj(qNf zHLx|j+x^Afz8PvCd<&J|FHre4;5;ik#?QC<{zR8Sd-8Y5cqV?HUGuA18#ULJYG0ST zq4Z39-;Tj{P!^qLYv>9nTMX526V!gFe>pMXVK7*i{TlJC!v4hT`**y|cK^IzSN?&` zyBTVpDyVsOK+O}Wu(g;Dwcj$K>dS_jKL>`b=qii*Ih3_6viyca&07F9?>$iZya6@u zuP~VR>PVpD2{4WA#W1L2V53O)K?g)y*BkVA9Wm;-jil9{;n(3#kWG=EQ1J#q#fw43 z8wC|_EL6OSQ2VU_D&BOc`DQ^`$t;_{$qj)U83Hx`IZ*T80X6^2Q1e$q&ENS(tLJE_ z`7eW-e-Ug7KY-0()=lC1c>TB@&%N<=F^T$?dwuz?^JJ*_g;4QlLd7qJioXyl{$i;5 zRzSrsgNnZ%Dt-l2om*hoO0M&I|7%-^z@T0j)C+@pVNfp&>b>6Ug+aYAs22wHLe<+A zJ)6UmpyDSx9*R}BCsld1^*i_)+b{_#pWC7Gc?l|?zhE$5lJ&mI*SltjU2FaBgR=La z=4&w1=F5SaZ#-0eH$v6-G;9pFK-Je8om5|*>lJ>UTczUBCd>EzyAsNF)$H$tzss1` zJ{Gj=ALXN;vNz-JK?*ou*WAAq`T68!Kfi2nUwvdVpymkweykYwyh)yY$$K+@KX1}L zYgX2+OS4FqjSVANQycM2$`-uulg{hM%_C*pbN#?ibiKU}5bv{B853blgfS7uL=wi- zYtfiz*76LV(flq_&^YeiF~)u8)BM!jJBIya_l`M9bgCk+n2L6*<{m27|DV4g8mx=C zP`28A^^yGn|JKQW&sB_6_m5+f#Gn3F?fb`Kw#9-7_D`PY6yA1aD9@U%mA6^G&&-Vm zn+}_2{)ezWTQY7pU-QYvd;XeBb`#Y44c|X1XZu?i>5=f?!YE?9j+qR<=0u_V92mRE z;>?7yVkn*NhsxtcZ_f(O%a?NAn)>&7YcccQMiQDU=GU)LP~*osCqm^};G7P1oXv91 zgF4PioJ*k2BdeTiq0S@a&dre37pZdYfVz%HxQ>bGP}l8DXEtn$pW_?~+vDdt$G|=C z^PQ7n7Ji{~ChUk`3{~esC@Z?$>i!1Gc0twM>k2!+90XPO*^r|qQV3P|gHY#}r=aTo z66*Z21FG(B)9w5@0IKc_AV*r{8mPM0K;7eQfU39U4Au(l4psN5unn97RrfO34!#6c z_n)u>Y;z^ghJeSxOn3%V-S@&h;d0m!ZiAg*eXjGJ;r@QzPkf$NIcq^yUSR8~BkM-i z%hylqXd2ILZ^>th_)PN@J3r{YekbFkYuUzwg8rXC>G-Yt89v|1P<9Sf`*f)FS?t^A zLCsT7&nX+-qOy5Gv%JJ-g2gV3Mo!?T=9yseK6_;cO7rv zBBNkXzy1yu=jEE?Km0mgL6W?OZivr2g6@Nvukw7G?*}Mra)J43m$mTy6wX`ohvUsp z5^qUDynK&W;PcObvOC>ZyX^cV@ic!pURjcOo!*PDFY56!eE!ZJ??Cs}F6);hp5_n7 zt4b1Yc0#bY}+lhm^{Nj;HG@%7|+?y(@M{WC8~J^7w*vFH2wd6xeqjz^tGF7o4Yx*wCAP2++={FBFi5Bt(gdW!QCa+&OFkETe0pReZm`RjhD zF{Qp;ePz?2<_n)^ltZo8MHBKWt|PCU58^di63VO0KyR0+R`0#yS9`h$& zj|)9!#$z_$@lbY$`}&-3*D)Qr9_uxVc9ABPymydquTzvT_BM6Ka#q;*B`c$WzX580 z*SjJ;as}7QJ;t=){lWCe9s}A|x2|ke-lB}Z(ZJu_Xf_e<~qkX^PQ8SVim&1aHg{u>K<*O`(iWv#jrVC0n=d_YysCp-J?~&R&Wc{Jz6zv z4R=G`qosXi_onTjd{OP9`imMb>K-i$vtVDiCmalQk2V789xV^*9&McaqS{6E7d2k& z4ky7HD|yaz9lhH2!b~|M_m3>&ehdFx zD9tW<(O#!}6iTzrP?|mUlD#h1<7InYZXlEfM?-0HI+RA2LEYEh3ERU(Q1`P>K;6%- zfzoQ_+GtSgp0C*FxAue5A{R=lQ(Aghc7qSX?(oQ0qrr0q7D4&Tpfp?s z73USGee@30KK}`-p3bkCe;|~95>&lsK&_b@p!9eVHimCP>9`3>_de@v{r?Nfp8{p~ zx}WM8%j{&wn8uWSY5R9QtjE}0us&?W`jaopMD?%nwXJxm#r+-1qRVVujDVVBE^G)l zK;^v^s*Vwl+qnPV@fjme9iKH;?sZ-By2V)rmDA@?@qTr``y00Yj)Q97^G%C?Bvkx~ zun9cZ{Y&4n^>-I+#`gQ(HvK<>>G{`wf-K4T7R!W zt-p;>>+f@@^|uXbU3~Sft&^iS*!nviYW)>Lt-qV0*55Ly_4gc%!gWyVZxhsdyYxL< ze;c9vPodUd6;zy`VJr9-RQ}yJT0O@?`DeR-9aO!yL9M@Mp!E0=O1Iykc1NR4rt5#8 z_V4xX-w$PPyPsoO{=67!{^d|{*F)uz{e+FP^|O-m`;w&R z_hRCVW}wzU5$7>+wsXF7k+amf8Y{f9o&j|%cY@Nk zCzSSspw>zZwuYl%8#orWg%jNu)h?>PsPUrqWdYQ_oeuYev!K?@Jg7BO0<~tAxG$<* zRDV(9MXi-p@NawHbX^X0?0@Qh>kn*y>;t9YXsGl1mF^!~Vf$wqlxBBA9bb#wfBGXk zzCMQ1?2C_WeRbJv>n#sTvwc3X^*9fz=0#8%JO`!81}M#{pfpSS)Q+$AumgT~sN-v2 zD6KkwX2-!*P_^FyrNvU%3BC-a)t9gDCWw?HvfE^Bk!4|BU+^VPIccd#dAW zRVO>Y=RINlo`bSVSPwQ_Zu|2@sQGV$in|1A|22Hl=MV0mp62*kmh||lB+eOre3i3~ zl=Eh1m2-zP@{P5pL&eI3!LbarR&v}Io8k|J(k2&5t1(d8!H?61=O0^0<~tU-51p^s=ui5qSnrCnB)8D zODNr2Z82RBhxPHtx_>Qffd9Dr)4sC(@gS5&+rF{msZCWh&?fs^TQ}pOw7C^Zo3p>O zb+-|!wk=S#{ti`poA2#7>ItPyE^G%+g6-iMP{+}QP@0V2YU}$2s2bmgs`&>fO&a`Q z$59X11wRMsI64GI;n7f9d=I-743iJralY5vS*&@ z@96f#pG2R*F#leQzZ}Xcp!&D?KU+UTpkk@N>=LLLtDxo%|30i76Z0O+wwk;PD&zB> z9`ZG3z0d7_Fr4?8ujBKc#TeyXWBCtw{!mr{gZvkH{!saAoa}a}SQRiaf90BNe-*L) z{$O+@5`Eg{n+#Mv^#6=N(+tXDZE=3O4jJA?fZ&bw2{*PQny*MVBA1YQMOw3=oCfi>-*y}x!R)V-K7!T$37u^h@OU{LRUUN2NE^_Q)Lim?+W)~g&7^Ue+BU5ZBGyjO>O z%{lCg+Ig?|HhzDtV@%xs^8K+K$|_)x|3jWXR7{PNZGwuGNvy>Dm20y7RlxR|{gwZW z&9?-~es({x?)jm*bJ!o@x`&2*>Z{k7z~__}lHqq_6&v-r!Qtl~be_kOPzDwg`o zPJ)UtA12nT924^{3+0`MM&Z22g?!EVd6NA#@%#9^C(%cF*I2&qkL6HS0fYVZu;&jI zQ{!ZpK*d@G6Z2QD$@W(j+qJ(mPqftLDSFoCT@PjLpEEzP{*12w9B1Wdra9DKIc^U5 z%IS2@(b`_0ALXY1Puv<`e-&fm>c8LOE{C!T7}WoO*AEp_<77WW#TuOCdZ1hr^B)|_ zzZ%WL`R@+-n)7OZy(64|_7Cy-r_m=af8RgLp{xQ1`7ieTp<-&BtUXk$u`qG}Dc5d# zZi~KO!T0j=8G9~2v5Q6p_e^0wYma)7mS=F>>iIv6t1-pa&t~$D)og^to_E2cmd|V` zD|27%vU{M$hwl?Kf9w9dZaT4Br1v16$5}5k61-}wzpt5RIi#H%3+mkBuQ!+Z>&@$- z^sI1(ziX#>dB0meH$vI1Q1O>Rje8GDufukmKO9Q8^V~0l>VF@UW$n|L&l>cL=v8Tb zYF_tmIpkLJ{E1@nkS%mB_Pka&6Z4DyYWXdMvOYV_9|vVOLB(GHmG4HVe5e0r{?$5Q z^G4l*dU`|oE1;}fV;eUQYWuZKZ2Nss`D}pNerTF)9|yJlMyTzN`}Vhdd+VOO&u~VZ zDtQ^)TWh@+xh|c&?hF|H!}L4>%1(jx;FEtv<;H!#elg?Ae{ucWHRQ8S{QW@x-dwrQ zUB;ZsZ*xtI=9ceSP&Uo|g-~%GcR%qv^gEePmeJJ4$Dr&q_mjQv6Fn~$^wB?>TR%&F zOgNs&E0^s>KF^ar?+5M|d*1gzjSs)?qxlox_sR8`(VtD17?hpne(+qXiT^y8s%(2S z@-{y;&y>NMd!{<5WVf&*+q|NAm-iIr7Z8T1E>SyTo z_&hT54i54tKP)@Qy+JHn-6I{KYEiqaGt~HST+N>>Zbg!~D-z)aQ0p4$i; z!Ack&$BGDE(^2h(JL0w5O5d?;m*rp7BN+E6lzjp}OP8KWbcr&L;`N2nWw86A z@)-e@Umi@QOYzU~x{RZ5jV=rgEar9G=yf~~6?Z#S+}4*^{jWmB`vpq-!IzqUAyhsO zK#h9>%D#rm>pS<)A-43n7|O!>sQ$Y2$xEV7G4m+iLa00!yDuuA6;Sz>!BqN`{t~ax zdio~n6TQspI2X$9fr|ScRNNn-;yqModb|&%Pv$i9kB4f%7HZtBQ1&WRUT?VnA+e>; zmrxegNA=gGPhk>$A_tm2=}>uQx-Tl9Y$$zlU@Cpee~s5?D18(4iCk`V91UeNpz3@Q zD(<^b@&0>->G2elK0Dptce=GtfEsrZlsyEM*Q4%_B)0T95z4~)sQ$Y2DM_MFjN?`D zMnUB{)_qa=PK45@0H)HXdS|>o)9IV2PtgUwpP}pzsJH_!G<{Bhir2Wn^f>@ZpF;N^ zhid;4YTS=dwzr?xdi#0p24YK}xlk6?NA+h7Xc~!5%H%m}10reFjVpt{k?5~2uA}{8 zCJ)zH($Dl+0;SI?_eJHi7KZyvE9I>m(|(KBrJTOHw~&<|XnJ%QY;}x;8gnUBoLiyh zA27u97!T#ogX(ublzjjd|6}(*A%^0A17$(|{`qRvS6BVjN$QXE_u~gDuT1wv<&zCl z*8h8a{WdWfQ^Tg`q)Y|u%=hxo%`OKkMlc91dbYE01GhwRQ8}5#;y_mi=wKJ5zuWET0 zd)_ZY#o7)PtK}h9?{cU$^_lw}4z+&SP<9Gb4&&Xwhd8SLVJHjNuNt!kHs$+#yg$SG z|L3W@c3%>s{aTU;*Hp$l%4%3g)a>kaqMA-43n7|O!> zsQ$Y2sZ63zG4m+iLa00!yDuuA6;S$=!BqO>@hq$ueQInyeG~PG%(FU*75Uxt zNr%ca(|u9-W<%+d15@c!P(NOuq4Z7Er_$@_eW%qm9;(i{P;sAtig(t0)8`H-eJb2< zwZPhkLybED%Ki(L*NyIvB)0T95z4~)sQ$Y2$w{J5jN?`DMnUB{)_qa=PK45@0H)HX zxIw%=)9IV2PyS85pP}p%sJLxsn?CzN#rqm6UWYlR&sZq`7O3`@p~k%nWsUv3*38dq zHxOI;%!RVBKB`}TXSm0tj@+XRu62(xmi7mjJX~kwM_)fMSU>J(LgkYUgY^T$Pj{zzg6>j%mLeQvYY4^)3$`V=M6r+|5acu;xHa$i(F^Pu!8fvNNNpZA)^w;?cR|G%8#6s_f|~a;_d5);_G6*O{Rhg5p>mn$elOxlkAYAY)ksHM+N+8jJ1c7eU2+2`XOE zfu>I>RE!3krxgDnsP>DX#$5$vE1>dP<^G4nmOfuXSy&&{Z~6>JpP{w%iC!3syvO9> zIxD&EDc)A7Ja@V;DxZeC{g{Hvw-XGHS1xJ%XpY=w@jCUSZz0=ddG}ZycR|@(P-7b0 zYx;D9iuW0m9v%PB^f?YH#2e2jzDdlm&V%xAU{~ zs7tThBzomBkK&Dk(rc3YqVk^#m0uB*UbA5;y$YMh>ouRgHF{Ng9lh_fy2eAroeLHB z38;7%-fwz51{Lp9D7}t;!2Fp|`8)^J|0k$uI{LuUYPk%4Z%_ekD-(FM+A_TAUuQ*DCtf=vB7B>S%VC)pZC|ofkvtbt_c7 z-Zi0%p21>8q3(cPhmCxN!{Wn0(Qwe45eH~}{I(~&5q}Mx87S>C8m|nv;9{KEQ zb(6|Qq4!nh)BZA(hwCl*!`9alsJvIXFDjq4Q2CWZ<-Zw*$A^!{iWc#DRnd16V`K%7 znO@IA*$+^4_E=(i4TFmJ7gW51mzqB3LB-hMe$!>v9)s$C8Pq)2LD{oV`K@vPXL68U ze?eLJ{3Si=(yJ_qUKxLyUY(%y>gm3ydm@Q28C|{+Z+;y)J~Z zuwK%mF1@Of=vBsXt$6F9@~&`SR6bjv@~ei*e>Y5}*WiqJz0$(#%g-y%`g!FCsJJ~I z^z{W5?=KjvuZMhn!C-y4-}GT$Ur_xogPP|$D0>zvzcuc+_x05^$@-EWb?KE+Q2Thy zVIIXB3Z+-B`=at01C@V1lwOlzD!nGPj@PS@zJISTuj8P_R@eDZaUX!e`htpg)g!*X zV6eVmu)ZGk^#z0V1=asosCgRsaej~=_lLTF9XV)y-2!Fd^(8$_ujKCw52k%ClZWdq z-^X5m+zgd>mHVRd*#VVbq-Xr=kg7#>DA(dP@j9i`H}Uu1j8^t~E$nm#u}#dy>G z`t7X!0H|>zplljcUNhXkf!NY#E|i7!QT=u4Gb@QcrOcyvtD*8-=f0?XH$v%C2~+7) z-Y#CBt@KUQr_}5C&Fkpb-s+qH758eWc>Oz=KBq$IbGQ2&pxPVnVdL6C*+{6oj&*+* zv87LgUbXd6{dMV6nna%{^GKh*PoCB8fiv ze!iIurB9*zqVkyum0vMTrBB8l@%k*JZ=yc2bgSb=D0?2N&h1cfTeqw)A-t%EJ1n{<`#uT$JSeyv?p>o1yZoa$i(FJD~E7 z{4f4G7C!&vWX9{0PTxd*N_*RN`8O!**T=3y6QJT=4Hd6{U%OtN3WMXz{S8pcV7eN=y4`t(eqPmFoAKSn|2Io5qq`Ame;rvNGs{u@|WpS-Mi zeWuelQJ*5O;|;Il52&~U`Hb?%GGXCqX8l`xe)1$)Npvz5My`s8^XcX=IeLB(yb zpXt*LD&E^r@&1I`2L}%@e+pFlLr~*ZK-srYdHvx2E@Dfc2I1FJ{Q9o?>(Zw%i9S*0 zQM|rT`V4koR6Zl1^38*(^eOHbug^I8Ch8L%Xmy+mW%oeEeGe+`k5KXM9b|gE4W&#%ASGB>v{LjA-43n7|O!yNA=gGPe~Ge^8I`>87j|0_eJG16Dq%A zm`b10PVxFIq;H}=mHSv7y?a_+vP^x`vFknM)-Mb z8dP30+<%1F(&tGi3+to$>(Xak5`BsW+Vy=lRG#zQ7nRQ|`>zvQ`n(5aVSQA8 zUHVif(Wjbu6mK_Fo@sn$RlcZv+Ck+Tg{kzZ?h>z0U-~BMlW~^S@oy-b0~P0GsJNd) z#k=`z(_;;kKEJy^V3M_;1vPFelsy8K*HZU~5L@~ThqACfs=qFMGN;tOzUMQK;!TFi zv(SA}`ObvF@dZ=qlM#*AXCZwP^{MnadY@x;jfaXm7b@-(Q1MPZ*Yvp=2FI8C_0O~R z1E9u@fU;>&dChSD5n>0&7nFtdQT=u46HB5`IrAvqW~e-?+!vMa4k&#hb$os>r(3)} z=}A66Sn75B=5_R&Y;{h6ihDIwy#D8#KBq$IbGQ2&pxPT>VB^|B*+?jTj&(oFKR?(b z$>#@Ee_i@aN}^AOA77pP`0DAtsC))N=@Wy>LpjNmyY`c`&Fdbo&nWsPuAhQ@tK(TH z`vGcfkJC+`VNmh5LB;EGhUxPkDE~I7_E(|CZG^I>eqL+g=e1Lat-K~cS$O@Z{<`!j zPNGl2cXoZB4z(X=xi2c8c~JS4z*PDa^oZAI34IgwDQ;=knUA2XMJu}w4Tp+*I#j%t z8Fu|T6lxz_;r?={_OGGz*#Tv}THCz+pzIl9OP`maEUb^}uS=g*N%W~?9>v=VmFG_P zMdj1*d($TarqZW4J6@ko^i9+!-|KkP>-YpJZre7d&wfzxK84yJE!&zt$3XelK(#*w zHEu1G?Sjhd5BGZ!Tlx%yvamj?zb<_$ljxJjJc>6CN}oyYi^^vzRDMM;l|H3=#p^Sh zzKQzew6i)chq9$maleF$Td%#ysV+Zp`L*?^dsB!b4>~*NT-g18dv8B%g zP!`rl_1C3O+Qqf6UuDdrcZSWh4oSWb?GxUi9RLhtawYH@?7P66hbUZ2hMP1L8Plj-vvly&ZGb)E1jQ|Xh_J6@kr^i9;K!0UL{ z>-Yhx&K^-3}GEbq}k54OF~s zQ0u2pw)tm3<#PwrxJ6L*Ayi(Uxc@q_rO$g%7S>1g*QHN+5`C(fNAY$;<(bCsz4Arn z(+(=%C`_eKLEm_N`qDR1pNze%j(Y{B?n)?hhfh^cfCiVSQA8UHa@yqE8OTsp1WV$}`t}QTdF4(kCCL(xLu-)jxF)#vio3 zJG1fpC#X6ffQtJfRJ;pzbPwX)3#HG;?zj2b+K+@9HwMaXfXZu*`_B+t`n(KfVSQA8 zUHarE(WjDm6mKh3o;%$am2bmr((Zwni9UJEqddn!P_}^B(&qsv3+to$>(Xa_5`D^;NAcD}3S=~E3;>60-aUZ36c zP1Gmf>v+`b_yj6$+uf$meo*l~g^Jhm57XxuDE}I$_NSo6t%b5(PAt9ZvZ3&s)=zWJTZ(@;RQsh+<7PtHGf;Uw@BT<)YyF%EWnq0(e_i@iCDEq@ofU5h zRGzEc7nRRisQk)dDt+<>#p|<~zKQxo>e=f*M?={RsJKr;#eEkl-j((3^`2!=`h4$x z_XgH}GSs+QT=u4lW|Gy>sQ9!rcWoRJbSt?D&Ij+`ov%= zeG2xE*Jl)c6ZI+gI`(X6bsY;;=e1CA?}LhWTqD!xN+^AvbN?r(_Prb1xIs{M4pd&} zyMGF?rOyN?3+to$>(Xa%5`Bu8M|sYM%5%Q^qVib;rB5kLrBCqz@%pT$Z=yaWUdMM{ zN9QJ1=ZR2pFM^8KCC&6X4oaV!+Qmr#JnMD*02QZ4Gk<**D&97z zcwL(N>#I=yZBXs6LXF!9Wli~fgYs$tWkZN9eTG9>SRd72mp-$S=##^7s(3@8^vQK! zR6b*%^2>**^eG=4ug_%qChC*(r=3SHhq9$maleF$TkkJB|1N`y_bJr+=@>D6MnmQE zU#M~OpzL+1yxwwu8nLC%wNMt;NA+jzo5pjhhDDlHr&TsCvv2q7SyiR9ZD-v z4Ggq#KNkktz(5jJ3Qi=bk^ z0u}Sx@utUXP%)dIYI;2bka2ep+kOt38y3^^zv3^om@X zWPLG*Vhx4LIoEwrxsQRt`hv=JGEAk{n4$4{71B4XSGm{GCg18h4l4FcsMrre#hh@u z>G3dB%zF{FDMJ^B~A2qP1@EwJpP&1 zIrhAPp0qb0xp2*;%%ga#q4Hkmz8I`A7_2d<{I|mJ`0z0~>yUWOcG9;-vr@04#YC%X zBvjn1pyHN5#XI#((_<-AydR-rJbsq>-$LaRJ=^;K3u>M-q3j;0{1&;N*2dQtl!f(@ z9;wz>UXt}y+RC+pfmZIXgMn5s&YT2eYx&YA9u$|V~r_Z%p_hQd^OZ8LFskMGv?2Q%IOWL{`H=lK&FVFasE~zvtNupU1^C<7xP@2tmUsOJepz{*Rc%-dcEL!!9cGv z*9!)E!9cGUT`w5u1p~caa=oDJC>ZGF{#bGd))$l|>LpF=oIfJzIlr3rwg?lhxrn)x z`)nAjG56;~<+KO}YYYZ!42H+69_6GtrVo$TY#n{2S%KH_merlDyMoQ5CK&ZG!K-mna+-AC8L44)*6_h3FB|TEDuguG8UmuJ3 z-cq0y47758J`A*ifmSfk3Z~L(@rVSi=qs&c1 zQ1SXdY}dyRp#0X0tvwg2|5Z@)%z?63pz>Sq{yK7yUYnpSe0`K2bsdY7Xiq#AtC>gf zc0=Wzwx{``@@WU9R}?DWzA%+uX-CEDHJH9NdR2QJhdg3+O@oU2I8@wnsCYL&YI=ME z6|dW4rq@O&zvU8ZKLV=%bf|f5gtC{Q@_XI=Tyl_JCqY?QFX>^&V(s4_i<7ObJ$!9J zOJ53pAI$8g;4e|RF2EsUq>Fn`hv2sUectl`}oc3UsNt*ptQ<|%5^dfj}KoL=N%odRUv(6F{Z`}Ubi|{LRl45on78Ay@o=? z{0%DRp>LW#*FeSTvfli$Q0=!s^?wy=o{dnJ{+7kbfU@hzLwel;Wx?w?8|?K7X;Rnv zN-M0rzDk%!@s>bow#t1``K*P?uN+FV%`lZ_>yC-ntct!hn&o&MGrW#csJLH4#clYu z)&CMyyw>lSJ|{ux^}GA~ms|T}sQey)n&$~9`xYv{AKd?$9HiG@P!`rpdf4-E_*+E$ z&Yk#t%N*KkT^|oJy{1FuJ^r~ha?VsIHd8Zw0zNmcKLFE^P%D*p6rB~16;`JI#-x|G&y^ad6qum0l z^Ju8J=Rw8mb(iUJK2*FXp!7Q7Zu4(~%I77h{=1;^Z?e$zIt(hmBi+v>2kCVZl!f(@ z9;vR6Mai@p;#$E#E7vX!23o;DD;Q`6Q)xBk_yn!!TcefoEHAb?+TLn)9S>FKbx^S% zf{HouHq&DnQpUsUc}pmM8*%6&IXrPqoR;`K`7`I%w8O1+MsypH|@tj>v0v9E)QIeeh$aXnPb zH=*>JHpu)Zp>p~Ts(-irZJvFh>};qUFK|DTJfzoNHP7>G@z3k`(j=8$JCo_v$Mu4N zUhY@GKra~R1p~ccD!sOhPS6W&!+KTsvN{Izwz@8W+Ee}9Zlt9=hvysv4t z5GwD*?u*K21yp`zQ2DNhsWi(R6R%kXeP=O7Rx-l$s)DkPM_8RFK*hZfDqg=MO^=J9 z;;n>QU%5w_e+^VV&p`FBhSKX#C_5n6;v58JUy+0K`X7{q?9+xypTp)Am2x&6MQnp5dfmPC&n=1{Dm zP&wwhFDlnDP>pxJjra{Fxu!ZR{1xk;v-0#}b z+E0ecaUzs0fXd|__ooq0`{r6G3+thpQ|VEaM2`~YP^=|TIj(YFRIY2G^eBg^^jLjL zydInBD?Q3Q@A|E*j{Tuxod*@`2B;WEWtbkYpmJI2{NoaU;un1C%vtY;_$B73&nJ7<)9a`bR_Q z@rwI@LA4*i`A0d9@bl0#KQGO2e*y8N#{*Cn)$rG5Cev5fouUf6-n;~5KSTBJ^PydDMnc7C@{wInj)9u@ zZTHhYw)VrI#vKb~*FoiSgZtBnr(CXuvOo`i{YW*Z(qmQxvqu5 z`2(iXWB2%YJvP%CyM}cs+L0S9;`avb=ADvR9z$`W-4(*85iP2T(COeqegs3*}cp<y*zTextIZ*Zp@w7gk zgtB0L`2DGBPNhd)5iv3o6DpP%*myV0z4g@?U~#-vu?U$u_HhDAc}*xt~Qm>Cpqq!g{FYRC*L9(Idtj ziZu#KkFoBH%4H%{ZUr#a`WQDcUXSVYl^zA2_j1qsE2vl<|7Us(fr{}fREz=DrpJ6J ze*;u|(;scz9#A$4DwjO>Zy=uZm)aQW%SNc&Dq$); zCZ8Fv$5#4Ek0Q_eCC~e3s91e|GCf8@#b~nK>OUOne7e~EFQD49cG$RmpllpeF8S{7 zBA)bUa8zwQRC6jl)+N!Snsc&p+zq8injbHsa%tzsOBANkWBOU~di15Q^oaR&;2OUU ztb~g7JyfiwUt7JeL1|w98`EPFlz%@|4j)2|`v%H7`FSbo=cOUUlODsNEWAEcb1FTm zljspU){hq$953#Vh00|jRBi<@l^(Otj@M&4eS_nryWOuZhqAAr>gw3T?$?Jv#rPE} z#(-?QUw;tF{|u_V!(KKn8_G_B%4NL!HxMs4UZ5!o%aJ;y` z4l0+8P`OpYRC+9&6tBlt`Ub~~=lzoB{WDaoK6{%UBcWn6*~jWX9O`&k>Hhzq+V}2h z;|4+5IZ(Nr@BS|01;@*Awe?WVsq}~?(Id(n%CRq$9)sN%mCFbyJ@Q~GJ(ipkug5t0 zN{?dCdxPiQsF&4sFjTBlpknON+kc;f(&H8P|AJ~ippT6k0cF#ma+%@&ImDA57eiTi zeW>PCdQ3{9M=^6qkA+Y~5WC5<1=QE^_pHdXZ1y{fGEJbRzM0?L|Cw)gReLB%}{ zDqiRF?fw4Kq2fIV72|*l%rAh-=V7S+pF+jn3T4?BTAZFx_A@yszrUa?(93`Sl^%8J zwJM2T8Es9kPEdLGbYE0HgP`(@LFGRRrqV0z{CK^_(ziyhJg;NE*YPG)o%IS#udYz> zK7oqY?IP3XOenp6aX)8@wVw^u|6UmEZz$UWm0y+nXOe^Tx)933dPxsE-fF*oUztR! z95h#~p-@`ox-Tl1F;KbZLuoY`rqXKA1@T%H(ziw{hDOT$djxGKSzSj$#hwlo`!1-M zW6v=?7DC0WgwpGxbIpGYDyJ`?`e(6THP1f2Zcl^Caf18Tk%#oU1eQMt^7%B>hG_k}Q(UK1}oIufH#jV-2cSg(@Ht&XptEb|Jh^Ejy3 zlc8evo^EoSuj3zXM9I`d8Y#2SMd{sQW9)LwdacWnsOfiLI~N zpD)azE%CEC<;9a$gK`fyyn?-tID_^8>pClicFsiq4a8ZwfVK!RZ$Mf7YfP`kP_`F&NUwdNEUcF_NwvPl zCRtxa9Mg(58%nSF?u*K05mauaQ2Tl{Or_V_i{kZKN8hks85dg}CqdaPsMu?uVsD0u zdDm3a<5Q@Z-7hh{Rzvx}K;_i$QtLkvYMv=j_9#@2%iP~Y9@6VGC=2T)O;W9|q9p69 znmH6}H&o7PzP?1|-pnuwK%{u8*DgJOH0N zuWnpv-x#&;r!A&E@im@;PNvy(sJv&nFDjpTQ2CX>uvV%?btu>9)Of9y&{y|ZVJls2 z`+X;r^?BavJRK_TRZ#H`Sz~$>LdDqPewP=l{UoTE6QFE9R9*|+e}>q~>t!el^zqkw zRDWIilqb=rl6e$wD^#94-4~T_!_KBp227<-?2>qWI?*>#pK`Awv&`x`1}g5=P;vhc zD&F`PO`rKt`ZRpW{6nGIFM%3&EtIW-%4@azy@)M+20~d_AJuRAB>#JjJ86G_$-{M4 zclBcqD$lg2`J(b^2ep2pFgz~2e)2Dk*QYOiCov{$B^6dj6_j=S(CRz^D(;0)@%nva zdYlOr;|2GBfkFHKW9)3;q#D~lKGjxRZM9PD)|M?rZx||;N`qq4#`ea>#z?VL8mXuC zR9d~T>BUk#7L}1ADn`Ph7%7&Dkz!Gd6nTn9!uF>B?{}_i+WVZ&^!%^Sr~SJ2+~@qR z>v!MhoY^z8>s#5cE650dtZS_1mqMHVTm>>Le;$|jv)TWt{Kb#-8Ml_OVC%XtrJb0WE((tN$J94`}(L`Cp*5{X6vsWCTFV zAI)EcHvM@GWSIW2|3tsbl8tT7*8_p3;>|>mH5O}5vX*(Eb?pIJ>k82Hh;{H za}8vz9YJ${)32@f+x^PISkteF_R;87>FYX>+S5R4F9oT2`zrC{1(2G1LF&wZP4dq` z)>Lb?jPDNeIDJ6IRFE}3qIovzpkISPhUphQN%Z=u6x*CXE2rwUDMPPKZ8axZduNcf z`9Rj5119n-X@cFaJd7>IKJm!>T>2OeGD<=A`6)=h_JP!VX^Z&r8%WKIz7W6O1DPKJ zS(A6GjK34)amIm+l^|<;RrBGfgMN($8P@rzKQGghM6aL1*ycPRi*O8T%>r3-spceW zUjnkW5Xf5BfQkI-Jkjn~ImViPMYWGs+oZ2SAhl)8sjz9?vV#a`G4YxPgEd$kW^ov#l<@5*!fN|4dvJ$Y_@8%W*BAoaS3<@t6YNR96` zPk&#w=YrI{1!T+xS=SSqAA&aPs^K&I(brGx|5W~@PCnV6OdN-L9YNNar8&uZdxG>Q z7fj?&(F1mW@-f!wPgwg%UMGEZ1*v;4NZm(4>h=9V{3!;l^`v>b^|IX$a=&{(#&aO+ zdO`EMpiO`70~yx(QGeLKoNp(;znbOZjSpT^D+gqad76`~br?u*0$?I<7EHE#GZACy zP4FG5`$v#*#v17>2c*{BAT`>q6+dnV>BlFUCt;m&dsmP(_SSXx0LWUVXg&ja^kXi_ zF#TZ9r+U5Q$9CuIN$*ACNjH#nW@}Eeo`E1e@q>vx2^HBr8Huq4*vE{(P0~jh$k+?A z&z3ifKRrO|9RsP?C13n`6lDG(Xl)0%U%er693RNKdTM?@wCT@OkYV|wuP536sr)H+ z@h6DmP;UiDf66o`Sv&$3?JKkr|G?atRg(XQgjK9HVNYEH7Aq;BF#D#-Ic12nzi-0*(Mnv_c%zswa$ zWPQb&FGUUX>lKh;`b9tFd^`F5g0?PR1#~S<)U{QtImz1RfvhbEvep$~BCm!$WcR8J zW8+?7S5IJpo_`?YCy;$+EY$N4q-G^Z&2EdtpCXX!>$GPi?*nrC6p-WJ0(qQ|K*n*9 zHP+B|ya9F4ug^e+=@&gY)%wbH@hpnpv!LESusT?&ImvpG^cs~4(z6W5waPpnOCPp- z))r&qp2e=0KC*IkeSy?{7NqWbAoV8o)Aa>f>#M)`H3MY+0Z6|NgB*Y1069(%kTD*l zUlTO%f*R;o50GK{ML$mESD}kvxi}8%&Ieg{f#xLZ84I$$B9QgY0$C6K(+bnC@?yJR zr5GFcE2Mo?Y9Ad2N}soZ)SV1culpeJ<3W&m8$fFGzCrS-AnSP>Gl1#~S<)U{QtImue)fvhbEvi22VBCih4uzOX8v2m}k ztH+1mAL71KLB<=PwXQ+>RkyG7Uk*|;C);JO5aUKB~>p<#! zsQCueLBBo&8Kz(KM1H?M$MtXZlwr zsr>z!?x5wD=F36OY078v_i9Q(*0&vGeVLJ#9@bR*bIC6UxqTeSepY}y-j5(_{vBkr z+ah&&LB;^o&c6I0L;jvkV^93=ana*b%|Q&?opVrxV^MP!$X-h|Ct1@HkaO^b<|J$W z9%K)DLH77Jm}m~x&$7=!jT-hj@N1uC+UG%#HFfwx{LcYd%Nbk6|K=d`e9dQq^nV}7 z+6uRcziU9&=J`_m{~2W7;w#xc2;}%#AdmL}NZrptMx6@rKNV!0j=Jf8CdhF5Pk&G4 zf7*j5`|rcCsF?%O|2)k})-(*H|8q4bS@Sa>{a+5Ur#Hbw{`Z_?_x}ToHO~Q`_F1ZZ zZUtFWy|2apjv#CK3uGb?pxegWB2O!F^LH~o)-45$C}SN!kqdJXbn`&5{0`s7Ix|5HHvpQbsmTI!Ss;)90Z84?K}MZjy8c1NT+~hf zgCN7{Km9$``Y&)<{~o>Or+}9Knx}!5|Dff+<^w>>f6($DwEPDX`QP&~hyNIB`XAE2 zvzGjk^w|@n4--Jvv;br+ca)3Yqd?{>H2)T)|J^yZ~g>g@%o@#0j;e*{@i(`hokAIRg}3NoGmS>Gbfvrz-<8w4`Mud2UaNly~_Rp#PX z0LP);M38kCYfiHMc_8Zxf~e+xpu$GFgEU2So^3xUHZBlr0!Udy7NKm4R}cW zcmkx}w;=s`@?pup09jAnVi|u0$m3iOG9Ct5-yF@$Q3L(j1~Qy}(UU}eMP2-g;W*Sg z3R>$+|AtF4Xss{MT3?{GzQ9C&CC|6}m4&f!ze3u_0qx`b8Pex4kh;@B>Rt7S`0+4E zy^SFKnlV%I4?xy)807d1XUTDTfQ<1V>w7@+Y}8<_FOcE%i=N2!(EaaMCQmu}Z{`JX zENhK{)*92i7-UWJKx>VG)*1s7dDiVecF)Q%mYxN*k7L@$rL(2a(I7QTKx$n#NBmd_ zQtJnhe!cRjDTKZ_3nE>{CE?j-Vu;~ zy*^p;{UGZ(2iHT69|H0?BS6M;dYybp^K#T+`2{kZe$kUee&u1?Nq(j2+5)Y$rFk)E z`2|{jftFujBEL#Y9e!bK+^^UId7t#6g{@e&=N^!KE&-{#0i@p4Me_dPM`+{4Q0i@OukXq@Rq~EVVYBbv{e!K!Q{{>_X znV-sj=YxzpK-O}%=5IldetZBjOh4FjB0nmz&FM!J$6$^7K-O5PImud*t`t8~!9;#! zEVTQPfwACf%)(gb`4iDT z+HcW$2C2IMr0!afdK117e?9@}&+x61KLc|6mmv4s1u`>Y84Fr#1x(~ee$ej6ER3Zev2}X?{-6~y%sWV}r$K7H1yW=Ddb!`c1JaM{ zH%LAMe_V(Ylv{)cO{r)*+A@Z+;~G9|7sdqveu+405|i{|;^gka0E0 zTCUZ+4*m`+{W#s_@3FFH@#Ey5?ZepSe68o}E`H>ItT9h>lC=y2=|=!$trJ1h7uJ!C zf9!MGV!JQJ7`qJLk4JF1tn-~9qs0n24+etN9tTph(@HsC#)H&+2c*vZFH8O!$eR8O za(v5Ic3*$KKcN56ED>Nrr&o0nfLm=xv z3MTTb>^Zw<$(L7oR-%1u(LNf4q|crpb%%r0JNs4f<4%xz%R%~e*DA@M16j{EAjhBf znjGgWkZ~i(`fkxY4K>iOHXy_47d=VjSL!sEHHPERuN=@?W18oItY;W#tuc`GPXrVB zwP%UluVRdiudyQSW1aT#4@lk4tHrNDAoWgvUHrHaq~6mY{Tlp+R}i));85G0iJL*0c+>))>ehj)I9i z%Xr@ISu#EcM$ZD;$7b!LPMP%C1Ei)Oq*jZ!#E(%RwO$43*W|Y)e+#r~0XhC$e4dT9 zcL5orK-M-^^EBvN>nr|wwEFh{Ukv?7w7&e<=Ddc5@i__0E70;v^9s=N3bg72Ew8{t zUS+@F@CxT{e0_ypkUkE8jPsXCpTj`vP6w%X)r;cC!yxrGg7jvBIF23mfBmS1nk{qJGW@(ZM2Gv1W^1CaF`208x1GC58U zkTD))eGh0}jvDCKHjv@;i=Le7d<fDWP2}=`wajYGeOq!xaK*~qaTAo zhUo`;PUJ^h7e4|x2DK)F^rKjFlC{nQSz8cH@AApP;Vc|Ix96NSx*xF4kPPL1pXult4kjvLB=wWy5E7+Jq}WD zZ4L3GT9WwlB1ruoL2hqaQ}$~MGW;Oxx>NIx(563^f(+9i_Md3I6k?n6+LDQLkTrG$ zS!0&wBx~sjvbJ0>kvAP*v3rw`vGgW*P}ccQkkR5#SuX=YYK;S_(djQaU&e#jSRn!0#a)pNUhgFYTS2*tcN#2`Z4fK$>)IFz5(QZUx18y zX|g^Vfs9SiqaR;`4AT$xoXC%I7e8V+2DOfYtT8!9a+0+)2I)s8n8=TuSM7du#8~>_ z)4Hc<-S2|bItWs$NxJm=1xSrEn~EQ+LFT`Ktf5Ua*{>7G7y+`DF`9RS9{uPIGE6_% zb0R-tE`IoN4AwXjWQ~QIldNSL$l6N4M1JJ2viq?BW3BT=>)xq#x5$vb27=TY2U4R` zbLoFP$o0{B;=*L?i!}NnapX&OW_Rz`K*9eY7z3m|D z+@m?kdJcm0#B++jX%%?Q?nw&9(i2;pC4J<8jAD?w?}F6*9;DvFO!4Cfkp9eQDftH= zw;u+%Uveusjt`_i*Jz%hf8VMd$T0n3|EKyquMgXu_n#2{E(Z11fUL7zbCUIJ1?f)| zWWD=9)`S1Ff^)^!lRQT0YP(OB7+Y+O!ZWt%@;da=hgw5%Bhu$kkh(=6^)8<&eoO(W z_by1kde4%4D#&`?208wBko6x28JEl!zq*2qaj1dwIT>V_e$kIazwcXuZBDOBa13fK z09o@g%}Lg>8f0x@khO0D6M1#;4ZBwr7#sHryLtlJ#~a$mFCewgnj?O72dQ}kq-Kvt z#h(cv{i;_Yc`uOLCxRUR8pz|k4>AsctnrxUyHN-I+7B{JzvzivuiXFt)MeQ2e7@m1 zQ#?xn=~cnbCYldqCs{8RiQsiP!6x*F^%!g|X^>RSgou@g;dWM1YD*)23iC`kX^4_xhRgAH5 zzr0hVj|m{-WsthNKLpDRzkDG5`b6_2TnD+mE6DoBfILnS$S4C@-x|&5 zqXzo*49GD3q95}5;N;(LO@8>~-~IKp*R=(*<}}So*3ueeZC=pyh`zB0);aNQyGPwH zwh-UItMD#hR0>Wgf`df}pvd>Bp>h?0&4kSo%?< zb+6O9{{*Skp{4lI8>B|H$)B97x@{AocpS6@O-d z)JSP3`PCq|PXf8$Opp-Z<>tz|XInSSxcH+$fkTovToMbJl zL3$Gg6M3`gUAs4%FqYorHkG;`2N@ec_H_iLR(dn(_bZSZjWWcK=^*p>K-TaV$o-P^ zx^$^tr@CwYHT3Amk08VJgFTBMC;$Fs1lvx!7qt{WazNIYr#Z=5hJmat04DNd`+Igj zCSvR|?31}u?h8Xf#v+h?Z3U_ICrFLgew6#m-yqk=tGguM3vzp_-Ljt-WE6m`WwhqA zphrKR1R2if!|XeeCzURqgm4_zxdvpN<(iYMXDdigqF^FVVqv={`!JTCm=V-Ic4{9j zev&>1g47)cQm@m`;>UQ9{#>|6@)01nF9um}2xRO5S=WBek3yUN)M@4J4?RfaPiFDS zYbF!NpW%}c*XcK1KcKaK_UrlqxqUHctsjuF2V`CQ zHQx?x`tu9OaQZ_J68RHw@h6fg{%i+X=N`>T)^iY~Kb}*ZU%Bh;{-n5_U;1~)cIw|9 zYw^AM16uxomOoMT2ekb8LHz+Oe?ZG0kg*4}{Lwr^&#!hM!|4w_NaRnci$9*fF0=Gf zK-QV2ImvojgY?G>CR#s%4R(LJVeCokCm_EUwG(8txL1B}XCP?#16ux!k>3{@4_f}* zC;14_@&~m10U3Kh%OA~ipw0C&7-Ts8p$Ccl3A^|cz;UQI5oDdknv<+&9!P(JU?P7? zKD7I@0%M*2WR8_ShJuVmAa%Eb)cq5r-fQE;kH10d`tvWz_k!HsYP{^{1sMe(>l&^3 z8fep>k3ojhA9|3;pFJ-AL~$I}xesKWm70^RC+TnTClyTOPv|4NKN%S7^e3o&?9@J5 z6zci`t@Q&^uhadyen4ye{9D%#$nA?k)*AvDdqCE;U-OR8raza045vTzAdx?*GfuvL z<>ENh%LiF!f#xLZ84Gg#6oHBSiIm&@nT4@Ve=;ZN`T-e>Kbp3#g0+4l$)_ei9>CcNG!|4w_NaRnJi$5iQia!fL*11e`lJ%?x=}#C; z4!S###dG$J0px3q0ns0|T z{rLrCIQ^jq;?FfFeSW}?ZD*qxvrk{8_>%*&&OFUY)-w#GKLL>SP6W;USxYkhvF5am zcAttdwjAGQM5l;9t)_}Uw}9Md9!TA_AoV6p6F=SqsaIpV{66L}kohGK$@Y6dj$aD$ zIIn?>y&&s5pm`~3V0}wLhWK^HiQmtsCyD$jcJV8W<4|uC$hs>uCt1%fkbcEL)_W98 z1J%P-LK3$*+K6ZuuR+2I$w zjjykuUPpH7b)>~)>2n}R-AN$zx)zBalR@fz0CEkleNghhLDq9V)+@&k2U-7pAY-|% z<5ilcp$5w@km2-;o}_2h^PDp*+taG^HJ;O}`HW{D@?5n7WB!1M*>~Gw-^Z?tf9xgvsolpA#uniFW<+viU9{{geGdV-Zz;%n z-U3-iyX(ZSERc2d1zE@I{pI(me+Q|3;{eGY1G&8%512R4YS^H+q`=UPjdlSeo{iS#R%ip#b<6O%D9E+M0LH1Ux zImw#lfn3W$kTtIW*+Ut~p4Nkj{GIi=-QNht7GNLG5b3KQ$e0bXhH{WK`~p&Y@Gas` z0Z8phpyl6C@w55u;_pRzIQK8y`;~+Ap0%`S;LDUwbQQ_f7*i7?haD>*=xnm z9U!m2SM`y663FeVL5}|$WbJKoi9uMDahKN(fmBrM}IE^8K%GVPM+@%H12UV z{MEg3p9^C9ToiA5QB+f&pUeW;SE=SC`&$CCz7WWI*MO|Q9Hh5fLG~8~S=T$?DCeLX?e zHyC7nzQ5(~jZ6bsUpdH{UagdTFUa~^9g^{bLGHf*$m^4;zfZ+EIn|t%W4m+Cd^i?0b3l5Lr#Z=*hJl>30LYprg6yFf zWKZ)zdJ+WL^9qojl!1xnZ0uL|Ia`mhW!NVksYj&mJ3+>CAZz>%WR1r`);8{_`1c6N z+MWSf+iH-teGIa;H>$U?YC8MKokhNV3vbK&5WIh5QYg-NS{94#h@~=SF-XK-R_X4?pG00vwfINQn z(?qWaNd1W**U=*&V;#tzKh}I6`r>>&3o@MZ#rZhZe5K7idA`Cp7Bx44^rAv@k~QrD z=}8P^%|}7@ken>@)fl8FnIL=a2-1@*FwuN%{l-3DJu%jtubB3IO(XGPD##k&1zF?w zAZr_Ry7+fD$l4}@tZg1hzh4Ad+n98jk2gTpb{OP*{n%9U=FMdLK#=2Sg53X8kjJZ+ zA;-@K>BV%A`s+Z}6#*H^&1JqCf{cOai}Q6G$Z*aV=i^lK<-_*5XxQ{IjK95Q%@;^7 zDl{jp`2wx^0){0;Yg-Dkwzomn_8G|9c7d$z5XjoL?v?vf+CI5o<%6uJ*RPUK23h+XAjkg- za)0k{a=cL>kN*-#y`Mnpx5E9Eb$RtZTcG#d(V7oLU)Fqq4Cj1tJ`z2TD8M%7^Da*v zy%vI;t2E6?*3%kfeO{3Db_2~hu;vZlXU)mq+2!CjUe@&2C4C4Ysr5ESx?h8GQJkDMvX_}L)r!{D;FVI?FU?RT?qISQsF*fd(r@i!XCCGRHWS^@+>TUz6H@AcM z@fAqDW*x<^cIQccJIH#T0y+M3kjMERWSn`v=(GSCd8ol!Um(Nj7d?^dXSVCl08wo3 zgaXZ;i*PJz&H`C`spceWS^`>Y47Ao5Xzp*GlM8;ZdsdFI^vtJyEYv=}2C3Qb0`bcW zQtLO6THU?k&x0V3|ICGwe+_bb>P0gC8j!~s1TtoWtZkm=70|cV7szn>ML!a)ujE-L zU%!fQ-?F>{Ew3~$1ud^Y%PY|G3QXix`A&yd7#m+-KD}>F(fj7RAaxId)NRs2`u_r? z-kE2KKR1K)Yj~#Q&w$+iCCK{fx0K^F0~rHA)_0TU6{x}T3uHL`q9^h*{55!Lje}<3M6W@+1lT*5SYT)=?K=wtl&MTCCLH03NIb3-!$ot$RkoV{rAn$|oLF;uO zX!_j%+Zy5@HL`Zu{a%T&rT9K0aH;t4ImoDgnfP=QNWUKiS?@<6>pTQ0_z~Zu$yfE0%YBFyUXjVD?rv=2(s>1K-T*9<&tOhknLB4>~kQ<{fC0|<$jQL zJPfk8Z6M<(kp2Iv`C9bI{yza3=I={zp8nTd=DEye6vv|GK4m3HZ`#zC?~|z_+aPQI9c1lod&>OX3UWU0?j`vi zklX(PIX>xX*}oCU$0Z=^oDMSn1JZ+qny*BkoX@vGhB=>{tN%5hMK1Fh!Lg{h zUAYIOH%%JI_es{)Qh6T8nlDxMQuYHmpF=?Qco)c?$AO&B2f;-1x%FrJe9p#Lb3P;L z!-dy~FQY)#{5Dt}+z+zmbF;r=#%sL6v!~=lXLaI<}>0lpB}wurYO@udecjDlC||y4gp#7UCMFF2SN5U8)T19 zg7jo5NKak`6V2z?z4rNBi?QZ>hV^w<%TD6U5Rg8-1adyV2U+u(oyEuAAkWVmLDo6~ zO1=7CH@>Jq`@!)a!FSO6@ zo#*{I$wUj@l%kIe1YT~!>AAP7}j(Ci}e5dO5Mxqd)f|b?P)#mY)>XUJH1+l z@p@mL_h-)bdA3+b@p$~5iz5L(p zzWP!iPmM}5{z;#_<@t zL58VI9ZPqo^xM`&ca1|g7xfq7I3?(d*Q;l=zgiK=>w=6S7)RaVX21G-f7CH`b6s>h z|6%XfJ4AE?(?w@8$oNU~|7zYHse)(|o+rAkSvtS}*8Bm@&(rzs;xfO~F?C}ux{d#|_v_L5jcI?!wZEHmes9tFt*`Uj z#ASY|WBIJ-Z`xx%I%q}wJeuXu4UU%c$p3|`t5G21bd?m*57_Wm2^E{%Csq1sm zP5R5;Z_zEH>zg6EeL=>2&7ahKHpWqRKFBb2sblIExadxF=mu{P-RN-9{S{<%xkK_x zLB>jqv-$-YrY?0%-4YkwgAQF!q38yViOwXDu|e~XHLs6x)NKMXOkL`jx@9i9BmcJh z9J@nwLn}mgEy$?3Qt~<=;~2(Kx8|KE>r%(kT`bqhsEh6{hi(YxMIMe9)$8J~dR=Vx zx#*q+GS=#Ow81=&#>nd$>X^F8kNd2B_=UCdUw);%-x8b`)D1r*I-5bp5zUWlzEIDj zrRI60y3{dsy)L?29l8Om6Y7@ex>~90Dx&#T%_r%)nr^Nu)uoO(zj-dYIfv~1M#hV7 zs;;Bvx{hww{7%hxU>yD04Kl2CrMlEH`z>Snv>W*oKm z>$_cai=GnQ*&t(^=3i^x7vrcq2xOSL)UocrdLIn9=+1NKM(z^baGB_S1~OW_C3!25 zu><3%yBlPfy3{dsOI>tRjyd`rEV`l5qVpceXb_OR5y2ugccbY@j zqwC7wOLV4#jE^+msCj)|S4~{j6?M$lIeT1mk2-XNW2E264$=J{Wc2z@@*I${664r! z8OSjErH<)y>O7w{hF`c3|Bd~}?sH(M=;qEBom)Z1%bKs!d=kcS|LGvZ)TNHuZQcwlEq2k}?$8b3e57tv&)5BWzFzyZ)Nviin55_Lbo2aGUFw*+ zAs5|&o<1I*btL`LUvxA3h|UEd;}Om0XkH)VIKNFmhBd#cOC3|U!bNwJL$?IiJ@#Al zqv$>gGXAUiZ<;UE>*P}NI;pzUF?BujebzDfCBB|}R6bdz^-5n)=DO&1u5Rzw zkDn{^&~N5u@%cQEQK0!q%}43aq2tV-L&wN@L>*JN&_#EJL)V9&E2-<5D!TPSMz-cT zn)lV8LkF2ZhpH}hOx>W1ZtEKMegk)lu78c_jsh9WG+&|lB#g7JS0KY$&#FruQ@7kj zcY#B<=r+*}%oW{9Afrt4HJZ=HIO@&^8Ky3EOx>7^ZsR0Jzr(fPW!f*uSf=?3%_m`; z)i1~}b*W?Orv1lfjp3L0c{IzR8^nE_^Xu39{wTfgFVlR5<}3BS|GIhKSD&e4>iS%C zlWN-gO~rkjy19DaAENjDQq31=-dykdZOr?=>QcwlEpXAD=+O1)y7K5cs;}!PTk{;v z`|7$HEpyQwSKMq#nlE`bkkMD~`-9B;zWPiZQ#b0OyUU>)z;hDoy77hR)CU>an&)UfNuR4s zH=nDhE_F=Zb(N>?Ubkyf6L-e`IaPzr}>Qcwl z^}6V8b?AEWx`n!_`nsmMzOKpBJYVzf`Z}kV`8r2+sblKqx#;F3+xrdax{Az|es_S3 zG@b7Zo$s}}t~R)=E9#iKMJ~GQ9lBxt`8QXes|?ZSDy5n)(0sH0{JYKV=U<2JG8f%$ zb?p5XO%$I4b=z3apC^HgGR@a$J{#k#>odqOuand<`;EBhu6F2pCa7+0)dd-4ny=Bk zKE_eE3CJ*YsblI^y6ASSYwy?hZ_$m_6y0MWBdeC=-9ScPjHB)#kYVal$JEU%^;u*1 zC4L?)aq3P|-Fm7EGO|)s7i9FsI7=5~n7Y(4b+cV`GwRv<4Xe+wWYq;3S#?wwWNcQS zx4HOC9aA^pqC3x_8`5(zcEx{h|} zI!e?2GqnHi+HWtHeyL;XhFx^0IdlWMu5xu94bgQ}s`&!VC+WJH?y|0^W9sg4(LL(a z)peDt>u89sqf*TmXg*2T)pVD2MIBQ&^+}(#Cio@3p2ya=`y5lBb9EgJ(REa+`2x+4 zsn0cC=9fCAZkCJgK8J2p*Ogb-QFmQOg_=*){8wF9f4b;W$JF(^=niXO@7J&WdUYLj z*L75=`9#e}X}{w@hI#%{$J8x$(cSLQ4eGiI={j1g>!?!mqnfYOb@jT-x}uJ$8*nhTC3}*QuCvl zpQrQN#bth}W9oXI@>#X!LcjN>udfDE%=>X^E1 zU3AwtbW3zymFPNJsOzXg^X-~1)OEGgWnEFn)XjC#?R=WO--xcORJ~3%*Xv}S=J}fM z&~>%jWnEFn)Gc(;UE$PKpHu70{iiv|$kRMu^BwB*ZWo`aW9kN7bXzyF_nWKhDpl`C z&Gmkir+L2SLv&pYcUf1|NpDo$Q@2_Z>+>4rF1iaGy1|k1xAsy$k=K*0K*mPRw`d;1 zIIgRAK!$wozLBR^uDnM^EmJ$@qMdfSz2~BvtNzYkY_jNAFB1LbAU|)gO7jworT){P zn?Ci@&#dKXSnW(taUra#Hc&#a_9?X$-7OZ?mlI_mHZsH(%8C%O-SjLgB3p9?Z_ zF_y=<8Duzppq}`UZq0$uML)B#-G|87D*f1g^&uvD6(D{1Uh^o%QhzV#rcXU{9tvFa zgAV=Buqu83Qqda&GR}Nn@)jT?jIq?;2r``gQ&05IwE8b`(a&sR@4o~;8X*6b2Oau>o2v99`n-6jJ}+MSFVSBC zGKw&k{m%p$(tnjc^<*8U+ty*!rH-~|*nRNg8ExE$pg!09O`mIqa-@zoL55GC>-LF1 z*LC##Gj`-`lnuclbW9T)i5{K)j+OO zc`kK?9Ci2yR(*CjGDLJwyG3*tfn1MEH4k7ceV70;%+KFa%k-egMZ05~-GkUT(GL76 zI#WPK&R>!b0Im3!=+*-nrY?2du7%57^jA3aJ?LW@ju*UH^nL>wCHay+0Wwmx?`9|Z zw*P-4sU^M3bui+h-8S9cdkK1{HpBmi=#2px*#{-R9%KYDmcB0s8P4kv_1xya(xr}& zqmJA`#{AzVx~B~l-N!)Af2rnvjAb1oK&hj;r~UzX{!T4({xcW)tTFt;efY0qQ@aOI z%x5XS??0sdgADIs$u9vJF`fS-F7r7fF1i`b9R1>X9Q!SLM06ep869Uz-U(#H^!eS9`18B^RX$V4)Gc+< zo#)Wa#piyg8(S$l)n68!r$El{vzq%c&YIu&=Y$Mh>WHqq-U_?urexUrEyCx1xW-c> zqSFdwY}9;<<|X<$p{L`Y6LS22S*c}e?{U#Cc4+&DRGnY3>Dsq`K4>|}zE^1;z*zP@ z0c1GOFY1~4sf&EpIDX-N{FmI^-g^Y^VVpR>UlhGDAmhxJByRySq8Q6#>;)N4ed?KW zp5>xn?9h+GOU^mNtDnodQa_g!(fljTW9t8r6aH7NH)@&Mei!Ye7WUr5@R8c74@;k| zKt@ROH#Lu_@86#Ay-Jrlrf#u|?nH;K7tdj>^Gp4GT>WjaTrc^j`UYvv|K1ohw1c>zco%`L7tqdHxe*SU<0Bk?SXQOx+3>-H~TG zeD;fO>SO9N$e6GBlbUbFIO=W#8Ky3EOkK}2K5GoWa3B8L<;D;aom46$S`%OW9qhb(aq1a_ZzxjbfY!o=hXusV|bF}cY%zx7)RX=Aj8z9j;WjL zqPx|h8z~Uo+}EVPp&(8)TTe)G>7nU37C=+WU>+zEh0jcq>HrN|5os z<{LCWruV6uF6)Xqrf$$hcfCV5a;xa3&Jo>KAmdrhmukKPc(7jS37jW_&hFsj(B7p?F1RORg-); z$k>c=)ZGR$OkL`jx@ke5HHKff5C3&M+upBF*Hz$E?H6QJTc!PijJ~?A2Dz*&>X@JN z@VV$Nap>k^ofP7@fv-hpGRXKz^Z#l-M6XxF&2_a(u2QcwlEpgGE=g*zgQN9T-?I@*Jb&AP6(nd?e* zsblJvx#*^}vG<#a>koBPtIIk%3uHW``6HU2r`M}4=JiT-sblI!U38~8bOTr?maeX& zvveIjr1>M7PttWY-CS3yOC57PCqL`6YUh{udOqsV^^KA9sARkNx)@|M(a!^>>*oRc zVjPb#2xOS&5p_&muZ!;3a~wY7eP5oxfyYI63ds0V^Fx}Sr|%PYG2bWNBI}ttrf!~# z?mmZZ2=_JWrrsmEtw6?n&7ahKEyl6m4IsnpmpZ0yk&EuIbM5`6;`uLibM<}Gq58h* zHqF1*yg9~Ew++ZJb*W?OE_2b{?$FJ|b-=n#>iuV@-hXb>>&9@sZk(srjV|VOLw%-> zsT*<89oW|1uLsuw>W1cs&+9IRUu5jqaFkjU5 z>V2Sx-Upu7{3Xqg>HO9-&tKK0j;R|)9*?+g>kjsQbM?MZqVxHT&Sx!sU0YXQ*ACJ9 z!fn?EUM(}<{DF#J95nm60j7b|Mp9V6b`u@k>6Yqai{ai*J zQ#bWFA9t}LuG_eyz26Yt$DnQ)?{Dzu?kyl=$b*s(0~uj`-(%y6_dTj~sblJ9x#-Sv z=tl9}p1NK<&!_H{AY-%UTQ!gAbN(YIp7U4fQYZb4B)rdbx(EOFPwRaazl(PAdG?-z zc+Z5|jMSS%|2mMdUh|EbhcLDpzW)x$FrPC~OZt}QF2yd|(;V7fJSVjL{$2eB8RHK~ z{s74EVH|b)fDBWYI?ldBF4~^+?R^J~zI}sL4`dwF{D|g7+V@PCzNuyQUE!iV(V^|p zzGE@bt*(8)pgz2;d8+o^%%yMYnCG)+iO;H?U#jW9gAUyiJQps+wy-`g|4g5kUwo_7 zaT&;1sLzp?#-AhC#rv0fK2yikZR?^t@&dcpnRp&bUB5mrAFa>JztsF2&Ck>4r(NRD zPYqq_n7X+xy1N{@MT0~)q|b-n)91rYZiUsM(wE1>j9nDC;k>67J&@E&hv=)JR7>yNk5&}vC~dm z$6_wp5r=jNbH~>r46n}b2%X>0HQ%QBTAl9==6r9F*9Fuvuit4)ebzDgC4OGzTx9Rt zhxwy+Sm$?(&hOnvr0;t{Mqi!pJafKPmpbM;^SS7*cj$WYJjFV%^!6?IJA5*OXo z4&5R=@276)Wzl^PWSsMg9VF1kw`x-mR&rfyiDM}MZzqucA}s?XQYRUgym(>3Go z!x;Ti$J9-J-p5j{h_C02F7|%?c-~B1?{ev{2grCz^F^AE(&y9T;?JiIUFw+Uk=I3c zo>Ld=vlKc}UB3r({Z9H)>X-&H0=k|j#MiTN{h*Gio9CjNa-S1szneARs(Dz~^TzmkHgu^Yy7E52 zG8f&W4qYGCC$Cq2UB6>={r;}`pPKj8^*qR2&w9P0j;R}Q(H(n<-RDfKPwM(~{r1=O z`?==ZG(S(@SL|Z0XVs;SsaxryyU(Fpg7rz=kgnf#x_+-%A@kb{WGvM6ywqIJs!JWw zmCw**zTmU=;g|S%G%U;BZ&*J=6V=bl9MI3ptbJc}*Mp3RetzcL1fQRwmZ_cXq8)W; z2k}{$GVADA*Zx6jW6TFpM{Cn5y=tV z7JWr`AIP6~{?I&tv8-bP=vD{y#0UBOOsR|h9*2JHzAF7p{k+UY`gxi5KZ*W@pcP|9 zzaHqOPd#%U!Y=v+m)ZM|7@wcXT_AcxK}NfUl6yf$R6jqnH^Jv;s3-dJGu9p#{XI^7 zoV&}cqhlR>A$nUtM)6k39|ajvJ>U1n&-eQF&yP^g)K6XJv-abc_&HF})!u&y=Wtv< zI79SSfsBGjBp(ej!g}6sjGy-oed@V=h9=9Uj+mp4$PHC>`0fzhIUvJ#r{vdwj3~yk zpS>W%`93%G#0U8tjo(E-(9Q0H7tg@rK17a*-cFFQ{vXLVf()NNFY5y`och!==b_j| zKjzTS#JwY~pSn`?T7itMnt!XgSMN7nPuy?p>wtQ0^AK{Wqp-Wf2mGuNuOpN%b^HS| zLPI2f6J+=>mh;dDWH^1Go;eQ{F8Y-Y{qVRdeg8qx8v`;1{wev*AR~gY)c+P_IQ6L~ z`toec^PH>m*Mp3H`aWu& zzK`m|IBVWPhWWgQI?}h?hYMYF_c?S+a31k>R_wUwR@e7U-_`d~H)tNz^KSWx^RDXo z8g)#+gD$$meD;1*@qQI`!y(b#0y1uWRq{JPMy9^M)gk`=mht+II;L*9i|%%ZZYF-N zrEcnNqSFdwyr%ivntL&hK6eEfrq9$dbz?5N1Fx|68^X`?)D2dO?kbRR)gj5R1sP$C zqwYqKVd_#xbmbnG_L9#U!!Pl3YLi2^1m_2@DJA-I!eae7Ay3b*TlM@3>iM+%#Q9{u zu2IX>_PJxVBUd=plUfK1j=XPB!aH%8WsKbME zC0>VL?`JRT{mifD+nsv8rRw?B?8NzHuY-ExgWTUrT=a9Vviso2ITP29>iz71-p{t` zdG{^I2;lz1n*QcI24`nX;5r=-%xW7g9=cfbu^V1SN|Ca0d7t{OOkp%ZQ>bYIx zqAqph^|bpCGwyGxepwIwKt`qJ$2Irp`B(46`Dgcmdg6mz>ynrItmE)Y{9LGT=ojIf zTBf5ye~bP)kTFNk%lUdicucAGOT2 zzsyB@lS8`*@4H#odwpN7mA)_cndV<=UZU^QJsp3a&gh#urr!}4-JaLjdk*UTtz?z- zw-{txs-HLW>F3QtdVhPz<^Dz;Q@7GZca1|g6`#jozY$$eJ9Rxx*e-QU0U4PXN1r=@ z4AW=on7WxOeAXC#iJx1Yv+e!HbbW=ej`(xyI$cjUKQ8%D&St<6K|a zF4`f7c9F5ZyrV>~0A&23`C-jVbbUSTvc9NguCIWLcE{fKzN5Onijw5>L63us9{M?s ztMzjnFZ<4$%$f%EToUz^t* zV?f3p&G%_O3FGMVbdX{COdaR@WFZ&rN{6=Z24j5<6a8kxMSlXw^)*@Zz8FjWL7-Eg zTGF??HmGpX9^2RMcW}J+eN_7f8Amm*q0d8BVjOkLK!({jbxglKFZ--9{K9?sZ=X|F z*H?I%=xzZSSHCFvwIE}quCLc!))#d|SAH&O>!LgCI(xrfte0gtu1~L5{q=fPUDsP3 zU2i^JUwz{1%kkWcTBdfci+0qZor*O>ZAPYEw=UA_)=tfT(L7VvS%>&KbLdmg)Gu_= z_g`=CJ&M<~asBA+;`0HJu~^sLiy$M0v7EOfAjA2bg?grb&_zG$&<|kk#Py4gi2mas z<4Rp`y>3W+PUvG~7sb}h!yXgCK?fv_(hEC|~b?kAyj$Ntiu(z(mTwQlJ$Jd=h zpL(W#%tb%y&=2BoX2tcxYjoX%j45j+p8+yL`ggY8iT|A~hd%X8{j^tn)_(jFKj-}Y z?EQxZSLu816TLL-VM)_(kQV*L-a_n(UQaN_y_^?Qo?eaBOxKMG`I>ia$&Z14M2=~FMg zU9zX;fu^yv=oyj5;YNYe{HfMw{Jhx4d$vctvks_V;s3ox$%BK>qt~%p4J#pf31V*7iW#j95qhFKCF?E8IXEz z0vR9PD|L1qBj4v(#te{k&ePm_{jf?t-@{tu|8?5b_MaH)3BN zFQPx^@|f{()|-5zz25EECtk1rJE`js$apF$^&SU#e2!)O0LJiS6la^s{UAi`UQ17O{#VDG>D}{>qe5p@xLdL5xLltjqL*<%wv}H zmt!sf1KO>S=h(y&-atmdG^mz_r)NO z)n>2s_YcUJuusMv1sUi3DmjnG$OhTp0L`8KvHnw?d!^XUx%24f+*9;(?>u&*-lC4) z(y))&8~61slsYGYj7LBo?{HB1`|(-%{w<4T+z%k5?sJm!n2fd{`|G5+vp?1^uNUNV zDq-aDpdSB~Y4g`T=Y|i z*!44UuEq5udOq$18DBpj`caVK)#qMaZRcl|KK0~%tmd}Ax0AZcXYJ1~aUV(@bwqJa z#Oo;1^X5~K5xGI?_zGmiFqX$TVmptj>Y$$ZaF%sV&vMaEyT$H90BiPyzOL)XLB<=u ziT+xUQG~J7pJ`j?Rr=I3=fUryU+U1$#hQxi=jyr}3Ni*Q5&e9S;m26&kFc%7Dt+pS zzPx`_?4qA`tD}FcsWR*6__+k@jq9$JuDjnguhhIq*WpatI;^^mQP0#5x#*WV^mDPM z;`%XNchx6Lzn_Dwr$TeTuEP!P1|o4xlUtf{zuK-b+AU3Yz#ivB>5QKIYcY1=xi z(x;y2%d`Jn7yY0^KY+h+UThs5pBH#j^tOPEer1vm0vVI^@1jpP|1P>dho_dQUFf2n zG1T6B6z`i*J9LletOFTWjF!9?$oN&?XZbV!K8x`@nmVR#&_#EiLpPEuy5XMMFUaVp zKSvA#89OkJYi2jduwK_{ztk~x%UyI+ZnyUv7$dsg9in?B$ar7#4Vq8FIO7^?lgyPDqfe<=iGUsI}~L6p!sgin`0bx+nBH8wO{I3f7fxSoY!fqeLRE}+=u^; zI(6|pI}6_r4-?(ZAY-fM6`D8K=ihD2=ie8}&ymzIb$u?nV~5#&j^h15>Uy=m?%H2Z z&9gQCRo_4SGyeV|*Ols0C;cM6_HE(%+OPoI_dbQ4Y&8u6JxXSeMamx@vqBj@oyx^eddDHc^2gBq&ly+wsZ!0SG1 zJiqYx{O7sD-be85sy-t7+FAYI_-i|k^o$4T2gfj826>G1dNn-tuB@F~%PVV*I_XWS zdupw!?hSl?u_qT}s@28sE_JTW`3khGS>01}SS?Q=xxJ?t|AwK4mKbB^=`HbGXIP3S zqjNn^gZ^@tVh^P*J*;>1;9ny>#BglZ`*WT4IJ(DEyRPKi&bSA3tDhRDrSbnoUFXFA zi#m+&@mRTUb@haP5g)z;85#eT+_}#lt<|gJZ_x1zG*53{%hMb^rlH5WW90vNo%)8) zIwrrcHvU_3r+toMI!7fsA02*^I&wkQ$nA_{@%iC-qU(dlPj861=`X(vn}t03m+V)q zak8iJusWW`13}DH!M20`4D6z9g;k~V@>SW#8anQBTw~!JZ}nNzbP2QeT&vgKhG;yDPvbi z9cNuBb?gP{SLRjit@A7oWTdyK_U>+~<_L>^?_7mUWal zLv#j$j6%)1o$)KkW0>b5kDq=vy=%zxAi$r$J#YFvH(?xmifRwF-tFoMqE3GAL#_AG zp3=v9kRkpwhd)hE_|q20TBpa#Etfj}1+tDQAg?oX^!raKy~9N3R*=zQxaiyha{MzO zuS-#o*T1woRKF9R2X#K*)419>p5$1qXi@;r1#wcdr(D$03Zkq(qB?(ptfM-7;c*+N zKO~RaRP%E{UdIM#PBLy)jsWW-9}m_8r)o~tNB*ehPlFASmupTkwkiYYgY_-be*O!x zzJnm^OTJV3{Wr+#@Epw#f~+sCpuHyJsm%Dq}2Z|$oh|ioVQCx z>G87ac+SOZ-m`~Y<~ghLrJhFBF7_npdHoH z+m(C3vymSJtydZwx>}#uP67G-H1J&TO3g{eb;_H-4#@8SJAz}t^S}r6`;UMZAYZLH z$p|Yqft`?7D0hKfkT>{HzE3imD$fBgMShX;a*!hmG$$Ejl|^6=wYlE^YA{9=iyP1 zQIIF+<6MyI{#}sg<8F}azV6`mo)oYR$m`WoknuLib-x?rx=+2Sy(bmC1mwEU2Tupb zgN?yyAmd4p>wZ1Rb-y1x6FlSQ_SU-Z3N}T41K13_9b^=OT=&m`T=$=XEx z?XA~^UBFhzuLK!)gIwS9L9Y8S*arL=JO^wrq`kH7JAr(qaUIA#Zw46wkn8?gkn4U6 z$aQ}lJRj_MOM7eG_X96PJ`%hLydPvd1#;bQ1UrLAL9Y9jx3>3O0(JxW^Gt7$aWBYq zzZkp>`~u|6SAyNa)BWu|mxGxgqYKD&e+TFTp8&b;*ML`nUx7WrT_B_SZSAdfe<64^ zazDs*KOO81E&{IwmxGKj$aTLT%mG^rZEvmntHA4#=YzNmd+q`m4}e_vE5ZKYc9847 z+U@N%p7B9bi8AUyzZ0iu+aUO}St3{^!yAz&Uy! zxCrF^>2i?g!?hsqPd9)(FNT6VFYW<(ANV)O^WhFn?ULv1F3iZHF6%_3R15Gq~7}=^$vh_!3(nGe%KRaq<5+3IT!cBvvDsx zquM#1da*ju+F^XkTJMEvWmT`Sym-CHxB=ufVW{#RkTpH6ImviI`5MTY-UC_FM$Nwh zSyR$`vYlk4Dl9BL0%JTg(YtU@|w^?bCS_Vc_Vl>^4mdP6Gnr)CQQ)pKMbCWe6{8zBdpv6@|sWq z@|v&<cni-2^3Q~@CV7Z~)$HrPKYx7?$~9rWcPlxX)$${&zwLh=l^o36dhu;2jy8h7HAO2H+HiNIhrt>w}$9xSo#rrjwo?-cH2=(q4o->!X-}R{W z3##9$ffn~e9rwTbE9m-L>Gt;tviDa+^*1Hh;)D1y{WWp@d2-wSO;Bwjs=q6FEY6tM zwx=(~^MOu0!wZ?oGlFRz@6Q~#d)Hw4ny;HAt)AQeGgP~Y>aRk6i+iEQXZ_WpzuELR z{ZIWx(cfy<-%7XtD+TQRwNd@eD`@d?^nTu=DLq9wABB3(@#Jea+Y=lz%aeigkt`<3 zd7mQ*x9dKu^K!&}Zr?)ozPC{=8r5&*5R2>L|I+V$*Y9}uzF%BFd5c=VyNg@DU*Z4K zum8qS4bS6S!i^WzqR~6v(r&z{e$$60_Y~kfG!JZcf5PwFRq^=U98_% zx?8_l@Y($S`+4)-Wamx$Z-2iuqoY1`hP!@_x_)1cu;cvvjveO#K0D68pT`m$C-yvs z_O$n{LAAT6dHJ%p#owX&{jcj+IDKkA|418mUZ;N_dw*|K+komnO+SmP2Ia$@4VZ;#6Ww0AJq7c4zf7$VC&EO^$qLJk2RO*Jav6| zyn?aMPfyZU?0O4z`$wbNO;mpshFaVUH9qUF7X3~4{Ix&N=4a<;rQ1K#FnfPXRDY|6 zTYLq*pSMtQu8lLfHqPMMIGtf(VxOun-(NlY3w8U? zMzx<&{f(_|@ictd@%5%Z?dx&5lMIiz_vf!+{S8F*pSiZhL8$knFQ3$tpLu+&m>+dwaOn>RNSbx5+ z+y0$UZ9QsyeoZZ|i7(S%sOxXA+yA6{e^4{)Z)9`pZxgD&^d%E}f~Y0Zaz6h0{f18T z6}w(y-2N?F*!!2G#uvYp#U=4sf3xXt+TZ#cPk*u3vk15US@-^Yt*yV|;nv><{NwZf zOMSOKcK)u}zYFbzYM-EYeAg{5i7(UNdDmZr+kd}%f8ra~U%Q*u-^che{rPMS^^WI= z+dt@Md;goL@$J54@dNbEpPtYB!}Y5meZ`)Sf-$!LOjJ9I>aWl*7I(mB{k{15)r9_H z&&OQ1f3jcg{k2j3&AVgqaeSH2JJ@~R@Hlq<)}z`3RDTWQSv(3~roSlH-*&fuy7>0~ zrl|hbB(V4zzD$2dTz~!vZU5e=wgJ^&8Xt?R?)~`^TYp26 zSbuBrS${7+AO73yd}zP(uAaEzjB)R8k<|K|g&ObeWESU2{&Jr`jAN*Ur?>srquK-X zo}Y{sk3x;(zv_ty`qO@)?p{#Kx!t`#T_)?VDSFRWW{a=k%k)3Zjn_Ym?cW>KHlX)> z`CD8a)!)C}|F_fEALq;Mf5W{$UpDJ+NOtRQEk5h-#pmlP{l%`I7`K0m9QOWM=siCH z7U#p^R@RkMeq4YW$`t9nf}6E zfBva$|K6y!0lnuVjm6dR+5EkD{Y28&ALqmEf5W{$->cT&5I^g0Ek5h-#ph!s{rz!1 z-2N@n+WTjr_k5(YIG4-+|GM9wbf4Gvu3i5+q1t*>f3N&zaTxwFfB#ZHcy@&9?ViDI z|C8?hLHDh{VGmsY_%i(kx&C6@{$UU8{nJq6`}L8uUj~lOERJ?fA zrp1p}E;2#9qP-Kw%hxGUy!3H=6aMiWK{Z}M`?-j@9Oo7Ozs3{pu0LH-{rASWI2_~Q zc+?|}nV0~hFd?o%J-6MCdTx6N^?ihsm;^6lQj9@8zx^Hc{MKibJ+n`PdT#5FzL*#F z+_nVj=MO47J2)eqlbmx=`$uCsT#xB-w~M8=%S@=2ng5OuXTdX=6|X+GUHfGkUE2Hn zmjCO0ZW}}#!2b_HorzG?8K{MNZrcQdupR38Z3OB`TYuDZ+ep-YlTgoX=c1n5Mq>^< z@=Xcv^V{{rdXBr>sn=t-XXkY_eIC93SM|C4`7ay)=^WM?ThseqJ@3`CUcDC1YoQq1 z?(n%g5roFRfJZpCUVFazkFe{=mm_m|&;L2p`M-}k{}tZn=WehcDqfG;z894*c_VXq z^QSf{pE{uOYY=K&(@^a*R6ZU@^>+`|Uy)JPUjl#O@hH^y8K%29<%hYv-*50o?Y{u^eTNM$et(&!yk+1_6fvlB<4@@+IK z-}6t&<<0jVs2N>^%HzWrgjZ1c{sfipsi)@h=6i0`_oynkxGrjYOVs{dQ19=9>Mzr@ zT;6r@9%^0eN3DY{A6vW-wQkO$_Afi###0lu9wSlX-Gf}xJWo-dC;klUXY$Nk-tUWS zz{0%#73zCo$!6L145;GDYuI*uCG zWmNkGH7;Gp)#7mN&W0&a&HMA76Yb|*b-(}rsT20|zSue;#`XIuSCuJX4HAukGhT? zb>4HP8)L5rI18foFN3;{hN0?&hAx)cE|q_3x;};z>w4K0bv^C<+;;63O{~0C%fWx^ zi34yq=ENhYGj#?7@hS%49Sla#SgR9~VIIPCsQm&k9~MMim&%~}kF68Jhzk%mbpBuJ zgr1ZCUMEEIS}6U;w&9Go6G3R~3mDF^^_p6}C6&n zsCXo*KA7p^4XFCyfQzfFwECbiYX5Vn`rxjMi>|W%SE9DxaB<$%Rv%PF<@Iz_ec<<* zT~7*5a$E?b+7Z{@qY{J`|PbD^YoP0F~$6*4uq?6>3I* zK;>`p4R(Leh061Cm>V0Q^1L(V#UU;p=eEy6?Y|6za09Bp78~upybiSbIFF#l`8{f!H&Ekzh#IHQ9vi10YMcS6an?Ys(+Jc! zr=Z5U0o9J8##d;sjjueaJ{W=;-#FCxW}(Kn3^l$DsPSDvjqeU>d~x^L_8dovYxGJN@)c`fFaMZX)qsBE2 zHLk^|d0T@T*G|;9j-bZ%J!)JxP~&=t8kf%(HZDKZxB^hEFlt=7eydHuY&hG+&({aK z&;S3_2Qj=awmullJwa^@Y8=y0^R*B)&XuTfZ$^EN{ix4%6!kgJqdxZy)I8ir%}e|b ztv>KY&08kaJO-iWH3T)!p{RMUg}M$mL0u=?IY&C9oNJuhQTrc4)dwe0*U`%^mf9|# zuMc8~b-nx@bv^YN_iVfND?_ZjRm;JDVZ;I05OZQU>P&UTKnxzxE=H3Ayogd^}$Kv0>qb{|Cjn;(yYJN2T{BhO8>Df4aez35E}ae#<aeQT=sB^*0RFW~2Jsf$HxlDldOT<>f=v`c3|ot>;~+ysUb} z)_XHlUUos{Wq(v2?MCHg@2{;s7>SDaqUwV)E`ETj50ZRi+ee^&UU7yfCuK830e8XvRkX~c26-=9O}bEy+n4}5_B#J5gb9Q2)SZ-c6j zKSkyFPRx!ms60$^%I<@oqVoJUYDROOw);E9CK1g!Oj+61S&0{dC zKInqVmp-Wcc^^~YWK@1FKwSrqpz`l~R6gE7<>y0GzWV%N`R|9y{{U3}7e=k8CaC-$ zh|2$ksQllDYCod#KgksvXKmE^ZjP!CW}(Kp3^mRTsB!K?jq@04oN<4&ar&ahnFTe@ zyr^-OLaoy<)HoZX#@P-v&e5oGu0)OVIBJ{^P%X_>8($C9_y(csgB_^xeT5p|S=9Kh zqsI3DHNITeYa zP~&Qh8dp11dmA+_UBA_`VK&U~;^*rF-RJ**>VtGUpVbGxTcG-ntq(d87a;EG{J+!( zYZm>zKG@G|q4Xcy7Bc=$1fj7n;9!oe*VK-8SyhowV`)$;D&-1gzolx6* zq4MMmDsLX6^2qO&<$D2Co`s=WTU5S}MD@2A)&C__f45Qny&hxz^+xqK0hOmqQT^>g zweL~=#kp<$r9tIoASy3Qq4KgeDlg;xV(WV(Dley_@^Tp}FE^v|DE_Z@KVOgf_X~Sn zobZm-2boZLTM|_t)Nt`0RDE#V#jWpJeef=7|IbnV7rbY2S5zF0%Im$Tyw32O)dy2h zdAjnx-S4wLu={^sR6ZX>e=P9G;!dc1pNGo-pHc6R`@3DA3!?I{1}e{gM&)^-$9A7= zkILV%7=(*adA=2u=ii|6{3pzdah_P5616=uYX3Z__m@QVcLuc{ia)jcbR;VO^RQLx zqaAAdEY$vw`Cpykq;Ueh;|oKLcLWy1ZK!p-8`V#vc!A#UFZ4mx2jfun!6DT4Q>f!y zMI9$wd^^q%)N#h4=HU?PIEfPkdh3HQ)Nz_74D`-pM^t_A2`XRKq4H-BDxbc^sOxC_Nft|Om&!jiT_1gkb-m1lx}F9- zw_W?SAXeV0<>0?g!~xh7bK+pkg=0`>Y#IjPLJY>0m>V~vuABQ&`yIu6cpmfP4OIWJ z^}&7O0>tqroBx;k;OO$d*9TX5EtLLaTL{PNL=YPL0{U`ny{6`y!t!uyO3UA`Q0M(B z>bw{7wS4b_ilb25*P`+yQ!2~%vZy?2jLNI-s62~AwFRg=+>2U2S5W=sNNxQULiINl zm51w5{e6wt^0F@~FUO+tvQipb-+NJcc?y-6*HL-- zJ1UPVzZ&Sx%loMMAfcbdRZ-6mTDZ6msy-O);y7soz4bwAR9;U-eScxOi*KU(Z|qSTE2unwg39yM{(;^+&y9JBE4a8WYI{r6 z{#{V-?}O?uQ#QLVzlT~6`%(GdCA-B7QS0R_YX7o1Y&o5{E-aW{r%<~lWdEy6H zKbvw|eQ*v{AKXRN2ZeLl_E6Mu>!6PFKI%9>qCWRs)Nu+2+Htz0o*#UQI?lEro5#bb z`XFVnKaR@(-%HomN=`k)PJ-E~KeZvbk1 zAE3tfF=~8!QR6#`8sA0K_+n7wdx9EYvivr_45;x1q2{p;YJ5FWeNB;$_`SU$xC4Gk3E}j_o`_CF*w|+aKj;nptwxas@>+gxv zasKId)vae+Y>OR3^k2ph?#58i9se^_`_{$UuGZ}zj;~|b?>F=D#QuJ>^Sl;u#Ks>d zbplW7ko5dp8$VCd2*zJLu_sr%YM$&NRro!Fp&swQy{gCcjo*Xivn$l|iv~&yFJ$L! z7OIsfV&}CD>U{S@o&R;H_5hU^*+MK|+M@Dj6e_P4pz`c{RP!%t`S%_wA7`QRGa9v? z4x{q8buqioEJoeOzDC`@E}oyJ$JchX6#sC19pkTg7{zPbzqNV#x4b*TezAGyJqZ6ZnDe8# z-r~+vlTwy{Ls0oQ1C@U#P%V9F%fAYkh#Vcp|7l6vE#;E+8h04FLQ2BSky&ku`?Ux*te>qXjn{)FS zzxQ_(K3l{0-8u6;@!#|3zx(g=H<$i3e`nosdRMUdn}?deO{n?%4b@6kwE1g;n!g38 z`TGJjf0t16m!*>JAC9_ztV7M;S=9X9K+RwB$~J#cALuwQ`kj~&FF5}CzZ~C} zKAU)Z=d=85$G?qg>D}?Qk6M=JkN?JVzqeG!|Cek0G`4H4ZD;A$+qVncH=Yogd zn-RwQ$H&-tc#3LiZ(FSGYANtVd7xvwC=af_;Mm*$a_p7Q<-rkm-s`*L_i^LVK5AS4 zArEw%f6D{kJ(dT`fr5M;t=1UzSq8f})-f(#i^_rXE|$uL8>n3Hn_{t4%kHd&%7rGV zTxjQvaIZ@>shsGK%85wSHDi)N93;VELXGbv>+& z8uK~SXUp}P<$HZpzPCl?`*74}T8sKjk5QkgKts#-3aHoLK<)PyX2cPwmcCe0{@rmA zPr5ikFZ_4gCH91RN^z3ITiJZfLA7sD=l=E97B337dVU$IopkZ5Z7d#unzx}YUhU#r zE?)YE&F3-HJf6XX_!tvm(Y7|9p{Ujd6XQhG_2gsJ{BA+b>&$kx{~px)v$l8RK+X53 zsO!t;sIPZUpyu7TgUx$JR4ap;|IVn~>Vca7$*AWbzoX7mKu3FjSybDMIzL~a=KU<{ zJjCf_=f@ZIdIr>f0jO35bsuZy;`F)Vd(wua@g)5vzW4X(hVKdW^ksWQ6FVQPP;C?H zd>nCc>85r*!clqJ50%gVb-p9%U+3HRP20aNstrT+pQy9Njk;L>%~37V#d}@1oxS z6{_Wnu=Cvtb-vr9&iDJM^SvE){tlwr4b=J0(8JDmHq`m9f;!*PsQr(k-hUI-y1s4a zu@CCJjzyjCRjBp2-MxMQb-s_H+FjK7PV$b$e?8wT_t^QK>(1W=RJ)EkAD(6wcR_tU zJsx$wm*LBt@00Ye^SzzpYyYQi97TFs|LagKK`-k+DXNul@w+ZQi(20oU7Y$oi|e9V zlHNA1qNwv-26et$Vj`T3I^T0qZ3k+7|AIQ-4^Zbjb00h3zoYig+1K7b2-VJ_)_012 zcD`Rlo$unP^A&+QfBjHxChB}2K&|huQRn+E>U_88Z~G5Ny?+*}Wg1}TF&K5e%c9PA z8`SxZaIg18?{ym07NO4fMi>9}e0%oV`99*#U#jNzzKp2zUC_ldQ0IF)>U^KZmpR`- z^sn=+eZ!~PeQ%U=vU8L30;=y!(`>(3YY->m_0gzv@Hy&S-F0!S{vX@>TB6R$EEmVR zpICF6V7lF(3!=_Ngo|UHO|14kYA%05&G|jloX4GE+fz7s$rCZq=3@n_T|&)Y$3Yf< zKG^1O6RKTxan2zYk45G4L>KRL@lzLX9BT9a11g_ypz=BSFw4g(sJW?!YCTYMG#{1E zpP=&jFzWghJ>2#`hKYy^jBw*X&D~bi^=l6*pMONno&QM7&pfDB3pIy*QTaRsmCuV% z`JC*1+dl;L{@SQ^2sO9gq2~4`YHm|ST0Z-uUeAr%F9g*Zq4K%2i~pL>^;|wH-#jj_ zk~!0%a=4<4y|%FPRsq#&qRv~miw~mS6NAdlq%B`A?|Zwv=PlmmKg!epE!Yw_Uu##hu66_$H(BVi^>nrhxYz#sQhSv z%8#a~{1|}Bj~3%>{}HJ7pF_2><1IhBq4MKhRDMiFo!=v<>)mNo`yG`ZxhGhD6hh@k zBUFBDM(uwY_5R1G)_BjRDN7WwFDnoeq=zkzvjnWmmdY) zdF+8|{ZQv)yo(>9&bvQ#r_Ot6R8FNYo79sxq$$65sLl)P*ZuVW25;P+$G#3rkT;lj zbM43%?Cn2Eev2be{ZB>pzY2BUZo2K+3j}-5UtUxzfr+r8dwnD7d|pAFKc9lZ-t%`F zb>8C?viC)y&gbW-b^QhEyxl~dx8G6o|3=|p?|C|mTE}^d1bfd@In;S-gqr6*sPhr& zUZ0FQpYu`g+l4w$r%|n9NU-;O)km${PM8tLpuUeX1NHs1DAf1cK1Y8{Q#9E796lFj zCoY9KuoVX2TbK*qL!H6l7=+hRM}CaC(XUvr_xowJFfVZ{)azYP`}Ib>?_ZGSEq%U3o~%7{cru1$_oR%I#S{Dc zjbq5mi{3r#f3|0{{PfFic~=^hH{qx}8-dENC{%uJN9F%=R4%$lc>*m$GzUHoPFMrsLvaPx*ql`Z||FjYGI+ao*JRn)0?RE zG#0gU8Qp9+&$2FJ@_oCL*Db#v;f?7|>E8BWXi&{?ssCDrH>d3QD z>t-$H!5gUc^u)cMw2JMQ4)wm0sP)tZ)wW}P{0g<6uAZ-P$vZ2;fe$;v@japBu zu^8?~t*5i7^^~ZZttUU!ddh)XPX$ryVk&B#EXMM<4MXuRYCRVaziw4OrA(Lb%H9Bw@Yxb=kI^@QH_gx>Xp-t~mu^@M8Y(Yu~p+$^VCPv~7wsQv$I z?R1J=JJoIfDyUYhruAO~)mCC$Jb~)}Hfp`(t7Y5YK#jkvi+iI!$0YaqL)7QVRogyK z7;3#_tYh!1fNED!_n*6{^^&-*t(SbL^->14Ugo3fgyi)s@4KSb!9diyn2cI48&LP3 z{qFT+sQoUY)=Rwlwq7!#+ECPbnSfd^QK1YxL9LhB?)7D;5w1tQ?>p3bN!rlH9gbQr z-BIf$6184dqwYUDQ0wJO)OtCMS}zS6*?MV*S}y}o>tzY*{<9XfUUs3@%Mn!G7jJCq zpeky;w8l`Jj9M>C-0N#l>t!qIedn+urh47R{ZH#<{9o6L%V)n_ZoQy)y`Xo!pm)8X zcfFu@y`b88^sW~dHw$#@1-y?C^>Yuke)7Iy>!%#*^_r;tnxNj-2ep2dp|`cQ^^+2{eu7ZzrvYmHv_Y+( zZm9Ls54C=NLEUfSx3l$=8MS_@q1I1h)cR?QT0aq}b#MZ;F0P=~&r=M=qU~+{R71Vq z5Vc<`)cXdZ*3T+b`=|AD{;%uD<+opuTR-SsKj>XQ=v_bPT|cONK8|YV(YtP@}dY@{>sC}J7F)r~67stBE#Xq1vOVSl) z27C1wVzaz%K4P2HINatRsvCLr3k8(cXmbH zOM0W$!f?!pr(qkHR+F0s5P+$v*UKunmFV<>0X!GPx?ER8PpV0+fdQyBFbZ`KnT%Qk^PJ1w>r(qky-zBq zH=uHS4=U%s#!x(qYS$EZu>2Z5bFB+7OKrhFmb1)Q-VFmory?zI^-xJjPvi7v=YkgGvr|WA$u2&b?uIttK z<(8*2ol&S52*M1ueQ%#)!6{`+55XV)<_qxc5X#|j;k(?^^S|P@H1&zf4NcD;9|~-?scgq zeX$N|-8Dn4yAIB`-Rn~ONv*qqsC73QwZ5jH+I;8vfi^#x2ibgH8Eo^Je2C3sQPe!v zMV+$`Q0*}4Jl#QkzDz@dJ&Cax>O8%TYAaEnFYPe9o`j*UC(TgTk$$N0E<=5;48!eu zQWJGuXo7H4oXw*!;YPx{kI-y*?7P z-vreBM5Efjt%E2x7uqj$tj)&&RI579=Ho5Yd`w2o#|qSZTt~Hh<83|~qVlCbCdMhK z`S=Fad?(m^yoXv3QK&`RDLW$&Bsa9eEfu(kE9>le3VAz$5PaMoJP&ZP1Jm(m~Nl5A}SAt zpyuN<)O_r5uU|pU$8FSnB%5L5NS`sGCs|06KmNY5>Rs>sulPT&q5IFx6J2@RT>8`X z^sMW5@hqFK!>IYXi<+;Lvu(a=qS{#0e62yv*BR7&-9yb+;W@Tn1ZuucpytbGuFY2l z)O?jjdG6>7dNq2}wZd);ro?UxNTUu96u=F8WU zY_e#sa# zn!g;mgS_+C5S4H3QS&zpHGkVs^Oqz~kazydq2{kHX2iEpUoS^vX8a9R*A>bejfIj(xy#IbCJq8jNM~$!->P+mw-1rFdV6yx{-miyqqw2Ibu>h{Y zg7`BQ!lzgSGZzT*)@g5GQR3xT41dJpcppomU%?>n-&1Rjy2CC;eI0xrRd3x!)n_RS z1$jcTA*wzbh81xOR>Ci_3f{n~Sg3H2ryBOhFkFk(aUa&iAFvkYE)wMZJDMG^4)I*9 zi>t6ceuWJ%O-PXU?`M|BhQxia5st>!F$$aDO>BzkiUxWAZg>N1PTUq-;t*_wd$Bb> z#BdBL7UXGzRj@6##dbIo+v7>>fGLXyc{-v$zKP|qGxo$TxB$E2DSQjByVnz!u>D@a zZoFOz)dpa9jKT;!hdnR`-@z0mgFHR49=?lHu@|nu-naq#;1leN4NC=i`e9cbfW2@a zZo)x$7YAeV(m~$86`vM|5f{hdI2uRbe0(3HF%l2qD9lh-+{h z9>NKD94F#E{0OU;4f0IFHaG>l;8gqor{PZg7*F90yo@t3ez_q2Ej-`X#M#&v=i+dj zhYN8&#w{P@S%4XE5eDF5tbj{!07l_NT#7Ss8E(L6yo1XzS!j@F1^VGiEQYJ_ZCs6` zaScww&v6Z|#TZ)TN69BxIwib0-jm0z>d1mcv8X91r6}{1TVq5nO{`<5Bzu11kr4 zzQyu*46EaDd=pRLW;}^U@f3cKr|}7%!TME#JZJGuJcsY#dHe`3;1#@xPw+DOR1Na{ zfI)Z#TjP)T9$v#C_!G{<>v#umV6tjKo}bYVZ(%Wv!BKb{=i#ro4DaAUyo*op9{Pm^ zdG4b>KEP0Xi0|Md`~V;0WPF03<5Rqf-WywW?q_khUtm1Ujr{W-PfJXI?_wexgg!V2 z6XP$K1e4UTI1OrhHcX23QLP6iBaXu4xCK+-QmQ6shI6nwuEUzR18d<0tc__Ja390G zSPzR~eS8fY;7EK8XJ8{-gpF}0zK(fb<35I!P;qV4_GZ`=N26N$LWw;&dS>=yZI_9k z4ah()r1Ql7Y(Ur-q26nhcSrX>_0n7Yx)0S(Bi(s!VO%Vq!M3-;c*JjGd>n}h@VMKa zK7S&Qe@}jgN=QzQnf;GrMsQ5!e{74HWItb1YI30WrM9TeV^GIig*wi0)Nvl6j^jVY ze$J^f`VhB7)!qMAe@^4rf2}`58(RH21l2xA9lvBFi{E

      d#52ajZuj{~Jt*$(q=H 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

      CAMW1MkrM63bJ&*?V^?*O>>w&y3mf9}$bwLT# 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

      &!xY#VQ{p02`x$*PZ6WNE zv^%E3ari3kL_hR=V!wa75T+xngc-0cX2dy|3D06?OuN+nK4>ud6IaJ<7>U_&FXlkc zGW$E2sWBH}VblnFU=XfAWy&?ojgK%dW{kGKuh|Uq6MujOa1R#56Id93!y;I0x&58Z z53wlmek_KkumnCt)uH7-4fNKbQ?WGh*H{KGVL6PqBG6lhhG8giAFP0%VMW}7mGK9x zg1J`)dh5{USdDlxhT#(T`aaZtN3l94US;Q}8rC45gEjFxtcBOH4kle4=&eudp>ps; zRGqpX8{jEyh!3$5mj5i!(-;S!>eO}E1iwJlr`NDK=3f)&X@Om_B`(HRxE{mtB(}lK zp9gy0z~(`x?y_-&c?W!f7prhS`gN}GyCi;8HZ2*pTI zDF#_vOc5cOY`;*96iG;hqBIgE(WHe`nkYgTgb@Dk&pl`AnWv}mKfl-G{X6%5?|1o} z^F8-I&pgfC0#`ykhyDz2gH2a737 zPuf1O1yx_{_e7WG_e7UE_IsiWsW0mpGqS!UzG?jogR-HkY}`Ac#$5=D!?jTLdU)ORw3K!OFvi%et=u zybM)ezJRJPiEmqdIS;D7Tme;I?trQ5umMbb z$LdR4sQNMhYKAkR>dPkB43=JN^`#b6edz*Q!rP$g%L`ETWj|DX`5mgh)OgqG%LT9< z{!38x#c5_1<%AE4|~H`q3X*zKmIjTeK`dC!e;MVe6E73FRP*I%O6nnrR)Z)FD+ny{B)@L z@)A^iIRI5({)DP8Cw*Y`eG@M^;}(!%_J2pz6zOQ1xXyRDG$n$?D4u@LK#A zq3X+OsQR)8s=n09vHEfYyb*sPRDD?qRbO^N)tAbft-kbudPxob>nN8 z0qcBh^<^NOf`28{@w=efWx_k)yHFOZzT|yytiGf?Y5V*xC|d-Jz-_Q7Ec2Arm$p#* z{A?ILzZ6nSYHlo8OSmjZ*<#mCfwGC)Y@B&e<7|M%;XbHwPTp?q(qIYvyJ1QAA}kHp zLDiF@pIEyduq^&)sCtqKRZkW|)sy{D*6LHMCu5-M$sDM9@-kFC*#uQjitey_k^*bs zUk6oB?trQ%&p_3aJy7+e&SzFnE`)XQN5MpR53C2*!}_qqPOB#=up#~csCsfe)C^yN zswY3fX0X{Vt0!Hc>d7Tg_2hA=dh!8OJ&D_G^`r(=J?RMbymAv%J^2W#o|O9B>d8q^ z^`tY@^UCc|_2d(%dQxeR)sqJBbo?Gr^<)}Mfh*t{@E6z}#^qW)X#`a#Mnlz;Ctz>5 z4XU1e?Z->*wRTluUyk>Mvb&+`$sVYBlJJGqlNRt?{Ij9zNhVZ1`3S0>l={-@$w^T4 zq%#}@Z-=TUtDx%1?@;xm^ggR6&EO^Y*Fe>iMNswRE2w&M7^cCR`>mb~g~RZlfT}0k z;BfdgR6QyAmDQ7ea3ub{a1>k%RZq4<)sx?#>PeTct)4stRZl*IswaD(>dC)Q^`y%I zt0xaZ)sqcS^<)=RJvjnZPuhNC^<*SeJ$VYMp1cB8Pc}oR6VKxqqVyNs-D~n zRZkYf3UC8dJ&DV+cIU!){OM5jWEE6B*#uQjeuSzg^?$N@k_J^zWJgf%~!1}Q9FIG>|pz6u>Q1#?Ns2OgCswWi>Sv~0so8w;s zRZqr4)sr`1EBGB$J!$l-)sv1;_2fdRdh#e#J^2Buo;3Z<>Pcs)dU7#TJ$VYMp8O6~ zPul!$^`r+>J-Gs^o-BYVa0fgCRyl0-q!H|i-wUdq+zVAt-h{p3uTb@*Pcs)dU7#TJ$VYMp6rII zCpC^(J!u9n#_tPNPi8>XlZ{aIq{QD=Pin$6{7&$4I1vtmZ$j0RU!m$r$$zY#G=W#) zkAbQu3!&=CKB#)~8&o~1{;$=OOW-y5OQGt?_fYlZU#NO=GTESdatRyCtpEXxu>lzw1-9UM?+orAXNQ% z0fzNQzn6VL$=v+EYjE^ugoQlkEN7moOS(SC|1HRG&Z4vJ-;lJ1vV3-Ne}wZoSd#Nk zx}VR5?r(MGLe-)2bF9C7Cb-`Nst)ysszaAJukz!fOjJF(0ak~%L)D}Eod5IVqS}eI z;4@Hl>1C+*O>a8a`EgP0#CmWGtPl6V2Jk!Q?|xiVJ5iA;_N4v$ii)rqel2GcKQ5}B zsCsn@Yz4bP)vL3e7y5Bg?L^hBE1>GuwXi)L@4VZOi)tsTemw+Lzn+3p?gi)Teq2;L zQFZJcm;yJ!GvH3=*M3}7J5hD&7pQvnFYFD=K4tN#;p_=jw^E_%))41NKQ78d)vs|- z^(zCaeoc4I^5de~iG$!gs5-V7s*bI6uJ_}j+KHFItx)wW7pk5ebRPEOqS}d1*1vL4R@0e5y;Gf7 z<8^OUoPB>_A5>i`Q-bgNz=lwD=`twGf_h$A2TQ{5VQE;hqV~ zy@8=nb>V+d&nwTvMEE|e2TPT;?+u&@RSz;?L--)n^U4y~1pWjy)7Itedjq4Oo>#_0 zJ+C|gwXZ*e+W%$C+xG@~!DRdkp`KT6hT6}sLGAkr73_NheP9Rti=m!ZZiCv#tD*LL zjf(cYf%9Nj{41cISMGq?zw2QN`~#i=Pl>nh4fKLN@kc=I?}bqNdnfD-t5ve^4K#r| z-W#gjK-d@F17+)=_Wj9~?Ry0m!G8Ex!*k(%Q2RIsYQI;gV&5z10|($=3h`^Y zCh$u9-cb8=Ivfc%K<($^HSGHW)!`WY4p94ZJk&nk0=19J*YxiV!0Yk5LG8=&Q2Tca z)c!4#V9zVHp`KT|LhZ-vq4w%BI3Xgsi-zXgCSE#0SDm4o0Nk^!0Zh*2^ zVF|bkmW0JCHwx=XU04SHVknyhRZl*FswYQad03$ezjqL}hN>f%LDi8bq3XycSOxBd z)nL)8jlw$87OIZi3ROoI!UVVys*dc2wPB@djlw!I7^;qB!js`#KmHC>yN_TZ{0hnn z(=R!Oe(BXszZaqGnwqBHBT)LSf~v=#z&KbX!P*Ui(r*Hke)FK}@mo;({Rw5APBQ&& zhSF~~lzuNk>9+|=zki|hJH3|acP*5DlcDsR3sr|dhSD#gw&`~klzu~?^qUB!%PUZI z_%M`y$#qP>?oh|CfNFOQOoVqqSz-DOj-g+CUDNLzD65cY`n8ABZzz<0H^Vr%6v}>u z(yw+s)2}C#ewRY&_c)Y&3YC8~>YILDq4YZ!O22EN^m__Qzt5rauVMq!uO5_s-J$fm z9!kFzQ2F;QlzvB`^sCd*bU6=7r&&31)bezT$UTLqO@KSAl&DarIphth8f z)bVGa+Pwr5;d@Y4n0^afKj{@r>JqkZ>}(6A*AVyfInwcJ8i)trIze}O=Z#0yCH#w*HaZ&9==`#aLug9VC z@L4EZ;!JI6`Ex&%o!i>-=SCo5-f0%h%!Eq{hU>2W7i{yYhlKc7Ka%{G=l z7eeLF1gQL(0hK>5L#=NQln!;H9&Y-zfYPrYlztPS^m`L3 zj}AiV_YahQCyy}w`a|hA14_TuQ2TE)lzu-$>C*U0(`f{hesiGq-^+eH2ddppmZQ`|nMt z{MiMyzH(zMf6j)|VFFbC%z(DLp6&ks=gJq~4`Lg`oI2Gg%AlzwMJ={E*Szu8cEv=d6da^pDE(f7 z%AY+@`uzl@U*#K3mouSsnhK@gDyaRp$&cqj>Gu~*gjH^``4*;MpBVaOah>+#ZomG? zTTH)qq4fJ6O23k~ntnZ?Y$}v~i=gsvE0lgeKUaiJ zyZc}wd}1f}0ZDEk6gca47vILFxAf zlpTiBuj3TcZwQorS3~JH9ZJ8IQ2F;4lzvHfn0}{2>312Feh)zD_YqY7{R^dEr8`Z( zwotlU38m9~sQlXvrQeT!JbtRRs|6D|ehQSCe&_T4^E}>v_6s84f6hX`0TLy`^0H08 zmT%kj->xzJD!ya-b%4^ZKa7L-LD~CI`S$~qe%02ReyyPN8x3U(p!EA4D*x)gYx=c= z(r*xyep8|J+X|&$+E4I#bIR#3;(NOw54W-{w zKfV=8=g(mx{0+)teJ+rVZga!4{O3*6>r5yc1B<{%prqXZ^|`>$FbbyH@d#8scn&Ha>!IRt7%CpEKeBkFLB->GsCYaCrSm&b@%R%e z9&I*RJbFMK9}d;-8kh+0g0figh~IQ99?7onO;9!)Djx4b>Gda6JnFA9y}Cfv+rr|} ziT?BVNqmmAKL^Und~E%d z;?W%{9s{A`aU)bb=0oj|Ls0Q(w9Vqt5h@;oq2e(ODjut$_D3F6Jc@3&cr<|0`Ftqd z?}duT+fe&siyuD()$Sjd2&;c$^Nkgcw1{}5xxUXr*+!^%{0gO4^S3M>17IBf)$qUK zF)bnX(@i+h#kD9wJ9{r)>kpUHt2ch=IQYf9j zgo?*WpIbc6gNnx$P{;3tYBvKW!e^l@Ry-C*#3S=9(`!4F9f68Rqt&L@#ZdcW3XFqK z!2gQJrydWr%kiJv{^l%tm;byJ%33?SI7c|IgNnnG?&ou%`&*&nkP8)ugU-W#T$G90 zAI0ys_Yv_>@u=-=>c>U36BU`}C|w3Y<>xg}`MD6v4nXPB@k`6kVNm%w z4k|w%fm-LgQ2AMPpXFySsQkPTDnD<5THgXF9ri%!5WnB@vp!UQ_JCUd4N&V}2(|vb zQ2F_bAFukAwW|vgIo<)vV&!L$bF6-6d%l(6IYgEOm7jy4^tu-+KbOEb_yIhYpS^g_ z>A`c(=|SXkPE-2-LY-h)4_f=(P&WHv>;G-2{=b2WN3ln&|87urJ5;@x2NjQvQ1SQ* zDjxM8wRUMRtQSyux)CZKJE7un1S%d$|Fd{Zg38Zlq2jR|Djqwa;!%2*#UlkO9@jzD zi#z=IJg9arLH+#hJt&K%b83Xni>I3ozd>2;`%Q;lP&(WOrSn`E2j7JMrSmNjI&(>A zsgK!p_d{8~Cv2SSpvHL&O7Epm7{C_Z3j% zJOyQYpz^!;Gp2VEl-_4T={*I?vZ3<3aA9V7hIFTHhZ~ z`BUY2)2%<0Jph$I%b?b`3o3tpgUX+_3$0x`)cRhBTHh|H{P_+lf6BdJ`O_6@{xhJ~ z^BUBCT@RH%-$1P=VUgueD%5%=L*>syeta2JySJe7XFHU|%AXYCJ2yNV1Sy^mcR|@A zsQlRmr9+vSmOpJ_9RAr*y4m}P*!Q84o$jdg)WT(zQpvt5=!q|p!9wW zO2_x1@+Vkodbfeny9do6Dx z$HQZKpUr*0FZcbPLF9dZIsI3bh!K``s$I7m%GP(WalVIYTD7a`-4be?QBal%mERlP zFLRpd-W8VO_~lUgr$goUOenqUo^E;%f)(&5Lh1ehl-`S>@;etw@5frnA~5XIMSC$T20X> zoZHLtX)4sZUxdo1)lm7A3$>2;GcBLGL#_7)sC=3Vl~2z?t#donI!pDod^#1@!ap18 z_!y{mH^K1zCX_|zQ!+WAd`k0tc?!zbL*>)=Q2Vz;$N$c!!JbdLKImiZPlK|iXIX#e zK;_jqD1GmTaqxX8%Y)K4>1^{yL*>zID1G0C(l-Z6-=CoLoz&0teHBXI-B9}e2&HfQ zIi_z4R6bn~rSCIP`o0RK?{+BNN}Ovtc7n>IQBeAh_v5pn+C2-U?^{q7t#5|wo9y~s z3uUvQ^j!s|?{+_L_o3KzaY2N>$^A{=u~0VnJnL^Fl)m$z^j!tx;2%(yIKcEB0%eaw z>AMk1-=CoL4bC@x>p|)J64buk52bJUfu`@tQ2M4ozla6>Vs-!u7B6zAe6S%{T?9ZbTYjvo@)Jcf@(7qO8=Xn`bel-BB*wKrM!x{<r&G{}G4f5<=rwS7zaS<5AWZ(ielPyw2bzcd?1QpWnda-f>@=wB6Ur0~$_yxx zn%{q{anoaryD@6qlnpj+aG#CS4$20*uk*5VVDz}^KcQL4phA(FLHK-=RxGt>GVe9G zkI&-V60Xb5wcmR&U~e;Z6MP8O&u{Mc|H6MSMvIdC9+tX6>D-d(CDP(ji+exW^z#Mn z^P1TF1~;|&b!=w-xlsMR=6*uU()>P)x?pG@PrbiRFkqJ6a3 z*Q);1hhDRpCx6`!M~$EE>(29i+i<##-v>%hotI6Fv2OK$ zqJ7+ybK1x0zE8h^vdh1;eS9yJeF?+3onRlQ(vS9WN^_gf0w}w?h51iHt*v5``GxJ{ zTf8q_pXdAXqE6Od{ZsAwOQHIk7)lL+aXUfjuJf`NW5ieepD4b0oKt+`_gVa= zKv|Lf7T@Mjb_XmhzBRX7d^0_MhoS6~mNvg1pftU#mHCCmH^uwX_353h{SGLb+r|9P zq5AvB{YqUezSqNWo-yvjBk4Ea^5eVf>Vi6Fdweq%!xk zOF!DbnoII3`)qFR+21kZt^Q+;J2=L;J+CP^ zZs6l)dwdUhyleXNpU%t5#~4@rpD5lLoKw70J)UczEaia3dlZzdfr@3q3F`F%`cb@- z+n6r1pzP+h=FfoA^mq3Qi*JtirSVcdcZN7eLRoq@>vso~%}p`?bEt9talg_T7Wc7G z{S~QPDyTfLd{DVvxuEiZ3VG$y%cj+fD;mV@D;wl4K{5YOL+m#5? zmp2P;WiAhWhzw;0Mkc0bm2X%)c2 zzbWmrT*qwJ^-v+YrqVt&!RDV1!}+)$YyP*;KF`+|U(MQggNjY8_F1&g_4Nh54_o^_ zjMaX<+WYu{>)*N%{qtxaU){z}hO*1tkJW$8ohcLwYoF-()4!1XNuhmWC2OAoWmmf& ztN)R-&u~4mT%QjL(I=Dk$)2C7o}c60kJbNjwXbRONrkfU?#F7MOZzOZL)lRFo%^xc zm)gaC@&0nX|FVVTLo)5N%Gi9eVc5U>vHBlO`^Bzbj_dhXA$n%eKF8~Cp4a1Ah3u~d zw9oYVxfsfJx*uykIkb=Wx}EHG`#kq!wLeVzEYGiO&$qpW8zHi27C$ngmZ~4z>V{R_^oD~0>eRh)l zo;|O82xZ^8uk*4xP<=#xZleAp$IFf}-ma+e@?N#^GQIyfKHh8Y>%8o57(Jf)PdKS~ zP-(!i&;AZ@Om!%{i2o!r&q!Z==s8v#c}u~y_w%)LD#-KktF5#3*MqvIllx~v^{Z=S z7eVzKsfXqgJ-_(RQ`9^(^`}=})I8#s9sB$$ca4ox>>Zm&PpEO#Mpg%^kH~Q~M)bIy zVvIZT)`II#j~F-G$NAF7ZMfFPRU6sF7~^V;=yB6HrupiceCq$pj;=py9yt;7$ntUD zfwJQ7+C0=owmZf=G-mWXro~$SZ3Wk#5;1P7um1*L|1$U0Ms`k&aWzKtxQkZi;zTWeFy$`#uHnJCEjH@wuT-x@P>*NR+PqibJxBPt?WZ1xjHQ-8i=k|j`$Z}i3o3Rmn_ec3&u#f# zLA80$QEi~TKgnVJdw8W!Fbxa({B%a|PiU+6CXwe7YR3gthUNcc!fJ4^=h%MG_!-m< z?St7ca(}3n=;s_d7eBFJo-UwmCyqy2s@J32ygto{Y1o zBI}6e8d=Yq;^*CD_nFA!sT@zf`S|0va6CQ6@hpzV$2h*8Y2vt8Mv?=uq` zlnNS*E6?Zh<$?r`m%YAZuI_7jT$gY8HKpgIf|}(nwV%6WykhIF&HGJR3X~2yFZ&*< zk5C8yd5`+H`IKQkrGv_CBj5Ly3X)%J7F^3KlQHXYZKPkRYSEzF^`*kk+iT{szHA#W z6Utt6KeAm4?b6=1c3Dui%>BrABWahi+S+A6*#quJw#%elwjU3C+&VGFU9NHcev<`d z%iNFbFPC08ZX1gOZV}nL)jkpbzXLVjPcZew}+f`Qr`0qoAJIKHlQ@P0x)`R?^4Q zdD(|C##8^1@s>r6m+a$Z`gn`{zWcTNIxjmd#(3&K`Z@9d z$0BQ9Zq)OF=Ak+!rc5ok_9GF`3&}qIV4u%0sB3O;e~O>iHL}voPyI$d7icc_d0`pd z+rsCo_%Bmv#rFtTS^jK=vaj8bZr{n*@Vpc!K_?dHd8i zt^bFi>^b+N`(Nzs6W_A-!=dbE_oLf?>g^Z%`9t2mWd8j({5-J{!Uj3#OoI{4sA)!*w$IHhb*e`ErG6RBOyHW_Nuqzr#MiNC{?S2nkF z&arRls1N<^B0JwA=6U@MAv@nB=J`aOZ&4$;J7eOu=@QX;+1I{9Q!NH>zE{#%o-f^NoXYd1Z1-<&?@RFv zmA2Jr+n%;bG24b(){o=wShWpGq{kgyTPky|SEp1^=TNJl+`iU9sjbOD@wIJ&^twsG zgS?jC>pzc)^h*^DN{y@@bWcnQZse8cZ3_4?`b-BWb)4pKTN1()$ko?(3z@Wb&c2TylN3byiE=HnIc zqxwruZxQt8mET_h-}{?+U5j8Xuj12f%mRK?f4P;Cf`57C_gBF8{?4e96x_gTp!XN) zC!8F|-zjTeAfC!G(}CZ~xsSg)HM~ubxwS>`GOuagM*%+^rwV_YxJ6KZdy8PDw<+L9 z&3kdFq+k=T{COAfecqMIBn3TrmAl_`DBwr+m({yPu$otXe+7K+uSnk(K|5YUyuSi| zRDZb@(3Mwye+B$}UE|S}*COxlj7UH1@0flWn_C1=@yge)fbaV4{kTO?c}t7ni1!!i zTb%e^suBCH=FvDE%h%jt%$wKIc}M#B^B$fQjN>)jbNY-(KT3z3SuKJedFA(4!1w;z zJl-N0&TE6L<(vrY<{ zPOB9(xTSV*^2j>;-M+5*_Y!^g^k|(t*1ity>(c&Y+9%S!d(8IPN5}7E_r9p{7atwJ zHvQG1zq<5yGX15*?C)6n|KIrQ)ql52L91B_L9=Nm1r2Yh#eJtXpF8&8_p5gfD&&^S ziM*F&9Bp5V_O)qWhxT=8-<$TQAJ;xh?YqVYEzqwq`qe|fI_Q^BD-I`e4T z+O(}h+q$$pnYL#f*EU>d7saI}x+I{>N$64wT{;EjbIayL-*azK-(ehU(Y`kA>(IU~ z?N5){KAd-(GOR6uylJoR7$1#{<{IkItW?Z%;X0D_OjDD*YHM?k_+GKD59d?AB=^~* zAo~74Saaob!fHiY2GP$t;koeHf#0DVg#Vio(DAX#IzEX#aq@SK_)GhX3*!aC6*=J^HcBRtPOF7SkE&veU=p6?p- zd`>tAKJPEmF+W~MGe+ykI(q)pnCHX&&{Eg)Z^>djBd^!>;d40a%Ztn^o8K)*=SRNA zI6v*^^{rx_5B1644><*&&u8h{@Lb2^@;THkJlEy8bJ>Ml7wQpScj|H1g<6FBr}c6B zHk@bca@3X@)RvmmmQySq5q0QTo0_yqpiTSZ+N5i4|B*9kY7^F|8q}Pc1@~l(Tn@)Q z(Y+={`%Lv8zAtJSGv=xPaena8^Q~iEAI?AQzfH{ZVa_C%4(bo*_hz(f$lt)N8$|w_ z)x=kOgx?3$d-~K5?ep#-&XG{>g~z#{0r?43FdgPw#_RU;n9WdDbh-J{AX5*{TVei{ zP<`D7i^0eI_&lgSUx$42F8IOyv)}Na^Mv2KOW=EV)r0)+-SuJ4b7?C}TxspDhO!sk zkN)=@>0FaoUZ3Q5)H$6X>FGPW0W@1Dw-$ zTV*Lrtp6oY)`s!4&WoXJsgHl6@3+RkX8D}F%KDiFWjDWN{tT%8{&he6PU*N3K_>b3 z6t4r1+p}(@AM3lAoft>o{mk_|?f9mRGaM?m(Vu6f(LUcazFrxOm6CrDrl4K^&s%d| zv3`DmvUaYE+Q`ny*V(>*nW~>pYK+Lwji%vethRpq-=QQYw9qq4tpcB)g#SK!x#eX> zQp<4u+o0@EsJYf{*)q(tu~2!n2x`B+2TQ=(t?asl_PW1aeOxUHfB*c79zk~{XN0A+ zx9e6w*?#xOb+Bvd@v=-)36f%gKWf+{^ zGW_?A-C#A`39try7}kUzyI-W6wQCM_eIFR+%?aX@jCQIUDX#M)Q1%9t4xdBm)Uvhd zFa|0W^K+oay`YE9 z>j9|wOzCOyc@-)?)p}Wc>O<*%IaGXRL&awqRD6DRzuuYF?kuSOQhHl_Zh(rh0juJVhPr+lEG#}59-koD+6{uT+n{uM5=xiv zq4rNw8;j4GQ2oz_{}rDFG2)Z$^E&k`8*cPZ zWAoYsHJ>%-T6}(miqD|_7N22I@p&35KD(gea|kLvZBxy^9ID;DQ2k|`XYpAI6`vp6 z{|oAT=K&U<3@F`KL&fI^RD7zQZ}AxbEOlShI#xr~ ztq-7d|HOS!=SAuIC6xX@x-TjYe?he?xzm0RPZcQtWT^aa;l3#SIzs8(!+lZu_J^Sj zv~}MKW%J!{H^_9m8fsnhq4KNr1?E2lweC6>+V$I^)?0C~=~?t5%dhrO>wE;NKF@_( z-(INo)xOyBsU1{)UGM(WQ0+EAtuOl$%dcOc@~hPl^SeNuzYS{r*--2L7i!&Ihgv=j zgxdcPy8kv*yKkYcFLkNM{{;0p@eRL!dY){9vOl48sN2qT84IPuA{gF3q57}w_r1dI zpM4nPxcjHiYXy|;cYoYvHtq{h@!1c<`)8W@TcGAO^m1EQ^-Rlka`zH+VpD?_Cy1y5yU6~QqUvQHQpOAynkM0x_5($&jhG^ zd>DrJPxp(Aw06y*uI~fG{n@Y>?-d#b`Tt%$9nGq+P@T*2=WCjWYhM)MOPe+y*qSugOobX-*U8?68mkmzX^hC9 z`)RHTQS+Y_G5_qGW8X*8+%`t|>hrwK$IpLX)cil?n#lPlHnsT;fwC!3eXoFF-uQW4 zC)*D-R#V1`p18`KPdEX`y~JM!yJOeQu7S|GfDH^&d=|$oXfvzPq5TXd|2d zsZjGD0X3$slZ}8HYXOX&zvdb}{{s>8Ph-uI^B)u8tIwZe=s*0~g7d$HHj(oWn%Vri zLfJ4VZ61S~|GR!(*U6?rjkO*|&tG$mo`3wC$MQdyHAl|>V1%zeuiJEd{xp29;QSAB zP2~JDT;G*Y_65}Z6B^t6dqIt<>tu0^p|SeF==p1|(ev*VG5_G>g7YsI;j7P?_!?Wf zsc-%NeNpqTNt?*|=eoYNo7?=mLtS?(R6p~f=CA8yjiAOF38Uw)xkk@FEn@x|tXX}j zAB{0R!dIV_*jv%_pSPf({iMIsl{RuenCg ze_F)+vsiQF{1-*|>a)$3=PNPvZ@94F{5#Pma{ei`;LZMgG}8Lp24#Oj=~Z`>jW-sm-$gKdK7!%%(P+EQo{vVw z{CpvUG1@XY%{Q0%i3g$jueQ~mzfXrceihU>H@GiqoZF$Ezwd*3?)jhlqRxwYu6YLP z`SfM?MLh?-3Ds^LjE7s?-vjl0^PT&mo-cogdd?}f&3sYMI~AcUf=$)4{{f#LHv44=QD*0&di&)+xu^EV8i zzukWts@(>t^*(ruJ>R_x^?VoHYJPdB^ZlUK{~*-5H$$zv;%)YP*96wYAL0JPQ0-Ph zUB445ZYRpG1)g6io+pn$*&9$gd=8~k%d1U?F);jm1gigCFzo-dazWC_b|?G{D<>ky z5{Z$nNrD<<5Y!lx{P=TFnlE)<)L5%w_#O{R`%l~#bzYRVU&8P`p8G$-@I4+>yOP`e zJsy;QGL*(G+!v)`M<}g(xG#q9@nHOTTlW+wd&&Ju6HK>0P-~h1m0!EvA3D*_e+{L< z>`A8UHmJF5x!v-sM26+pNT~d}5o&GAV7NA@HI#*lnFvi*qg0kD7 zV*ezRPTxbtJZY@u*O^fL&xT?DVScqIzsAO_VTm8xdpxyGBR=97s4*Ua8sjZL{x#HC zzql`Itbd{MtL!J1Up1h7QRhWz+W;yCt=$);eHW;9y`gH@`R-o^m0wr8FG|Ckp|rlk zeNmb}0P|eeVN*@78BlBb32IGE?=sznK;_pe_fNaq&aZ=NKVh2b`YP1iUb)BeYai4e z>V2=}*FdPXJp{G39H=!NfT~}O?=yc8RJ%z~{q>w~`E@f?el2l-HPrckpw`~=e#@IX zpw|2r)LOSg1XMETW+xUZpI_E>9I?HbdoGn7u3LdE_?sF)vw z;pbD=TK_{}*nc6PPo+oXRu-{Q`$bUwZ-eUpA3xsYQ_HPWpxTLAM>nWkIvYy&3*8rW zUX-p^Klxg{O7nEOOrk&4(YJcW~rt9rc^PBjP<=0}Ubyj)U@+%Q)eV0M4Z#LAr zmOjHKCMNsQFQGU(x{K~l2+HHffKcRH0n{K*{h03o*Fns=k>c6%>ci8jSbunvKHe+0$ z|NKRKG@pY|{a4%J&tFi-uYwxq2KPmcb30Ui-3O)n|J)aKUX=dNK1fZK!+1)#zI&k7^)ys|?Qy@tQ`W8{RDY$i zEWf%y<=0K_-vM=g4b=KeJ#Bf@8*1HCq1HPGD!+ERUuLegI|b_c^Pu8(qWsD_;LrEo zZX1;S3B&w)#`6n?`31xLg6hBaJnz4d`n8@hj{E%c1-otqljH!Q1Jd(+}mA4>PjVOXDGSf627pWUyw(%PK` z)nCdgi_Z;E@p;MpH=)k|2^F7|w@mljq2jX=Dn47G;!}CG`DZ}YlhIJuPlJWUCk5@+ z&@On^+6{uT+n{uM5=xivq4rPGa~7X7q57W<|0_NtW5g%h=XGkfjW+_SpF>dNws_md z9Ram}-gp1}HFkbCRQpHYv3YHRn$McG7N1|C;xp)7i_b8q_&g02pIuP#IRq7-w(psL zIaIrQq58{MXYpAI6`vp6{|oAT=k*q!3@F`KL&fI^RD7zwZ}Axby*fkbbSYGPUWAIzK^Q)tJ#YOFfnooJ?4RW^;uCDJ>u!az`R=#- zz{b5AYTWry@hQF0{D+|CRp&#yemm5>Dt=`1DZ0tx(;g~5kHGN#Ka}o!q2g0J$Kufr zDn8e{|1?y)4N&@JZ?^dS0u`TDADiC=>ilg``zISp_kW?{({+o*V<6Q2dC>j0q1t^5 zb$zL=uHOlM{+8?U$#9*wLD`>BI@Dcgx{QV4{Rf8kAE^Fo`+cLZpTCv*_W1gi;`3So zW&7P9x6Q_V0V+QGVR--9ZvGaic@6!<)>Zven^%9R`E=jm_a7MEe_(k3fzrL+XMX>I z;r$1O_aFE7LbWTi)A|c`Sv*dG;r++`@lfNv0mJ*xZqvOR4DUZMy#K)P{^Nd;&#hf^ zsO$T{!uC(ofBpHu+iiogKVcZ3Jsuwz#s`M+fnj`dz5h=7e$mXB&!4G`aXlAn9%=mi zS{wt_|0C|d1r>*{p~i{dW$jLd8mE{0qI5qG>gRt$q4Xc+zNqtJd3YmK945Oj>iP42 zsCJJ*={q0l_n^N5mEWt}7j<4#dr^A74-?=v_r+THd!gEW59`1`+>hJcCH%W+m7vax z^3|;Mq0|(rt=$6_Lch+4p^L)LgjPtjrr4|bZ+yl<@Z=9U7v%BU+M46 ze*{YR8V9ZYXHa@q`QGw-$q#&w9)CZS&b@xL{2l+LYSZ~xpf)cG7JeMiFD@Ok%_Lbclk)qk^JT86q0 zfpzi!=l(pX^IyV~)$UNsQ2&uo`acV$`&!rtmipEFYEW@H9qRfaP`aMzesqiPrxf28 zk3iWQQ2G8jRGeDwHT}mx#p5n0-FLyT|CDk;>ydrfQxC=5Q(3;JxFobppI61-Y`iW| z{cMIBx76=8?jR_CFVy+F4qN=!K;_2~sQFy_hxy+^<;R#mt$l~TY@XLb=~3oy%a7Bb z@?#Fv{b?ao+`oa!kB0wPK6Hi3kBROtf@-%7s=pThT7Fy#wI63fwuTXov$R0Z{Dpuv8Vw&K-s8}|F`IhH#OfTLlJTx0h!?tm)LJdbj#pyNo zyO*%@Uqflypk%91)1grNX|?-jm$LI8LiP7(=~kiEo1oS(x@@aZ<2g_o{|&XD%9Lvr zYTFk|+dH8&oej00cDrA$ytQi&)!%(kTD}FP^-oY*kE>w&X)@G)ngONp1}Kf=D%$=@ zgxXJ+yMHxQyN99r-wUOA)p*-a{h|CJQ0Je3iosqe?Gr26e!2uo^IM_n?JD;-K(+e? z>iSBR3*S#QgP!*JtnZ6z`)ogThRXFzq2lx+RE{5nibsk4wx5PT#UUYleu-UcQy3$E zFQt$pYTpm4{~O(Z5-RTNpvKAb;|aO8ml{D`Cu&`7p!U*fP;u_-zNqt}_R=7zcwg?m zsJM@XYIiGCe5b;&UP8rpj{Bm{i)t?_e$PY2`BnEt?WMP&+I%uP8F+~{{)m?Db;MhOn}n$HK_R2tZx21 zDBT;^u=d|T)vo$AEq_)g*navMO6LJ5*?zhVO5Z1;^xXla>rYVosckLuFNbP(FO)91 zP&LBI-G3#G^n z?{&Yj{WKOT9*dyj@g9`!wf(u&_R|wF?@gH+gNrqfWb#Dp3f2Dz_h&%G^>wIma{YMe zFKj9(d7?l;Y2+Qj1*LCsyfa+%j)VM!GUGjKW8~0?+>gNl1Xip6s<)aM-kK*hbx85Z~6Q2wIs7U!>_;@h}KtMGG-%c0`?64dce zpxXZm)nCxl#%TsMes3tgR6n zxPMw7TYrnbrpKjF`|xR~c=SEX;xP?MzgB0Po}Hog;mz*v>Syt&agOPJ0o3P8Goj+~ zxgRfiu3g^@z4`{(*|eIUP)w z=}_@_7HYgBFdV0l{gD|X9zlP*?p7$9?|wq6jXMBp9e+Z_qwRS%-e*wp_{IIP18n`5 zoNs!}fQrXvD4lK{Xz^GMrQfB4OwZ9!@p#Vtau-@WdPD7lyP)FnHdH(+47TGPq4vih zsQ%KR#<>S79?wC=;~OY_euG*^a8cp$SRNIR#E#bfMksq6Djsh^#iM*D)1@C&Jg$Tq zZzcS%c;tFK)Gp;Kf1ZZwf3W+a<~Ms*YuN6>wegZY0gez=*jiJ_&48u5|px%}$TCm>cdS0|Y)%3X- zD&CWz^65jUIG5wTrF?1(!#KnL%BN(;imtb5KEEAM7B}4bxfN>MB~a_Qc!Z7nAk=uB zue5la59NOdwf;A+GCh8PibtD~rqd3nc+?za`n?6E=LV>FlpJmTn5!)w&q2lGE2wzX z8)Naf2I~0#pss%vDjwNT@%RQR9wo=xeELGo?*gcGq`^?9@ZYJ_KKk!$2BXau&g&cq zEsLl89;&^;(8>bzVT?W;DsvlQ7*{M){Pk`z(^54^F zPWFB3WAn_2G0$wSjhtt%eb#s6Jd-{xIM0n-qj_feeAfCr^L(DwlWqQLC))uv&)W1I zJx|RkdY%hn%rlK^Bj>q4#yq!1&2tQGG|yz8&p;^4fLhckE@+*1=Ku`!035uPA7VvZ(7Xi zTIRL3?)^|!Cf)RC1=a6FsCu>%s-A6!+OJ91*>(2*_==d%^Qnwclu1d0MD8eo1^`jG)uzoxq{s=myEs$=uq7gc{2L)D{|&h=3D$F1&* zs$02G_3WVgVx*irb0u=oZf-nueC@c`+Z#HbBMu2dI2H?RwK?0#rUd3N_wA z7>*M@|HjUzEYByJAGJK6->@k*-VCUI4nmFF@D5wYMyUKMey5GM2NhxgIJW#iyA+@*a!FGf?^T1ynrh+-va|4R!n>sOw*W zitkFOcNgS8(4W%okq@)A@${)W<}>o|+Y z1yJKHg8vndycqGw^!XK?ZsWCr>SsFCxND)-G3I_7cOKMu{bpD^MnL(ypz`se2TYIY zQ1RFVrPIxs7LV7U^cynM^@obbJoigIWbx<$rTY}9c&vijA7vi4W;!(4B!RN=Ean`=kji%38P`X?L6^~U=@i+ptKdRqk=5xWl0?Dfd4cwus^7A8a-*_ z_kfzuRH*qr0JV>dK4Ut)4ppyy zgVJyIJl7v;f9!L=&$AYfJD_x51GPW?hKk2o&)M-CpyDwThW$as<6Wrnzl4fMqXjm< z)==>{6&4ncyov?)N4mFv7s|ec(xt-l7LTD&y3B@($7@h}lw0WI6mtKl86RVRykghQ zg|d&_Pg>&p1BUx!sqYV{@eaape=IY90u1*D4EM*YzCU2NKVI|w0mFQT;r@8t_XiC3 z$8z5vFx($2e1E`jf532mz;J)Sus;~?k2idOz;J&+&G!Kq?hja4JW|kTjf8MZc3r1J z*+Qszd<3;W>bzjO41tQrO;F=)gyA@a#A9TPc;xu}y1(iB1FD~mFx($2eSg4ke?W~l zeUd;r@VOK4-iBFx(&R_gUln1BUwphWi7C`{NzoA28e> zFzgS8`vZpi1BUx!t(PJqQ#>F4E2Hk z6_4dH;*sw2`vS@;ylef8ff{!n)H?dTXXD-pHD1y>i$^ageB%TPL9 z_`b#CQ7HYoZZJLjK*i%u_YZtv@o2EobRPy4k2z5B_|}hC`OvO!1H=BH#u)(>k2|2| z^DflG*mT z|B+oc1zuYDpw3698(P4|} zw+kx24?xAE;a2mfZL@g11GPVjZnt=x1{IHcp^h(wx_&cMJa$2i6ZeUY-vBBeBcSxT z7HS>0!ouQ_j7E|5D&2K`7s|ecibsXTe*b{dWi|}&A5i0!^SWQy{d{nYcr5n$)&JDS zI~Quci=f8c2epprJ8aywP~(mH%;GT>%0B|N{#$pN9*dy%$B$4t{co4WV>^_76L!1) zQ1Mvne$zb`k1L>bp9{4=c0`hET1 z@kxsjpT$1E28V6D{!sIM0fzepY8})6@cjZc-k3jqzd-r_Lao30U#7=PQ2OkJiciBM zrrSoS_>}$I^jr+3?@Fln{NaB3zZRbtpyKc?RD2o*t;3(gUk`Qs38?E=K*eV*RD8aN z8oz82e%~-W2Woy7Ld|zL)Vi*Lg~exDRD9B1=Xas(TPU3>9PoMu!+Hk8dImLKxo`eE zK8s_-C(GworD$sn7j%P~?-NktZiQOMgkr73ahE}jH>7y$@cwcml>Z~t`b)%_9#2B) zvl%KrRZEy|E1}}^7nGh^B~9N&Q1SW3{j}1p!|zo*0TqYOpyE@ljKyad)babE;`2OI zf6Jiavm0vszo6oCT3MT4Z>aeWgj(07u(0@i8Wo>p*Lf-j&eGBRyU*9r)e#OdJd|E^Gb05^WYoXRLro6>x9@KdKDp-6*K>2&1;`1An z9y2PMK5s+Cr+B>Swg@Ud-$Ch_S;_RB4Hcgq?x$9<_}m8-hYe8iiK}Yy831*BJXCxh zgX(V{RD3>!iqCgY^J!Vl=GPHwzCEGVbuKI{K26aqvcBcH&b_{~_>6|qX$Dk$cEj-g zbI|WUP~%O9{}rE9kB{2r95)$Y8_o`T7C_J@;5=P=PRi7OiHl$z5=zLLs09OeUjzZPN?~3)Uy1T4wYZ; zyPs0W@@qWQ{NI3@|F5tn>|WQ7Uk$bXd!YJz7;2nVPy+D5@nxEa)+RoDsNm0=%F!nL zdDC8-|2Qbif@=SsA6GkB0#x5ap!$sbd8pvvh_ar{ADj4k$kRg&j4Sv!ATi~fDq zHBastp4Wdg54}=HEyF0Hts~IahJNk0qXodsCoVamCNHg+Pq$X z+7C@S+5GN;n%@ej<8QhDwx8eW$A5*ozg0Zd`s)p~o|~ce-E&a;ey{sK`1v-STZivE z&V_0}6KcQCcfWKOs}GH#&X0l>;Y9a8gWBf@-S61d_Wyv>t$s{|s(<%Dy&qcV{%?N% z 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 == 0) { - ggml_cl_mul_mat(src0, src1, dst, params->wdata, params->wsize); - } - return; - } -#endif - #if GGML_USE_LLAMAFILE // broadcast factors const int64_t r2 = ne12 / ne02; @@ -3628,11 +3616,6 @@ struct ggml_cplan ggml_graph_plan( { const enum ggml_type vec_dot_type = type_traits_cpu[node->src[0]->type].vec_dot_type; -#if defined(GGML_USE_CLBLAST) - if (ggml_cl_can_mul_mat(node->src[0], node->src[1], node)) { - cur = ggml_cl_mul_mat_get_wsize(node->src[0], node->src[1], node); - } else -#endif if (node->src[1]->type != vec_dot_type) { size_t cur2 = ggml_row_size(vec_dot_type, ggml_nelements(node->src[1])); cur = MAX(cur, cur2); @@ -4561,9 +4544,6 @@ void ggml_cpu_init(void) { #if defined(__ARM_ARCH) ggml_init_arm_arch_features(); #endif -#if defined(GGML_USE_CLBLAST) - ggml_cl_init(); -#endif #if defined(__riscv) ggml_init_riscv_arch_features(); diff --git a/ggml/src/ggml-cpu/repack.cpp b/ggml/src/ggml-cpu/repack.cpp index 0c3288c39..5721a2b56 100644 --- a/ggml/src/ggml-cpu/repack.cpp +++ b/ggml/src/ggml-cpu/repack.cpp @@ -2324,9 +2324,6 @@ static const ggml::cpu::tensor_traits * ggml_repack_get_optimal_repack_type(cons static const ggml::cpu::repack::tensor_traits iq4_nl_4x4_q8_0; bool permit_repack = true; -#if defined(GGML_USE_CLBLAST) - permit_repack = false; //kcpp: clblast cannot handle repacking -#endif // instance for Q8_0 static const ggml::cpu::repack::tensor_traits q8_0_4x4_q8_0; diff --git a/gpttype_adapter.cpp b/gpttype_adapter.cpp index 54c667fdc..6c9900018 100644 --- a/gpttype_adapter.cpp +++ b/gpttype_adapter.cpp @@ -158,7 +158,7 @@ static int savestate_limit = 0; static std::vector savestates; inline int kcpp_cpu_has_blas(void) { -#if defined(GGML_USE_BLAS) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) || defined(GGML_USE_CLBLAST) || defined(GGML_USE_SYCL) +#if defined(GGML_USE_BLAS) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) || defined(GGML_USE_SYCL) return 1; #else return 0; @@ -2389,21 +2389,6 @@ ModelLoadResult gpttype_load_model(const load_model_inputs inputs, FileFormat in } } - #if defined(GGML_USE_CLBLAST) - if(file_format==FileFormat::GGUF_GENERIC && model_params.n_gpu_layers>0) - { - if(file_format_meta.model_architecture == GGUFArch::ARCH_FALCON) - { - printf("\nOpenCL does not support GPU Layer offloading for this model architecture! GPU Offload has been disabled.\n"); - model_params.n_gpu_layers = 0; - } - else if(file_format_meta.n_expert_count>1) - { - printf("\nOpenCL cannot use regular GPU offloading for this model architecture. A fallback GPU offloader will be used with degraded performance.\n"); - - } - } - #endif #if defined(GGML_USE_CUDA) if(kcpp_parseinfo_maindevice>0) { @@ -3278,7 +3263,7 @@ int GetThreadsToUse(bool blasmode) { if (blasmode) { - #if defined(GGML_USE_CLBLAST) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) + #if defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) return kcpp_data->n_blasthreads; #else return std::min(kcpp_data->n_blasthreads, 4); diff --git a/include/CL/Utils/Context.h b/include/CL/Utils/Context.h deleted file mode 100644 index cebb8b9eb..000000000 --- a/include/CL/Utils/Context.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -// OpenCL includes -#include - -// STL includes -#include - -UTILS_EXPORT -cl_context cl_util_get_context(const cl_uint plat_id, const cl_uint dev_id, - const cl_device_type type, cl_int* const error); -UTILS_EXPORT -cl_device_id cl_util_get_device(const cl_uint plat_id, const cl_uint dev_id, - const cl_device_type type, cl_int* const error); - -UTILS_EXPORT -cl_int cl_util_print_device_info(const cl_device_id device); - -UTILS_EXPORT -char* cl_util_get_device_info(const cl_device_id device, - const cl_device_info info, cl_int* const error); -UTILS_EXPORT -char* cl_util_get_platform_info(const cl_platform_id platform, - const cl_platform_info info, - cl_int* const error); - -// build program and show log if build is not successful -UTILS_EXPORT -cl_int cl_util_build_program(const cl_program pr, const cl_device_id dev, - const char* const opt); - -#define GET_CURRENT_TIMER(time) \ - struct timespec time; \ - timespec_get(&time, TIME_UTC); \ - { \ - } - -#define TIMER_DIFFERENCE(dt, time1, time2) \ - { \ - dt = (time2.tv_sec - time1.tv_sec) * 1000000000 \ - + (time2.tv_nsec - time1.tv_nsec); \ - } - -#define START_TIMER GET_CURRENT_TIMER(start_timer1) -#define STOP_TIMER(dt) \ - GET_CURRENT_TIMER(stop_timer2) \ - TIMER_DIFFERENCE(dt, start_timer1, stop_timer2) diff --git a/include/CL/Utils/Context.hpp b/include/CL/Utils/Context.hpp deleted file mode 100644 index bd1110c34..000000000 --- a/include/CL/Utils/Context.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -// OpenCL SDK includes -#include "OpenCLUtilsCpp_Export.h" - -#include - -// OpenCL includes -#include - -namespace cl { -namespace util { - Context UTILSCPP_EXPORT get_context(cl_uint plat_id, cl_uint dev_id, - cl_device_type type, - cl_int* error = nullptr); -} -} diff --git a/include/CL/Utils/Detail.hpp b/include/CL/Utils/Detail.hpp deleted file mode 100644 index 49cccd02c..000000000 --- a/include/CL/Utils/Detail.hpp +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once - -// STL includes -#include -#include // std::forward, std::integer_sequence -#include // std::tuple, std::get -#include // std::initializer_list - -namespace cl { -namespace util { - namespace detail { - // Borrowed from: - // https://www.fluentcpp.com/2019/03/05/for_each_arg-applying-a-function-to-each-argument-of-a-function-in-cpp/ - template F for_each_arg(F f, Args&&... args) - { - (void)std::initializer_list{ ( - (void)f(std::forward(args)), 0)... }; - return f; - } - - namespace impl { - // Borrowed from: https://stackoverflow.com/a/16387374/1476661 - template - void for_each_in_tuple(T&& t, F&& f, - std::integer_sequence) - { - auto l = { - (std::forward(f)(std::get(std::forward(t))), 0)... - }; - (void)l; - } - } - template - void for_each_in_tuple(std::tuple const& t, F&& f) - { - impl::for_each_in_tuple( - t, std::forward(f), - std::make_integer_sequence()); - } - - namespace impl { - // Borrowed from - // https://codereview.stackexchange.com/questions/193420/apply-a-function-to-each-element-of-a-tuple-map-a-tuple - template - auto transform_tuple(Tuple&& t, F&& f, std::index_sequence) - { - return std::make_tuple(std::forward(f)(std::get(t))...); - } - } - template - auto transform_tuple(const std::tuple& t, F&& f) - { - return impl::transform_tuple( - t, std::forward(f), - std::make_index_sequence{}); - } - - namespace impl { - // Borrowed from - // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3658.html - // with modifications of Casey Carter at - // https://stackoverflow.com/a/51365112/1476661 - template - auto apply(F&& f, Tuple&& args, std::index_sequence) - -> decltype(std::forward(f)( - std::get(std::forward(args))...)) - { - return std::forward(f)( - std::get(std::forward(args))...); - } - } - template >::value>> - auto apply(F&& f, Tuple&& args) - -> decltype(impl::apply(std::forward(f), - std::forward(args), Indices())) - { - return impl::apply(std::forward(f), std::forward(args), - Indices()); - } - } -} -} diff --git a/include/CL/Utils/Device.hpp b/include/CL/Utils/Device.hpp deleted file mode 100644 index 0a8aed8b6..000000000 --- a/include/CL/Utils/Device.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "OpenCLUtilsCpp_Export.h" -#include - -#include - -namespace cl { -namespace util { - bool UTILSCPP_EXPORT opencl_c_version_contains( - const cl::Device& device, const cl::string& version_fragment); - - bool UTILSCPP_EXPORT supports_extension(const cl::Device& device, - const cl::string& extension); - -#ifdef CL_VERSION_3_0 - bool UTILSCPP_EXPORT supports_feature(const cl::Device& device, - const cl::string& feature_name); -#endif -} -} diff --git a/include/CL/Utils/Error.h b/include/CL/Utils/Error.h deleted file mode 100644 index bf6e24bf5..000000000 --- a/include/CL/Utils/Error.h +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -// OpenCL Utils includes -#include - -// STL includes -#include // fprintf - -// OpenCL includes -#include - -// RET = function returns error code -// PAR = functions sets error code in the paremeter - -#ifdef _DEBUG - -#define OCLERROR_RET(func, err, label) \ - do \ - { \ - err = func; \ - if (err != CL_SUCCESS) \ - { \ - cl_util_print_error(err); \ - fprintf(stderr, "on line %d, in file %s\n%s\n", __LINE__, \ - __FILE__, #func); \ - goto label; \ - } \ - } while (0) - -#define OCLERROR_PAR(func, err, label) \ - do \ - { \ - func; \ - if (err != CL_SUCCESS) \ - { \ - cl_util_print_error(err); \ - fprintf(stderr, "on line %d, in file %s\n%s\n", __LINE__, \ - __FILE__, #func); \ - goto label; \ - } \ - } while (0) - -#define MEM_CHECK(func, err, label) \ - do \ - { \ - if ((func) == NULL) \ - { \ - err = CL_OUT_OF_HOST_MEMORY; \ - cl_util_print_error(err); \ - fprintf(stderr, "on line %d, in file %s\n%s\n", __LINE__, \ - __FILE__, #func); \ - goto label; \ - } \ - } while (0) - -#else - -#define OCLERROR_RET(func, err, label) \ - do \ - { \ - err = func; \ - if (err != CL_SUCCESS) goto label; \ - } while (0) - -#define OCLERROR_PAR(func, err, label) \ - do \ - { \ - func; \ - if (err != CL_SUCCESS) goto label; \ - } while (0) - -#define MEM_CHECK(func, err, label) \ - do \ - { \ - if ((func) == NULL) \ - { \ - err = CL_OUT_OF_HOST_MEMORY; \ - goto label; \ - } \ - } while (0) - -#endif - -UTILS_EXPORT -void cl_util_print_error(cl_int error); diff --git a/include/CL/Utils/Error.hpp b/include/CL/Utils/Error.hpp deleted file mode 100644 index 50df2f7b3..000000000 --- a/include/CL/Utils/Error.hpp +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtilsCpp_Export.h" - -// OpenCL Utils includes -#include - -// OpenCL includes -#include - -namespace cl { -namespace util { -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - /*! \brief Exception class - * - * This may be thrown by SDK utility functions when - * CL_HPP_ENABLE_EXCEPTIONS is defined. - */ - class Error : public std::exception { - private: - int err_; - const char* errStr_; - - public: - /*! \brief Create a new SDK error exception for a given error code - * and corresponding message. - * - * \param err error code value. - * - * \param errStr a descriptive string that must remain in scope until - * handling of the exception has concluded. If set, it - * will be returned by what(). - */ - Error(cl_int err, const char* errStr = NULL): err_(err), errStr_(errStr) - {} - - ~Error() throw() {} - - /*! \brief Get error string associated with exception - * - * \return A memory pointer to the error message string. - */ - virtual const char* what() const throw() - { - if (errStr_ == NULL) - { - return "empty"; - } - else - { - return errStr_; - } - } - - /*! \brief Get error code associated with exception - * - * \return The error code. - */ - cl_int err(void) const { return err_; } - }; -#endif - - namespace detail { - UTILSCPP_EXPORT cl_int errHandler(cl_int err, cl_int* errPtr, - const char* errStr = nullptr); - } - -} -} diff --git a/include/CL/Utils/ErrorCodes.h b/include/CL/Utils/ErrorCodes.h deleted file mode 100644 index a1f9d4a8e..000000000 --- a/include/CL/Utils/ErrorCodes.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#define CL_UTIL_INDEX_OUT_OF_RANGE -2000 -#define CL_UTIL_DEVICE_NOT_INTEROPERABLE -2001 -#define CL_UTIL_FILE_OPERATION_ERROR -2002 diff --git a/include/CL/Utils/Event.h b/include/CL/Utils/Event.h deleted file mode 100644 index f144e2157..000000000 --- a/include/CL/Utils/Event.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -// OpenCL includes -#include - -UTILS_EXPORT -cl_ulong cl_util_get_event_duration(const cl_event event, - const cl_profiling_info start, - const cl_profiling_info end, - cl_int* const error); \ No newline at end of file diff --git a/include/CL/Utils/Event.hpp b/include/CL/Utils/Event.hpp deleted file mode 100644 index e5a6577eb..000000000 --- a/include/CL/Utils/Event.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -// OpenCL SDK includes -#include "OpenCLUtilsCpp_Export.h" - -// STL includes -#include - -// OpenCL includes -#include - -namespace cl { -namespace util { - template - auto get_duration(cl::Event& ev) - { - return std::chrono::duration_cast(std::chrono::nanoseconds{ - ev.getProfilingInfo() - ev.getProfilingInfo() }); - } -} -} diff --git a/include/CL/Utils/File.h b/include/CL/Utils/File.h deleted file mode 100644 index 62c8e95a7..000000000 --- a/include/CL/Utils/File.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -// OpenCL includes -#include - -// read all the text file contents securely in ANSI C89 -// return pointer to C-string with file contents -// can handle streams with no known size and no support for fseek -// based on https://stackoverflow.com/questions/14002954/ by Nominal Animal -UTILS_EXPORT -char* cl_util_read_text_file(const char* const filename, size_t* const length, - cl_int* const error); - -// read all the binary file contents securely in ANSI C89 -// return pointer to file contents -// can handle streams with no known size and no support for fseek -// based on https://stackoverflow.com/questions/14002954/ by Nominal Animal -UTILS_EXPORT -unsigned char* cl_util_read_binary_file(const char* const filename, - size_t* const length, - cl_int* const error); - -// write binaries of OpenCL compiled program -// binaries are written as separate files for each device -// with file name "(program_file_name)_(name of device).bin" -// based on variant of Logan -// http://logan.tw/posts/2014/11/22/pre-compile-the-opencl-kernel-program-part-2/ -UTILS_EXPORT -cl_int cl_util_write_binaries(const cl_program program, - const char* const program_file_name); - -// read binaries of OpenCL compiled program -// from files of file names "(program_file_name)_(name of device).bin" -UTILS_EXPORT -cl_program cl_util_read_binaries(const cl_context context, - const cl_device_id* const devices, - const cl_uint num_devices, - const char* const program_file_name, - cl_int* const error); diff --git a/include/CL/Utils/File.hpp b/include/CL/Utils/File.hpp deleted file mode 100644 index 984a32388..000000000 --- a/include/CL/Utils/File.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -// OpenCL SDK includes -#include - -// STL includes -#include -#include - -namespace cl { -namespace util { - // Scott Meyers, Effective STL, Addison-Wesley Professional, 2001, Item 29 - // with error handling - UTILSCPP_EXPORT - std::string read_text_file(const char* const filename, cl_int* const error) - { - std::ifstream in(filename); - if (in.good()) - { - try - { - std::string red((std::istreambuf_iterator(in)), - std::istreambuf_iterator()); - if (in.good() && in.eof()) - { - if (error != nullptr) *error = CL_SUCCESS; - return red; - } - else - { - detail::errHandler(CL_UTIL_FILE_OPERATION_ERROR, error, - "File read error!"); - return std::string(); - } - } catch (std::bad_alloc& ex) - { - detail::errHandler(CL_OUT_OF_RESOURCES, error, - "Bad allocation!"); - return std::string(); - } - } - else - { - detail::errHandler(CL_INVALID_VALUE, error, "No file!"); - return std::string(); - } - } -} -} diff --git a/include/CL/Utils/InteropContext.hpp b/include/CL/Utils/InteropContext.hpp deleted file mode 100644 index 2d8fdbfdc..000000000 --- a/include/CL/Utils/InteropContext.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include "OpenCLUtilsCpp_Export.h" -#include - -#include - -namespace cl { -namespace util { - vector - UTILSCPP_EXPORT get_interop_context_properties(const cl::Device& plat, - cl_int* error = nullptr); - - Context UTILSCPP_EXPORT get_interop_context(int plat_id, int dev_id, - cl_device_type type, - cl_int* error = nullptr); -} -} diff --git a/include/CL/Utils/OpenCLUtilsCpp_Export.h b/include/CL/Utils/OpenCLUtilsCpp_Export.h deleted file mode 100644 index b063c9fe1..000000000 --- a/include/CL/Utils/OpenCLUtilsCpp_Export.h +++ /dev/null @@ -1,42 +0,0 @@ - -#ifndef UTILSCPP_EXPORT_H -#define UTILSCPP_EXPORT_H - -#ifdef OPENCLUTILSCPP_STATIC_DEFINE -# define UTILSCPP_EXPORT -# define OPENCLUTILSCPP_NO_EXPORT -#else -# ifndef UTILSCPP_EXPORT -# ifdef OpenCLUtilsCpp_EXPORTS - /* We are building this library */ -# define UTILSCPP_EXPORT -# else - /* We are using this library */ -# define UTILSCPP_EXPORT -# endif -# endif - -# ifndef OPENCLUTILSCPP_NO_EXPORT -# define OPENCLUTILSCPP_NO_EXPORT -# endif -#endif - -#ifndef OPENCLUTILSCPP_DEPRECATED -# define OPENCLUTILSCPP_DEPRECATED __declspec(deprecated) -#endif - -#ifndef OPENCLUTILSCPP_DEPRECATED_EXPORT -# define OPENCLUTILSCPP_DEPRECATED_EXPORT UTILSCPP_EXPORT OPENCLUTILSCPP_DEPRECATED -#endif - -#ifndef OPENCLUTILSCPP_DEPRECATED_NO_EXPORT -# define OPENCLUTILSCPP_DEPRECATED_NO_EXPORT OPENCLUTILSCPP_NO_EXPORT OPENCLUTILSCPP_DEPRECATED -#endif - -#if 0 /* DEFINE_NO_DEPRECATED */ -# ifndef OPENCLUTILSCPP_NO_DEPRECATED -# define OPENCLUTILSCPP_NO_DEPRECATED -# endif -#endif - -#endif /* UTILSCPP_EXPORT_H */ diff --git a/include/CL/Utils/OpenCLUtils_Export.h b/include/CL/Utils/OpenCLUtils_Export.h deleted file mode 100644 index 2db857ec0..000000000 --- a/include/CL/Utils/OpenCLUtils_Export.h +++ /dev/null @@ -1,42 +0,0 @@ - -#ifndef UTILS_EXPORT_H -#define UTILS_EXPORT_H - -#ifdef OPENCLUTILS_STATIC_DEFINE -# define UTILS_EXPORT -# define OPENCLUTILS_NO_EXPORT -#else -# ifndef UTILS_EXPORT -# ifdef OpenCLUtils_EXPORTS - /* We are building this library */ -# define UTILS_EXPORT -# else - /* We are using this library */ -# define UTILS_EXPORT -# endif -# endif - -# ifndef OPENCLUTILS_NO_EXPORT -# define OPENCLUTILS_NO_EXPORT -# endif -#endif - -#ifndef OPENCLUTILS_DEPRECATED -# define OPENCLUTILS_DEPRECATED __declspec(deprecated) -#endif - -#ifndef OPENCLUTILS_DEPRECATED_EXPORT -# define OPENCLUTILS_DEPRECATED_EXPORT UTILS_EXPORT OPENCLUTILS_DEPRECATED -#endif - -#ifndef OPENCLUTILS_DEPRECATED_NO_EXPORT -# define OPENCLUTILS_DEPRECATED_NO_EXPORT OPENCLUTILS_NO_EXPORT OPENCLUTILS_DEPRECATED -#endif - -#if 0 /* DEFINE_NO_DEPRECATED */ -# ifndef OPENCLUTILS_NO_DEPRECATED -# define OPENCLUTILS_NO_DEPRECATED -# endif -#endif - -#endif /* UTILS_EXPORT_H */ diff --git a/include/CL/Utils/Platform.hpp b/include/CL/Utils/Platform.hpp deleted file mode 100644 index 9957d76ba..000000000 --- a/include/CL/Utils/Platform.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "OpenCLUtilsCpp_Export.h" -#include - -#include - -namespace cl { -namespace util { - bool UTILSCPP_EXPORT supports_extension(const cl::Platform& platform, - const cl::string& extension); - - bool UTILSCPP_EXPORT platform_version_contains( - const cl::Platform& platform, const cl::string& version_fragment); -} -} diff --git a/include/CL/Utils/Utils.h b/include/CL/Utils/Utils.h deleted file mode 100644 index 9d1c2471f..000000000 --- a/include/CL/Utils/Utils.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -#include -#include -#include - -// OpenCL includes -#include diff --git a/include/CL/Utils/Utils.hpp b/include/CL/Utils/Utils.hpp deleted file mode 100644 index 40dd8d795..000000000 --- a/include/CL/Utils/Utils.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -// OpenCL Utils includes -#include "OpenCLUtils_Export.h" - -#include -#include -#include -#include -#include -#include - -// OpenCL includes -#include diff --git a/include/CL/cl.h b/include/CL/cl.h deleted file mode 100644 index 6c700ab17..000000000 --- a/include/CL/cl.h +++ /dev/null @@ -1,1936 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_H -#define __OPENCL_CL_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/******************************************************************************/ - -typedef struct _cl_platform_id * cl_platform_id; -typedef struct _cl_device_id * cl_device_id; -typedef struct _cl_context * cl_context; -typedef struct _cl_command_queue * cl_command_queue; -typedef struct _cl_mem * cl_mem; -typedef struct _cl_program * cl_program; -typedef struct _cl_kernel * cl_kernel; -typedef struct _cl_event * cl_event; -typedef struct _cl_sampler * cl_sampler; - -typedef cl_uint cl_bool; /* WARNING! Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */ -typedef cl_ulong cl_bitfield; -typedef cl_ulong cl_properties; -typedef cl_bitfield cl_device_type; -typedef cl_uint cl_platform_info; -typedef cl_uint cl_device_info; -typedef cl_bitfield cl_device_fp_config; -typedef cl_uint cl_device_mem_cache_type; -typedef cl_uint cl_device_local_mem_type; -typedef cl_bitfield cl_device_exec_capabilities; -#ifdef CL_VERSION_2_0 -typedef cl_bitfield cl_device_svm_capabilities; -#endif -typedef cl_bitfield cl_command_queue_properties; -#ifdef CL_VERSION_1_2 -typedef intptr_t cl_device_partition_property; -typedef cl_bitfield cl_device_affinity_domain; -#endif - -typedef intptr_t cl_context_properties; -typedef cl_uint cl_context_info; -#ifdef CL_VERSION_2_0 -typedef cl_properties cl_queue_properties; -#endif -typedef cl_uint cl_command_queue_info; -typedef cl_uint cl_channel_order; -typedef cl_uint cl_channel_type; -typedef cl_bitfield cl_mem_flags; -#ifdef CL_VERSION_2_0 -typedef cl_bitfield cl_svm_mem_flags; -#endif -typedef cl_uint cl_mem_object_type; -typedef cl_uint cl_mem_info; -#ifdef CL_VERSION_1_2 -typedef cl_bitfield cl_mem_migration_flags; -#endif -typedef cl_uint cl_image_info; -#ifdef CL_VERSION_1_1 -typedef cl_uint cl_buffer_create_type; -#endif -typedef cl_uint cl_addressing_mode; -typedef cl_uint cl_filter_mode; -typedef cl_uint cl_sampler_info; -typedef cl_bitfield cl_map_flags; -#ifdef CL_VERSION_2_0 -typedef intptr_t cl_pipe_properties; -typedef cl_uint cl_pipe_info; -#endif -typedef cl_uint cl_program_info; -typedef cl_uint cl_program_build_info; -#ifdef CL_VERSION_1_2 -typedef cl_uint cl_program_binary_type; -#endif -typedef cl_int cl_build_status; -typedef cl_uint cl_kernel_info; -#ifdef CL_VERSION_1_2 -typedef cl_uint cl_kernel_arg_info; -typedef cl_uint cl_kernel_arg_address_qualifier; -typedef cl_uint cl_kernel_arg_access_qualifier; -typedef cl_bitfield cl_kernel_arg_type_qualifier; -#endif -typedef cl_uint cl_kernel_work_group_info; -#ifdef CL_VERSION_2_1 -typedef cl_uint cl_kernel_sub_group_info; -#endif -typedef cl_uint cl_event_info; -typedef cl_uint cl_command_type; -typedef cl_uint cl_profiling_info; -#ifdef CL_VERSION_2_0 -typedef cl_properties cl_sampler_properties; -typedef cl_uint cl_kernel_exec_info; -#endif -#ifdef CL_VERSION_3_0 -typedef cl_bitfield cl_device_atomic_capabilities; -typedef cl_bitfield cl_device_device_enqueue_capabilities; -typedef cl_uint cl_khronos_vendor_id; -typedef cl_properties cl_mem_properties; -typedef cl_uint cl_version; -#endif - -typedef struct _cl_image_format { - cl_channel_order image_channel_order; - cl_channel_type image_channel_data_type; -} cl_image_format; - -#ifdef CL_VERSION_1_2 - -typedef struct _cl_image_desc { - cl_mem_object_type image_type; - size_t image_width; - size_t image_height; - size_t image_depth; - size_t image_array_size; - size_t image_row_pitch; - size_t image_slice_pitch; - cl_uint num_mip_levels; - cl_uint num_samples; -#ifdef CL_VERSION_2_0 -#if defined(__GNUC__) - __extension__ /* Prevents warnings about anonymous union in -pedantic builds */ -#endif -#if defined(_MSC_VER) && !defined(__STDC__) -#pragma warning( push ) -#pragma warning( disable : 4201 ) /* Prevents warning about nameless struct/union in /W4 builds */ -#endif -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wc11-extensions" /* Prevents warning about nameless union being C11 extension*/ -#endif -#if defined(_MSC_VER) && defined(__STDC__) - /* Anonymous unions are not supported in /Za builds */ -#else - union { -#endif -#endif - cl_mem buffer; -#ifdef CL_VERSION_2_0 -#if defined(_MSC_VER) && defined(__STDC__) - /* Anonymous unions are not supported in /Za builds */ -#else - cl_mem mem_object; - }; -#endif -#if defined(_MSC_VER) && !defined(__STDC__) -#pragma warning( pop ) -#endif -#ifdef __clang__ -#pragma clang diagnostic pop -#endif -#endif -} cl_image_desc; - -#endif - -#ifdef CL_VERSION_1_1 - -typedef struct _cl_buffer_region { - size_t origin; - size_t size; -} cl_buffer_region; - -#endif - -#ifdef CL_VERSION_3_0 - -#define CL_NAME_VERSION_MAX_NAME_SIZE 64 - -typedef struct _cl_name_version { - cl_version version; - char name[CL_NAME_VERSION_MAX_NAME_SIZE]; -} cl_name_version; - -#endif - -/******************************************************************************/ - -/* Error Codes */ -#define CL_SUCCESS 0 -#define CL_DEVICE_NOT_FOUND -1 -#define CL_DEVICE_NOT_AVAILABLE -2 -#define CL_COMPILER_NOT_AVAILABLE -3 -#define CL_MEM_OBJECT_ALLOCATION_FAILURE -4 -#define CL_OUT_OF_RESOURCES -5 -#define CL_OUT_OF_HOST_MEMORY -6 -#define CL_PROFILING_INFO_NOT_AVAILABLE -7 -#define CL_MEM_COPY_OVERLAP -8 -#define CL_IMAGE_FORMAT_MISMATCH -9 -#define CL_IMAGE_FORMAT_NOT_SUPPORTED -10 -#define CL_BUILD_PROGRAM_FAILURE -11 -#define CL_MAP_FAILURE -12 -#ifdef CL_VERSION_1_1 -#define CL_MISALIGNED_SUB_BUFFER_OFFSET -13 -#define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14 -#endif -#ifdef CL_VERSION_1_2 -#define CL_COMPILE_PROGRAM_FAILURE -15 -#define CL_LINKER_NOT_AVAILABLE -16 -#define CL_LINK_PROGRAM_FAILURE -17 -#define CL_DEVICE_PARTITION_FAILED -18 -#define CL_KERNEL_ARG_INFO_NOT_AVAILABLE -19 -#endif - -#define CL_INVALID_VALUE -30 -#define CL_INVALID_DEVICE_TYPE -31 -#define CL_INVALID_PLATFORM -32 -#define CL_INVALID_DEVICE -33 -#define CL_INVALID_CONTEXT -34 -#define CL_INVALID_QUEUE_PROPERTIES -35 -#define CL_INVALID_COMMAND_QUEUE -36 -#define CL_INVALID_HOST_PTR -37 -#define CL_INVALID_MEM_OBJECT -38 -#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR -39 -#define CL_INVALID_IMAGE_SIZE -40 -#define CL_INVALID_SAMPLER -41 -#define CL_INVALID_BINARY -42 -#define CL_INVALID_BUILD_OPTIONS -43 -#define CL_INVALID_PROGRAM -44 -#define CL_INVALID_PROGRAM_EXECUTABLE -45 -#define CL_INVALID_KERNEL_NAME -46 -#define CL_INVALID_KERNEL_DEFINITION -47 -#define CL_INVALID_KERNEL -48 -#define CL_INVALID_ARG_INDEX -49 -#define CL_INVALID_ARG_VALUE -50 -#define CL_INVALID_ARG_SIZE -51 -#define CL_INVALID_KERNEL_ARGS -52 -#define CL_INVALID_WORK_DIMENSION -53 -#define CL_INVALID_WORK_GROUP_SIZE -54 -#define CL_INVALID_WORK_ITEM_SIZE -55 -#define CL_INVALID_GLOBAL_OFFSET -56 -#define CL_INVALID_EVENT_WAIT_LIST -57 -#define CL_INVALID_EVENT -58 -#define CL_INVALID_OPERATION -59 -#define CL_INVALID_GL_OBJECT -60 -#define CL_INVALID_BUFFER_SIZE -61 -#define CL_INVALID_MIP_LEVEL -62 -#define CL_INVALID_GLOBAL_WORK_SIZE -63 -#ifdef CL_VERSION_1_1 -#define CL_INVALID_PROPERTY -64 -#endif -#ifdef CL_VERSION_1_2 -#define CL_INVALID_IMAGE_DESCRIPTOR -65 -#define CL_INVALID_COMPILER_OPTIONS -66 -#define CL_INVALID_LINKER_OPTIONS -67 -#define CL_INVALID_DEVICE_PARTITION_COUNT -68 -#endif -#ifdef CL_VERSION_2_0 -#define CL_INVALID_PIPE_SIZE -69 -#define CL_INVALID_DEVICE_QUEUE -70 -#endif -#ifdef CL_VERSION_2_2 -#define CL_INVALID_SPEC_ID -71 -#define CL_MAX_SIZE_RESTRICTION_EXCEEDED -72 -#endif - - -/* cl_bool */ -#define CL_FALSE 0 -#define CL_TRUE 1 -#ifdef CL_VERSION_1_2 -#define CL_BLOCKING CL_TRUE -#define CL_NON_BLOCKING CL_FALSE -#endif - -/* cl_platform_info */ -#define CL_PLATFORM_PROFILE 0x0900 -#define CL_PLATFORM_VERSION 0x0901 -#define CL_PLATFORM_NAME 0x0902 -#define CL_PLATFORM_VENDOR 0x0903 -#define CL_PLATFORM_EXTENSIONS 0x0904 -#ifdef CL_VERSION_2_1 -#define CL_PLATFORM_HOST_TIMER_RESOLUTION 0x0905 -#endif -#ifdef CL_VERSION_3_0 -#define CL_PLATFORM_NUMERIC_VERSION 0x0906 -#define CL_PLATFORM_EXTENSIONS_WITH_VERSION 0x0907 -#endif - -/* cl_device_type - bitfield */ -#define CL_DEVICE_TYPE_DEFAULT (1 << 0) -#define CL_DEVICE_TYPE_CPU (1 << 1) -#define CL_DEVICE_TYPE_GPU (1 << 2) -#define CL_DEVICE_TYPE_ACCELERATOR (1 << 3) -#ifdef CL_VERSION_1_2 -#define CL_DEVICE_TYPE_CUSTOM (1 << 4) -#endif -#define CL_DEVICE_TYPE_ALL 0xFFFFFFFF - -/* cl_device_info */ -#define CL_DEVICE_TYPE 0x1000 -#define CL_DEVICE_VENDOR_ID 0x1001 -#define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002 -#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 0x1003 -#define CL_DEVICE_MAX_WORK_GROUP_SIZE 0x1004 -#define CL_DEVICE_MAX_WORK_ITEM_SIZES 0x1005 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B -#define CL_DEVICE_MAX_CLOCK_FREQUENCY 0x100C -#define CL_DEVICE_ADDRESS_BITS 0x100D -#define CL_DEVICE_MAX_READ_IMAGE_ARGS 0x100E -#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS 0x100F -#define CL_DEVICE_MAX_MEM_ALLOC_SIZE 0x1010 -#define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011 -#define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012 -#define CL_DEVICE_IMAGE3D_MAX_WIDTH 0x1013 -#define CL_DEVICE_IMAGE3D_MAX_HEIGHT 0x1014 -#define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015 -#define CL_DEVICE_IMAGE_SUPPORT 0x1016 -#define CL_DEVICE_MAX_PARAMETER_SIZE 0x1017 -#define CL_DEVICE_MAX_SAMPLERS 0x1018 -#define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019 -#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A -#define CL_DEVICE_SINGLE_FP_CONFIG 0x101B -#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C -#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE 0x101D -#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E -#define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F -#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE 0x1020 -#define CL_DEVICE_MAX_CONSTANT_ARGS 0x1021 -#define CL_DEVICE_LOCAL_MEM_TYPE 0x1022 -#define CL_DEVICE_LOCAL_MEM_SIZE 0x1023 -#define CL_DEVICE_ERROR_CORRECTION_SUPPORT 0x1024 -#define CL_DEVICE_PROFILING_TIMER_RESOLUTION 0x1025 -#define CL_DEVICE_ENDIAN_LITTLE 0x1026 -#define CL_DEVICE_AVAILABLE 0x1027 -#define CL_DEVICE_COMPILER_AVAILABLE 0x1028 -#define CL_DEVICE_EXECUTION_CAPABILITIES 0x1029 -#define CL_DEVICE_QUEUE_PROPERTIES 0x102A /* deprecated */ -#ifdef CL_VERSION_2_0 -#define CL_DEVICE_QUEUE_ON_HOST_PROPERTIES 0x102A -#endif -#define CL_DEVICE_NAME 0x102B -#define CL_DEVICE_VENDOR 0x102C -#define CL_DRIVER_VERSION 0x102D -#define CL_DEVICE_PROFILE 0x102E -#define CL_DEVICE_VERSION 0x102F -#define CL_DEVICE_EXTENSIONS 0x1030 -#define CL_DEVICE_PLATFORM 0x1031 -#ifdef CL_VERSION_1_2 -#define CL_DEVICE_DOUBLE_FP_CONFIG 0x1032 -#endif -/* 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG which is already defined in "cl_ext.h" */ -#ifdef CL_VERSION_1_1 -#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF 0x1034 -#define CL_DEVICE_HOST_UNIFIED_MEMORY 0x1035 /* deprecated */ -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR 0x1036 -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT 0x1037 -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT 0x1038 -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG 0x1039 -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT 0x103A -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE 0x103B -#define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF 0x103C -#define CL_DEVICE_OPENCL_C_VERSION 0x103D -#endif -#ifdef CL_VERSION_1_2 -#define CL_DEVICE_LINKER_AVAILABLE 0x103E -#define CL_DEVICE_BUILT_IN_KERNELS 0x103F -#define CL_DEVICE_IMAGE_MAX_BUFFER_SIZE 0x1040 -#define CL_DEVICE_IMAGE_MAX_ARRAY_SIZE 0x1041 -#define CL_DEVICE_PARENT_DEVICE 0x1042 -#define CL_DEVICE_PARTITION_MAX_SUB_DEVICES 0x1043 -#define CL_DEVICE_PARTITION_PROPERTIES 0x1044 -#define CL_DEVICE_PARTITION_AFFINITY_DOMAIN 0x1045 -#define CL_DEVICE_PARTITION_TYPE 0x1046 -#define CL_DEVICE_REFERENCE_COUNT 0x1047 -#define CL_DEVICE_PREFERRED_INTEROP_USER_SYNC 0x1048 -#define CL_DEVICE_PRINTF_BUFFER_SIZE 0x1049 -#endif -#ifdef CL_VERSION_2_0 -#define CL_DEVICE_IMAGE_PITCH_ALIGNMENT 0x104A -#define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT 0x104B -#define CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS 0x104C -#define CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE 0x104D -#define CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES 0x104E -#define CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE 0x104F -#define CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE 0x1050 -#define CL_DEVICE_MAX_ON_DEVICE_QUEUES 0x1051 -#define CL_DEVICE_MAX_ON_DEVICE_EVENTS 0x1052 -#define CL_DEVICE_SVM_CAPABILITIES 0x1053 -#define CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE 0x1054 -#define CL_DEVICE_MAX_PIPE_ARGS 0x1055 -#define CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS 0x1056 -#define CL_DEVICE_PIPE_MAX_PACKET_SIZE 0x1057 -#define CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT 0x1058 -#define CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT 0x1059 -#define CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT 0x105A -#endif -#ifdef CL_VERSION_2_1 -#define CL_DEVICE_IL_VERSION 0x105B -#define CL_DEVICE_MAX_NUM_SUB_GROUPS 0x105C -#define CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS 0x105D -#endif -#ifdef CL_VERSION_3_0 -#define CL_DEVICE_NUMERIC_VERSION 0x105E -#define CL_DEVICE_EXTENSIONS_WITH_VERSION 0x1060 -#define CL_DEVICE_ILS_WITH_VERSION 0x1061 -#define CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION 0x1062 -#define CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES 0x1063 -#define CL_DEVICE_ATOMIC_FENCE_CAPABILITIES 0x1064 -#define CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT 0x1065 -#define CL_DEVICE_OPENCL_C_ALL_VERSIONS 0x1066 -#define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x1067 -#define CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT 0x1068 -#define CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT 0x1069 -/* 0x106A to 0x106E - Reserved for upcoming KHR extension */ -#define CL_DEVICE_OPENCL_C_FEATURES 0x106F -#define CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES 0x1070 -#define CL_DEVICE_PIPE_SUPPORT 0x1071 -#define CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED 0x1072 -#endif - -/* cl_device_fp_config - bitfield */ -#define CL_FP_DENORM (1 << 0) -#define CL_FP_INF_NAN (1 << 1) -#define CL_FP_ROUND_TO_NEAREST (1 << 2) -#define CL_FP_ROUND_TO_ZERO (1 << 3) -#define CL_FP_ROUND_TO_INF (1 << 4) -#define CL_FP_FMA (1 << 5) -#ifdef CL_VERSION_1_1 -#define CL_FP_SOFT_FLOAT (1 << 6) -#endif -#ifdef CL_VERSION_1_2 -#define CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT (1 << 7) -#endif - -/* cl_device_mem_cache_type */ -#define CL_NONE 0x0 -#define CL_READ_ONLY_CACHE 0x1 -#define CL_READ_WRITE_CACHE 0x2 - -/* cl_device_local_mem_type */ -#define CL_LOCAL 0x1 -#define CL_GLOBAL 0x2 - -/* cl_device_exec_capabilities - bitfield */ -#define CL_EXEC_KERNEL (1 << 0) -#define CL_EXEC_NATIVE_KERNEL (1 << 1) - -/* cl_command_queue_properties - bitfield */ -#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE (1 << 0) -#define CL_QUEUE_PROFILING_ENABLE (1 << 1) -#ifdef CL_VERSION_2_0 -#define CL_QUEUE_ON_DEVICE (1 << 2) -#define CL_QUEUE_ON_DEVICE_DEFAULT (1 << 3) -#endif - -/* cl_context_info */ -#define CL_CONTEXT_REFERENCE_COUNT 0x1080 -#define CL_CONTEXT_DEVICES 0x1081 -#define CL_CONTEXT_PROPERTIES 0x1082 -#ifdef CL_VERSION_1_1 -#define CL_CONTEXT_NUM_DEVICES 0x1083 -#endif - -/* cl_context_properties */ -#define CL_CONTEXT_PLATFORM 0x1084 -#ifdef CL_VERSION_1_2 -#define CL_CONTEXT_INTEROP_USER_SYNC 0x1085 -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_device_partition_property */ -#define CL_DEVICE_PARTITION_EQUALLY 0x1086 -#define CL_DEVICE_PARTITION_BY_COUNTS 0x1087 -#define CL_DEVICE_PARTITION_BY_COUNTS_LIST_END 0x0 -#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN 0x1088 - -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_device_affinity_domain */ -#define CL_DEVICE_AFFINITY_DOMAIN_NUMA (1 << 0) -#define CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE (1 << 1) -#define CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE (1 << 2) -#define CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE (1 << 3) -#define CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE (1 << 4) -#define CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE (1 << 5) - -#endif - -#ifdef CL_VERSION_2_0 - -/* cl_device_svm_capabilities */ -#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER (1 << 0) -#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER (1 << 1) -#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM (1 << 2) -#define CL_DEVICE_SVM_ATOMICS (1 << 3) - -#endif - -/* cl_command_queue_info */ -#define CL_QUEUE_CONTEXT 0x1090 -#define CL_QUEUE_DEVICE 0x1091 -#define CL_QUEUE_REFERENCE_COUNT 0x1092 -#define CL_QUEUE_PROPERTIES 0x1093 -#ifdef CL_VERSION_2_0 -#define CL_QUEUE_SIZE 0x1094 -#endif -#ifdef CL_VERSION_2_1 -#define CL_QUEUE_DEVICE_DEFAULT 0x1095 -#endif -#ifdef CL_VERSION_3_0 -#define CL_QUEUE_PROPERTIES_ARRAY 0x1098 -#endif - -/* cl_mem_flags and cl_svm_mem_flags - bitfield */ -#define CL_MEM_READ_WRITE (1 << 0) -#define CL_MEM_WRITE_ONLY (1 << 1) -#define CL_MEM_READ_ONLY (1 << 2) -#define CL_MEM_USE_HOST_PTR (1 << 3) -#define CL_MEM_ALLOC_HOST_PTR (1 << 4) -#define CL_MEM_COPY_HOST_PTR (1 << 5) -/* reserved (1 << 6) */ -#ifdef CL_VERSION_1_2 -#define CL_MEM_HOST_WRITE_ONLY (1 << 7) -#define CL_MEM_HOST_READ_ONLY (1 << 8) -#define CL_MEM_HOST_NO_ACCESS (1 << 9) -#endif -#ifdef CL_VERSION_2_0 -#define CL_MEM_SVM_FINE_GRAIN_BUFFER (1 << 10) /* used by cl_svm_mem_flags only */ -#define CL_MEM_SVM_ATOMICS (1 << 11) /* used by cl_svm_mem_flags only */ -#define CL_MEM_KERNEL_READ_AND_WRITE (1 << 12) -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_mem_migration_flags - bitfield */ -#define CL_MIGRATE_MEM_OBJECT_HOST (1 << 0) -#define CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED (1 << 1) - -#endif - -/* cl_channel_order */ -#define CL_R 0x10B0 -#define CL_A 0x10B1 -#define CL_RG 0x10B2 -#define CL_RA 0x10B3 -#define CL_RGB 0x10B4 -#define CL_RGBA 0x10B5 -#define CL_BGRA 0x10B6 -#define CL_ARGB 0x10B7 -#define CL_INTENSITY 0x10B8 -#define CL_LUMINANCE 0x10B9 -#ifdef CL_VERSION_1_1 -#define CL_Rx 0x10BA -#define CL_RGx 0x10BB -#define CL_RGBx 0x10BC -#endif -#ifdef CL_VERSION_1_2 -#define CL_DEPTH 0x10BD -#define CL_DEPTH_STENCIL 0x10BE -#endif -#ifdef CL_VERSION_2_0 -#define CL_sRGB 0x10BF -#define CL_sRGBx 0x10C0 -#define CL_sRGBA 0x10C1 -#define CL_sBGRA 0x10C2 -#define CL_ABGR 0x10C3 -#endif - -/* cl_channel_type */ -#define CL_SNORM_INT8 0x10D0 -#define CL_SNORM_INT16 0x10D1 -#define CL_UNORM_INT8 0x10D2 -#define CL_UNORM_INT16 0x10D3 -#define CL_UNORM_SHORT_565 0x10D4 -#define CL_UNORM_SHORT_555 0x10D5 -#define CL_UNORM_INT_101010 0x10D6 -#define CL_SIGNED_INT8 0x10D7 -#define CL_SIGNED_INT16 0x10D8 -#define CL_SIGNED_INT32 0x10D9 -#define CL_UNSIGNED_INT8 0x10DA -#define CL_UNSIGNED_INT16 0x10DB -#define CL_UNSIGNED_INT32 0x10DC -#define CL_HALF_FLOAT 0x10DD -#define CL_FLOAT 0x10DE -#ifdef CL_VERSION_1_2 -#define CL_UNORM_INT24 0x10DF -#endif -#ifdef CL_VERSION_2_1 -#define CL_UNORM_INT_101010_2 0x10E0 -#endif - -/* cl_mem_object_type */ -#define CL_MEM_OBJECT_BUFFER 0x10F0 -#define CL_MEM_OBJECT_IMAGE2D 0x10F1 -#define CL_MEM_OBJECT_IMAGE3D 0x10F2 -#ifdef CL_VERSION_1_2 -#define CL_MEM_OBJECT_IMAGE2D_ARRAY 0x10F3 -#define CL_MEM_OBJECT_IMAGE1D 0x10F4 -#define CL_MEM_OBJECT_IMAGE1D_ARRAY 0x10F5 -#define CL_MEM_OBJECT_IMAGE1D_BUFFER 0x10F6 -#endif -#ifdef CL_VERSION_2_0 -#define CL_MEM_OBJECT_PIPE 0x10F7 -#endif - -/* cl_mem_info */ -#define CL_MEM_TYPE 0x1100 -#define CL_MEM_FLAGS 0x1101 -#define CL_MEM_SIZE 0x1102 -#define CL_MEM_HOST_PTR 0x1103 -#define CL_MEM_MAP_COUNT 0x1104 -#define CL_MEM_REFERENCE_COUNT 0x1105 -#define CL_MEM_CONTEXT 0x1106 -#ifdef CL_VERSION_1_1 -#define CL_MEM_ASSOCIATED_MEMOBJECT 0x1107 -#define CL_MEM_OFFSET 0x1108 -#endif -#ifdef CL_VERSION_2_0 -#define CL_MEM_USES_SVM_POINTER 0x1109 -#endif -#ifdef CL_VERSION_3_0 -#define CL_MEM_PROPERTIES 0x110A -#endif - -/* cl_image_info */ -#define CL_IMAGE_FORMAT 0x1110 -#define CL_IMAGE_ELEMENT_SIZE 0x1111 -#define CL_IMAGE_ROW_PITCH 0x1112 -#define CL_IMAGE_SLICE_PITCH 0x1113 -#define CL_IMAGE_WIDTH 0x1114 -#define CL_IMAGE_HEIGHT 0x1115 -#define CL_IMAGE_DEPTH 0x1116 -#ifdef CL_VERSION_1_2 -#define CL_IMAGE_ARRAY_SIZE 0x1117 -#define CL_IMAGE_BUFFER 0x1118 -#define CL_IMAGE_NUM_MIP_LEVELS 0x1119 -#define CL_IMAGE_NUM_SAMPLES 0x111A -#endif - - -/* cl_pipe_info */ -#ifdef CL_VERSION_2_0 -#define CL_PIPE_PACKET_SIZE 0x1120 -#define CL_PIPE_MAX_PACKETS 0x1121 -#endif -#ifdef CL_VERSION_3_0 -#define CL_PIPE_PROPERTIES 0x1122 -#endif - -/* cl_addressing_mode */ -#define CL_ADDRESS_NONE 0x1130 -#define CL_ADDRESS_CLAMP_TO_EDGE 0x1131 -#define CL_ADDRESS_CLAMP 0x1132 -#define CL_ADDRESS_REPEAT 0x1133 -#ifdef CL_VERSION_1_1 -#define CL_ADDRESS_MIRRORED_REPEAT 0x1134 -#endif - -/* cl_filter_mode */ -#define CL_FILTER_NEAREST 0x1140 -#define CL_FILTER_LINEAR 0x1141 - -/* cl_sampler_info */ -#define CL_SAMPLER_REFERENCE_COUNT 0x1150 -#define CL_SAMPLER_CONTEXT 0x1151 -#define CL_SAMPLER_NORMALIZED_COORDS 0x1152 -#define CL_SAMPLER_ADDRESSING_MODE 0x1153 -#define CL_SAMPLER_FILTER_MODE 0x1154 -#ifdef CL_VERSION_2_0 -/* These enumerants are for the cl_khr_mipmap_image extension. - They have since been added to cl_ext.h with an appropriate - KHR suffix, but are left here for backwards compatibility. */ -#define CL_SAMPLER_MIP_FILTER_MODE 0x1155 -#define CL_SAMPLER_LOD_MIN 0x1156 -#define CL_SAMPLER_LOD_MAX 0x1157 -#endif -#ifdef CL_VERSION_3_0 -#define CL_SAMPLER_PROPERTIES 0x1158 -#endif - -/* cl_map_flags - bitfield */ -#define CL_MAP_READ (1 << 0) -#define CL_MAP_WRITE (1 << 1) -#ifdef CL_VERSION_1_2 -#define CL_MAP_WRITE_INVALIDATE_REGION (1 << 2) -#endif - -/* cl_program_info */ -#define CL_PROGRAM_REFERENCE_COUNT 0x1160 -#define CL_PROGRAM_CONTEXT 0x1161 -#define CL_PROGRAM_NUM_DEVICES 0x1162 -#define CL_PROGRAM_DEVICES 0x1163 -#define CL_PROGRAM_SOURCE 0x1164 -#define CL_PROGRAM_BINARY_SIZES 0x1165 -#define CL_PROGRAM_BINARIES 0x1166 -#ifdef CL_VERSION_1_2 -#define CL_PROGRAM_NUM_KERNELS 0x1167 -#define CL_PROGRAM_KERNEL_NAMES 0x1168 -#endif -#ifdef CL_VERSION_2_1 -#define CL_PROGRAM_IL 0x1169 -#endif -#ifdef CL_VERSION_2_2 -#define CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT 0x116A -#define CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT 0x116B -#endif - -/* cl_program_build_info */ -#define CL_PROGRAM_BUILD_STATUS 0x1181 -#define CL_PROGRAM_BUILD_OPTIONS 0x1182 -#define CL_PROGRAM_BUILD_LOG 0x1183 -#ifdef CL_VERSION_1_2 -#define CL_PROGRAM_BINARY_TYPE 0x1184 -#endif -#ifdef CL_VERSION_2_0 -#define CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE 0x1185 -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_program_binary_type */ -#define CL_PROGRAM_BINARY_TYPE_NONE 0x0 -#define CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT 0x1 -#define CL_PROGRAM_BINARY_TYPE_LIBRARY 0x2 -#define CL_PROGRAM_BINARY_TYPE_EXECUTABLE 0x4 - -#endif - -/* cl_build_status */ -#define CL_BUILD_SUCCESS 0 -#define CL_BUILD_NONE -1 -#define CL_BUILD_ERROR -2 -#define CL_BUILD_IN_PROGRESS -3 - -/* cl_kernel_info */ -#define CL_KERNEL_FUNCTION_NAME 0x1190 -#define CL_KERNEL_NUM_ARGS 0x1191 -#define CL_KERNEL_REFERENCE_COUNT 0x1192 -#define CL_KERNEL_CONTEXT 0x1193 -#define CL_KERNEL_PROGRAM 0x1194 -#ifdef CL_VERSION_1_2 -#define CL_KERNEL_ATTRIBUTES 0x1195 -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_kernel_arg_info */ -#define CL_KERNEL_ARG_ADDRESS_QUALIFIER 0x1196 -#define CL_KERNEL_ARG_ACCESS_QUALIFIER 0x1197 -#define CL_KERNEL_ARG_TYPE_NAME 0x1198 -#define CL_KERNEL_ARG_TYPE_QUALIFIER 0x1199 -#define CL_KERNEL_ARG_NAME 0x119A - -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_kernel_arg_address_qualifier */ -#define CL_KERNEL_ARG_ADDRESS_GLOBAL 0x119B -#define CL_KERNEL_ARG_ADDRESS_LOCAL 0x119C -#define CL_KERNEL_ARG_ADDRESS_CONSTANT 0x119D -#define CL_KERNEL_ARG_ADDRESS_PRIVATE 0x119E - -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_kernel_arg_access_qualifier */ -#define CL_KERNEL_ARG_ACCESS_READ_ONLY 0x11A0 -#define CL_KERNEL_ARG_ACCESS_WRITE_ONLY 0x11A1 -#define CL_KERNEL_ARG_ACCESS_READ_WRITE 0x11A2 -#define CL_KERNEL_ARG_ACCESS_NONE 0x11A3 - -#endif - -#ifdef CL_VERSION_1_2 - -/* cl_kernel_arg_type_qualifier */ -#define CL_KERNEL_ARG_TYPE_NONE 0 -#define CL_KERNEL_ARG_TYPE_CONST (1 << 0) -#define CL_KERNEL_ARG_TYPE_RESTRICT (1 << 1) -#define CL_KERNEL_ARG_TYPE_VOLATILE (1 << 2) -#ifdef CL_VERSION_2_0 -#define CL_KERNEL_ARG_TYPE_PIPE (1 << 3) -#endif - -#endif - -/* cl_kernel_work_group_info */ -#define CL_KERNEL_WORK_GROUP_SIZE 0x11B0 -#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE 0x11B1 -#define CL_KERNEL_LOCAL_MEM_SIZE 0x11B2 -#define CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x11B3 -#define CL_KERNEL_PRIVATE_MEM_SIZE 0x11B4 -#ifdef CL_VERSION_1_2 -#define CL_KERNEL_GLOBAL_WORK_SIZE 0x11B5 -#endif - -#ifdef CL_VERSION_2_1 - -/* cl_kernel_sub_group_info */ -#define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE 0x2033 -#define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE 0x2034 -#define CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT 0x11B8 -#define CL_KERNEL_MAX_NUM_SUB_GROUPS 0x11B9 -#define CL_KERNEL_COMPILE_NUM_SUB_GROUPS 0x11BA - -#endif - -#ifdef CL_VERSION_2_0 - -/* cl_kernel_exec_info */ -#define CL_KERNEL_EXEC_INFO_SVM_PTRS 0x11B6 -#define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM 0x11B7 - -#endif - -/* cl_event_info */ -#define CL_EVENT_COMMAND_QUEUE 0x11D0 -#define CL_EVENT_COMMAND_TYPE 0x11D1 -#define CL_EVENT_REFERENCE_COUNT 0x11D2 -#define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3 -#ifdef CL_VERSION_1_1 -#define CL_EVENT_CONTEXT 0x11D4 -#endif - -/* cl_command_type */ -#define CL_COMMAND_NDRANGE_KERNEL 0x11F0 -#define CL_COMMAND_TASK 0x11F1 -#define CL_COMMAND_NATIVE_KERNEL 0x11F2 -#define CL_COMMAND_READ_BUFFER 0x11F3 -#define CL_COMMAND_WRITE_BUFFER 0x11F4 -#define CL_COMMAND_COPY_BUFFER 0x11F5 -#define CL_COMMAND_READ_IMAGE 0x11F6 -#define CL_COMMAND_WRITE_IMAGE 0x11F7 -#define CL_COMMAND_COPY_IMAGE 0x11F8 -#define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9 -#define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA -#define CL_COMMAND_MAP_BUFFER 0x11FB -#define CL_COMMAND_MAP_IMAGE 0x11FC -#define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD -#define CL_COMMAND_MARKER 0x11FE -#define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF -#define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200 -#ifdef CL_VERSION_1_1 -#define CL_COMMAND_READ_BUFFER_RECT 0x1201 -#define CL_COMMAND_WRITE_BUFFER_RECT 0x1202 -#define CL_COMMAND_COPY_BUFFER_RECT 0x1203 -#define CL_COMMAND_USER 0x1204 -#endif -#ifdef CL_VERSION_1_2 -#define CL_COMMAND_BARRIER 0x1205 -#define CL_COMMAND_MIGRATE_MEM_OBJECTS 0x1206 -#define CL_COMMAND_FILL_BUFFER 0x1207 -#define CL_COMMAND_FILL_IMAGE 0x1208 -#endif -#ifdef CL_VERSION_2_0 -#define CL_COMMAND_SVM_FREE 0x1209 -#define CL_COMMAND_SVM_MEMCPY 0x120A -#define CL_COMMAND_SVM_MEMFILL 0x120B -#define CL_COMMAND_SVM_MAP 0x120C -#define CL_COMMAND_SVM_UNMAP 0x120D -#endif -#ifdef CL_VERSION_3_0 -#define CL_COMMAND_SVM_MIGRATE_MEM 0x120E -#endif - -/* command execution status */ -#define CL_COMPLETE 0x0 -#define CL_RUNNING 0x1 -#define CL_SUBMITTED 0x2 -#define CL_QUEUED 0x3 - -/* cl_buffer_create_type */ -#ifdef CL_VERSION_1_1 -#define CL_BUFFER_CREATE_TYPE_REGION 0x1220 -#endif - -/* cl_profiling_info */ -#define CL_PROFILING_COMMAND_QUEUED 0x1280 -#define CL_PROFILING_COMMAND_SUBMIT 0x1281 -#define CL_PROFILING_COMMAND_START 0x1282 -#define CL_PROFILING_COMMAND_END 0x1283 -#ifdef CL_VERSION_2_0 -#define CL_PROFILING_COMMAND_COMPLETE 0x1284 -#endif - -/* cl_device_atomic_capabilities - bitfield */ -#ifdef CL_VERSION_3_0 -#define CL_DEVICE_ATOMIC_ORDER_RELAXED (1 << 0) -#define CL_DEVICE_ATOMIC_ORDER_ACQ_REL (1 << 1) -#define CL_DEVICE_ATOMIC_ORDER_SEQ_CST (1 << 2) -#define CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM (1 << 3) -#define CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP (1 << 4) -#define CL_DEVICE_ATOMIC_SCOPE_DEVICE (1 << 5) -#define CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES (1 << 6) -#endif - -/* cl_device_device_enqueue_capabilities - bitfield */ -#ifdef CL_VERSION_3_0 -#define CL_DEVICE_QUEUE_SUPPORTED (1 << 0) -#define CL_DEVICE_QUEUE_REPLACEABLE_DEFAULT (1 << 1) -#endif - -/* cl_khronos_vendor_id */ -#define CL_KHRONOS_VENDOR_ID_CODEPLAY 0x10004 - -#ifdef CL_VERSION_3_0 - -/* cl_version */ -#define CL_VERSION_MAJOR_BITS (10) -#define CL_VERSION_MINOR_BITS (10) -#define CL_VERSION_PATCH_BITS (12) - -#define CL_VERSION_MAJOR_MASK ((1 << CL_VERSION_MAJOR_BITS) - 1) -#define CL_VERSION_MINOR_MASK ((1 << CL_VERSION_MINOR_BITS) - 1) -#define CL_VERSION_PATCH_MASK ((1 << CL_VERSION_PATCH_BITS) - 1) - -#define CL_VERSION_MAJOR(version) \ - ((version) >> (CL_VERSION_MINOR_BITS + CL_VERSION_PATCH_BITS)) - -#define CL_VERSION_MINOR(version) \ - (((version) >> CL_VERSION_PATCH_BITS) & CL_VERSION_MINOR_MASK) - -#define CL_VERSION_PATCH(version) ((version) & CL_VERSION_PATCH_MASK) - -#define CL_MAKE_VERSION(major, minor, patch) \ - ((((major) & CL_VERSION_MAJOR_MASK) \ - << (CL_VERSION_MINOR_BITS + CL_VERSION_PATCH_BITS)) | \ - (((minor) & CL_VERSION_MINOR_MASK) << CL_VERSION_PATCH_BITS) | \ - ((patch) & CL_VERSION_PATCH_MASK)) - -#endif - -/********************************************************************************************************/ - -/* Platform API */ -extern CL_API_ENTRY cl_int CL_API_CALL -clGetPlatformIDs(cl_uint num_entries, - cl_platform_id * platforms, - cl_uint * num_platforms) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetPlatformInfo(cl_platform_id platform, - cl_platform_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -/* Device APIs */ -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceIDs(cl_platform_id platform, - cl_device_type device_type, - cl_uint num_entries, - cl_device_id * devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceInfo(cl_device_id device, - cl_device_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clCreateSubDevices(cl_device_id in_device, - const cl_device_partition_property * properties, - cl_uint num_devices, - cl_device_id * out_devices, - cl_uint * num_devices_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_VERSION_2_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetDefaultDeviceCommandQueue(cl_context context, - cl_device_id device, - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceAndHostTimer(cl_device_id device, - cl_ulong* device_timestamp, - cl_ulong* host_timestamp) CL_API_SUFFIX__VERSION_2_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetHostTimer(cl_device_id device, - cl_ulong * host_timestamp) CL_API_SUFFIX__VERSION_2_1; - -#endif - -/* Context APIs */ -extern CL_API_ENTRY cl_context CL_API_CALL -clCreateContext(const cl_context_properties * properties, - cl_uint num_devices, - const cl_device_id * devices, - void (CL_CALLBACK * pfn_notify)(const char * errinfo, - const void * private_info, - size_t cb, - void * user_data), - void * user_data, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_context CL_API_CALL -clCreateContextFromType(const cl_context_properties * properties, - cl_device_type device_type, - void (CL_CALLBACK * pfn_notify)(const char * errinfo, - const void * private_info, - size_t cb, - void * user_data), - void * user_data, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetContextInfo(cl_context context, - cl_context_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_3_0 - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetContextDestructorCallback(cl_context context, - void (CL_CALLBACK* pfn_notify)(cl_context context, - void* user_data), - void* user_data) CL_API_SUFFIX__VERSION_3_0; - -#endif - -/* Command Queue APIs */ - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_command_queue CL_API_CALL -clCreateCommandQueueWithProperties(cl_context context, - cl_device_id device, - const cl_queue_properties * properties, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetCommandQueueInfo(cl_command_queue command_queue, - cl_command_queue_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -/* Memory Object APIs */ -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateBuffer(cl_context context, - cl_mem_flags flags, - size_t size, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateSubBuffer(cl_mem buffer, - cl_mem_flags flags, - cl_buffer_create_type buffer_create_type, - const void * buffer_create_info, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1; - -#endif - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateImage(cl_context context, - cl_mem_flags flags, - const cl_image_format * image_format, - const cl_image_desc * image_desc, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreatePipe(cl_context context, - cl_mem_flags flags, - cl_uint pipe_packet_size, - cl_uint pipe_max_packets, - const cl_pipe_properties * properties, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0; - -#endif - -#ifdef CL_VERSION_3_0 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateBufferWithProperties(cl_context context, - const cl_mem_properties * properties, - cl_mem_flags flags, - size_t size, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_3_0; - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateImageWithProperties(cl_context context, - const cl_mem_properties * properties, - cl_mem_flags flags, - const cl_image_format * image_format, - const cl_image_desc * image_desc, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_3_0; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedImageFormats(cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint num_entries, - cl_image_format * image_formats, - cl_uint * num_image_formats) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetMemObjectInfo(cl_mem memobj, - cl_mem_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetImageInfo(cl_mem image, - cl_image_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetPipeInfo(cl_mem pipe, - cl_pipe_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0; - -#endif - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetMemObjectDestructorCallback(cl_mem memobj, - void (CL_CALLBACK * pfn_notify)(cl_mem memobj, - void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_1_1; - -#endif - -/* SVM Allocation APIs */ - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY void * CL_API_CALL -clSVMAlloc(cl_context context, - cl_svm_mem_flags flags, - size_t size, - cl_uint alignment) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY void CL_API_CALL -clSVMFree(cl_context context, - void * svm_pointer) CL_API_SUFFIX__VERSION_2_0; - -#endif - -/* Sampler APIs */ - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_sampler CL_API_CALL -clCreateSamplerWithProperties(cl_context context, - const cl_sampler_properties * sampler_properties, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_2_0; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSamplerInfo(cl_sampler sampler, - cl_sampler_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -/* Program Object APIs */ -extern CL_API_ENTRY cl_program CL_API_CALL -clCreateProgramWithSource(cl_context context, - cl_uint count, - const char ** strings, - const size_t * lengths, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_program CL_API_CALL -clCreateProgramWithBinary(cl_context context, - cl_uint num_devices, - const cl_device_id * device_list, - const size_t * lengths, - const unsigned char ** binaries, - cl_int * binary_status, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_program CL_API_CALL -clCreateProgramWithBuiltInKernels(cl_context context, - cl_uint num_devices, - const cl_device_id * device_list, - const char * kernel_names, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_VERSION_2_1 - -extern CL_API_ENTRY cl_program CL_API_CALL -clCreateProgramWithIL(cl_context context, - const void* il, - size_t length, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_2_1; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clBuildProgram(cl_program program, - cl_uint num_devices, - const cl_device_id * device_list, - const char * options, - void (CL_CALLBACK * pfn_notify)(cl_program program, - void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clCompileProgram(cl_program program, - cl_uint num_devices, - const cl_device_id * device_list, - const char * options, - cl_uint num_input_headers, - const cl_program * input_headers, - const char ** header_include_names, - void (CL_CALLBACK * pfn_notify)(cl_program program, - void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_program CL_API_CALL -clLinkProgram(cl_context context, - cl_uint num_devices, - const cl_device_id * device_list, - const char * options, - cl_uint num_input_programs, - const cl_program * input_programs, - void (CL_CALLBACK * pfn_notify)(cl_program program, - void * user_data), - void * user_data, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_VERSION_2_2 - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_2_2_DEPRECATED cl_int CL_API_CALL -clSetProgramReleaseCallback(cl_program program, - void (CL_CALLBACK * pfn_notify)(cl_program program, - void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_2_2_DEPRECATED; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetProgramSpecializationConstant(cl_program program, - cl_uint spec_id, - size_t spec_size, - const void* spec_value) CL_API_SUFFIX__VERSION_2_2; - -#endif - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetProgramInfo(cl_program program, - cl_program_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetProgramBuildInfo(cl_program program, - cl_device_id device, - cl_program_build_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -/* Kernel Object APIs */ -extern CL_API_ENTRY cl_kernel CL_API_CALL -clCreateKernel(cl_program program, - const char * kernel_name, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCreateKernelsInProgram(cl_program program, - cl_uint num_kernels, - cl_kernel * kernels, - cl_uint * num_kernels_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_1 - -extern CL_API_ENTRY cl_kernel CL_API_CALL -clCloneKernel(cl_kernel source_kernel, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_2_1; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseKernel(cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelArg(cl_kernel kernel, - cl_uint arg_index, - size_t arg_size, - const void * arg_value) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelArgSVMPointer(cl_kernel kernel, - cl_uint arg_index, - const void * arg_value) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelExecInfo(cl_kernel kernel, - cl_kernel_exec_info param_name, - size_t param_value_size, - const void * param_value) CL_API_SUFFIX__VERSION_2_0; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelInfo(cl_kernel kernel, - cl_kernel_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelArgInfo(cl_kernel kernel, - cl_uint arg_indx, - cl_kernel_arg_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelWorkGroupInfo(cl_kernel kernel, - cl_device_id device, - cl_kernel_work_group_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelSubGroupInfo(cl_kernel kernel, - cl_device_id device, - cl_kernel_sub_group_info param_name, - size_t input_value_size, - const void* input_value, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_2_1; - -#endif - -/* Event Object APIs */ -extern CL_API_ENTRY cl_int CL_API_CALL -clWaitForEvents(cl_uint num_events, - const cl_event * event_list) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetEventInfo(cl_event event, - cl_event_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_event CL_API_CALL -clCreateUserEvent(cl_context context, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetUserEventStatus(cl_event event, - cl_int execution_status) CL_API_SUFFIX__VERSION_1_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetEventCallback(cl_event event, - cl_int command_exec_callback_type, - void (CL_CALLBACK * pfn_notify)(cl_event event, - cl_int event_command_status, - void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_1_1; - -#endif - -/* Profiling APIs */ -extern CL_API_ENTRY cl_int CL_API_CALL -clGetEventProfilingInfo(cl_event event, - cl_profiling_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -/* Flush and Finish APIs */ -extern CL_API_ENTRY cl_int CL_API_CALL -clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -/* Enqueued Commands APIs */ -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReadBuffer(cl_command_queue command_queue, - cl_mem buffer, - cl_bool blocking_read, - size_t offset, - size_t size, - void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReadBufferRect(cl_command_queue command_queue, - cl_mem buffer, - cl_bool blocking_read, - const size_t * buffer_origin, - const size_t * host_origin, - const size_t * region, - size_t buffer_row_pitch, - size_t buffer_slice_pitch, - size_t host_row_pitch, - size_t host_slice_pitch, - void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_1; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueWriteBuffer(cl_command_queue command_queue, - cl_mem buffer, - cl_bool blocking_write, - size_t offset, - size_t size, - const void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueWriteBufferRect(cl_command_queue command_queue, - cl_mem buffer, - cl_bool blocking_write, - const size_t * buffer_origin, - const size_t * host_origin, - const size_t * region, - size_t buffer_row_pitch, - size_t buffer_slice_pitch, - size_t host_row_pitch, - size_t host_slice_pitch, - const void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_1; - -#endif - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueFillBuffer(cl_command_queue command_queue, - cl_mem buffer, - const void * pattern, - size_t pattern_size, - size_t offset, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCopyBuffer(cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - size_t src_offset, - size_t dst_offset, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCopyBufferRect(cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - const size_t * src_origin, - const size_t * dst_origin, - const size_t * region, - size_t src_row_pitch, - size_t src_slice_pitch, - size_t dst_row_pitch, - size_t dst_slice_pitch, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_1; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReadImage(cl_command_queue command_queue, - cl_mem image, - cl_bool blocking_read, - const size_t * origin, - const size_t * region, - size_t row_pitch, - size_t slice_pitch, - void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueWriteImage(cl_command_queue command_queue, - cl_mem image, - cl_bool blocking_write, - const size_t * origin, - const size_t * region, - size_t input_row_pitch, - size_t input_slice_pitch, - const void * ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueFillImage(cl_command_queue command_queue, - cl_mem image, - const void * fill_color, - const size_t * origin, - const size_t * region, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCopyImage(cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_image, - const size_t * src_origin, - const size_t * dst_origin, - const size_t * region, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCopyImageToBuffer(cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_buffer, - const size_t * src_origin, - const size_t * region, - size_t dst_offset, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCopyBufferToImage(cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_image, - size_t src_offset, - const size_t * dst_origin, - const size_t * region, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY void * CL_API_CALL -clEnqueueMapBuffer(cl_command_queue command_queue, - cl_mem buffer, - cl_bool blocking_map, - cl_map_flags map_flags, - size_t offset, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY void * CL_API_CALL -clEnqueueMapImage(cl_command_queue command_queue, - cl_mem image, - cl_bool blocking_map, - cl_map_flags map_flags, - const size_t * origin, - const size_t * region, - size_t * image_row_pitch, - size_t * image_slice_pitch, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueUnmapMemObject(cl_command_queue command_queue, - cl_mem memobj, - void * mapped_ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMigrateMemObjects(cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem * mem_objects, - cl_mem_migration_flags flags, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueNDRangeKernel(cl_command_queue command_queue, - cl_kernel kernel, - cl_uint work_dim, - const size_t * global_work_offset, - const size_t * global_work_size, - const size_t * local_work_size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueNativeKernel(cl_command_queue command_queue, - void (CL_CALLBACK * user_func)(void *), - void * args, - size_t cb_args, - cl_uint num_mem_objects, - const cl_mem * mem_list, - const void ** args_mem_loc, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMarkerWithWaitList(cl_command_queue command_queue, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueBarrierWithWaitList(cl_command_queue command_queue, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_VERSION_2_0 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMFree(cl_command_queue command_queue, - cl_uint num_svm_pointers, - void * svm_pointers[], - void (CL_CALLBACK * pfn_free_func)(cl_command_queue queue, - cl_uint num_svm_pointers, - void * svm_pointers[], - void * user_data), - void * user_data, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMemcpy(cl_command_queue command_queue, - cl_bool blocking_copy, - void * dst_ptr, - const void * src_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMemFill(cl_command_queue command_queue, - void * svm_ptr, - const void * pattern, - size_t pattern_size, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMap(cl_command_queue command_queue, - cl_bool blocking_map, - cl_map_flags flags, - void * svm_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMUnmap(cl_command_queue command_queue, - void * svm_ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_0; - -#endif - -#ifdef CL_VERSION_2_1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMigrateMem(cl_command_queue command_queue, - cl_uint num_svm_pointers, - const void ** svm_pointers, - const size_t * sizes, - cl_mem_migration_flags flags, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_2_1; - -#endif - -#ifdef CL_VERSION_1_2 - -/* Extension function access - * - * Returns the extension function address for the given function name, - * or NULL if a valid function can not be found. The client must - * check to make sure the address is not NULL, before using or - * calling the returned function address. - */ -extern CL_API_ENTRY void * CL_API_CALL -clGetExtensionFunctionAddressForPlatform(cl_platform_id platform, - const char * func_name) CL_API_SUFFIX__VERSION_1_2; - -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS - /* - * WARNING: - * This API introduces mutable state into the OpenCL implementation. It has been REMOVED - * to better facilitate thread safety. The 1.0 API is not thread safe. It is not tested by the - * OpenCL 1.1 conformance test, and consequently may not work or may not work dependably. - * It is likely to be non-performant. Use of this API is not advised. Use at your own risk. - * - * Software developers previously relying on this API are instructed to set the command queue - * properties when creating the queue, instead. - */ - extern CL_API_ENTRY cl_int CL_API_CALL - clSetCommandQueueProperty(cl_command_queue command_queue, - cl_command_queue_properties properties, - cl_bool enable, - cl_command_queue_properties * old_properties) CL_API_SUFFIX__VERSION_1_0_DEPRECATED; -#endif /* CL_USE_DEPRECATED_OPENCL_1_0_APIS */ - -/* Deprecated OpenCL 1.1 APIs */ -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL -clCreateImage2D(cl_context context, - cl_mem_flags flags, - const cl_image_format * image_format, - size_t image_width, - size_t image_height, - size_t image_row_pitch, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL -clCreateImage3D(cl_context context, - cl_mem_flags flags, - const cl_image_format * image_format, - size_t image_width, - size_t image_height, - size_t image_depth, - size_t image_row_pitch, - size_t image_slice_pitch, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL -clEnqueueMarker(cl_command_queue command_queue, - cl_event * event) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL -clEnqueueWaitForEvents(cl_command_queue command_queue, - cl_uint num_events, - const cl_event * event_list) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL -clEnqueueBarrier(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL -clUnloadCompiler(void) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED void * CL_API_CALL -clGetExtensionFunctionAddress(const char * func_name) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -/* Deprecated OpenCL 2.0 APIs */ -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_2_DEPRECATED cl_command_queue CL_API_CALL -clCreateCommandQueue(cl_context context, - cl_device_id device, - cl_command_queue_properties properties, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_2_DEPRECATED cl_sampler CL_API_CALL -clCreateSampler(cl_context context, - cl_bool normalized_coords, - cl_addressing_mode addressing_mode, - cl_filter_mode filter_mode, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_2_DEPRECATED cl_int CL_API_CALL -clEnqueueTask(cl_command_queue command_queue, - cl_kernel kernel, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2_DEPRECATED; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_H */ diff --git a/include/CL/cl2.hpp b/include/CL/cl2.hpp deleted file mode 100644 index a332962a8..000000000 --- a/include/CL/cl2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// Copyright (c) 2020 The Khronos Group Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#include -#pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.") diff --git a/include/CL/cl_d3d10.h b/include/CL/cl_d3d10.h deleted file mode 100644 index 0d9950bed..000000000 --- a/include/CL/cl_d3d10.h +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_D3D10_H -#define __OPENCL_CL_D3D10_H - -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( push ) -#pragma warning( disable : 4201 ) -#pragma warning( disable : 5105 ) -#endif -#endif -#include -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( pop ) -#endif -#endif -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * cl_khr_d3d10_sharing */ -#define cl_khr_d3d10_sharing 1 - -typedef cl_uint cl_d3d10_device_source_khr; -typedef cl_uint cl_d3d10_device_set_khr; - -/******************************************************************************/ - -/* Error Codes */ -#define CL_INVALID_D3D10_DEVICE_KHR -1002 -#define CL_INVALID_D3D10_RESOURCE_KHR -1003 -#define CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR -1004 -#define CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR -1005 - -/* cl_d3d10_device_source_nv */ -#define CL_D3D10_DEVICE_KHR 0x4010 -#define CL_D3D10_DXGI_ADAPTER_KHR 0x4011 - -/* cl_d3d10_device_set_nv */ -#define CL_PREFERRED_DEVICES_FOR_D3D10_KHR 0x4012 -#define CL_ALL_DEVICES_FOR_D3D10_KHR 0x4013 - -/* cl_context_info */ -#define CL_CONTEXT_D3D10_DEVICE_KHR 0x4014 -#define CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR 0x402C - -/* cl_mem_info */ -#define CL_MEM_D3D10_RESOURCE_KHR 0x4015 - -/* cl_image_info */ -#define CL_IMAGE_D3D10_SUBRESOURCE_KHR 0x4016 - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR 0x4017 -#define CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR 0x4018 - -/******************************************************************************/ - -typedef cl_int (CL_API_CALL *clGetDeviceIDsFromD3D10KHR_fn)( - cl_platform_id platform, - cl_d3d10_device_source_khr d3d_device_source, - void * d3d_object, - cl_d3d10_device_set_khr d3d_device_set, - cl_uint num_entries, - cl_device_id * devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D10BufferKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D10Buffer * resource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D10Texture2DKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D10Texture2D * resource, - UINT subresource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D10Texture3DKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D10Texture3D * resource, - UINT subresource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireD3D10ObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseD3D10ObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -/*************************************************************** -* cl_intel_sharing_format_query_d3d10 -***************************************************************/ -#define cl_intel_sharing_format_query_d3d10 1 - -/* when cl_khr_d3d10_sharing is supported */ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedD3D10TextureFormatsINTEL( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint num_entries, - DXGI_FORMAT* d3d10_formats, - cl_uint* num_texture_formats) ; - -typedef cl_int (CL_API_CALL * -clGetSupportedD3D10TextureFormatsINTEL_fn)( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint num_entries, - DXGI_FORMAT* d3d10_formats, - cl_uint* num_texture_formats) ; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_D3D10_H */ - diff --git a/include/CL/cl_d3d11.h b/include/CL/cl_d3d11.h deleted file mode 100644 index 9393e5c84..000000000 --- a/include/CL/cl_d3d11.h +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_D3D11_H -#define __OPENCL_CL_D3D11_H - -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( push ) -#pragma warning( disable : 4201 ) -#pragma warning( disable : 5105 ) -#endif -#endif -#include -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( pop ) -#endif -#endif -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * cl_khr_d3d11_sharing */ -#define cl_khr_d3d11_sharing 1 - -typedef cl_uint cl_d3d11_device_source_khr; -typedef cl_uint cl_d3d11_device_set_khr; - -/******************************************************************************/ - -/* Error Codes */ -#define CL_INVALID_D3D11_DEVICE_KHR -1006 -#define CL_INVALID_D3D11_RESOURCE_KHR -1007 -#define CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR -1008 -#define CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR -1009 - -/* cl_d3d11_device_source */ -#define CL_D3D11_DEVICE_KHR 0x4019 -#define CL_D3D11_DXGI_ADAPTER_KHR 0x401A - -/* cl_d3d11_device_set */ -#define CL_PREFERRED_DEVICES_FOR_D3D11_KHR 0x401B -#define CL_ALL_DEVICES_FOR_D3D11_KHR 0x401C - -/* cl_context_info */ -#define CL_CONTEXT_D3D11_DEVICE_KHR 0x401D -#define CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR 0x402D - -/* cl_mem_info */ -#define CL_MEM_D3D11_RESOURCE_KHR 0x401E - -/* cl_image_info */ -#define CL_IMAGE_D3D11_SUBRESOURCE_KHR 0x401F - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR 0x4020 -#define CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR 0x4021 - -/******************************************************************************/ - -typedef cl_int (CL_API_CALL *clGetDeviceIDsFromD3D11KHR_fn)( - cl_platform_id platform, - cl_d3d11_device_source_khr d3d_device_source, - void * d3d_object, - cl_d3d11_device_set_khr d3d_device_set, - cl_uint num_entries, - cl_device_id * devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D11BufferKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D11Buffer * resource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D11Texture2DKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D11Texture2D * resource, - UINT subresource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem (CL_API_CALL *clCreateFromD3D11Texture3DKHR_fn)( - cl_context context, - cl_mem_flags flags, - ID3D11Texture3D * resource, - UINT subresource, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireD3D11ObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseD3D11ObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -/*************************************************************** -* cl_intel_sharing_format_query_d3d11 -***************************************************************/ -#define cl_intel_sharing_format_query_d3d11 1 - -/* when cl_khr_d3d11_sharing is supported */ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedD3D11TextureFormatsINTEL( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - DXGI_FORMAT* d3d11_formats, - cl_uint* num_texture_formats) ; - -typedef cl_int (CL_API_CALL * -clGetSupportedD3D11TextureFormatsINTEL_fn)( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - DXGI_FORMAT* d3d11_formats, - cl_uint* num_texture_formats) ; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_D3D11_H */ - diff --git a/include/CL/cl_dx9_media_sharing.h b/include/CL/cl_dx9_media_sharing.h deleted file mode 100644 index fd03bbdc2..000000000 --- a/include/CL/cl_dx9_media_sharing.h +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_DX9_MEDIA_SHARING_H -#define __OPENCL_CL_DX9_MEDIA_SHARING_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/******************************************************************************/ -/* cl_khr_dx9_media_sharing */ -#define cl_khr_dx9_media_sharing 1 - -typedef cl_uint cl_dx9_media_adapter_type_khr; -typedef cl_uint cl_dx9_media_adapter_set_khr; - -#if defined(_WIN32) -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( push ) -#pragma warning( disable : 4201 ) -#pragma warning( disable : 5105 ) -#endif -#endif -#include -#if defined(_MSC_VER) -#if _MSC_VER >=1500 -#pragma warning( pop ) -#endif -#endif -typedef struct _cl_dx9_surface_info_khr -{ - IDirect3DSurface9 *resource; - HANDLE shared_handle; -} cl_dx9_surface_info_khr; -#endif - - -/******************************************************************************/ - -/* Error Codes */ -#define CL_INVALID_DX9_MEDIA_ADAPTER_KHR -1010 -#define CL_INVALID_DX9_MEDIA_SURFACE_KHR -1011 -#define CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR -1012 -#define CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR -1013 - -/* cl_media_adapter_type_khr */ -#define CL_ADAPTER_D3D9_KHR 0x2020 -#define CL_ADAPTER_D3D9EX_KHR 0x2021 -#define CL_ADAPTER_DXVA_KHR 0x2022 - -/* cl_media_adapter_set_khr */ -#define CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR 0x2023 -#define CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR 0x2024 - -/* cl_context_info */ -#define CL_CONTEXT_ADAPTER_D3D9_KHR 0x2025 -#define CL_CONTEXT_ADAPTER_D3D9EX_KHR 0x2026 -#define CL_CONTEXT_ADAPTER_DXVA_KHR 0x2027 - -/* cl_mem_info */ -#define CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR 0x2028 -#define CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR 0x2029 - -/* cl_image_info */ -#define CL_IMAGE_DX9_MEDIA_PLANE_KHR 0x202A - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR 0x202B -#define CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR 0x202C - -/******************************************************************************/ - -typedef cl_int (CL_API_CALL *clGetDeviceIDsFromDX9MediaAdapterKHR_fn)( - cl_platform_id platform, - cl_uint num_media_adapters, - cl_dx9_media_adapter_type_khr * media_adapter_type, - void * media_adapters, - cl_dx9_media_adapter_set_khr media_adapter_set, - cl_uint num_entries, - cl_device_id * devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem (CL_API_CALL *clCreateFromDX9MediaSurfaceKHR_fn)( - cl_context context, - cl_mem_flags flags, - cl_dx9_media_adapter_type_khr adapter_type, - void * surface_info, - cl_uint plane, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireDX9MediaSurfacesKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseDX9MediaSurfacesKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -/*************************************** -* cl_intel_dx9_media_sharing extension * -****************************************/ - -#define cl_intel_dx9_media_sharing 1 - -typedef cl_uint cl_dx9_device_source_intel; -typedef cl_uint cl_dx9_device_set_intel; - -/* error codes */ -#define CL_INVALID_DX9_DEVICE_INTEL -1010 -#define CL_INVALID_DX9_RESOURCE_INTEL -1011 -#define CL_DX9_RESOURCE_ALREADY_ACQUIRED_INTEL -1012 -#define CL_DX9_RESOURCE_NOT_ACQUIRED_INTEL -1013 - -/* cl_dx9_device_source_intel */ -#define CL_D3D9_DEVICE_INTEL 0x4022 -#define CL_D3D9EX_DEVICE_INTEL 0x4070 -#define CL_DXVA_DEVICE_INTEL 0x4071 - -/* cl_dx9_device_set_intel */ -#define CL_PREFERRED_DEVICES_FOR_DX9_INTEL 0x4024 -#define CL_ALL_DEVICES_FOR_DX9_INTEL 0x4025 - -/* cl_context_info */ -#define CL_CONTEXT_D3D9_DEVICE_INTEL 0x4026 -#define CL_CONTEXT_D3D9EX_DEVICE_INTEL 0x4072 -#define CL_CONTEXT_DXVA_DEVICE_INTEL 0x4073 - -/* cl_mem_info */ -#define CL_MEM_DX9_RESOURCE_INTEL 0x4027 -#define CL_MEM_DX9_SHARED_HANDLE_INTEL 0x4074 - -/* cl_image_info */ -#define CL_IMAGE_DX9_PLANE_INTEL 0x4075 - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_DX9_OBJECTS_INTEL 0x402A -#define CL_COMMAND_RELEASE_DX9_OBJECTS_INTEL 0x402B -/******************************************************************************/ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceIDsFromDX9INTEL( - cl_platform_id platform, - cl_dx9_device_source_intel dx9_device_source, - void* dx9_object, - cl_dx9_device_set_intel dx9_device_set, - cl_uint num_entries, - cl_device_id* devices, - cl_uint* num_devices) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int (CL_API_CALL* clGetDeviceIDsFromDX9INTEL_fn)( - cl_platform_id platform, - cl_dx9_device_source_intel dx9_device_source, - void* dx9_object, - cl_dx9_device_set_intel dx9_device_set, - cl_uint num_entries, - cl_device_id* devices, - cl_uint* num_devices) CL_API_SUFFIX__VERSION_1_1; - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromDX9MediaSurfaceINTEL( - cl_context context, - cl_mem_flags flags, - IDirect3DSurface9* resource, - HANDLE sharedHandle, - UINT plane, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_mem (CL_API_CALL *clCreateFromDX9MediaSurfaceINTEL_fn)( - cl_context context, - cl_mem_flags flags, - IDirect3DSurface9* resource, - HANDLE sharedHandle, - UINT plane, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireDX9ObjectsINTEL( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireDX9ObjectsINTEL_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseDX9ObjectsINTEL( - cl_command_queue command_queue, - cl_uint num_objects, - cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseDX9ObjectsINTEL_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_1; - -/*************************************************************** -* cl_intel_sharing_format_query_dx9 -***************************************************************/ -#define cl_intel_sharing_format_query_dx9 1 - -/* when cl_khr_dx9_media_sharing or cl_intel_dx9_media_sharing is supported */ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedDX9MediaSurfaceFormatsINTEL( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - D3DFORMAT* dx9_formats, - cl_uint* num_surface_formats) ; - -typedef cl_int (CL_API_CALL * -clGetSupportedDX9MediaSurfaceFormatsINTEL_fn)( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - D3DFORMAT* dx9_formats, - cl_uint* num_surface_formats) ; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_DX9_MEDIA_SHARING_H */ - diff --git a/include/CL/cl_dx9_media_sharing_intel.h b/include/CL/cl_dx9_media_sharing_intel.h deleted file mode 100644 index f6518d7f6..000000000 --- a/include/CL/cl_dx9_media_sharing_intel.h +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#include -#pragma message("The Intel DX9 media sharing extensions have been moved into cl_dx9_media_sharing.h. Please include cl_dx9_media_sharing.h directly.") diff --git a/include/CL/cl_egl.h b/include/CL/cl_egl.h deleted file mode 100644 index 357a37c02..000000000 --- a/include/CL/cl_egl.h +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_EGL_H -#define __OPENCL_CL_EGL_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Command type for events created with clEnqueueAcquireEGLObjectsKHR */ -#define CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR 0x202F -#define CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR 0x202D -#define CL_COMMAND_RELEASE_EGL_OBJECTS_KHR 0x202E - -/* Error type for clCreateFromEGLImageKHR */ -#define CL_INVALID_EGL_OBJECT_KHR -1093 -#define CL_EGL_RESOURCE_NOT_ACQUIRED_KHR -1092 - -/* CLeglImageKHR is an opaque handle to an EGLImage */ -typedef void* CLeglImageKHR; - -/* CLeglDisplayKHR is an opaque handle to an EGLDisplay */ -typedef void* CLeglDisplayKHR; - -/* CLeglSyncKHR is an opaque handle to an EGLSync object */ -typedef void* CLeglSyncKHR; - -/* properties passed to clCreateFromEGLImageKHR */ -typedef intptr_t cl_egl_image_properties_khr; - - -#define cl_khr_egl_image 1 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromEGLImageKHR(cl_context context, - CLeglDisplayKHR egldisplay, - CLeglImageKHR eglimage, - cl_mem_flags flags, - const cl_egl_image_properties_khr * properties, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem (CL_API_CALL *clCreateFromEGLImageKHR_fn)( - cl_context context, - CLeglDisplayKHR egldisplay, - CLeglImageKHR eglimage, - cl_mem_flags flags, - const cl_egl_image_properties_khr * properties, - cl_int * errcode_ret); - - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireEGLObjectsKHR(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireEGLObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event); - - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseEGLObjectsKHR(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseEGLObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event); - - -#define cl_khr_egl_event 1 - -extern CL_API_ENTRY cl_event CL_API_CALL -clCreateEventFromEGLSyncKHR(cl_context context, - CLeglSyncKHR sync, - CLeglDisplayKHR display, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_event (CL_API_CALL *clCreateEventFromEGLSyncKHR_fn)( - cl_context context, - CLeglSyncKHR sync, - CLeglDisplayKHR display, - cl_int * errcode_ret); - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_EGL_H */ diff --git a/include/CL/cl_ext.h b/include/CL/cl_ext.h deleted file mode 100644 index 3eba7ed1b..000000000 --- a/include/CL/cl_ext.h +++ /dev/null @@ -1,2634 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -/* cl_ext.h contains OpenCL extensions which don't have external */ -/* (OpenGL, D3D) dependencies. */ - -#ifndef __CL_EXT_H -#define __CL_EXT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/*************************************************************** -* cl_khr_command_buffer -***************************************************************/ -#define cl_khr_command_buffer 1 -#define CL_KHR_COMMAND_BUFFER_EXTENSION_NAME \ - "cl_khr_command_buffer" - -typedef cl_bitfield cl_device_command_buffer_capabilities_khr; -typedef struct _cl_command_buffer_khr* cl_command_buffer_khr; -typedef cl_uint cl_sync_point_khr; -typedef cl_uint cl_command_buffer_info_khr; -typedef cl_uint cl_command_buffer_state_khr; -typedef cl_properties cl_command_buffer_properties_khr; -typedef cl_bitfield cl_command_buffer_flags_khr; -typedef cl_properties cl_ndrange_kernel_command_properties_khr; -typedef struct _cl_mutable_command_khr* cl_mutable_command_khr; - -/* cl_device_info */ -#define CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR 0x12A9 -#define CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR 0x12AA - -/* cl_device_command_buffer_capabilities_khr - bitfield */ -#define CL_COMMAND_BUFFER_CAPABILITY_KERNEL_PRINTF_KHR (1 << 0) -#define CL_COMMAND_BUFFER_CAPABILITY_DEVICE_SIDE_ENQUEUE_KHR (1 << 1) -#define CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR (1 << 2) -#define CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR (1 << 3) - -/* cl_command_buffer_properties_khr */ -#define CL_COMMAND_BUFFER_FLAGS_KHR 0x1293 - -/* cl_command_buffer_flags_khr */ -#define CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR (1 << 0) - -/* Error codes */ -#define CL_INVALID_COMMAND_BUFFER_KHR -1138 -#define CL_INVALID_SYNC_POINT_WAIT_LIST_KHR -1139 -#define CL_INCOMPATIBLE_COMMAND_QUEUE_KHR -1140 - -/* cl_command_buffer_info_khr */ -#define CL_COMMAND_BUFFER_QUEUES_KHR 0x1294 -#define CL_COMMAND_BUFFER_NUM_QUEUES_KHR 0x1295 -#define CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR 0x1296 -#define CL_COMMAND_BUFFER_STATE_KHR 0x1297 -#define CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR 0x1298 - -/* cl_command_buffer_state_khr */ -#define CL_COMMAND_BUFFER_STATE_RECORDING_KHR 0 -#define CL_COMMAND_BUFFER_STATE_EXECUTABLE_KHR 1 -#define CL_COMMAND_BUFFER_STATE_PENDING_KHR 2 -#define CL_COMMAND_BUFFER_STATE_INVALID_KHR 3 - -/* cl_command_type */ -#define CL_COMMAND_COMMAND_BUFFER_KHR 0x12A8 - - -typedef cl_command_buffer_khr (CL_API_CALL * -clCreateCommandBufferKHR_fn)( - cl_uint num_queues, - const cl_command_queue* queues, - const cl_command_buffer_properties_khr* properties, - cl_int* errcode_ret) ; - -typedef cl_int (CL_API_CALL * -clFinalizeCommandBufferKHR_fn)( - cl_command_buffer_khr command_buffer) ; - -typedef cl_int (CL_API_CALL * -clRetainCommandBufferKHR_fn)( - cl_command_buffer_khr command_buffer) ; - -typedef cl_int (CL_API_CALL * -clReleaseCommandBufferKHR_fn)( - cl_command_buffer_khr command_buffer) ; - -typedef cl_int (CL_API_CALL * -clEnqueueCommandBufferKHR_fn)( - cl_uint num_queues, - cl_command_queue* queues, - cl_command_buffer_khr command_buffer, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -typedef cl_int (CL_API_CALL * -clCommandBarrierWithWaitListKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandCopyBufferKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - size_t src_offset, - size_t dst_offset, - size_t size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandCopyBufferRectKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - const size_t* src_origin, - const size_t* dst_origin, - const size_t* region, - size_t src_row_pitch, - size_t src_slice_pitch, - size_t dst_row_pitch, - size_t dst_slice_pitch, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandCopyBufferToImageKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_image, - size_t src_offset, - const size_t* dst_origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandCopyImageKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_image, - const size_t* src_origin, - const size_t* dst_origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandCopyImageToBufferKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_buffer, - const size_t* src_origin, - const size_t* region, - size_t dst_offset, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandFillBufferKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem buffer, - const void* pattern, - size_t pattern_size, - size_t offset, - size_t size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandFillImageKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem image, - const void* fill_color, - const size_t* origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clCommandNDRangeKernelKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - const cl_ndrange_kernel_command_properties_khr* properties, - cl_kernel kernel, - cl_uint work_dim, - const size_t* global_work_offset, - const size_t* global_work_size, - const size_t* local_work_size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -typedef cl_int (CL_API_CALL * -clGetCommandBufferInfoKHR_fn)( - cl_command_buffer_khr command_buffer, - cl_command_buffer_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -#ifndef CL_NO_PROTOTYPES - -extern CL_API_ENTRY cl_command_buffer_khr CL_API_CALL -clCreateCommandBufferKHR( - cl_uint num_queues, - const cl_command_queue* queues, - const cl_command_buffer_properties_khr* properties, - cl_int* errcode_ret) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clFinalizeCommandBufferKHR( - cl_command_buffer_khr command_buffer) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainCommandBufferKHR( - cl_command_buffer_khr command_buffer) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseCommandBufferKHR( - cl_command_buffer_khr command_buffer) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueCommandBufferKHR( - cl_uint num_queues, - cl_command_queue* queues, - cl_command_buffer_khr command_buffer, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandBarrierWithWaitListKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandCopyBufferKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - size_t src_offset, - size_t dst_offset, - size_t size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandCopyBufferRectKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_buffer, - const size_t* src_origin, - const size_t* dst_origin, - const size_t* region, - size_t src_row_pitch, - size_t src_slice_pitch, - size_t dst_row_pitch, - size_t dst_slice_pitch, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandCopyBufferToImageKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_buffer, - cl_mem dst_image, - size_t src_offset, - const size_t* dst_origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandCopyImageKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_image, - const size_t* src_origin, - const size_t* dst_origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandCopyImageToBufferKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_buffer, - const size_t* src_origin, - const size_t* region, - size_t dst_offset, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandFillBufferKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem buffer, - const void* pattern, - size_t pattern_size, - size_t offset, - size_t size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandFillImageKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - cl_mem image, - const void* fill_color, - const size_t* origin, - const size_t* region, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clCommandNDRangeKernelKHR( - cl_command_buffer_khr command_buffer, - cl_command_queue command_queue, - const cl_ndrange_kernel_command_properties_khr* properties, - cl_kernel kernel, - cl_uint work_dim, - const size_t* global_work_offset, - const size_t* global_work_size, - const size_t* local_work_size, - cl_uint num_sync_points_in_wait_list, - const cl_sync_point_khr* sync_point_wait_list, - cl_sync_point_khr* sync_point, - cl_mutable_command_khr* mutable_handle) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetCommandBufferInfoKHR( - cl_command_buffer_khr command_buffer, - cl_command_buffer_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -#endif /* CL_NO_PROTOTYPES */ - -/*************************************************************** -* cl_khr_command_buffer_mutable_dispatch -***************************************************************/ -#define cl_khr_command_buffer_mutable_dispatch 1 -#define CL_KHR_COMMAND_BUFFER_MUTABLE_DISPATCH_EXTENSION_NAME \ - "cl_khr_command_buffer_mutable_dispatch" - -typedef cl_uint cl_command_buffer_structure_type_khr; -typedef cl_bitfield cl_mutable_dispatch_fields_khr; -typedef cl_uint cl_mutable_command_info_khr; -typedef struct _cl_mutable_dispatch_arg_khr { - cl_uint arg_index; - size_t arg_size; - const void* arg_value; -} cl_mutable_dispatch_arg_khr; -typedef struct _cl_mutable_dispatch_exec_info_khr { - cl_uint param_name; - size_t param_value_size; - const void* param_value; -} cl_mutable_dispatch_exec_info_khr; -typedef struct _cl_mutable_dispatch_config_khr { - cl_command_buffer_structure_type_khr type; - const void* next; - cl_mutable_command_khr command; - cl_uint num_args; - cl_uint num_svm_args; - cl_uint num_exec_infos; - cl_uint work_dim; - const cl_mutable_dispatch_arg_khr* arg_list; - const cl_mutable_dispatch_arg_khr* arg_svm_list; - const cl_mutable_dispatch_exec_info_khr* exec_info_list; - const size_t* global_work_offset; - const size_t* global_work_size; - const size_t* local_work_size; -} cl_mutable_dispatch_config_khr; -typedef struct _cl_mutable_base_config_khr { - cl_command_buffer_structure_type_khr type; - const void* next; - cl_uint num_mutable_dispatch; - const cl_mutable_dispatch_config_khr* mutable_dispatch_list; -} cl_mutable_base_config_khr; - -/* cl_command_buffer_flags_khr - bitfield */ -#define CL_COMMAND_BUFFER_MUTABLE_KHR (1 << 1) - -/* Error codes */ -#define CL_INVALID_MUTABLE_COMMAND_KHR -1141 - -/* cl_device_info */ -#define CL_DEVICE_MUTABLE_DISPATCH_CAPABILITIES_KHR 0x12B0 - -/* cl_ndrange_kernel_command_properties_khr */ -#define CL_MUTABLE_DISPATCH_UPDATABLE_FIELDS_KHR 0x12B1 - -/* cl_mutable_dispatch_fields_khr - bitfield */ -#define CL_MUTABLE_DISPATCH_GLOBAL_OFFSET_KHR (1 << 0) -#define CL_MUTABLE_DISPATCH_GLOBAL_SIZE_KHR (1 << 1) -#define CL_MUTABLE_DISPATCH_LOCAL_SIZE_KHR (1 << 2) -#define CL_MUTABLE_DISPATCH_ARGUMENTS_KHR (1 << 3) -#define CL_MUTABLE_DISPATCH_EXEC_INFO_KHR (1 << 4) - -/* cl_mutable_command_info_khr */ -#define CL_MUTABLE_COMMAND_COMMAND_QUEUE_KHR 0x12A0 -#define CL_MUTABLE_COMMAND_COMMAND_BUFFER_KHR 0x12A1 -#define CL_MUTABLE_COMMAND_COMMAND_TYPE_KHR 0x12AD -#define CL_MUTABLE_DISPATCH_PROPERTIES_ARRAY_KHR 0x12A2 -#define CL_MUTABLE_DISPATCH_KERNEL_KHR 0x12A3 -#define CL_MUTABLE_DISPATCH_DIMENSIONS_KHR 0x12A4 -#define CL_MUTABLE_DISPATCH_GLOBAL_WORK_OFFSET_KHR 0x12A5 -#define CL_MUTABLE_DISPATCH_GLOBAL_WORK_SIZE_KHR 0x12A6 -#define CL_MUTABLE_DISPATCH_LOCAL_WORK_SIZE_KHR 0x12A7 - -/* cl_command_buffer_structure_type_khr */ -#define CL_STRUCTURE_TYPE_MUTABLE_BASE_CONFIG_KHR 0 -#define CL_STRUCTURE_TYPE_MUTABLE_DISPATCH_CONFIG_KHR 1 - - -typedef cl_int (CL_API_CALL * -clUpdateMutableCommandsKHR_fn)( - cl_command_buffer_khr command_buffer, - const cl_mutable_base_config_khr* mutable_config) ; - -typedef cl_int (CL_API_CALL * -clGetMutableCommandInfoKHR_fn)( - cl_mutable_command_khr command, - cl_mutable_command_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -#ifndef CL_NO_PROTOTYPES - -extern CL_API_ENTRY cl_int CL_API_CALL -clUpdateMutableCommandsKHR( - cl_command_buffer_khr command_buffer, - const cl_mutable_base_config_khr* mutable_config) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetMutableCommandInfoKHR( - cl_mutable_command_khr command, - cl_mutable_command_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -#endif /* CL_NO_PROTOTYPES */ - -/* cl_khr_fp64 extension - no extension #define since it has no functions */ -/* CL_DEVICE_DOUBLE_FP_CONFIG is defined in CL.h for OpenCL >= 120 */ - -#if CL_TARGET_OPENCL_VERSION <= 110 -#define CL_DEVICE_DOUBLE_FP_CONFIG 0x1032 -#endif - -/* cl_khr_fp16 extension - no extension #define since it has no functions */ -#define CL_DEVICE_HALF_FP_CONFIG 0x1033 - -/* Memory object destruction - * - * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR - * - * Registers a user callback function that will be called when the memory object is deleted and its resources - * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback - * stack associated with memobj. The registered user callback functions are called in the reverse order in - * which they were registered. The user callback functions are called and then the memory object is deleted - * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be - * notified when the memory referenced by host_ptr, specified when the memory object is created and used as - * the storage bits for the memory object, can be reused or freed. - * - * The application may not call CL api's with the cl_mem object passed to the pfn_notify. - * - * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) - * before using. - */ -#define cl_APPLE_SetMemObjectDestructor 1 -extern CL_API_ENTRY cl_int CL_API_CALL clSetMemObjectDestructorAPPLE( cl_mem memobj, - void (* pfn_notify)(cl_mem memobj, void * user_data), - void * user_data) CL_API_SUFFIX__VERSION_1_0; - - -/* Context Logging Functions - * - * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext(). - * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS) - * before using. - * - * clLogMessagesToSystemLog forwards on all log messages to the Apple System Logger - */ -#define cl_APPLE_ContextLoggingFunctions 1 -extern CL_API_ENTRY void CL_API_CALL clLogMessagesToSystemLogAPPLE( const char * errstr, - const void * private_info, - size_t cb, - void * user_data) CL_API_SUFFIX__VERSION_1_0; - -/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */ -extern CL_API_ENTRY void CL_API_CALL clLogMessagesToStdoutAPPLE( const char * errstr, - const void * private_info, - size_t cb, - void * user_data) CL_API_SUFFIX__VERSION_1_0; - -/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */ -extern CL_API_ENTRY void CL_API_CALL clLogMessagesToStderrAPPLE( const char * errstr, - const void * private_info, - size_t cb, - void * user_data) CL_API_SUFFIX__VERSION_1_0; - - -/************************ -* cl_khr_icd extension * -************************/ -#define cl_khr_icd 1 - -/* cl_platform_info */ -#define CL_PLATFORM_ICD_SUFFIX_KHR 0x0920 - -/* Additional Error Codes */ -#define CL_PLATFORM_NOT_FOUND_KHR -1001 - -extern CL_API_ENTRY cl_int CL_API_CALL -clIcdGetPlatformIDsKHR(cl_uint num_entries, - cl_platform_id * platforms, - cl_uint * num_platforms); - -typedef cl_int -(CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(cl_uint num_entries, - cl_platform_id * platforms, - cl_uint * num_platforms); - - -/******************************* - * cl_khr_il_program extension * - *******************************/ -#define cl_khr_il_program 1 - -/* New property to clGetDeviceInfo for retrieving supported intermediate - * languages - */ -#define CL_DEVICE_IL_VERSION_KHR 0x105B - -/* New property to clGetProgramInfo for retrieving for retrieving the IL of a - * program - */ -#define CL_PROGRAM_IL_KHR 0x1169 - -extern CL_API_ENTRY cl_program CL_API_CALL -clCreateProgramWithILKHR(cl_context context, - const void * il, - size_t length, - cl_int * errcode_ret); - -typedef cl_program -(CL_API_CALL *clCreateProgramWithILKHR_fn)(cl_context context, - const void * il, - size_t length, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -/* Extension: cl_khr_image2d_from_buffer - * - * This extension allows a 2D image to be created from a cl_mem buffer without - * a copy. The type associated with a 2D image created from a buffer in an - * OpenCL program is image2d_t. Both the sampler and sampler-less read_image - * built-in functions are supported for 2D images and 2D images created from - * a buffer. Similarly, the write_image built-ins are also supported for 2D - * images created from a buffer. - * - * When the 2D image from buffer is created, the client must specify the - * width, height, image format (i.e. channel order and channel data type) - * and optionally the row pitch. - * - * The pitch specified must be a multiple of - * CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR pixels. - * The base address of the buffer must be aligned to - * CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR pixels. - */ - -#define CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR 0x104A -#define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR 0x104B - - -/************************************** - * cl_khr_initialize_memory extension * - **************************************/ - -#define CL_CONTEXT_MEMORY_INITIALIZE_KHR 0x2030 - - -/************************************** - * cl_khr_terminate_context extension * - **************************************/ - -#define CL_CONTEXT_TERMINATED_KHR -1121 - -#define CL_DEVICE_TERMINATE_CAPABILITY_KHR 0x2031 -#define CL_CONTEXT_TERMINATE_KHR 0x2032 - -#define cl_khr_terminate_context 1 -extern CL_API_ENTRY cl_int CL_API_CALL -clTerminateContextKHR(cl_context context) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int -(CL_API_CALL *clTerminateContextKHR_fn)(cl_context context) CL_API_SUFFIX__VERSION_1_2; - - -/* - * Extension: cl_khr_spir - * - * This extension adds support to create an OpenCL program object from a - * Standard Portable Intermediate Representation (SPIR) instance - */ - -#define CL_DEVICE_SPIR_VERSIONS 0x40E0 -#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE 0x40E1 - - -/***************************************** - * cl_khr_create_command_queue extension * - *****************************************/ -#define cl_khr_create_command_queue 1 - -typedef cl_properties cl_queue_properties_khr; - -extern CL_API_ENTRY cl_command_queue CL_API_CALL -clCreateCommandQueueWithPropertiesKHR(cl_context context, - cl_device_id device, - const cl_queue_properties_khr* properties, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_command_queue -(CL_API_CALL *clCreateCommandQueueWithPropertiesKHR_fn)(cl_context context, - cl_device_id device, - const cl_queue_properties_khr* properties, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - - -/****************************************** -* cl_nv_device_attribute_query extension * -******************************************/ - -/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */ -#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000 -#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001 -#define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002 -#define CL_DEVICE_WARP_SIZE_NV 0x4003 -#define CL_DEVICE_GPU_OVERLAP_NV 0x4004 -#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005 -#define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006 - - -/********************************* -* cl_amd_device_attribute_query * -*********************************/ - -#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036 -#define CL_DEVICE_TOPOLOGY_AMD 0x4037 -#define CL_DEVICE_BOARD_NAME_AMD 0x4038 -#define CL_DEVICE_GLOBAL_FREE_MEMORY_AMD 0x4039 -#define CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD 0x4040 -#define CL_DEVICE_SIMD_WIDTH_AMD 0x4041 -#define CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD 0x4042 -#define CL_DEVICE_WAVEFRONT_WIDTH_AMD 0x4043 -#define CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD 0x4044 -#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD 0x4045 -#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD 0x4046 -#define CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD 0x4047 -#define CL_DEVICE_LOCAL_MEM_BANKS_AMD 0x4048 -#define CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD 0x4049 -#define CL_DEVICE_GFXIP_MAJOR_AMD 0x404A -#define CL_DEVICE_GFXIP_MINOR_AMD 0x404B -#define CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD 0x404C -#define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_AMD 0x4030 -#define CL_DEVICE_MAX_WORK_GROUP_SIZE_AMD 0x4031 -#define CL_DEVICE_PREFERRED_CONSTANT_BUFFER_SIZE_AMD 0x4033 -#define CL_DEVICE_PCIE_ID_AMD 0x4034 - - -/********************************* -* cl_arm_printf extension -*********************************/ - -#define CL_PRINTF_CALLBACK_ARM 0x40B0 -#define CL_PRINTF_BUFFERSIZE_ARM 0x40B1 - - -/*********************************** -* cl_ext_device_fission extension -***********************************/ -#define cl_ext_device_fission 1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseDeviceEXT(cl_device_id device) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int -(CL_API_CALL *clReleaseDeviceEXT_fn)(cl_device_id device) CL_API_SUFFIX__VERSION_1_1; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainDeviceEXT(cl_device_id device) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int -(CL_API_CALL *clRetainDeviceEXT_fn)(cl_device_id device) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_ulong cl_device_partition_property_ext; -extern CL_API_ENTRY cl_int CL_API_CALL -clCreateSubDevicesEXT(cl_device_id in_device, - const cl_device_partition_property_ext * properties, - cl_uint num_entries, - cl_device_id * out_devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int -(CL_API_CALL * clCreateSubDevicesEXT_fn)(cl_device_id in_device, - const cl_device_partition_property_ext * properties, - cl_uint num_entries, - cl_device_id * out_devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_1; - -/* cl_device_partition_property_ext */ -#define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050 -#define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051 -#define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052 -#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053 - -/* clDeviceGetInfo selectors */ -#define CL_DEVICE_PARENT_DEVICE_EXT 0x4054 -#define CL_DEVICE_PARTITION_TYPES_EXT 0x4055 -#define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056 -#define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057 -#define CL_DEVICE_PARTITION_STYLE_EXT 0x4058 - -/* error codes */ -#define CL_DEVICE_PARTITION_FAILED_EXT -1057 -#define CL_INVALID_PARTITION_COUNT_EXT -1058 -#define CL_INVALID_PARTITION_NAME_EXT -1059 - -/* CL_AFFINITY_DOMAINs */ -#define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1 -#define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2 -#define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3 -#define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4 -#define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10 -#define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100 - -/* cl_device_partition_property_ext list terminators */ -#define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0) -#define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0) -#define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1) - - -/*********************************** - * cl_ext_migrate_memobject extension definitions - ***********************************/ -#define cl_ext_migrate_memobject 1 - -typedef cl_bitfield cl_mem_migration_flags_ext; - -#define CL_MIGRATE_MEM_OBJECT_HOST_EXT 0x1 - -#define CL_COMMAND_MIGRATE_MEM_OBJECT_EXT 0x4040 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMigrateMemObjectEXT(cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem * mem_objects, - cl_mem_migration_flags_ext flags, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event); - -typedef cl_int -(CL_API_CALL *clEnqueueMigrateMemObjectEXT_fn)(cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem * mem_objects, - cl_mem_migration_flags_ext flags, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event); - - -/********************************* -* cl_ext_cxx_for_opencl extension -*********************************/ -#define cl_ext_cxx_for_opencl 1 - -#define CL_DEVICE_CXX_FOR_OPENCL_NUMERIC_VERSION_EXT 0x4230 - -/********************************* -* cl_qcom_ext_host_ptr extension -*********************************/ -#define cl_qcom_ext_host_ptr 1 - -#define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29) - -#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0 -#define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1 -#define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2 -#define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3 -#define CL_MEM_HOST_UNCACHED_QCOM 0x40A4 -#define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5 -#define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6 -#define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7 - -typedef cl_uint cl_image_pitch_info_qcom; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceImageInfoQCOM(cl_device_id device, - size_t image_width, - size_t image_height, - const cl_image_format *image_format, - cl_image_pitch_info_qcom param_name, - size_t param_value_size, - void *param_value, - size_t *param_value_size_ret); - -typedef struct _cl_mem_ext_host_ptr -{ - /* Type of external memory allocation. */ - /* Legal values will be defined in layered extensions. */ - cl_uint allocation_type; - - /* Host cache policy for this external memory allocation. */ - cl_uint host_cache_policy; - -} cl_mem_ext_host_ptr; - - -/******************************************* -* cl_qcom_ext_host_ptr_iocoherent extension -********************************************/ - -/* Cache policy specifying io-coherence */ -#define CL_MEM_HOST_IOCOHERENT_QCOM 0x40A9 - - -/********************************* -* cl_qcom_ion_host_ptr extension -*********************************/ - -#define CL_MEM_ION_HOST_PTR_QCOM 0x40A8 - -typedef struct _cl_mem_ion_host_ptr -{ - /* Type of external memory allocation. */ - /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */ - cl_mem_ext_host_ptr ext_host_ptr; - - /* ION file descriptor */ - int ion_filedesc; - - /* Host pointer to the ION allocated memory */ - void* ion_hostptr; - -} cl_mem_ion_host_ptr; - - -/********************************* -* cl_qcom_android_native_buffer_host_ptr extension -*********************************/ - -#define CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM 0x40C6 - -typedef struct _cl_mem_android_native_buffer_host_ptr -{ - /* Type of external memory allocation. */ - /* Must be CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM for Android native buffers. */ - cl_mem_ext_host_ptr ext_host_ptr; - - /* Virtual pointer to the android native buffer */ - void* anb_ptr; - -} cl_mem_android_native_buffer_host_ptr; - - -/****************************************** - * cl_img_yuv_image extension * - ******************************************/ - -/* Image formats used in clCreateImage */ -#define CL_NV21_IMG 0x40D0 -#define CL_YV12_IMG 0x40D1 - - -/****************************************** - * cl_img_cached_allocations extension * - ******************************************/ - -/* Flag values used by clCreateBuffer */ -#define CL_MEM_USE_UNCACHED_CPU_MEMORY_IMG (1 << 26) -#define CL_MEM_USE_CACHED_CPU_MEMORY_IMG (1 << 27) - - -/****************************************** - * cl_img_use_gralloc_ptr extension * - ******************************************/ -#define cl_img_use_gralloc_ptr 1 - -/* Flag values used by clCreateBuffer */ -#define CL_MEM_USE_GRALLOC_PTR_IMG (1 << 28) - -/* To be used by clGetEventInfo: */ -#define CL_COMMAND_ACQUIRE_GRALLOC_OBJECTS_IMG 0x40D2 -#define CL_COMMAND_RELEASE_GRALLOC_OBJECTS_IMG 0x40D3 - -/* Error codes from clEnqueueAcquireGrallocObjectsIMG and clEnqueueReleaseGrallocObjectsIMG */ -#define CL_GRALLOC_RESOURCE_NOT_ACQUIRED_IMG 0x40D4 -#define CL_INVALID_GRALLOC_OBJECT_IMG 0x40D5 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireGrallocObjectsIMG(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseGrallocObjectsIMG(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -/****************************************** - * cl_img_generate_mipmap extension * - ******************************************/ -#define cl_img_generate_mipmap 1 - -typedef cl_uint cl_mipmap_filter_mode_img; - -/* To be used by clEnqueueGenerateMipmapIMG */ -#define CL_MIPMAP_FILTER_ANY_IMG 0x0 -#define CL_MIPMAP_FILTER_BOX_IMG 0x1 - -/* To be used by clGetEventInfo */ -#define CL_COMMAND_GENERATE_MIPMAP_IMG 0x40D6 - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueGenerateMipmapIMG(cl_command_queue command_queue, - cl_mem src_image, - cl_mem dst_image, - cl_mipmap_filter_mode_img mipmap_filter_mode, - const size_t *array_region, - const size_t *mip_region, - cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -/****************************************** - * cl_img_mem_properties extension * - ******************************************/ -#define cl_img_mem_properties 1 - -/* To be used by clCreateBufferWithProperties */ -#define CL_MEM_ALLOC_FLAGS_IMG 0x40D7 - -/* To be used wiith the CL_MEM_ALLOC_FLAGS_IMG property */ -typedef cl_bitfield cl_mem_alloc_flags_img; - -/* To be used with cl_mem_alloc_flags_img */ -#define CL_MEM_ALLOC_RELAX_REQUIREMENTS_IMG (1 << 0) - -/********************************* -* cl_khr_subgroups extension -*********************************/ -#define cl_khr_subgroups 1 - -#if !defined(CL_VERSION_2_1) -/* For OpenCL 2.1 and newer, cl_kernel_sub_group_info is declared in CL.h. - In hindsight, there should have been a khr suffix on this type for - the extension, but keeping it un-suffixed to maintain backwards - compatibility. */ -typedef cl_uint cl_kernel_sub_group_info; -#endif - -/* cl_kernel_sub_group_info */ -#define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR 0x2033 -#define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR 0x2034 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelSubGroupInfoKHR(cl_kernel in_kernel, - cl_device_id in_device, - cl_kernel_sub_group_info param_name, - size_t input_value_size, - const void * input_value, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0_DEPRECATED; - -typedef cl_int -(CL_API_CALL * clGetKernelSubGroupInfoKHR_fn)(cl_kernel in_kernel, - cl_device_id in_device, - cl_kernel_sub_group_info param_name, - size_t input_value_size, - const void * input_value, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_2_0_DEPRECATED; - - -/********************************* -* cl_khr_mipmap_image extension -*********************************/ - -/* cl_sampler_properties */ -#define CL_SAMPLER_MIP_FILTER_MODE_KHR 0x1155 -#define CL_SAMPLER_LOD_MIN_KHR 0x1156 -#define CL_SAMPLER_LOD_MAX_KHR 0x1157 - - -/********************************* -* cl_khr_priority_hints extension -*********************************/ -/* This extension define is for backwards compatibility. - It shouldn't be required since this extension has no new functions. */ -#define cl_khr_priority_hints 1 - -typedef cl_uint cl_queue_priority_khr; - -/* cl_command_queue_properties */ -#define CL_QUEUE_PRIORITY_KHR 0x1096 - -/* cl_queue_priority_khr */ -#define CL_QUEUE_PRIORITY_HIGH_KHR (1<<0) -#define CL_QUEUE_PRIORITY_MED_KHR (1<<1) -#define CL_QUEUE_PRIORITY_LOW_KHR (1<<2) - - -/********************************* -* cl_khr_throttle_hints extension -*********************************/ -/* This extension define is for backwards compatibility. - It shouldn't be required since this extension has no new functions. */ -#define cl_khr_throttle_hints 1 - -typedef cl_uint cl_queue_throttle_khr; - -/* cl_command_queue_properties */ -#define CL_QUEUE_THROTTLE_KHR 0x1097 - -/* cl_queue_throttle_khr */ -#define CL_QUEUE_THROTTLE_HIGH_KHR (1<<0) -#define CL_QUEUE_THROTTLE_MED_KHR (1<<1) -#define CL_QUEUE_THROTTLE_LOW_KHR (1<<2) - - -/********************************* -* cl_khr_subgroup_named_barrier -*********************************/ -/* This extension define is for backwards compatibility. - It shouldn't be required since this extension has no new functions. */ -#define cl_khr_subgroup_named_barrier 1 - -/* cl_device_info */ -#define CL_DEVICE_MAX_NAMED_BARRIER_COUNT_KHR 0x2035 - - -/********************************* -* cl_khr_extended_versioning -*********************************/ - -#define cl_khr_extended_versioning 1 - -#define CL_VERSION_MAJOR_BITS_KHR (10) -#define CL_VERSION_MINOR_BITS_KHR (10) -#define CL_VERSION_PATCH_BITS_KHR (12) - -#define CL_VERSION_MAJOR_MASK_KHR ((1 << CL_VERSION_MAJOR_BITS_KHR) - 1) -#define CL_VERSION_MINOR_MASK_KHR ((1 << CL_VERSION_MINOR_BITS_KHR) - 1) -#define CL_VERSION_PATCH_MASK_KHR ((1 << CL_VERSION_PATCH_BITS_KHR) - 1) - -#define CL_VERSION_MAJOR_KHR(version) ((version) >> (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR)) -#define CL_VERSION_MINOR_KHR(version) (((version) >> CL_VERSION_PATCH_BITS_KHR) & CL_VERSION_MINOR_MASK_KHR) -#define CL_VERSION_PATCH_KHR(version) ((version) & CL_VERSION_PATCH_MASK_KHR) - -#define CL_MAKE_VERSION_KHR(major, minor, patch) \ - ((((major) & CL_VERSION_MAJOR_MASK_KHR) << (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR)) | \ - (((minor) & CL_VERSION_MINOR_MASK_KHR) << CL_VERSION_PATCH_BITS_KHR) | \ - ((patch) & CL_VERSION_PATCH_MASK_KHR)) - -typedef cl_uint cl_version_khr; - -#define CL_NAME_VERSION_MAX_NAME_SIZE_KHR 64 - -typedef struct _cl_name_version_khr -{ - cl_version_khr version; - char name[CL_NAME_VERSION_MAX_NAME_SIZE_KHR]; -} cl_name_version_khr; - -/* cl_platform_info */ -#define CL_PLATFORM_NUMERIC_VERSION_KHR 0x0906 -#define CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR 0x0907 - -/* cl_device_info */ -#define CL_DEVICE_NUMERIC_VERSION_KHR 0x105E -#define CL_DEVICE_OPENCL_C_NUMERIC_VERSION_KHR 0x105F -#define CL_DEVICE_EXTENSIONS_WITH_VERSION_KHR 0x1060 -#define CL_DEVICE_ILS_WITH_VERSION_KHR 0x1061 -#define CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION_KHR 0x1062 - - -/********************************* -* cl_khr_device_uuid extension -*********************************/ -#define cl_khr_device_uuid 1 - -#define CL_UUID_SIZE_KHR 16 -#define CL_LUID_SIZE_KHR 8 - -#define CL_DEVICE_UUID_KHR 0x106A -#define CL_DRIVER_UUID_KHR 0x106B -#define CL_DEVICE_LUID_VALID_KHR 0x106C -#define CL_DEVICE_LUID_KHR 0x106D -#define CL_DEVICE_NODE_MASK_KHR 0x106E - - -/*************************************************************** -* cl_khr_pci_bus_info -***************************************************************/ -#define cl_khr_pci_bus_info 1 - -typedef struct _cl_device_pci_bus_info_khr { - cl_uint pci_domain; - cl_uint pci_bus; - cl_uint pci_device; - cl_uint pci_function; -} cl_device_pci_bus_info_khr; - -/* cl_device_info */ -#define CL_DEVICE_PCI_BUS_INFO_KHR 0x410F - - -/*************************************************************** -* cl_khr_suggested_local_work_size -***************************************************************/ -#define cl_khr_suggested_local_work_size 1 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetKernelSuggestedLocalWorkSizeKHR( - cl_command_queue command_queue, - cl_kernel kernel, - cl_uint work_dim, - const size_t* global_work_offset, - const size_t* global_work_size, - size_t* suggested_local_work_size) CL_API_SUFFIX__VERSION_3_0; - -typedef cl_int (CL_API_CALL * -clGetKernelSuggestedLocalWorkSizeKHR_fn)( - cl_command_queue command_queue, - cl_kernel kernel, - cl_uint work_dim, - const size_t* global_work_offset, - const size_t* global_work_size, - size_t* suggested_local_work_size) CL_API_SUFFIX__VERSION_3_0; - - -/*************************************************************** -* cl_khr_integer_dot_product -***************************************************************/ -#define cl_khr_integer_dot_product 1 - -typedef cl_bitfield cl_device_integer_dot_product_capabilities_khr; - -/* cl_device_integer_dot_product_capabilities_khr */ -#define CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_PACKED_KHR (1 << 0) -#define CL_DEVICE_INTEGER_DOT_PRODUCT_INPUT_4x8BIT_KHR (1 << 1) - -typedef struct _cl_device_integer_dot_product_acceleration_properties_khr { - cl_bool signed_accelerated; - cl_bool unsigned_accelerated; - cl_bool mixed_signedness_accelerated; - cl_bool accumulating_saturating_signed_accelerated; - cl_bool accumulating_saturating_unsigned_accelerated; - cl_bool accumulating_saturating_mixed_signedness_accelerated; -} cl_device_integer_dot_product_acceleration_properties_khr; - -/* cl_device_info */ -#define CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR 0x1073 -#define CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR 0x1074 -#define CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR 0x1075 - - -/*************************************************************** -* cl_khr_external_memory -***************************************************************/ -#define cl_khr_external_memory 1 - -typedef cl_uint cl_external_memory_handle_type_khr; - -/* cl_platform_info */ -#define CL_PLATFORM_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR 0x2044 - -/* cl_device_info */ -#define CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR 0x204F - -/* cl_mem_properties */ -#define CL_DEVICE_HANDLE_LIST_KHR 0x2051 -#define CL_DEVICE_HANDLE_LIST_END_KHR 0 - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_EXTERNAL_MEM_OBJECTS_KHR 0x2047 -#define CL_COMMAND_RELEASE_EXTERNAL_MEM_OBJECTS_KHR 0x2048 - - -typedef cl_int (CL_API_CALL * -clEnqueueAcquireExternalMemObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_3_0; - -typedef cl_int (CL_API_CALL * -clEnqueueReleaseExternalMemObjectsKHR_fn)( - cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_3_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireExternalMemObjectsKHR( - cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_3_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseExternalMemObjectsKHR( - cl_command_queue command_queue, - cl_uint num_mem_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_3_0; - -/*************************************************************** -* cl_khr_external_memory_dma_buf -***************************************************************/ -#define cl_khr_external_memory_dma_buf 1 - -/* cl_external_memory_handle_type_khr */ -#define CL_EXTERNAL_MEMORY_HANDLE_DMA_BUF_KHR 0x2067 - -/*************************************************************** -* cl_khr_external_memory_dx -***************************************************************/ -#define cl_khr_external_memory_dx 1 - -/* cl_external_memory_handle_type_khr */ -#define CL_EXTERNAL_MEMORY_HANDLE_D3D11_TEXTURE_KHR 0x2063 -#define CL_EXTERNAL_MEMORY_HANDLE_D3D11_TEXTURE_KMT_KHR 0x2064 -#define CL_EXTERNAL_MEMORY_HANDLE_D3D12_HEAP_KHR 0x2065 -#define CL_EXTERNAL_MEMORY_HANDLE_D3D12_RESOURCE_KHR 0x2066 - -/*************************************************************** -* cl_khr_external_memory_opaque_fd -***************************************************************/ -#define cl_khr_external_memory_opaque_fd 1 - -/* cl_external_memory_handle_type_khr */ -#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_FD_KHR 0x2060 - -/*************************************************************** -* cl_khr_external_memory_win32 -***************************************************************/ -#define cl_khr_external_memory_win32 1 - -/* cl_external_memory_handle_type_khr */ -#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KHR 0x2061 -#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KMT_KHR 0x2062 - -/*************************************************************** -* cl_khr_external_semaphore -***************************************************************/ -#define cl_khr_external_semaphore 1 - -typedef struct _cl_semaphore_khr * cl_semaphore_khr; -typedef cl_uint cl_external_semaphore_handle_type_khr; - -/* cl_platform_info */ -#define CL_PLATFORM_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR 0x2037 -#define CL_PLATFORM_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR 0x2038 - -/* cl_device_info */ -#define CL_DEVICE_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR 0x204D -#define CL_DEVICE_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR 0x204E - -/* cl_semaphore_properties_khr */ -#define CL_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR 0x203F -#define CL_SEMAPHORE_EXPORT_HANDLE_TYPES_LIST_END_KHR 0 - - -typedef cl_int (CL_API_CALL * -clGetSemaphoreHandleForTypeKHR_fn)( - cl_semaphore_khr sema_object, - cl_device_id device, - cl_external_semaphore_handle_type_khr handle_type, - size_t handle_size, - void* handle_ptr, - size_t* handle_size_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSemaphoreHandleForTypeKHR( - cl_semaphore_khr sema_object, - cl_device_id device, - cl_external_semaphore_handle_type_khr handle_type, - size_t handle_size, - void* handle_ptr, - size_t* handle_size_ret) CL_API_SUFFIX__VERSION_1_2; - -/*************************************************************** -* cl_khr_external_semaphore_dx_fence -***************************************************************/ -#define cl_khr_external_semaphore_dx_fence 1 - -/* cl_external_semaphore_handle_type_khr */ -#define CL_SEMAPHORE_HANDLE_D3D12_FENCE_KHR 0x2059 - -/*************************************************************** -* cl_khr_external_semaphore_opaque_fd -***************************************************************/ -#define cl_khr_external_semaphore_opaque_fd 1 - -/* cl_external_semaphore_handle_type_khr */ -#define CL_SEMAPHORE_HANDLE_OPAQUE_FD_KHR 0x2055 - -/*************************************************************** -* cl_khr_external_semaphore_sync_fd -***************************************************************/ -#define cl_khr_external_semaphore_sync_fd 1 - -/* cl_external_semaphore_handle_type_khr */ -#define CL_SEMAPHORE_HANDLE_SYNC_FD_KHR 0x2058 - -/*************************************************************** -* cl_khr_external_semaphore_win32 -***************************************************************/ -#define cl_khr_external_semaphore_win32 1 - -/* cl_external_semaphore_handle_type_khr */ -#define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR 0x2056 -#define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR 0x2057 - -/*************************************************************** -* cl_khr_semaphore -***************************************************************/ -#define cl_khr_semaphore 1 - -/* type cl_semaphore_khr */ -typedef cl_properties cl_semaphore_properties_khr; -typedef cl_uint cl_semaphore_info_khr; -typedef cl_uint cl_semaphore_type_khr; -typedef cl_ulong cl_semaphore_payload_khr; - -/* cl_semaphore_type */ -#define CL_SEMAPHORE_TYPE_BINARY_KHR 1 - -/* cl_platform_info */ -#define CL_PLATFORM_SEMAPHORE_TYPES_KHR 0x2036 - -/* cl_device_info */ -#define CL_DEVICE_SEMAPHORE_TYPES_KHR 0x204C - -/* cl_semaphore_info_khr */ -#define CL_SEMAPHORE_CONTEXT_KHR 0x2039 -#define CL_SEMAPHORE_REFERENCE_COUNT_KHR 0x203A -#define CL_SEMAPHORE_PROPERTIES_KHR 0x203B -#define CL_SEMAPHORE_PAYLOAD_KHR 0x203C - -/* cl_semaphore_info_khr or cl_semaphore_properties_khr */ -#define CL_SEMAPHORE_TYPE_KHR 0x203D -/* enum CL_DEVICE_HANDLE_LIST_KHR */ -/* enum CL_DEVICE_HANDLE_LIST_END_KHR */ - -/* cl_command_type */ -#define CL_COMMAND_SEMAPHORE_WAIT_KHR 0x2042 -#define CL_COMMAND_SEMAPHORE_SIGNAL_KHR 0x2043 - -/* Error codes */ -#define CL_INVALID_SEMAPHORE_KHR -1142 - - -typedef cl_semaphore_khr (CL_API_CALL * -clCreateSemaphoreWithPropertiesKHR_fn)( - cl_context context, - const cl_semaphore_properties_khr* sema_props, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * -clEnqueueWaitSemaphoresKHR_fn)( - cl_command_queue command_queue, - cl_uint num_sema_objects, - const cl_semaphore_khr* sema_objects, - const cl_semaphore_payload_khr* sema_payload_list, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * -clEnqueueSignalSemaphoresKHR_fn)( - cl_command_queue command_queue, - cl_uint num_sema_objects, - const cl_semaphore_khr* sema_objects, - const cl_semaphore_payload_khr* sema_payload_list, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * -clGetSemaphoreInfoKHR_fn)( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * -clReleaseSemaphoreKHR_fn)( - cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * -clRetainSemaphoreKHR_fn)( - cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_semaphore_khr CL_API_CALL -clCreateSemaphoreWithPropertiesKHR( - cl_context context, - const cl_semaphore_properties_khr* sema_props, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueWaitSemaphoresKHR( - cl_command_queue command_queue, - cl_uint num_sema_objects, - const cl_semaphore_khr* sema_objects, - const cl_semaphore_payload_khr* sema_payload_list, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSignalSemaphoresKHR( - cl_command_queue command_queue, - cl_uint num_sema_objects, - const cl_semaphore_khr* sema_objects, - const cl_semaphore_payload_khr* sema_payload_list, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSemaphoreInfoKHR( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseSemaphoreKHR( - cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainSemaphoreKHR( - cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2; - -/********************************** - * cl_arm_import_memory extension * - **********************************/ -#define cl_arm_import_memory 1 - -typedef intptr_t cl_import_properties_arm; - -/* Default and valid proporties name for cl_arm_import_memory */ -#define CL_IMPORT_TYPE_ARM 0x40B2 - -/* Host process memory type default value for CL_IMPORT_TYPE_ARM property */ -#define CL_IMPORT_TYPE_HOST_ARM 0x40B3 - -/* DMA BUF memory type value for CL_IMPORT_TYPE_ARM property */ -#define CL_IMPORT_TYPE_DMA_BUF_ARM 0x40B4 - -/* Protected memory property */ -#define CL_IMPORT_TYPE_PROTECTED_ARM 0x40B5 - -/* Android hardware buffer type value for CL_IMPORT_TYPE_ARM property */ -#define CL_IMPORT_TYPE_ANDROID_HARDWARE_BUFFER_ARM 0x41E2 - -/* Data consistency with host property */ -#define CL_IMPORT_DMA_BUF_DATA_CONSISTENCY_WITH_HOST_ARM 0x41E3 - -/* Index of plane in a multiplanar hardware buffer */ -#define CL_IMPORT_ANDROID_HARDWARE_BUFFER_PLANE_INDEX_ARM 0x41EF - -/* Index of layer in a multilayer hardware buffer */ -#define CL_IMPORT_ANDROID_HARDWARE_BUFFER_LAYER_INDEX_ARM 0x41F0 - -/* Import memory size value to indicate a size for the whole buffer */ -#define CL_IMPORT_MEMORY_WHOLE_ALLOCATION_ARM SIZE_MAX - -/* This extension adds a new function that allows for direct memory import into - * OpenCL via the clImportMemoryARM function. - * - * Memory imported through this interface will be mapped into the device's page - * tables directly, providing zero copy access. It will never fall back to copy - * operations and aliased buffers. - * - * Types of memory supported for import are specified as additional extension - * strings. - * - * This extension produces cl_mem allocations which are compatible with all other - * users of cl_mem in the standard API. - * - * This extension maps pages with the same properties as the normal buffer creation - * function clCreateBuffer. - */ -extern CL_API_ENTRY cl_mem CL_API_CALL -clImportMemoryARM( cl_context context, - cl_mem_flags flags, - const cl_import_properties_arm *properties, - void *memory, - size_t size, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - - -/****************************************** - * cl_arm_shared_virtual_memory extension * - ******************************************/ -#define cl_arm_shared_virtual_memory 1 - -/* Used by clGetDeviceInfo */ -#define CL_DEVICE_SVM_CAPABILITIES_ARM 0x40B6 - -/* Used by clGetMemObjectInfo */ -#define CL_MEM_USES_SVM_POINTER_ARM 0x40B7 - -/* Used by clSetKernelExecInfoARM: */ -#define CL_KERNEL_EXEC_INFO_SVM_PTRS_ARM 0x40B8 -#define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM_ARM 0x40B9 - -/* To be used by clGetEventInfo: */ -#define CL_COMMAND_SVM_FREE_ARM 0x40BA -#define CL_COMMAND_SVM_MEMCPY_ARM 0x40BB -#define CL_COMMAND_SVM_MEMFILL_ARM 0x40BC -#define CL_COMMAND_SVM_MAP_ARM 0x40BD -#define CL_COMMAND_SVM_UNMAP_ARM 0x40BE - -/* Flag values returned by clGetDeviceInfo with CL_DEVICE_SVM_CAPABILITIES_ARM as the param_name. */ -#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_ARM (1 << 0) -#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER_ARM (1 << 1) -#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_ARM (1 << 2) -#define CL_DEVICE_SVM_ATOMICS_ARM (1 << 3) - -/* Flag values used by clSVMAllocARM: */ -#define CL_MEM_SVM_FINE_GRAIN_BUFFER_ARM (1 << 10) -#define CL_MEM_SVM_ATOMICS_ARM (1 << 11) - -typedef cl_bitfield cl_svm_mem_flags_arm; -typedef cl_uint cl_kernel_exec_info_arm; -typedef cl_bitfield cl_device_svm_capabilities_arm; - -extern CL_API_ENTRY void * CL_API_CALL -clSVMAllocARM(cl_context context, - cl_svm_mem_flags_arm flags, - size_t size, - cl_uint alignment) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY void CL_API_CALL -clSVMFreeARM(cl_context context, - void * svm_pointer) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMFreeARM(cl_command_queue command_queue, - cl_uint num_svm_pointers, - void * svm_pointers[], - void (CL_CALLBACK * pfn_free_func)(cl_command_queue queue, - cl_uint num_svm_pointers, - void * svm_pointers[], - void * user_data), - void * user_data, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMemcpyARM(cl_command_queue command_queue, - cl_bool blocking_copy, - void * dst_ptr, - const void * src_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMemFillARM(cl_command_queue command_queue, - void * svm_ptr, - const void * pattern, - size_t pattern_size, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMMapARM(cl_command_queue command_queue, - cl_bool blocking_map, - cl_map_flags flags, - void * svm_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueSVMUnmapARM(cl_command_queue command_queue, - void * svm_ptr, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelArgSVMPointerARM(cl_kernel kernel, - cl_uint arg_index, - const void * arg_value) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelExecInfoARM(cl_kernel kernel, - cl_kernel_exec_info_arm param_name, - size_t param_value_size, - const void * param_value) CL_API_SUFFIX__VERSION_1_2; - -/******************************** - * cl_arm_get_core_id extension * - ********************************/ - -#ifdef CL_VERSION_1_2 - -#define cl_arm_get_core_id 1 - -/* Device info property for bitfield of cores present */ -#define CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM 0x40BF - -#endif /* CL_VERSION_1_2 */ - -/********************************* -* cl_arm_job_slot_selection -*********************************/ - -#define cl_arm_job_slot_selection 1 - -/* cl_device_info */ -#define CL_DEVICE_JOB_SLOTS_ARM 0x41E0 - -/* cl_command_queue_properties */ -#define CL_QUEUE_JOB_SLOT_ARM 0x41E1 - -/********************************* -* cl_arm_scheduling_controls -*********************************/ - -#define cl_arm_scheduling_controls 1 - -typedef cl_bitfield cl_device_scheduling_controls_capabilities_arm; - -/* cl_device_info */ -#define CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM 0x41E4 - -#define CL_DEVICE_SCHEDULING_KERNEL_BATCHING_ARM (1 << 0) -#define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_ARM (1 << 1) -#define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_MODIFIER_ARM (1 << 2) -#define CL_DEVICE_SCHEDULING_DEFERRED_FLUSH_ARM (1 << 3) -#define CL_DEVICE_SCHEDULING_REGISTER_ALLOCATION_ARM (1 << 4) -#define CL_DEVICE_SCHEDULING_WARP_THROTTLING_ARM (1 << 5) -#define CL_DEVICE_SCHEDULING_COMPUTE_UNIT_BATCH_QUEUE_SIZE_ARM (1 << 6) - -#define CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM 0x41EB -#define CL_DEVICE_MAX_WARP_COUNT_ARM 0x41EA - -/* cl_kernel_info */ -#define CL_KERNEL_MAX_WARP_COUNT_ARM 0x41E9 - -/* cl_kernel_exec_info */ -#define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM 0x41E5 -#define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM 0x41E6 -#define CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM 0x41E8 -#define CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM 0x41F1 - -/* cl_queue_properties */ -#define CL_QUEUE_KERNEL_BATCHING_ARM 0x41E7 -#define CL_QUEUE_DEFERRED_FLUSH_ARM 0x41EC - -/************************************** -* cl_arm_controlled_kernel_termination -***************************************/ - -#define cl_arm_controlled_kernel_termination 1 - -/* Error code to indicate kernel terminated with failure */ -#define CL_COMMAND_TERMINATED_ITSELF_WITH_FAILURE_ARM -1108 - -/* cl_device_info */ -#define CL_DEVICE_CONTROLLED_TERMINATION_CAPABILITIES_ARM 0x41EE - -/* Bit fields for controlled termination feature query */ -typedef cl_bitfield cl_device_controlled_termination_capabilities_arm; - -#define CL_DEVICE_CONTROLLED_TERMINATION_SUCCESS_ARM (1 << 0) -#define CL_DEVICE_CONTROLLED_TERMINATION_FAILURE_ARM (1 << 1) -#define CL_DEVICE_CONTROLLED_TERMINATION_QUERY_ARM (1 << 2) - -/* cl_event_info */ -#define CL_EVENT_COMMAND_TERMINATION_REASON_ARM 0x41ED - -/* Values returned for event termination reason query */ -typedef cl_uint cl_command_termination_reason_arm; - -#define CL_COMMAND_TERMINATION_COMPLETION_ARM 0 -#define CL_COMMAND_TERMINATION_CONTROLLED_SUCCESS_ARM 1 -#define CL_COMMAND_TERMINATION_CONTROLLED_FAILURE_ARM 2 -#define CL_COMMAND_TERMINATION_ERROR_ARM 3 - -/************************************* -* cl_arm_protected_memory_allocation * -*************************************/ - -#define cl_arm_protected_memory_allocation 1 - -#define CL_MEM_PROTECTED_ALLOC_ARM (1ULL << 36) - -/****************************************** -* cl_intel_exec_by_local_thread extension * -******************************************/ - -#define cl_intel_exec_by_local_thread 1 - -#define CL_QUEUE_THREAD_LOCAL_EXEC_ENABLE_INTEL (((cl_bitfield)1) << 31) - -/*************************************************************** -* cl_intel_device_attribute_query -***************************************************************/ - -#define cl_intel_device_attribute_query 1 - -typedef cl_bitfield cl_device_feature_capabilities_intel; - -/* cl_device_feature_capabilities_intel */ -#define CL_DEVICE_FEATURE_FLAG_DP4A_INTEL (1 << 0) -#define CL_DEVICE_FEATURE_FLAG_DPAS_INTEL (1 << 1) - -/* cl_device_info */ -#define CL_DEVICE_IP_VERSION_INTEL 0x4250 -#define CL_DEVICE_ID_INTEL 0x4251 -#define CL_DEVICE_NUM_SLICES_INTEL 0x4252 -#define CL_DEVICE_NUM_SUB_SLICES_PER_SLICE_INTEL 0x4253 -#define CL_DEVICE_NUM_EUS_PER_SUB_SLICE_INTEL 0x4254 -#define CL_DEVICE_NUM_THREADS_PER_EU_INTEL 0x4255 -#define CL_DEVICE_FEATURE_CAPABILITIES_INTEL 0x4256 - -/*********************************************** -* cl_intel_device_partition_by_names extension * -************************************************/ - -#define cl_intel_device_partition_by_names 1 - -#define CL_DEVICE_PARTITION_BY_NAMES_INTEL 0x4052 -#define CL_PARTITION_BY_NAMES_LIST_END_INTEL -1 - -/************************************************ -* cl_intel_accelerator extension * -* cl_intel_motion_estimation extension * -* cl_intel_advanced_motion_estimation extension * -*************************************************/ - -#define cl_intel_accelerator 1 -#define cl_intel_motion_estimation 1 -#define cl_intel_advanced_motion_estimation 1 - -typedef struct _cl_accelerator_intel* cl_accelerator_intel; -typedef cl_uint cl_accelerator_type_intel; -typedef cl_uint cl_accelerator_info_intel; - -typedef struct _cl_motion_estimation_desc_intel { - cl_uint mb_block_type; - cl_uint subpixel_mode; - cl_uint sad_adjust_mode; - cl_uint search_path_type; -} cl_motion_estimation_desc_intel; - -/* error codes */ -#define CL_INVALID_ACCELERATOR_INTEL -1094 -#define CL_INVALID_ACCELERATOR_TYPE_INTEL -1095 -#define CL_INVALID_ACCELERATOR_DESCRIPTOR_INTEL -1096 -#define CL_ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL -1097 - -/* cl_accelerator_type_intel */ -#define CL_ACCELERATOR_TYPE_MOTION_ESTIMATION_INTEL 0x0 - -/* cl_accelerator_info_intel */ -#define CL_ACCELERATOR_DESCRIPTOR_INTEL 0x4090 -#define CL_ACCELERATOR_REFERENCE_COUNT_INTEL 0x4091 -#define CL_ACCELERATOR_CONTEXT_INTEL 0x4092 -#define CL_ACCELERATOR_TYPE_INTEL 0x4093 - -/* cl_motion_detect_desc_intel flags */ -#define CL_ME_MB_TYPE_16x16_INTEL 0x0 -#define CL_ME_MB_TYPE_8x8_INTEL 0x1 -#define CL_ME_MB_TYPE_4x4_INTEL 0x2 - -#define CL_ME_SUBPIXEL_MODE_INTEGER_INTEL 0x0 -#define CL_ME_SUBPIXEL_MODE_HPEL_INTEL 0x1 -#define CL_ME_SUBPIXEL_MODE_QPEL_INTEL 0x2 - -#define CL_ME_SAD_ADJUST_MODE_NONE_INTEL 0x0 -#define CL_ME_SAD_ADJUST_MODE_HAAR_INTEL 0x1 - -#define CL_ME_SEARCH_PATH_RADIUS_2_2_INTEL 0x0 -#define CL_ME_SEARCH_PATH_RADIUS_4_4_INTEL 0x1 -#define CL_ME_SEARCH_PATH_RADIUS_16_12_INTEL 0x5 - -#define CL_ME_SKIP_BLOCK_TYPE_16x16_INTEL 0x0 -#define CL_ME_CHROMA_INTRA_PREDICT_ENABLED_INTEL 0x1 -#define CL_ME_LUMA_INTRA_PREDICT_ENABLED_INTEL 0x2 -#define CL_ME_SKIP_BLOCK_TYPE_8x8_INTEL 0x4 - -#define CL_ME_FORWARD_INPUT_MODE_INTEL 0x1 -#define CL_ME_BACKWARD_INPUT_MODE_INTEL 0x2 -#define CL_ME_BIDIRECTION_INPUT_MODE_INTEL 0x3 - -#define CL_ME_BIDIR_WEIGHT_QUARTER_INTEL 16 -#define CL_ME_BIDIR_WEIGHT_THIRD_INTEL 21 -#define CL_ME_BIDIR_WEIGHT_HALF_INTEL 32 -#define CL_ME_BIDIR_WEIGHT_TWO_THIRD_INTEL 43 -#define CL_ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL 48 - -#define CL_ME_COST_PENALTY_NONE_INTEL 0x0 -#define CL_ME_COST_PENALTY_LOW_INTEL 0x1 -#define CL_ME_COST_PENALTY_NORMAL_INTEL 0x2 -#define CL_ME_COST_PENALTY_HIGH_INTEL 0x3 - -#define CL_ME_COST_PRECISION_QPEL_INTEL 0x0 -#define CL_ME_COST_PRECISION_HPEL_INTEL 0x1 -#define CL_ME_COST_PRECISION_PEL_INTEL 0x2 -#define CL_ME_COST_PRECISION_DPEL_INTEL 0x3 - -#define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL 0x0 -#define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1 -#define CL_ME_LUMA_PREDICTOR_MODE_DC_INTEL 0x2 -#define CL_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL 0x3 - -#define CL_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL 0x4 -#define CL_ME_LUMA_PREDICTOR_MODE_PLANE_INTEL 0x4 -#define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL 0x5 -#define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL 0x6 -#define CL_ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL 0x7 -#define CL_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL 0x8 - -#define CL_ME_CHROMA_PREDICTOR_MODE_DC_INTEL 0x0 -#define CL_ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1 -#define CL_ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL 0x2 -#define CL_ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL 0x3 - -/* cl_device_info */ -#define CL_DEVICE_ME_VERSION_INTEL 0x407E - -#define CL_ME_VERSION_LEGACY_INTEL 0x0 -#define CL_ME_VERSION_ADVANCED_VER_1_INTEL 0x1 -#define CL_ME_VERSION_ADVANCED_VER_2_INTEL 0x2 - -extern CL_API_ENTRY cl_accelerator_intel CL_API_CALL -clCreateAcceleratorINTEL( - cl_context context, - cl_accelerator_type_intel accelerator_type, - size_t descriptor_size, - const void* descriptor, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_accelerator_intel (CL_API_CALL *clCreateAcceleratorINTEL_fn)( - cl_context context, - cl_accelerator_type_intel accelerator_type, - size_t descriptor_size, - const void* descriptor, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetAcceleratorInfoINTEL( - cl_accelerator_intel accelerator, - cl_accelerator_info_intel param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clGetAcceleratorInfoINTEL_fn)( - cl_accelerator_intel accelerator, - cl_accelerator_info_intel param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainAcceleratorINTEL( - cl_accelerator_intel accelerator) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clRetainAcceleratorINTEL_fn)( - cl_accelerator_intel accelerator) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseAcceleratorINTEL( - cl_accelerator_intel accelerator) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clReleaseAcceleratorINTEL_fn)( - cl_accelerator_intel accelerator) CL_API_SUFFIX__VERSION_1_2; - -/****************************************** -* cl_intel_simultaneous_sharing extension * -*******************************************/ - -#define cl_intel_simultaneous_sharing 1 - -#define CL_DEVICE_SIMULTANEOUS_INTEROPS_INTEL 0x4104 -#define CL_DEVICE_NUM_SIMULTANEOUS_INTEROPS_INTEL 0x4105 - -/*********************************** -* cl_intel_egl_image_yuv extension * -************************************/ - -#define cl_intel_egl_image_yuv 1 - -#define CL_EGL_YUV_PLANE_INTEL 0x4107 - -/******************************** -* cl_intel_packed_yuv extension * -*********************************/ - -#define cl_intel_packed_yuv 1 - -#define CL_YUYV_INTEL 0x4076 -#define CL_UYVY_INTEL 0x4077 -#define CL_YVYU_INTEL 0x4078 -#define CL_VYUY_INTEL 0x4079 - -/******************************************** -* cl_intel_required_subgroup_size extension * -*********************************************/ - -#define cl_intel_required_subgroup_size 1 - -#define CL_DEVICE_SUB_GROUP_SIZES_INTEL 0x4108 -#define CL_KERNEL_SPILL_MEM_SIZE_INTEL 0x4109 -#define CL_KERNEL_COMPILE_SUB_GROUP_SIZE_INTEL 0x410A - -/**************************************** -* cl_intel_driver_diagnostics extension * -*****************************************/ - -#define cl_intel_driver_diagnostics 1 - -typedef cl_uint cl_diagnostics_verbose_level; - -#define CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL 0x4106 - -#define CL_CONTEXT_DIAGNOSTICS_LEVEL_ALL_INTEL ( 0xff ) -#define CL_CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL ( 1 ) -#define CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL ( 1 << 1 ) -#define CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL ( 1 << 2 ) - -/******************************** -* cl_intel_planar_yuv extension * -*********************************/ - -#define CL_NV12_INTEL 0x410E - -#define CL_MEM_NO_ACCESS_INTEL ( 1 << 24 ) -#define CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL ( 1 << 25 ) - -#define CL_DEVICE_PLANAR_YUV_MAX_WIDTH_INTEL 0x417E -#define CL_DEVICE_PLANAR_YUV_MAX_HEIGHT_INTEL 0x417F - -/******************************************************* -* cl_intel_device_side_avc_motion_estimation extension * -********************************************************/ - -#define CL_DEVICE_AVC_ME_VERSION_INTEL 0x410B -#define CL_DEVICE_AVC_ME_SUPPORTS_TEXTURE_SAMPLER_USE_INTEL 0x410C -#define CL_DEVICE_AVC_ME_SUPPORTS_PREEMPTION_INTEL 0x410D - -#define CL_AVC_ME_VERSION_0_INTEL 0x0 /* No support. */ -#define CL_AVC_ME_VERSION_1_INTEL 0x1 /* First supported version. */ - -#define CL_AVC_ME_MAJOR_16x16_INTEL 0x0 -#define CL_AVC_ME_MAJOR_16x8_INTEL 0x1 -#define CL_AVC_ME_MAJOR_8x16_INTEL 0x2 -#define CL_AVC_ME_MAJOR_8x8_INTEL 0x3 - -#define CL_AVC_ME_MINOR_8x8_INTEL 0x0 -#define CL_AVC_ME_MINOR_8x4_INTEL 0x1 -#define CL_AVC_ME_MINOR_4x8_INTEL 0x2 -#define CL_AVC_ME_MINOR_4x4_INTEL 0x3 - -#define CL_AVC_ME_MAJOR_FORWARD_INTEL 0x0 -#define CL_AVC_ME_MAJOR_BACKWARD_INTEL 0x1 -#define CL_AVC_ME_MAJOR_BIDIRECTIONAL_INTEL 0x2 - -#define CL_AVC_ME_PARTITION_MASK_ALL_INTEL 0x0 -#define CL_AVC_ME_PARTITION_MASK_16x16_INTEL 0x7E -#define CL_AVC_ME_PARTITION_MASK_16x8_INTEL 0x7D -#define CL_AVC_ME_PARTITION_MASK_8x16_INTEL 0x7B -#define CL_AVC_ME_PARTITION_MASK_8x8_INTEL 0x77 -#define CL_AVC_ME_PARTITION_MASK_8x4_INTEL 0x6F -#define CL_AVC_ME_PARTITION_MASK_4x8_INTEL 0x5F -#define CL_AVC_ME_PARTITION_MASK_4x4_INTEL 0x3F - -#define CL_AVC_ME_SEARCH_WINDOW_EXHAUSTIVE_INTEL 0x0 -#define CL_AVC_ME_SEARCH_WINDOW_SMALL_INTEL 0x1 -#define CL_AVC_ME_SEARCH_WINDOW_TINY_INTEL 0x2 -#define CL_AVC_ME_SEARCH_WINDOW_EXTRA_TINY_INTEL 0x3 -#define CL_AVC_ME_SEARCH_WINDOW_DIAMOND_INTEL 0x4 -#define CL_AVC_ME_SEARCH_WINDOW_LARGE_DIAMOND_INTEL 0x5 -#define CL_AVC_ME_SEARCH_WINDOW_RESERVED0_INTEL 0x6 -#define CL_AVC_ME_SEARCH_WINDOW_RESERVED1_INTEL 0x7 -#define CL_AVC_ME_SEARCH_WINDOW_CUSTOM_INTEL 0x8 -#define CL_AVC_ME_SEARCH_WINDOW_16x12_RADIUS_INTEL 0x9 -#define CL_AVC_ME_SEARCH_WINDOW_4x4_RADIUS_INTEL 0x2 -#define CL_AVC_ME_SEARCH_WINDOW_2x2_RADIUS_INTEL 0xa - -#define CL_AVC_ME_SAD_ADJUST_MODE_NONE_INTEL 0x0 -#define CL_AVC_ME_SAD_ADJUST_MODE_HAAR_INTEL 0x2 - -#define CL_AVC_ME_SUBPIXEL_MODE_INTEGER_INTEL 0x0 -#define CL_AVC_ME_SUBPIXEL_MODE_HPEL_INTEL 0x1 -#define CL_AVC_ME_SUBPIXEL_MODE_QPEL_INTEL 0x3 - -#define CL_AVC_ME_COST_PRECISION_QPEL_INTEL 0x0 -#define CL_AVC_ME_COST_PRECISION_HPEL_INTEL 0x1 -#define CL_AVC_ME_COST_PRECISION_PEL_INTEL 0x2 -#define CL_AVC_ME_COST_PRECISION_DPEL_INTEL 0x3 - -#define CL_AVC_ME_BIDIR_WEIGHT_QUARTER_INTEL 0x10 -#define CL_AVC_ME_BIDIR_WEIGHT_THIRD_INTEL 0x15 -#define CL_AVC_ME_BIDIR_WEIGHT_HALF_INTEL 0x20 -#define CL_AVC_ME_BIDIR_WEIGHT_TWO_THIRD_INTEL 0x2B -#define CL_AVC_ME_BIDIR_WEIGHT_THREE_QUARTER_INTEL 0x30 - -#define CL_AVC_ME_BORDER_REACHED_LEFT_INTEL 0x0 -#define CL_AVC_ME_BORDER_REACHED_RIGHT_INTEL 0x2 -#define CL_AVC_ME_BORDER_REACHED_TOP_INTEL 0x4 -#define CL_AVC_ME_BORDER_REACHED_BOTTOM_INTEL 0x8 - -#define CL_AVC_ME_SKIP_BLOCK_PARTITION_16x16_INTEL 0x0 -#define CL_AVC_ME_SKIP_BLOCK_PARTITION_8x8_INTEL 0x4000 - -#define CL_AVC_ME_SKIP_BLOCK_16x16_FORWARD_ENABLE_INTEL ( 0x1 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_16x16_BACKWARD_ENABLE_INTEL ( 0x2 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_16x16_DUAL_ENABLE_INTEL ( 0x3 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_FORWARD_ENABLE_INTEL ( 0x55 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_BACKWARD_ENABLE_INTEL ( 0xAA << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_DUAL_ENABLE_INTEL ( 0xFF << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_0_FORWARD_ENABLE_INTEL ( 0x1 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_0_BACKWARD_ENABLE_INTEL ( 0x2 << 24 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_1_FORWARD_ENABLE_INTEL ( 0x1 << 26 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_1_BACKWARD_ENABLE_INTEL ( 0x2 << 26 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_2_FORWARD_ENABLE_INTEL ( 0x1 << 28 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_2_BACKWARD_ENABLE_INTEL ( 0x2 << 28 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_3_FORWARD_ENABLE_INTEL ( 0x1 << 30 ) -#define CL_AVC_ME_SKIP_BLOCK_8x8_3_BACKWARD_ENABLE_INTEL ( 0x2 << 30 ) - -#define CL_AVC_ME_BLOCK_BASED_SKIP_4x4_INTEL 0x00 -#define CL_AVC_ME_BLOCK_BASED_SKIP_8x8_INTEL 0x80 - -#define CL_AVC_ME_INTRA_16x16_INTEL 0x0 -#define CL_AVC_ME_INTRA_8x8_INTEL 0x1 -#define CL_AVC_ME_INTRA_4x4_INTEL 0x2 - -#define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_16x16_INTEL 0x6 -#define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_8x8_INTEL 0x5 -#define CL_AVC_ME_INTRA_LUMA_PARTITION_MASK_4x4_INTEL 0x3 - -#define CL_AVC_ME_INTRA_NEIGHBOR_LEFT_MASK_ENABLE_INTEL 0x60 -#define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_MASK_ENABLE_INTEL 0x10 -#define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_RIGHT_MASK_ENABLE_INTEL 0x8 -#define CL_AVC_ME_INTRA_NEIGHBOR_UPPER_LEFT_MASK_ENABLE_INTEL 0x4 - -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_INTEL 0x0 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_DC_INTEL 0x2 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_LEFT_INTEL 0x3 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_DIAGONAL_DOWN_RIGHT_INTEL 0x4 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_PLANE_INTEL 0x4 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_RIGHT_INTEL 0x5 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_DOWN_INTEL 0x6 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_VERTICAL_LEFT_INTEL 0x7 -#define CL_AVC_ME_LUMA_PREDICTOR_MODE_HORIZONTAL_UP_INTEL 0x8 -#define CL_AVC_ME_CHROMA_PREDICTOR_MODE_DC_INTEL 0x0 -#define CL_AVC_ME_CHROMA_PREDICTOR_MODE_HORIZONTAL_INTEL 0x1 -#define CL_AVC_ME_CHROMA_PREDICTOR_MODE_VERTICAL_INTEL 0x2 -#define CL_AVC_ME_CHROMA_PREDICTOR_MODE_PLANE_INTEL 0x3 - -#define CL_AVC_ME_FRAME_FORWARD_INTEL 0x1 -#define CL_AVC_ME_FRAME_BACKWARD_INTEL 0x2 -#define CL_AVC_ME_FRAME_DUAL_INTEL 0x3 - -#define CL_AVC_ME_SLICE_TYPE_PRED_INTEL 0x0 -#define CL_AVC_ME_SLICE_TYPE_BPRED_INTEL 0x1 -#define CL_AVC_ME_SLICE_TYPE_INTRA_INTEL 0x2 - -#define CL_AVC_ME_INTERLACED_SCAN_TOP_FIELD_INTEL 0x0 -#define CL_AVC_ME_INTERLACED_SCAN_BOTTOM_FIELD_INTEL 0x1 - -/******************************************* -* cl_intel_unified_shared_memory extension * -********************************************/ -#define cl_intel_unified_shared_memory 1 - -typedef cl_bitfield cl_device_unified_shared_memory_capabilities_intel; -typedef cl_properties cl_mem_properties_intel; -typedef cl_bitfield cl_mem_alloc_flags_intel; -typedef cl_uint cl_mem_info_intel; -typedef cl_uint cl_unified_shared_memory_type_intel; -typedef cl_uint cl_mem_advice_intel; - -/* cl_device_info */ -#define CL_DEVICE_HOST_MEM_CAPABILITIES_INTEL 0x4190 -#define CL_DEVICE_DEVICE_MEM_CAPABILITIES_INTEL 0x4191 -#define CL_DEVICE_SINGLE_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x4192 -#define CL_DEVICE_CROSS_DEVICE_SHARED_MEM_CAPABILITIES_INTEL 0x4193 -#define CL_DEVICE_SHARED_SYSTEM_MEM_CAPABILITIES_INTEL 0x4194 - -/* cl_device_unified_shared_memory_capabilities_intel - bitfield */ -#define CL_UNIFIED_SHARED_MEMORY_ACCESS_INTEL (1 << 0) -#define CL_UNIFIED_SHARED_MEMORY_ATOMIC_ACCESS_INTEL (1 << 1) -#define CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ACCESS_INTEL (1 << 2) -#define CL_UNIFIED_SHARED_MEMORY_CONCURRENT_ATOMIC_ACCESS_INTEL (1 << 3) - -/* cl_mem_properties_intel */ -#define CL_MEM_ALLOC_FLAGS_INTEL 0x4195 - -/* cl_mem_alloc_flags_intel - bitfield */ -#define CL_MEM_ALLOC_WRITE_COMBINED_INTEL (1 << 0) -#define CL_MEM_ALLOC_INITIAL_PLACEMENT_DEVICE_INTEL (1 << 1) -#define CL_MEM_ALLOC_INITIAL_PLACEMENT_HOST_INTEL (1 << 2) - -/* cl_mem_alloc_info_intel */ -#define CL_MEM_ALLOC_TYPE_INTEL 0x419A -#define CL_MEM_ALLOC_BASE_PTR_INTEL 0x419B -#define CL_MEM_ALLOC_SIZE_INTEL 0x419C -#define CL_MEM_ALLOC_DEVICE_INTEL 0x419D - -/* cl_unified_shared_memory_type_intel */ -#define CL_MEM_TYPE_UNKNOWN_INTEL 0x4196 -#define CL_MEM_TYPE_HOST_INTEL 0x4197 -#define CL_MEM_TYPE_DEVICE_INTEL 0x4198 -#define CL_MEM_TYPE_SHARED_INTEL 0x4199 - -/* cl_kernel_exec_info */ -#define CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL 0x4200 -#define CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL 0x4201 -#define CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL 0x4202 -#define CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL 0x4203 - -/* cl_command_type */ -#define CL_COMMAND_MEMFILL_INTEL 0x4204 -#define CL_COMMAND_MEMCPY_INTEL 0x4205 -#define CL_COMMAND_MIGRATEMEM_INTEL 0x4206 -#define CL_COMMAND_MEMADVISE_INTEL 0x4207 - - -typedef void* (CL_API_CALL * -clHostMemAllocINTEL_fn)( - cl_context context, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -typedef void* (CL_API_CALL * -clDeviceMemAllocINTEL_fn)( - cl_context context, - cl_device_id device, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -typedef void* (CL_API_CALL * -clSharedMemAllocINTEL_fn)( - cl_context context, - cl_device_id device, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -typedef cl_int (CL_API_CALL * -clMemFreeINTEL_fn)( - cl_context context, - void* ptr) ; - -typedef cl_int (CL_API_CALL * -clMemBlockingFreeINTEL_fn)( - cl_context context, - void* ptr) ; - -typedef cl_int (CL_API_CALL * -clGetMemAllocInfoINTEL_fn)( - cl_context context, - const void* ptr, - cl_mem_info_intel param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -typedef cl_int (CL_API_CALL * -clSetKernelArgMemPointerINTEL_fn)( - cl_kernel kernel, - cl_uint arg_index, - const void* arg_value) ; - -typedef cl_int (CL_API_CALL * -clEnqueueMemFillINTEL_fn)( - cl_command_queue command_queue, - void* dst_ptr, - const void* pattern, - size_t pattern_size, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -typedef cl_int (CL_API_CALL * -clEnqueueMemcpyINTEL_fn)( - cl_command_queue command_queue, - cl_bool blocking, - void* dst_ptr, - const void* src_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -typedef cl_int (CL_API_CALL * -clEnqueueMemAdviseINTEL_fn)( - cl_command_queue command_queue, - const void* ptr, - size_t size, - cl_mem_advice_intel advice, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#ifndef CL_NO_PROTOTYPES - -extern CL_API_ENTRY void* CL_API_CALL -clHostMemAllocINTEL( - cl_context context, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -extern CL_API_ENTRY void* CL_API_CALL -clDeviceMemAllocINTEL( - cl_context context, - cl_device_id device, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -extern CL_API_ENTRY void* CL_API_CALL -clSharedMemAllocINTEL( - cl_context context, - cl_device_id device, - const cl_mem_properties_intel* properties, - size_t size, - cl_uint alignment, - cl_int* errcode_ret) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clMemFreeINTEL( - cl_context context, - void* ptr) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clMemBlockingFreeINTEL( - cl_context context, - void* ptr) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetMemAllocInfoINTEL( - cl_context context, - const void* ptr, - cl_mem_info_intel param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clSetKernelArgMemPointerINTEL( - cl_kernel kernel, - cl_uint arg_index, - const void* arg_value) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMemFillINTEL( - cl_command_queue command_queue, - void* dst_ptr, - const void* pattern, - size_t pattern_size, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMemcpyINTEL( - cl_command_queue command_queue, - cl_bool blocking, - void* dst_ptr, - const void* src_ptr, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMemAdviseINTEL( - cl_command_queue command_queue, - const void* ptr, - size_t size, - cl_mem_advice_intel advice, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#endif /* CL_NO_PROTOTYPES */ - -#if defined(CL_VERSION_1_2) -/* Requires OpenCL 1.2 for cl_mem_migration_flags: */ - -typedef cl_int (CL_API_CALL * -clEnqueueMigrateMemINTEL_fn)( - cl_command_queue command_queue, - const void* ptr, - size_t size, - cl_mem_migration_flags flags, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#ifndef CL_NO_PROTOTYPES - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMigrateMemINTEL( - cl_command_queue command_queue, - const void* ptr, - size_t size, - cl_mem_migration_flags flags, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#endif /* CL_NO_PROTOTYPES */ - -#endif /* defined(CL_VERSION_1_2) */ - -/* deprecated, use clEnqueueMemFillINTEL instead */ - -typedef cl_int (CL_API_CALL * -clEnqueueMemsetINTEL_fn)( - cl_command_queue command_queue, - void* dst_ptr, - cl_int value, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#ifndef CL_NO_PROTOTYPES - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueMemsetINTEL( - cl_command_queue command_queue, - void* dst_ptr, - cl_int value, - size_t size, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) ; - -#endif /* CL_NO_PROTOTYPES */ - -/*************************************************************** -* cl_intel_mem_alloc_buffer_location -***************************************************************/ -#define cl_intel_mem_alloc_buffer_location 1 -#define CL_INTEL_MEM_ALLOC_BUFFER_LOCATION_EXTENSION_NAME \ - "cl_intel_mem_alloc_buffer_location" - -/* cl_mem_properties_intel */ -#define CL_MEM_ALLOC_BUFFER_LOCATION_INTEL 0x419E - -/* cl_mem_alloc_info_intel */ -/* enum CL_MEM_ALLOC_BUFFER_LOCATION_INTEL */ - -/*************************************************** -* cl_intel_create_buffer_with_properties extension * -****************************************************/ - -#define cl_intel_create_buffer_with_properties 1 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateBufferWithPropertiesINTEL( - cl_context context, - const cl_mem_properties_intel* properties, - cl_mem_flags flags, - size_t size, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem (CL_API_CALL * -clCreateBufferWithPropertiesINTEL_fn)( - cl_context context, - const cl_mem_properties_intel* properties, - cl_mem_flags flags, - size_t size, - void * host_ptr, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -/****************************************** -* cl_intel_mem_channel_property extension * -*******************************************/ - -#define CL_MEM_CHANNEL_INTEL 0x4213 - -/********************************* -* cl_intel_mem_force_host_memory * -**********************************/ - -#define cl_intel_mem_force_host_memory 1 - -/* cl_mem_flags */ -#define CL_MEM_FORCE_HOST_MEMORY_INTEL (1 << 20) - -/*************************************************************** -* cl_intel_command_queue_families -***************************************************************/ -#define cl_intel_command_queue_families 1 - -typedef cl_bitfield cl_command_queue_capabilities_intel; - -#define CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL 64 - -typedef struct _cl_queue_family_properties_intel { - cl_command_queue_properties properties; - cl_command_queue_capabilities_intel capabilities; - cl_uint count; - char name[CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL]; -} cl_queue_family_properties_intel; - -/* cl_device_info */ -#define CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL 0x418B - -/* cl_queue_properties */ -#define CL_QUEUE_FAMILY_INTEL 0x418C -#define CL_QUEUE_INDEX_INTEL 0x418D - -/* cl_command_queue_capabilities_intel */ -#define CL_QUEUE_DEFAULT_CAPABILITIES_INTEL 0 -#define CL_QUEUE_CAPABILITY_CREATE_SINGLE_QUEUE_EVENTS_INTEL (1 << 0) -#define CL_QUEUE_CAPABILITY_CREATE_CROSS_QUEUE_EVENTS_INTEL (1 << 1) -#define CL_QUEUE_CAPABILITY_SINGLE_QUEUE_EVENT_WAIT_LIST_INTEL (1 << 2) -#define CL_QUEUE_CAPABILITY_CROSS_QUEUE_EVENT_WAIT_LIST_INTEL (1 << 3) -#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_INTEL (1 << 8) -#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_RECT_INTEL (1 << 9) -#define CL_QUEUE_CAPABILITY_MAP_BUFFER_INTEL (1 << 10) -#define CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL (1 << 11) -#define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL (1 << 12) -#define CL_QUEUE_CAPABILITY_MAP_IMAGE_INTEL (1 << 13) -#define CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL (1 << 14) -#define CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL (1 << 15) -#define CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL (1 << 16) -#define CL_QUEUE_CAPABILITY_MARKER_INTEL (1 << 24) -#define CL_QUEUE_CAPABILITY_BARRIER_INTEL (1 << 25) -#define CL_QUEUE_CAPABILITY_KERNEL_INTEL (1 << 26) - -/*************************************************************** -* cl_intel_queue_no_sync_operations -***************************************************************/ - -#define cl_intel_queue_no_sync_operations 1 - -/* addition to cl_command_queue_properties */ -#define CL_QUEUE_NO_SYNC_OPERATIONS_INTEL (1 << 29) - -/*************************************************************** -* cl_intel_sharing_format_query -***************************************************************/ -#define cl_intel_sharing_format_query 1 - -/*************************************************************** -* cl_ext_image_requirements_info -***************************************************************/ - -#ifdef CL_VERSION_3_0 - -#define cl_ext_image_requirements_info 1 - -typedef cl_uint cl_image_requirements_info_ext; - -#define CL_IMAGE_REQUIREMENTS_ROW_PITCH_ALIGNMENT_EXT 0x1290 -#define CL_IMAGE_REQUIREMENTS_BASE_ADDRESS_ALIGNMENT_EXT 0x1292 -#define CL_IMAGE_REQUIREMENTS_SIZE_EXT 0x12B2 -#define CL_IMAGE_REQUIREMENTS_MAX_WIDTH_EXT 0x12B3 -#define CL_IMAGE_REQUIREMENTS_MAX_HEIGHT_EXT 0x12B4 -#define CL_IMAGE_REQUIREMENTS_MAX_DEPTH_EXT 0x12B5 -#define CL_IMAGE_REQUIREMENTS_MAX_ARRAY_SIZE_EXT 0x12B6 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetImageRequirementsInfoEXT( - cl_context context, - const cl_mem_properties* properties, - cl_mem_flags flags, - const cl_image_format* image_format, - const cl_image_desc* image_desc, - cl_image_requirements_info_ext param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_3_0; - -typedef cl_int (CL_API_CALL * -clGetImageRequirementsInfoEXT_fn)( - cl_context context, - const cl_mem_properties* properties, - cl_mem_flags flags, - const cl_image_format* image_format, - const cl_image_desc* image_desc, - cl_image_requirements_info_ext param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret) CL_API_SUFFIX__VERSION_3_0; - -#endif - -/*************************************************************** -* cl_ext_image_from_buffer -***************************************************************/ - -#ifdef CL_VERSION_3_0 - -#define cl_ext_image_from_buffer 1 - -#define CL_IMAGE_REQUIREMENTS_SLICE_PITCH_ALIGNMENT_EXT 0x1291 - -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* __CL_EXT_H */ diff --git a/include/CL/cl_ext_intel.h b/include/CL/cl_ext_intel.h deleted file mode 100644 index a7ae87a34..000000000 --- a/include/CL/cl_ext_intel.h +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#include -#pragma message("The Intel extensions have been moved into cl_ext.h. Please include cl_ext.h directly.") diff --git a/include/CL/cl_gl.h b/include/CL/cl_gl.h deleted file mode 100644 index 327746508..000000000 --- a/include/CL/cl_gl.h +++ /dev/null @@ -1,194 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2021 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_GL_H -#define __OPENCL_CL_GL_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef cl_uint cl_gl_object_type; -typedef cl_uint cl_gl_texture_info; -typedef cl_uint cl_gl_platform_info; -typedef struct __GLsync *cl_GLsync; - -/* cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken */ -#define CL_GL_OBJECT_BUFFER 0x2000 -#define CL_GL_OBJECT_TEXTURE2D 0x2001 -#define CL_GL_OBJECT_TEXTURE3D 0x2002 -#define CL_GL_OBJECT_RENDERBUFFER 0x2003 -#ifdef CL_VERSION_1_2 -#define CL_GL_OBJECT_TEXTURE2D_ARRAY 0x200E -#define CL_GL_OBJECT_TEXTURE1D 0x200F -#define CL_GL_OBJECT_TEXTURE1D_ARRAY 0x2010 -#define CL_GL_OBJECT_TEXTURE_BUFFER 0x2011 -#endif - -/* cl_gl_texture_info */ -#define CL_GL_TEXTURE_TARGET 0x2004 -#define CL_GL_MIPMAP_LEVEL 0x2005 -#ifdef CL_VERSION_1_2 -#define CL_GL_NUM_SAMPLES 0x2012 -#endif - - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromGLBuffer(cl_context context, - cl_mem_flags flags, - cl_GLuint bufobj, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromGLTexture(cl_context context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texture, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#endif - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromGLRenderbuffer(cl_context context, - cl_mem_flags flags, - cl_GLuint renderbuffer, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetGLObjectInfo(cl_mem memobj, - cl_gl_object_type * gl_object_type, - cl_GLuint * gl_object_name) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetGLTextureInfo(cl_mem memobj, - cl_gl_texture_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireGLObjects(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseGLObjects(cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem * mem_objects, - cl_uint num_events_in_wait_list, - const cl_event * event_wait_list, - cl_event * event) CL_API_SUFFIX__VERSION_1_0; - - -/* Deprecated OpenCL 1.1 APIs */ -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL -clCreateFromGLTexture2D(cl_context context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texture, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -extern CL_API_ENTRY CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL -clCreateFromGLTexture3D(cl_context context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texture, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -/* cl_khr_gl_sharing extension */ - -#define cl_khr_gl_sharing 1 - -typedef cl_uint cl_gl_context_info; - -/* Additional Error Codes */ -#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000 - -/* cl_gl_context_info */ -#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006 -#define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007 - -/* Additional cl_context_properties */ -#define CL_GL_CONTEXT_KHR 0x2008 -#define CL_EGL_DISPLAY_KHR 0x2009 -#define CL_GLX_DISPLAY_KHR 0x200A -#define CL_WGL_HDC_KHR 0x200B -#define CL_CGL_SHAREGROUP_KHR 0x200C - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetGLContextInfoKHR(const cl_context_properties * properties, - cl_gl_context_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int (CL_API_CALL *clGetGLContextInfoKHR_fn)( - const cl_context_properties * properties, - cl_gl_context_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret); - -/* - * cl_khr_gl_event extension - */ -#define CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR 0x200D - -extern CL_API_ENTRY cl_event CL_API_CALL -clCreateEventFromGLsyncKHR(cl_context context, - cl_GLsync sync, - cl_int * errcode_ret) CL_API_SUFFIX__VERSION_1_1; - -/*************************************************************** -* cl_intel_sharing_format_query_gl -***************************************************************/ -#define cl_intel_sharing_format_query_gl 1 - -/* when cl_khr_gl_sharing is supported */ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedGLTextureFormatsINTEL( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint num_entries, - cl_GLenum* gl_formats, - cl_uint* num_texture_formats) ; - -typedef cl_int (CL_API_CALL * -clGetSupportedGLTextureFormatsINTEL_fn)( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint num_entries, - cl_GLenum* gl_formats, - cl_uint* num_texture_formats) ; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_GL_H */ diff --git a/include/CL/cl_gl_ext.h b/include/CL/cl_gl_ext.h deleted file mode 100644 index 8ec818167..000000000 --- a/include/CL/cl_gl_ext.h +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2021 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#include -#pragma message("All OpenGL-related extensions have been moved into cl_gl.h. Please include cl_gl.h directly.") diff --git a/include/CL/cl_half.h b/include/CL/cl_half.h deleted file mode 100644 index ecc422332..000000000 --- a/include/CL/cl_half.h +++ /dev/null @@ -1,440 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -/** - * This is a header-only utility library that provides OpenCL host code with - * routines for converting to/from cl_half values. - * - * Example usage: - * - * #include - * ... - * cl_half h = cl_half_from_float(0.5f, CL_HALF_RTE); - * cl_float f = cl_half_to_float(h); - */ - -#ifndef OPENCL_CL_HALF_H -#define OPENCL_CL_HALF_H - -#include - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Rounding mode used when converting to cl_half. - */ -typedef enum -{ - CL_HALF_RTE, // round to nearest even - CL_HALF_RTZ, // round towards zero - CL_HALF_RTP, // round towards positive infinity - CL_HALF_RTN, // round towards negative infinity -} cl_half_rounding_mode; - - -/* Private utility macros. */ -#define CL_HALF_EXP_MASK 0x7C00 -#define CL_HALF_MAX_FINITE_MAG 0x7BFF - - -/* - * Utility to deal with values that overflow when converting to half precision. - */ -static inline cl_half cl_half_handle_overflow(cl_half_rounding_mode rounding_mode, - uint16_t sign) -{ - if (rounding_mode == CL_HALF_RTZ) - { - // Round overflow towards zero -> largest finite number (preserving sign) - return (sign << 15) | CL_HALF_MAX_FINITE_MAG; - } - else if (rounding_mode == CL_HALF_RTP && sign) - { - // Round negative overflow towards positive infinity -> most negative finite number - return (1 << 15) | CL_HALF_MAX_FINITE_MAG; - } - else if (rounding_mode == CL_HALF_RTN && !sign) - { - // Round positive overflow towards negative infinity -> largest finite number - return CL_HALF_MAX_FINITE_MAG; - } - - // Overflow to infinity - return (sign << 15) | CL_HALF_EXP_MASK; -} - -/* - * Utility to deal with values that underflow when converting to half precision. - */ -static inline cl_half cl_half_handle_underflow(cl_half_rounding_mode rounding_mode, - uint16_t sign) -{ - if (rounding_mode == CL_HALF_RTP && !sign) - { - // Round underflow towards positive infinity -> smallest positive value - return (sign << 15) | 1; - } - else if (rounding_mode == CL_HALF_RTN && sign) - { - // Round underflow towards negative infinity -> largest negative value - return (sign << 15) | 1; - } - - // Flush to zero - return (sign << 15); -} - - -/** - * Convert a cl_float to a cl_half. - */ -static inline cl_half cl_half_from_float(cl_float f, cl_half_rounding_mode rounding_mode) -{ - // Type-punning to get direct access to underlying bits - union - { - cl_float f; - uint32_t i; - } f32; - f32.f = f; - - // Extract sign bit - uint16_t sign = f32.i >> 31; - - // Extract FP32 exponent and mantissa - uint32_t f_exp = (f32.i >> (CL_FLT_MANT_DIG - 1)) & 0xFF; - uint32_t f_mant = f32.i & ((1 << (CL_FLT_MANT_DIG - 1)) - 1); - - // Remove FP32 exponent bias - int32_t exp = f_exp - CL_FLT_MAX_EXP + 1; - - // Add FP16 exponent bias - uint16_t h_exp = (uint16_t)(exp + CL_HALF_MAX_EXP - 1); - - // Position of the bit that will become the FP16 mantissa LSB - uint32_t lsb_pos = CL_FLT_MANT_DIG - CL_HALF_MANT_DIG; - - // Check for NaN / infinity - if (f_exp == 0xFF) - { - if (f_mant) - { - // NaN -> propagate mantissa and silence it - uint16_t h_mant = (uint16_t)(f_mant >> lsb_pos); - h_mant |= 0x200; - return (sign << 15) | CL_HALF_EXP_MASK | h_mant; - } - else - { - // Infinity -> zero mantissa - return (sign << 15) | CL_HALF_EXP_MASK; - } - } - - // Check for zero - if (!f_exp && !f_mant) - { - return (sign << 15); - } - - // Check for overflow - if (exp >= CL_HALF_MAX_EXP) - { - return cl_half_handle_overflow(rounding_mode, sign); - } - - // Check for underflow - if (exp < (CL_HALF_MIN_EXP - CL_HALF_MANT_DIG - 1)) - { - return cl_half_handle_underflow(rounding_mode, sign); - } - - // Check for value that will become denormal - if (exp < -14) - { - // Denormal -> include the implicit 1 from the FP32 mantissa - h_exp = 0; - f_mant |= 1 << (CL_FLT_MANT_DIG - 1); - - // Mantissa shift amount depends on exponent - lsb_pos = -exp + (CL_FLT_MANT_DIG - 25); - } - - // Generate FP16 mantissa by shifting FP32 mantissa - uint16_t h_mant = (uint16_t)(f_mant >> lsb_pos); - - // Check whether we need to round - uint32_t halfway = 1 << (lsb_pos - 1); - uint32_t mask = (halfway << 1) - 1; - switch (rounding_mode) - { - case CL_HALF_RTE: - if ((f_mant & mask) > halfway) - { - // More than halfway -> round up - h_mant += 1; - } - else if ((f_mant & mask) == halfway) - { - // Exactly halfway -> round to nearest even - if (h_mant & 0x1) - h_mant += 1; - } - break; - case CL_HALF_RTZ: - // Mantissa has already been truncated -> do nothing - break; - case CL_HALF_RTP: - if ((f_mant & mask) && !sign) - { - // Round positive numbers up - h_mant += 1; - } - break; - case CL_HALF_RTN: - if ((f_mant & mask) && sign) - { - // Round negative numbers down - h_mant += 1; - } - break; - } - - // Check for mantissa overflow - if (h_mant & 0x400) - { - h_exp += 1; - h_mant = 0; - } - - return (sign << 15) | (h_exp << 10) | h_mant; -} - - -/** - * Convert a cl_double to a cl_half. - */ -static inline cl_half cl_half_from_double(cl_double d, cl_half_rounding_mode rounding_mode) -{ - // Type-punning to get direct access to underlying bits - union - { - cl_double d; - uint64_t i; - } f64; - f64.d = d; - - // Extract sign bit - uint16_t sign = f64.i >> 63; - - // Extract FP64 exponent and mantissa - uint64_t d_exp = (f64.i >> (CL_DBL_MANT_DIG - 1)) & 0x7FF; - uint64_t d_mant = f64.i & (((uint64_t)1 << (CL_DBL_MANT_DIG - 1)) - 1); - - // Remove FP64 exponent bias - int64_t exp = d_exp - CL_DBL_MAX_EXP + 1; - - // Add FP16 exponent bias - uint16_t h_exp = (uint16_t)(exp + CL_HALF_MAX_EXP - 1); - - // Position of the bit that will become the FP16 mantissa LSB - uint32_t lsb_pos = CL_DBL_MANT_DIG - CL_HALF_MANT_DIG; - - // Check for NaN / infinity - if (d_exp == 0x7FF) - { - if (d_mant) - { - // NaN -> propagate mantissa and silence it - uint16_t h_mant = (uint16_t)(d_mant >> lsb_pos); - h_mant |= 0x200; - return (sign << 15) | CL_HALF_EXP_MASK | h_mant; - } - else - { - // Infinity -> zero mantissa - return (sign << 15) | CL_HALF_EXP_MASK; - } - } - - // Check for zero - if (!d_exp && !d_mant) - { - return (sign << 15); - } - - // Check for overflow - if (exp >= CL_HALF_MAX_EXP) - { - return cl_half_handle_overflow(rounding_mode, sign); - } - - // Check for underflow - if (exp < (CL_HALF_MIN_EXP - CL_HALF_MANT_DIG - 1)) - { - return cl_half_handle_underflow(rounding_mode, sign); - } - - // Check for value that will become denormal - if (exp < -14) - { - // Include the implicit 1 from the FP64 mantissa - h_exp = 0; - d_mant |= (uint64_t)1 << (CL_DBL_MANT_DIG - 1); - - // Mantissa shift amount depends on exponent - lsb_pos = (uint32_t)(-exp + (CL_DBL_MANT_DIG - 25)); - } - - // Generate FP16 mantissa by shifting FP64 mantissa - uint16_t h_mant = (uint16_t)(d_mant >> lsb_pos); - - // Check whether we need to round - uint64_t halfway = (uint64_t)1 << (lsb_pos - 1); - uint64_t mask = (halfway << 1) - 1; - switch (rounding_mode) - { - case CL_HALF_RTE: - if ((d_mant & mask) > halfway) - { - // More than halfway -> round up - h_mant += 1; - } - else if ((d_mant & mask) == halfway) - { - // Exactly halfway -> round to nearest even - if (h_mant & 0x1) - h_mant += 1; - } - break; - case CL_HALF_RTZ: - // Mantissa has already been truncated -> do nothing - break; - case CL_HALF_RTP: - if ((d_mant & mask) && !sign) - { - // Round positive numbers up - h_mant += 1; - } - break; - case CL_HALF_RTN: - if ((d_mant & mask) && sign) - { - // Round negative numbers down - h_mant += 1; - } - break; - } - - // Check for mantissa overflow - if (h_mant & 0x400) - { - h_exp += 1; - h_mant = 0; - } - - return (sign << 15) | (h_exp << 10) | h_mant; -} - - -/** - * Convert a cl_half to a cl_float. - */ -static inline cl_float cl_half_to_float(cl_half h) -{ - // Type-punning to get direct access to underlying bits - union - { - cl_float f; - uint32_t i; - } f32; - - // Extract sign bit - uint16_t sign = h >> 15; - - // Extract FP16 exponent and mantissa - uint16_t h_exp = (h >> (CL_HALF_MANT_DIG - 1)) & 0x1F; - uint16_t h_mant = h & 0x3FF; - - // Remove FP16 exponent bias - int32_t exp = h_exp - CL_HALF_MAX_EXP + 1; - - // Add FP32 exponent bias - uint32_t f_exp = exp + CL_FLT_MAX_EXP - 1; - - // Check for NaN / infinity - if (h_exp == 0x1F) - { - if (h_mant) - { - // NaN -> propagate mantissa and silence it - uint32_t f_mant = h_mant << (CL_FLT_MANT_DIG - CL_HALF_MANT_DIG); - f_mant |= 0x400000; - f32.i = (sign << 31) | 0x7F800000 | f_mant; - return f32.f; - } - else - { - // Infinity -> zero mantissa - f32.i = (sign << 31) | 0x7F800000; - return f32.f; - } - } - - // Check for zero / denormal - if (h_exp == 0) - { - if (h_mant == 0) - { - // Zero -> zero exponent - f_exp = 0; - } - else - { - // Denormal -> normalize it - // - Shift mantissa to make most-significant 1 implicit - // - Adjust exponent accordingly - uint32_t shift = 0; - while ((h_mant & 0x400) == 0) - { - h_mant <<= 1; - shift++; - } - h_mant &= 0x3FF; - f_exp -= shift - 1; - } - } - - f32.i = (sign << 31) | (f_exp << 23) | (h_mant << 13); - return f32.f; -} - - -#undef CL_HALF_EXP_MASK -#undef CL_HALF_MAX_FINITE_MAG - - -#ifdef __cplusplus -} -#endif - - -#endif /* OPENCL_CL_HALF_H */ diff --git a/include/CL/cl_icd.h b/include/CL/cl_icd.h deleted file mode 100644 index 360b87030..000000000 --- a/include/CL/cl_icd.h +++ /dev/null @@ -1,1294 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef OPENCL_CL_ICD_H -#define OPENCL_CL_ICD_H - -#include -#include -#include -#include - -#if defined(_WIN32) -#include -#include -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This file contains pointer type definitions for each of the CL API calls as - * well as a type definition for the dispatch table used by the Khronos ICD - * loader (see cl_khr_icd extension specification for background). - */ - -/* API function pointer definitions */ - -// Platform APIs -typedef cl_int(CL_API_CALL *cl_api_clGetPlatformIDs)( - cl_uint num_entries, cl_platform_id *platforms, - cl_uint *num_platforms) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetPlatformInfo)( - cl_platform_id platform, cl_platform_info param_name, - size_t param_value_size, void *param_value, - size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -// Device APIs -typedef cl_int(CL_API_CALL *cl_api_clGetDeviceIDs)( - cl_platform_id platform, cl_device_type device_type, cl_uint num_entries, - cl_device_id *devices, cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetDeviceInfo)( - cl_device_id device, cl_device_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clCreateSubDevices)( - cl_device_id in_device, - const cl_device_partition_property *partition_properties, - cl_uint num_entries, cl_device_id *out_devices, cl_uint *num_devices); - -typedef cl_int(CL_API_CALL *cl_api_clRetainDevice)( - cl_device_id device) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseDevice)( - cl_device_id device) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clCreateSubDevices; -typedef void *cl_api_clRetainDevice; -typedef void *cl_api_clReleaseDevice; - -#endif - -// Context APIs -typedef cl_context(CL_API_CALL *cl_api_clCreateContext)( - const cl_context_properties *properties, cl_uint num_devices, - const cl_device_id *devices, - void(CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *), - void *user_data, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_context(CL_API_CALL *cl_api_clCreateContextFromType)( - const cl_context_properties *properties, cl_device_type device_type, - void(CL_CALLBACK *pfn_notify)(const char *, const void *, size_t, void *), - void *user_data, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clRetainContext)( - cl_context context) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseContext)( - cl_context context) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetContextInfo)( - cl_context context, cl_context_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -// Command Queue APIs -typedef cl_command_queue(CL_API_CALL *cl_api_clCreateCommandQueue)( - cl_context context, cl_device_id device, - cl_command_queue_properties properties, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -typedef -cl_command_queue(CL_API_CALL *cl_api_clCreateCommandQueueWithProperties)( - cl_context /* context */, cl_device_id /* device */, - const cl_queue_properties * /* properties */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; - -#else - -typedef void *cl_api_clCreateCommandQueueWithProperties; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clRetainCommandQueue)( - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseCommandQueue)( - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetCommandQueueInfo)( - cl_command_queue command_queue, cl_command_queue_info param_name, - size_t param_value_size, void *param_value, - size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -// Memory Object APIs -typedef cl_mem(CL_API_CALL *cl_api_clCreateBuffer)( - cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_mem(CL_API_CALL *cl_api_clCreateImage)( - cl_context context, cl_mem_flags flags, const cl_image_format *image_format, - const cl_image_desc *image_desc, void *host_ptr, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clCreateImage; - -#endif - -#ifdef CL_VERSION_3_0 - -typedef cl_mem(CL_API_CALL *cl_api_clCreateBufferWithProperties)( - cl_context context, const cl_mem_properties *properties, cl_mem_flags flags, - size_t size, void *host_ptr, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_3_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateImageWithProperties)( - cl_context context, const cl_mem_properties *properties, cl_mem_flags flags, - const cl_image_format *image_format, const cl_image_desc *image_desc, - void *host_ptr, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_3_0; - -typedef cl_int(CL_API_CALL* cl_api_clSetContextDestructorCallback)( - cl_context context, - void(CL_CALLBACK* pfn_notify)(cl_context context, void* user_data), - void* user_data) CL_API_SUFFIX__VERSION_3_0; - -#else - -typedef void *cl_api_clCreateBufferWithProperties; -typedef void *cl_api_clCreateImageWithProperties; -typedef void *cl_api_clSetContextDestructorCallback; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clRetainMemObject)( - cl_mem memobj) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseMemObject)( - cl_mem memobj) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetSupportedImageFormats)( - cl_context context, cl_mem_flags flags, cl_mem_object_type image_type, - cl_uint num_entries, cl_image_format *image_formats, - cl_uint *num_image_formats) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetMemObjectInfo)( - cl_mem memobj, cl_mem_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetImageInfo)( - cl_mem image, cl_image_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -typedef cl_mem(CL_API_CALL *cl_api_clCreatePipe)( - cl_context /* context */, cl_mem_flags /* flags */, - cl_uint /* pipe_packet_size */, cl_uint /* pipe_max_packets */, - const cl_pipe_properties * /* properties */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetPipeInfo)( - cl_mem /* pipe */, cl_pipe_info /* param_name */, - size_t /* param_value_size */, void * /* param_value */, - size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_2_0; - -typedef void *(CL_API_CALL *cl_api_clSVMAlloc)( - cl_context /* context */, cl_svm_mem_flags /* flags */, size_t /* size */, - unsigned int /* alignment */)CL_API_SUFFIX__VERSION_2_0; - -typedef void(CL_API_CALL *cl_api_clSVMFree)( - cl_context /* context */, - void * /* svm_pointer */) CL_API_SUFFIX__VERSION_2_0; - -#else - -typedef void *cl_api_clCreatePipe; -typedef void *cl_api_clGetPipeInfo; -typedef void *cl_api_clSVMAlloc; -typedef void *cl_api_clSVMFree; - -#endif - -// Sampler APIs -typedef cl_sampler(CL_API_CALL *cl_api_clCreateSampler)( - cl_context context, cl_bool normalized_coords, - cl_addressing_mode addressing_mode, cl_filter_mode filter_mode, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clRetainSampler)( - cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseSampler)( - cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetSamplerInfo)( - cl_sampler sampler, cl_sampler_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -typedef -cl_sampler(CL_API_CALL *cl_api_clCreateSamplerWithProperties)( - cl_context /* context */, - const cl_sampler_properties * /* sampler_properties */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_2_0; - -#else - -typedef void *cl_api_clCreateSamplerWithProperties; - -#endif - -// Program Object APIs -typedef cl_program(CL_API_CALL *cl_api_clCreateProgramWithSource)( - cl_context context, cl_uint count, const char **strings, - const size_t *lengths, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_program(CL_API_CALL *cl_api_clCreateProgramWithBinary)( - cl_context context, cl_uint num_devices, const cl_device_id *device_list, - const size_t *lengths, const unsigned char **binaries, - cl_int *binary_status, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef -cl_program(CL_API_CALL *cl_api_clCreateProgramWithBuiltInKernels)( - cl_context context, cl_uint num_devices, const cl_device_id *device_list, - const char *kernel_names, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clCreateProgramWithBuiltInKernels; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clRetainProgram)( - cl_program program) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseProgram)( - cl_program program) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clBuildProgram)( - cl_program program, cl_uint num_devices, const cl_device_id *device_list, - const char *options, - void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data), - void *user_data) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clCompileProgram)( - cl_program program, cl_uint num_devices, const cl_device_id *device_list, - const char *options, cl_uint num_input_headers, - const cl_program *input_headers, const char **header_include_names, - void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data), - void *user_data) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_program(CL_API_CALL *cl_api_clLinkProgram)( - cl_context context, cl_uint num_devices, const cl_device_id *device_list, - const char *options, cl_uint num_input_programs, - const cl_program *input_programs, - void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data), - void *user_data, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clCompileProgram; -typedef void *cl_api_clLinkProgram; - -#endif - -#ifdef CL_VERSION_2_2 - -typedef -cl_int(CL_API_CALL *cl_api_clSetProgramSpecializationConstant)( - cl_program program, cl_uint spec_id, size_t spec_size, - const void *spec_value) CL_API_SUFFIX__VERSION_2_2; - -typedef cl_int(CL_API_CALL *cl_api_clSetProgramReleaseCallback)( - cl_program program, - void(CL_CALLBACK *pfn_notify)(cl_program program, void *user_data), - void *user_data) CL_API_SUFFIX__VERSION_2_2; - -#else - -typedef void *cl_api_clSetProgramSpecializationConstant; -typedef void *cl_api_clSetProgramReleaseCallback; - -#endif - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clUnloadPlatformCompiler)( - cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clUnloadPlatformCompiler; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clGetProgramInfo)( - cl_program program, cl_program_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetProgramBuildInfo)( - cl_program program, cl_device_id device, cl_program_build_info param_name, - size_t param_value_size, void *param_value, - size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -// Kernel Object APIs -typedef cl_kernel(CL_API_CALL *cl_api_clCreateKernel)( - cl_program program, const char *kernel_name, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clCreateKernelsInProgram)( - cl_program program, cl_uint num_kernels, cl_kernel *kernels, - cl_uint *num_kernels_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clRetainKernel)( - cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseKernel)( - cl_kernel kernel) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clSetKernelArg)( - cl_kernel kernel, cl_uint arg_index, size_t arg_size, - const void *arg_value) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetKernelInfo)( - cl_kernel kernel, cl_kernel_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clGetKernelArgInfo)( - cl_kernel kernel, cl_uint arg_indx, cl_kernel_arg_info param_name, - size_t param_value_size, void *param_value, - size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clGetKernelArgInfo; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clGetKernelWorkGroupInfo)( - cl_kernel kernel, cl_device_id device, cl_kernel_work_group_info param_name, - size_t param_value_size, void *param_value, - size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_2_0 - -typedef cl_int(CL_API_CALL *cl_api_clSetKernelArgSVMPointer)( - cl_kernel /* kernel */, cl_uint /* arg_index */, - const void * /* arg_value */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clSetKernelExecInfo)( - cl_kernel /* kernel */, cl_kernel_exec_info /* param_name */, - size_t /* param_value_size */, - const void * /* param_value */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetKernelSubGroupInfoKHR)( - cl_kernel /* in_kernel */, cl_device_id /*in_device*/, - cl_kernel_sub_group_info /* param_name */, size_t /*input_value_size*/, - const void * /*input_value*/, size_t /*param_value_size*/, - void * /*param_value*/, - size_t * /*param_value_size_ret*/) CL_API_SUFFIX__VERSION_2_0; - -#else - -typedef void *cl_api_clSetKernelArgSVMPointer; -typedef void *cl_api_clSetKernelExecInfo; -typedef void *cl_api_clGetKernelSubGroupInfoKHR; - -#endif - -// Event Object APIs -typedef cl_int(CL_API_CALL *cl_api_clWaitForEvents)( - cl_uint num_events, const cl_event *event_list) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetEventInfo)( - cl_event event, cl_event_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clRetainEvent)(cl_event event) - CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseEvent)(cl_event event) - CL_API_SUFFIX__VERSION_1_0; - -// Profiling APIs -typedef cl_int(CL_API_CALL *cl_api_clGetEventProfilingInfo)( - cl_event event, cl_profiling_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -// Flush and Finish APIs -typedef cl_int(CL_API_CALL *cl_api_clFlush)( - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clFinish)( - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0; - -// Enqueued Commands APIs -typedef cl_int(CL_API_CALL *cl_api_clEnqueueReadBuffer)( - cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, - size_t offset, size_t cb, void *ptr, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueReadBufferRect)( - cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, - const size_t *buffer_origin, const size_t *host_origin, - const size_t *region, size_t buffer_row_pitch, size_t buffer_slice_pitch, - size_t host_row_pitch, size_t host_slice_pitch, void *ptr, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_1; - -#else - -typedef void *cl_api_clEnqueueReadBufferRect; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueWriteBuffer)( - cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, - size_t offset, size_t cb, const void *ptr, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueWriteBufferRect)( - cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, - const size_t *buffer_origin, const size_t *host_origin, - const size_t *region, size_t buffer_row_pitch, size_t buffer_slice_pitch, - size_t host_row_pitch, size_t host_slice_pitch, const void *ptr, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_1; - -#else - -typedef void *cl_api_clEnqueueWriteBufferRect; - -#endif - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueFillBuffer)( - cl_command_queue command_queue, cl_mem buffer, const void *pattern, - size_t pattern_size, size_t offset, size_t cb, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clEnqueueFillBuffer; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueCopyBuffer)( - cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, - size_t src_offset, size_t dst_offset, size_t cb, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_1 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueCopyBufferRect)( - cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_buffer, - const size_t *src_origin, const size_t *dst_origin, const size_t *region, - size_t src_row_pitch, size_t src_slice_pitch, size_t dst_row_pitch, - size_t dst_slice_pitch, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_1; - -#else - -typedef void *cl_api_clEnqueueCopyBufferRect; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueReadImage)( - cl_command_queue command_queue, cl_mem image, cl_bool blocking_read, - const size_t *origin, const size_t *region, size_t row_pitch, - size_t slice_pitch, void *ptr, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueWriteImage)( - cl_command_queue command_queue, cl_mem image, cl_bool blocking_write, - const size_t *origin, const size_t *region, size_t input_row_pitch, - size_t input_slice_pitch, const void *ptr, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueFillImage)( - cl_command_queue command_queue, cl_mem image, const void *fill_color, - const size_t origin[3], const size_t region[3], - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clEnqueueFillImage; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueCopyImage)( - cl_command_queue command_queue, cl_mem src_image, cl_mem dst_image, - const size_t *src_origin, const size_t *dst_origin, const size_t *region, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueCopyImageToBuffer)( - cl_command_queue command_queue, cl_mem src_image, cl_mem dst_buffer, - const size_t *src_origin, const size_t *region, size_t dst_offset, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueCopyBufferToImage)( - cl_command_queue command_queue, cl_mem src_buffer, cl_mem dst_image, - size_t src_offset, const size_t *dst_origin, const size_t *region, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef void *(CL_API_CALL *cl_api_clEnqueueMapBuffer)( - cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_map, - cl_map_flags map_flags, size_t offset, size_t cb, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event, cl_int *errcode_ret)CL_API_SUFFIX__VERSION_1_0; - -typedef void *(CL_API_CALL *cl_api_clEnqueueMapImage)( - cl_command_queue command_queue, cl_mem image, cl_bool blocking_map, - cl_map_flags map_flags, const size_t *origin, const size_t *region, - size_t *image_row_pitch, size_t *image_slice_pitch, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event, cl_int *errcode_ret)CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueUnmapMemObject)( - cl_command_queue command_queue, cl_mem memobj, void *mapped_ptr, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueMigrateMemObjects)( - cl_command_queue command_queue, cl_uint num_mem_objects, - const cl_mem *mem_objects, cl_mem_migration_flags flags, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clEnqueueMigrateMemObjects; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueNDRangeKernel)( - cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, - const size_t *global_work_offset, const size_t *global_work_size, - const size_t *local_work_size, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueTask)( - cl_command_queue command_queue, cl_kernel kernel, - cl_uint num_events_in_wait_list, const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueNativeKernel)( - cl_command_queue command_queue, void(CL_CALLBACK *user_func)(void *), - void *args, size_t cb_args, cl_uint num_mem_objects, const cl_mem *mem_list, - const void **args_mem_loc, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -#ifdef CL_VERSION_1_2 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueMarkerWithWaitList)( - cl_command_queue command_queue, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueBarrierWithWaitList)( - cl_command_queue command_queue, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -typedef void *( - CL_API_CALL *cl_api_clGetExtensionFunctionAddressForPlatform)( - cl_platform_id platform, - const char *function_name)CL_API_SUFFIX__VERSION_1_2; - -#else - -typedef void *cl_api_clEnqueueMarkerWithWaitList; -typedef void *cl_api_clEnqueueBarrierWithWaitList; -typedef void *cl_api_clGetExtensionFunctionAddressForPlatform; - -#endif - -// Shared Virtual Memory APIs - -#ifdef CL_VERSION_2_0 - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMFree)( - cl_command_queue /* command_queue */, cl_uint /* num_svm_pointers */, - void ** /* svm_pointers */, - void(CL_CALLBACK *pfn_free_func)(cl_command_queue /* queue */, - cl_uint /* num_svm_pointers */, - void ** /* svm_pointers[] */, - void * /* user_data */), - void * /* user_data */, cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMMemcpy)( - cl_command_queue /* command_queue */, cl_bool /* blocking_copy */, - void * /* dst_ptr */, const void * /* src_ptr */, size_t /* size */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMMemFill)( - cl_command_queue /* command_queue */, void * /* svm_ptr */, - const void * /* pattern */, size_t /* pattern_size */, size_t /* size */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMMap)( - cl_command_queue /* command_queue */, cl_bool /* blocking_map */, - cl_map_flags /* map_flags */, void * /* svm_ptr */, size_t /* size */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMUnmap)( - cl_command_queue /* command_queue */, void * /* svm_ptr */, - cl_uint /* num_events_in_wait_list */, - const cl_event * /* event_wait_list */, - cl_event * /* event */) CL_API_SUFFIX__VERSION_2_0; - -#else - -typedef void *cl_api_clEnqueueSVMFree; -typedef void *cl_api_clEnqueueSVMMemcpy; -typedef void *cl_api_clEnqueueSVMMemFill; -typedef void *cl_api_clEnqueueSVMMap; -typedef void *cl_api_clEnqueueSVMUnmap; - -#endif - -// Deprecated APIs -typedef cl_int(CL_API_CALL *cl_api_clSetCommandQueueProperty)( - cl_command_queue command_queue, cl_command_queue_properties properties, - cl_bool enable, cl_command_queue_properties *old_properties) - CL_API_SUFFIX__VERSION_1_0_DEPRECATED; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateImage2D)( - cl_context context, cl_mem_flags flags, const cl_image_format *image_format, - size_t image_width, size_t image_height, size_t image_row_pitch, - void *host_ptr, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateImage3D)( - cl_context context, cl_mem_flags flags, const cl_image_format *image_format, - size_t image_width, size_t image_height, size_t image_depth, - size_t image_row_pitch, size_t image_slice_pitch, void *host_ptr, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef cl_int(CL_API_CALL *cl_api_clUnloadCompiler)(void) - CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueMarker)( - cl_command_queue command_queue, - cl_event *event) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueWaitForEvents)( - cl_command_queue command_queue, cl_uint num_events, - const cl_event *event_list) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueBarrier)( - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -typedef void *(CL_API_CALL *cl_api_clGetExtensionFunctionAddress)( - const char *function_name)CL_API_SUFFIX__VERSION_1_1_DEPRECATED; - -// GL and other APIs -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromGLBuffer)( - cl_context context, cl_mem_flags flags, cl_GLuint bufobj, - int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture)( - cl_context context, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, - cl_GLuint texture, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture2D)( - cl_context context, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, - cl_GLuint texture, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromGLTexture3D)( - cl_context context, cl_mem_flags flags, cl_GLenum target, cl_GLint miplevel, - cl_GLuint texture, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromGLRenderbuffer)( - cl_context context, cl_mem_flags flags, cl_GLuint renderbuffer, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetGLObjectInfo)( - cl_mem memobj, cl_gl_object_type *gl_object_type, - cl_GLuint *gl_object_name) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clGetGLTextureInfo)( - cl_mem memobj, cl_gl_texture_info param_name, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueAcquireGLObjects)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueReleaseGLObjects)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -/* cl_khr_gl_sharing */ -typedef cl_int(CL_API_CALL *cl_api_clGetGLContextInfoKHR)( - const cl_context_properties *properties, cl_gl_context_info param_name, - size_t param_value_size, void *param_value, size_t *param_value_size_ret); - -/* cl_khr_gl_event */ -typedef cl_event(CL_API_CALL *cl_api_clCreateEventFromGLsyncKHR)( - cl_context context, cl_GLsync sync, cl_int *errcode_ret); - -#if defined(_WIN32) - -/* cl_khr_d3d10_sharing */ - -typedef cl_int(CL_API_CALL *cl_api_clGetDeviceIDsFromD3D10KHR)( - cl_platform_id platform, cl_d3d10_device_source_khr d3d_device_source, - void *d3d_object, cl_d3d10_device_set_khr d3d_device_set, - cl_uint num_entries, cl_device_id *devices, - cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10BufferKHR)( - cl_context context, cl_mem_flags flags, ID3D10Buffer *resource, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10Texture2DKHR)( - cl_context context, cl_mem_flags flags, ID3D10Texture2D *resource, - UINT subresource, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D10Texture3DKHR)( - cl_context context, cl_mem_flags flags, ID3D10Texture3D *resource, - UINT subresource, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_0; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueAcquireD3D10ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueReleaseD3D10ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_0; - -extern CL_API_ENTRY cl_int CL_API_CALL clGetDeviceIDsFromD3D10KHR( - cl_platform_id platform, cl_d3d10_device_source_khr d3d_device_source, - void *d3d_object, cl_d3d10_device_set_khr d3d_device_set, - cl_uint num_entries, cl_device_id *devices, cl_uint *num_devices); - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromD3D10BufferKHR(cl_context context, cl_mem_flags flags, - ID3D10Buffer *resource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_mem CL_API_CALL clCreateFromD3D10Texture2DKHR( - cl_context context, cl_mem_flags flags, ID3D10Texture2D *resource, - UINT subresource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_mem CL_API_CALL clCreateFromD3D10Texture3DKHR( - cl_context context, cl_mem_flags flags, ID3D10Texture3D *resource, - UINT subresource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireD3D10ObjectsKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseD3D10ObjectsKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -/* cl_khr_d3d11_sharing */ -typedef cl_int(CL_API_CALL *cl_api_clGetDeviceIDsFromD3D11KHR)( - cl_platform_id platform, cl_d3d11_device_source_khr d3d_device_source, - void *d3d_object, cl_d3d11_device_set_khr d3d_device_set, - cl_uint num_entries, cl_device_id *devices, - cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11BufferKHR)( - cl_context context, cl_mem_flags flags, ID3D11Buffer *resource, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11Texture2DKHR)( - cl_context context, cl_mem_flags flags, ID3D11Texture2D *resource, - UINT subresource, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromD3D11Texture3DKHR)( - cl_context context, cl_mem_flags flags, ID3D11Texture3D *resource, - UINT subresource, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueAcquireD3D11ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueReleaseD3D11ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -/* cl_khr_dx9_media_sharing */ -typedef -cl_int(CL_API_CALL *cl_api_clGetDeviceIDsFromDX9MediaAdapterKHR)( - cl_platform_id platform, cl_uint num_media_adapters, - cl_dx9_media_adapter_type_khr *media_adapters_type, void *media_adapters, - cl_dx9_media_adapter_set_khr media_adapter_set, cl_uint num_entries, - cl_device_id *devices, cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromDX9MediaSurfaceKHR)( - cl_context context, cl_mem_flags flags, - cl_dx9_media_adapter_type_khr adapter_type, void *surface_info, - cl_uint plane, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueAcquireDX9MediaSurfacesKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -typedef -cl_int(CL_API_CALL *cl_api_clEnqueueReleaseDX9MediaSurfacesKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_1_2; - -/* cl_khr_d3d11_sharing */ -extern CL_API_ENTRY cl_int CL_API_CALL clGetDeviceIDsFromD3D11KHR( - cl_platform_id platform, cl_d3d11_device_source_khr d3d_device_source, - void *d3d_object, cl_d3d11_device_set_khr d3d_device_set, - cl_uint num_entries, cl_device_id *devices, cl_uint *num_devices); - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromD3D11BufferKHR(cl_context context, cl_mem_flags flags, - ID3D11Buffer *resource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_mem CL_API_CALL clCreateFromD3D11Texture2DKHR( - cl_context context, cl_mem_flags flags, ID3D11Texture2D *resource, - UINT subresource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_mem CL_API_CALL clCreateFromD3D11Texture3DKHR( - cl_context context, cl_mem_flags flags, ID3D11Texture3D *resource, - UINT subresource, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireD3D11ObjectsKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseD3D11ObjectsKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -/* cl_khr_dx9_media_sharing */ -extern CL_API_ENTRY cl_int CL_API_CALL clGetDeviceIDsFromDX9MediaAdapterKHR( - cl_platform_id platform, cl_uint num_media_adapters, - cl_dx9_media_adapter_type_khr *media_adapter_type, void *media_adapters, - cl_dx9_media_adapter_set_khr media_adapter_set, cl_uint num_entries, - cl_device_id *devices, cl_uint *num_devices); - -extern CL_API_ENTRY cl_mem CL_API_CALL clCreateFromDX9MediaSurfaceKHR( - cl_context context, cl_mem_flags flags, - cl_dx9_media_adapter_type_khr adapter_type, void *surface_info, - cl_uint plane, cl_int *errcode_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueAcquireDX9MediaSurfacesKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseDX9MediaSurfacesKHR( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -#else - -/* cl_khr_d3d10_sharing */ -typedef void *cl_api_clGetDeviceIDsFromD3D10KHR; -typedef void *cl_api_clCreateFromD3D10BufferKHR; -typedef void *cl_api_clCreateFromD3D10Texture2DKHR; -typedef void *cl_api_clCreateFromD3D10Texture3DKHR; -typedef void *cl_api_clEnqueueAcquireD3D10ObjectsKHR; -typedef void *cl_api_clEnqueueReleaseD3D10ObjectsKHR; - -/* cl_khr_d3d11_sharing */ -typedef void *cl_api_clGetDeviceIDsFromD3D11KHR; -typedef void *cl_api_clCreateFromD3D11BufferKHR; -typedef void *cl_api_clCreateFromD3D11Texture2DKHR; -typedef void *cl_api_clCreateFromD3D11Texture3DKHR; -typedef void *cl_api_clEnqueueAcquireD3D11ObjectsKHR; -typedef void *cl_api_clEnqueueReleaseD3D11ObjectsKHR; - -/* cl_khr_dx9_media_sharing */ -typedef void *cl_api_clCreateFromDX9MediaSurfaceKHR; -typedef void *cl_api_clEnqueueAcquireDX9MediaSurfacesKHR; -typedef void *cl_api_clEnqueueReleaseDX9MediaSurfacesKHR; -typedef void *cl_api_clGetDeviceIDsFromDX9MediaAdapterKHR; - -#endif - -/* OpenCL 1.1 */ - -#ifdef CL_VERSION_1_1 - -typedef cl_int(CL_API_CALL *cl_api_clSetEventCallback)( - cl_event /* event */, cl_int /* command_exec_callback_type */, - void(CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *), - void * /* user_data */) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_mem(CL_API_CALL *cl_api_clCreateSubBuffer)( - cl_mem /* buffer */, cl_mem_flags /* flags */, - cl_buffer_create_type /* buffer_create_type */, - const void * /* buffer_create_info */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1; - -typedef -cl_int(CL_API_CALL *cl_api_clSetMemObjectDestructorCallback)( - cl_mem /* memobj */, - void(CL_CALLBACK * /*pfn_notify*/)(cl_mem /* memobj */, - void * /*user_data*/), - void * /*user_data */) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_event(CL_API_CALL *cl_api_clCreateUserEvent)( - cl_context /* context */, - cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1; - -typedef cl_int(CL_API_CALL *cl_api_clSetUserEventStatus)( - cl_event /* event */, - cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1; - -#else - -typedef void *cl_api_clSetEventCallback; -typedef void *cl_api_clCreateSubBuffer; -typedef void *cl_api_clSetMemObjectDestructorCallback; -typedef void *cl_api_clCreateUserEvent; -typedef void *cl_api_clSetUserEventStatus; - -#endif - -typedef cl_int(CL_API_CALL *cl_api_clCreateSubDevicesEXT)( - cl_device_id in_device, - const cl_device_partition_property_ext *partition_properties, - cl_uint num_entries, cl_device_id *out_devices, cl_uint *num_devices); - -typedef cl_int(CL_API_CALL *cl_api_clRetainDeviceEXT)( - cl_device_id device) CL_API_SUFFIX__VERSION_1_0; - -typedef cl_int(CL_API_CALL *cl_api_clReleaseDeviceEXT)( - cl_device_id device) CL_API_SUFFIX__VERSION_1_0; - -/* cl_khr_egl_image */ -typedef cl_mem(CL_API_CALL *cl_api_clCreateFromEGLImageKHR)( - cl_context context, CLeglDisplayKHR display, CLeglImageKHR image, - cl_mem_flags flags, const cl_egl_image_properties_khr *properties, - cl_int *errcode_ret); - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueAcquireEGLObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueReleaseEGLObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem *mem_objects, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, cl_event *event); - -/* cl_khr_egl_event */ -typedef cl_event(CL_API_CALL *cl_api_clCreateEventFromEGLSyncKHR)( - cl_context context, CLeglSyncKHR sync, CLeglDisplayKHR display, - cl_int *errcode_ret); - -#ifdef CL_VERSION_2_1 - -typedef cl_int(CL_API_CALL *cl_api_clSetDefaultDeviceCommandQueue)( - cl_context context, cl_device_id device, - cl_command_queue command_queue) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_program(CL_API_CALL *cl_api_clCreateProgramWithIL)( - cl_context context, const void *il, size_t length, - cl_int *errcode_ret) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_int(CL_API_CALL *cl_api_clGetKernelSubGroupInfo)( - cl_kernel kernel, cl_device_id device, cl_kernel_sub_group_info param_name, - size_t input_value_size, const void *input_value, size_t param_value_size, - void *param_value, size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_kernel(CL_API_CALL *cl_api_clCloneKernel)( - cl_kernel source_kernel, cl_int *errcode_ret) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_int(CL_API_CALL *cl_api_clEnqueueSVMMigrateMem)( - cl_command_queue command_queue, cl_uint num_svm_pointers, - const void **svm_pointers, const size_t *sizes, - cl_mem_migration_flags flags, cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_int(CL_API_CALL *cl_api_clGetDeviceAndHostTimer)( - cl_device_id device, cl_ulong *device_timestamp, - cl_ulong *host_timestamp) CL_API_SUFFIX__VERSION_2_1; - -typedef cl_int(CL_API_CALL *cl_api_clGetHostTimer)( - cl_device_id device, cl_ulong *host_timestamp) CL_API_SUFFIX__VERSION_2_1; - -#else - -typedef void *cl_api_clSetDefaultDeviceCommandQueue; -typedef void *cl_api_clCreateProgramWithIL; -typedef void *cl_api_clGetKernelSubGroupInfo; -typedef void *cl_api_clCloneKernel; -typedef void *cl_api_clEnqueueSVMMigrateMem; -typedef void *cl_api_clGetDeviceAndHostTimer; -typedef void *cl_api_clGetHostTimer; - -#endif - -/* Vendor dispatch table structure */ - -typedef struct _cl_icd_dispatch { - /* OpenCL 1.0 */ - cl_api_clGetPlatformIDs clGetPlatformIDs; - cl_api_clGetPlatformInfo clGetPlatformInfo; - cl_api_clGetDeviceIDs clGetDeviceIDs; - cl_api_clGetDeviceInfo clGetDeviceInfo; - cl_api_clCreateContext clCreateContext; - cl_api_clCreateContextFromType clCreateContextFromType; - cl_api_clRetainContext clRetainContext; - cl_api_clReleaseContext clReleaseContext; - cl_api_clGetContextInfo clGetContextInfo; - cl_api_clCreateCommandQueue clCreateCommandQueue; - cl_api_clRetainCommandQueue clRetainCommandQueue; - cl_api_clReleaseCommandQueue clReleaseCommandQueue; - cl_api_clGetCommandQueueInfo clGetCommandQueueInfo; - cl_api_clSetCommandQueueProperty clSetCommandQueueProperty; - cl_api_clCreateBuffer clCreateBuffer; - cl_api_clCreateImage2D clCreateImage2D; - cl_api_clCreateImage3D clCreateImage3D; - cl_api_clRetainMemObject clRetainMemObject; - cl_api_clReleaseMemObject clReleaseMemObject; - cl_api_clGetSupportedImageFormats clGetSupportedImageFormats; - cl_api_clGetMemObjectInfo clGetMemObjectInfo; - cl_api_clGetImageInfo clGetImageInfo; - cl_api_clCreateSampler clCreateSampler; - cl_api_clRetainSampler clRetainSampler; - cl_api_clReleaseSampler clReleaseSampler; - cl_api_clGetSamplerInfo clGetSamplerInfo; - cl_api_clCreateProgramWithSource clCreateProgramWithSource; - cl_api_clCreateProgramWithBinary clCreateProgramWithBinary; - cl_api_clRetainProgram clRetainProgram; - cl_api_clReleaseProgram clReleaseProgram; - cl_api_clBuildProgram clBuildProgram; - cl_api_clUnloadCompiler clUnloadCompiler; - cl_api_clGetProgramInfo clGetProgramInfo; - cl_api_clGetProgramBuildInfo clGetProgramBuildInfo; - cl_api_clCreateKernel clCreateKernel; - cl_api_clCreateKernelsInProgram clCreateKernelsInProgram; - cl_api_clRetainKernel clRetainKernel; - cl_api_clReleaseKernel clReleaseKernel; - cl_api_clSetKernelArg clSetKernelArg; - cl_api_clGetKernelInfo clGetKernelInfo; - cl_api_clGetKernelWorkGroupInfo clGetKernelWorkGroupInfo; - cl_api_clWaitForEvents clWaitForEvents; - cl_api_clGetEventInfo clGetEventInfo; - cl_api_clRetainEvent clRetainEvent; - cl_api_clReleaseEvent clReleaseEvent; - cl_api_clGetEventProfilingInfo clGetEventProfilingInfo; - cl_api_clFlush clFlush; - cl_api_clFinish clFinish; - cl_api_clEnqueueReadBuffer clEnqueueReadBuffer; - cl_api_clEnqueueWriteBuffer clEnqueueWriteBuffer; - cl_api_clEnqueueCopyBuffer clEnqueueCopyBuffer; - cl_api_clEnqueueReadImage clEnqueueReadImage; - cl_api_clEnqueueWriteImage clEnqueueWriteImage; - cl_api_clEnqueueCopyImage clEnqueueCopyImage; - cl_api_clEnqueueCopyImageToBuffer clEnqueueCopyImageToBuffer; - cl_api_clEnqueueCopyBufferToImage clEnqueueCopyBufferToImage; - cl_api_clEnqueueMapBuffer clEnqueueMapBuffer; - cl_api_clEnqueueMapImage clEnqueueMapImage; - cl_api_clEnqueueUnmapMemObject clEnqueueUnmapMemObject; - cl_api_clEnqueueNDRangeKernel clEnqueueNDRangeKernel; - cl_api_clEnqueueTask clEnqueueTask; - cl_api_clEnqueueNativeKernel clEnqueueNativeKernel; - cl_api_clEnqueueMarker clEnqueueMarker; - cl_api_clEnqueueWaitForEvents clEnqueueWaitForEvents; - cl_api_clEnqueueBarrier clEnqueueBarrier; - cl_api_clGetExtensionFunctionAddress clGetExtensionFunctionAddress; - cl_api_clCreateFromGLBuffer clCreateFromGLBuffer; - cl_api_clCreateFromGLTexture2D clCreateFromGLTexture2D; - cl_api_clCreateFromGLTexture3D clCreateFromGLTexture3D; - cl_api_clCreateFromGLRenderbuffer clCreateFromGLRenderbuffer; - cl_api_clGetGLObjectInfo clGetGLObjectInfo; - cl_api_clGetGLTextureInfo clGetGLTextureInfo; - cl_api_clEnqueueAcquireGLObjects clEnqueueAcquireGLObjects; - cl_api_clEnqueueReleaseGLObjects clEnqueueReleaseGLObjects; - cl_api_clGetGLContextInfoKHR clGetGLContextInfoKHR; - - /* cl_khr_d3d10_sharing */ - cl_api_clGetDeviceIDsFromD3D10KHR clGetDeviceIDsFromD3D10KHR; - cl_api_clCreateFromD3D10BufferKHR clCreateFromD3D10BufferKHR; - cl_api_clCreateFromD3D10Texture2DKHR clCreateFromD3D10Texture2DKHR; - cl_api_clCreateFromD3D10Texture3DKHR clCreateFromD3D10Texture3DKHR; - cl_api_clEnqueueAcquireD3D10ObjectsKHR clEnqueueAcquireD3D10ObjectsKHR; - cl_api_clEnqueueReleaseD3D10ObjectsKHR clEnqueueReleaseD3D10ObjectsKHR; - - /* OpenCL 1.1 */ - cl_api_clSetEventCallback clSetEventCallback; - cl_api_clCreateSubBuffer clCreateSubBuffer; - cl_api_clSetMemObjectDestructorCallback clSetMemObjectDestructorCallback; - cl_api_clCreateUserEvent clCreateUserEvent; - cl_api_clSetUserEventStatus clSetUserEventStatus; - cl_api_clEnqueueReadBufferRect clEnqueueReadBufferRect; - cl_api_clEnqueueWriteBufferRect clEnqueueWriteBufferRect; - cl_api_clEnqueueCopyBufferRect clEnqueueCopyBufferRect; - - /* cl_ext_device_fission */ - cl_api_clCreateSubDevicesEXT clCreateSubDevicesEXT; - cl_api_clRetainDeviceEXT clRetainDeviceEXT; - cl_api_clReleaseDeviceEXT clReleaseDeviceEXT; - - /* cl_khr_gl_event */ - cl_api_clCreateEventFromGLsyncKHR clCreateEventFromGLsyncKHR; - - /* OpenCL 1.2 */ - cl_api_clCreateSubDevices clCreateSubDevices; - cl_api_clRetainDevice clRetainDevice; - cl_api_clReleaseDevice clReleaseDevice; - cl_api_clCreateImage clCreateImage; - cl_api_clCreateProgramWithBuiltInKernels clCreateProgramWithBuiltInKernels; - cl_api_clCompileProgram clCompileProgram; - cl_api_clLinkProgram clLinkProgram; - cl_api_clUnloadPlatformCompiler clUnloadPlatformCompiler; - cl_api_clGetKernelArgInfo clGetKernelArgInfo; - cl_api_clEnqueueFillBuffer clEnqueueFillBuffer; - cl_api_clEnqueueFillImage clEnqueueFillImage; - cl_api_clEnqueueMigrateMemObjects clEnqueueMigrateMemObjects; - cl_api_clEnqueueMarkerWithWaitList clEnqueueMarkerWithWaitList; - cl_api_clEnqueueBarrierWithWaitList clEnqueueBarrierWithWaitList; - cl_api_clGetExtensionFunctionAddressForPlatform - clGetExtensionFunctionAddressForPlatform; - cl_api_clCreateFromGLTexture clCreateFromGLTexture; - - /* cl_khr_d3d11_sharing */ - cl_api_clGetDeviceIDsFromD3D11KHR clGetDeviceIDsFromD3D11KHR; - cl_api_clCreateFromD3D11BufferKHR clCreateFromD3D11BufferKHR; - cl_api_clCreateFromD3D11Texture2DKHR clCreateFromD3D11Texture2DKHR; - cl_api_clCreateFromD3D11Texture3DKHR clCreateFromD3D11Texture3DKHR; - cl_api_clCreateFromDX9MediaSurfaceKHR clCreateFromDX9MediaSurfaceKHR; - cl_api_clEnqueueAcquireD3D11ObjectsKHR clEnqueueAcquireD3D11ObjectsKHR; - cl_api_clEnqueueReleaseD3D11ObjectsKHR clEnqueueReleaseD3D11ObjectsKHR; - - /* cl_khr_dx9_media_sharing */ - cl_api_clGetDeviceIDsFromDX9MediaAdapterKHR - clGetDeviceIDsFromDX9MediaAdapterKHR; - cl_api_clEnqueueAcquireDX9MediaSurfacesKHR - clEnqueueAcquireDX9MediaSurfacesKHR; - cl_api_clEnqueueReleaseDX9MediaSurfacesKHR - clEnqueueReleaseDX9MediaSurfacesKHR; - - /* cl_khr_egl_image */ - cl_api_clCreateFromEGLImageKHR clCreateFromEGLImageKHR; - cl_api_clEnqueueAcquireEGLObjectsKHR clEnqueueAcquireEGLObjectsKHR; - cl_api_clEnqueueReleaseEGLObjectsKHR clEnqueueReleaseEGLObjectsKHR; - - /* cl_khr_egl_event */ - cl_api_clCreateEventFromEGLSyncKHR clCreateEventFromEGLSyncKHR; - - /* OpenCL 2.0 */ - cl_api_clCreateCommandQueueWithProperties clCreateCommandQueueWithProperties; - cl_api_clCreatePipe clCreatePipe; - cl_api_clGetPipeInfo clGetPipeInfo; - cl_api_clSVMAlloc clSVMAlloc; - cl_api_clSVMFree clSVMFree; - cl_api_clEnqueueSVMFree clEnqueueSVMFree; - cl_api_clEnqueueSVMMemcpy clEnqueueSVMMemcpy; - cl_api_clEnqueueSVMMemFill clEnqueueSVMMemFill; - cl_api_clEnqueueSVMMap clEnqueueSVMMap; - cl_api_clEnqueueSVMUnmap clEnqueueSVMUnmap; - cl_api_clCreateSamplerWithProperties clCreateSamplerWithProperties; - cl_api_clSetKernelArgSVMPointer clSetKernelArgSVMPointer; - cl_api_clSetKernelExecInfo clSetKernelExecInfo; - - /* cl_khr_sub_groups */ - cl_api_clGetKernelSubGroupInfoKHR clGetKernelSubGroupInfoKHR; - - /* OpenCL 2.1 */ - cl_api_clCloneKernel clCloneKernel; - cl_api_clCreateProgramWithIL clCreateProgramWithIL; - cl_api_clEnqueueSVMMigrateMem clEnqueueSVMMigrateMem; - cl_api_clGetDeviceAndHostTimer clGetDeviceAndHostTimer; - cl_api_clGetHostTimer clGetHostTimer; - cl_api_clGetKernelSubGroupInfo clGetKernelSubGroupInfo; - cl_api_clSetDefaultDeviceCommandQueue clSetDefaultDeviceCommandQueue; - - /* OpenCL 2.2 */ - cl_api_clSetProgramReleaseCallback clSetProgramReleaseCallback; - cl_api_clSetProgramSpecializationConstant clSetProgramSpecializationConstant; - - /* OpenCL 3.0 */ - cl_api_clCreateBufferWithProperties clCreateBufferWithProperties; - cl_api_clCreateImageWithProperties clCreateImageWithProperties; - cl_api_clSetContextDestructorCallback clSetContextDestructorCallback; - -} cl_icd_dispatch; - -#ifdef __cplusplus -} -#endif - -#endif /* #ifndef OPENCL_CL_ICD_H */ diff --git a/include/CL/cl_layer.h b/include/CL/cl_layer.h deleted file mode 100644 index fe628bf8a..000000000 --- a/include/CL/cl_layer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * OpenCL is a trademark of Apple Inc. used under license by Khronos. - */ - -#ifndef OPENCL_CL_LAYER_H -#define OPENCL_CL_LAYER_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef cl_uint cl_layer_info; -typedef cl_uint cl_layer_api_version; -#define CL_LAYER_API_VERSION 0x4240 -#define CL_LAYER_NAME 0x4241 -#define CL_LAYER_API_VERSION_100 100 - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetLayerInfo(cl_layer_info param_name, - size_t param_value_size, - void *param_value, - size_t *param_value_size_ret); - -typedef cl_int -(CL_API_CALL *pfn_clGetLayerInfo)(cl_layer_info param_name, - size_t param_value_size, - void *param_value, - size_t *param_value_size_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL -clInitLayer(cl_uint num_entries, - const cl_icd_dispatch *target_dispatch, - cl_uint *num_entries_ret, - const cl_icd_dispatch **layer_dispatch_ret); - -typedef cl_int -(CL_API_CALL *pfn_clInitLayer)(cl_uint num_entries, - const cl_icd_dispatch *target_dispatch, - cl_uint *num_entries_ret, - const cl_icd_dispatch **layer_dispatch_ret); - -#ifdef __cplusplus -} -#endif - -#endif /* OPENCL_CL_LAYER_H */ diff --git a/include/CL/cl_platform.h b/include/CL/cl_platform.h deleted file mode 100644 index e7a0d6f47..000000000 --- a/include/CL/cl_platform.h +++ /dev/null @@ -1,1412 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __CL_PLATFORM_H -#define __CL_PLATFORM_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_WIN32) - #if !defined(CL_API_ENTRY) - #define CL_API_ENTRY - #endif - #if !defined(CL_API_CALL) - #define CL_API_CALL __stdcall - #endif - #if !defined(CL_CALLBACK) - #define CL_CALLBACK __stdcall - #endif -#else - #if !defined(CL_API_ENTRY) - #define CL_API_ENTRY - #endif - #if !defined(CL_API_CALL) - #define CL_API_CALL - #endif - #if !defined(CL_CALLBACK) - #define CL_CALLBACK - #endif -#endif - -/* - * Deprecation flags refer to the last version of the header in which the - * feature was not deprecated. - * - * E.g. VERSION_1_1_DEPRECATED means the feature is present in 1.1 without - * deprecation but is deprecated in versions later than 1.1. - */ - -#ifndef CL_API_SUFFIX_USER -#define CL_API_SUFFIX_USER -#endif - -#ifndef CL_API_PREFIX_USER -#define CL_API_PREFIX_USER -#endif - -#define CL_API_SUFFIX_COMMON CL_API_SUFFIX_USER -#define CL_API_PREFIX_COMMON CL_API_PREFIX_USER - -#define CL_API_SUFFIX__VERSION_1_0 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_1_1 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_1_2 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_2_0 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_2_1 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_2_2 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__VERSION_3_0 CL_API_SUFFIX_COMMON -#define CL_API_SUFFIX__EXPERIMENTAL CL_API_SUFFIX_COMMON - - -#ifdef __GNUC__ - #define CL_API_SUFFIX_DEPRECATED __attribute__((deprecated)) - #define CL_API_PREFIX_DEPRECATED -#elif defined(_WIN32) - #define CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX_DEPRECATED __declspec(deprecated) -#else - #define CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX_DEPRECATED -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS - #define CL_API_SUFFIX__VERSION_1_0_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_1_0_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_1_0_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_1_0_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS - #define CL_API_SUFFIX__VERSION_1_1_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_1_1_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_1_1_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_1_1_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_1_2_APIS - #define CL_API_SUFFIX__VERSION_1_2_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_1_2_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_1_2_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_1_2_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED - #endif - -#ifdef CL_USE_DEPRECATED_OPENCL_2_0_APIS - #define CL_API_SUFFIX__VERSION_2_0_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_2_0_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_2_0_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_2_0_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_2_1_APIS - #define CL_API_SUFFIX__VERSION_2_1_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_2_1_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_2_1_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_2_1_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED -#endif - -#ifdef CL_USE_DEPRECATED_OPENCL_2_2_APIS - #define CL_API_SUFFIX__VERSION_2_2_DEPRECATED CL_API_SUFFIX_COMMON - #define CL_API_PREFIX__VERSION_2_2_DEPRECATED CL_API_PREFIX_COMMON -#else - #define CL_API_SUFFIX__VERSION_2_2_DEPRECATED CL_API_SUFFIX_COMMON CL_API_SUFFIX_DEPRECATED - #define CL_API_PREFIX__VERSION_2_2_DEPRECATED CL_API_PREFIX_COMMON CL_API_PREFIX_DEPRECATED -#endif - -#if (defined (_WIN32) && defined(_MSC_VER)) - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wlanguage-extension-token" -#endif - -/* intptr_t is used in cl.h and provided by stddef.h in Visual C++, but not in clang */ -/* stdint.h was missing before Visual Studio 2010, include it for later versions and for clang */ -#if defined(__clang__) || _MSC_VER >= 1600 - #include -#endif - -/* scalar types */ -typedef signed __int8 cl_char; -typedef unsigned __int8 cl_uchar; -typedef signed __int16 cl_short; -typedef unsigned __int16 cl_ushort; -typedef signed __int32 cl_int; -typedef unsigned __int32 cl_uint; -typedef signed __int64 cl_long; -typedef unsigned __int64 cl_ulong; - -typedef unsigned __int16 cl_half; -typedef float cl_float; -typedef double cl_double; - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - -/* Macro names and corresponding values defined by OpenCL */ -#define CL_CHAR_BIT 8 -#define CL_SCHAR_MAX 127 -#define CL_SCHAR_MIN (-127-1) -#define CL_CHAR_MAX CL_SCHAR_MAX -#define CL_CHAR_MIN CL_SCHAR_MIN -#define CL_UCHAR_MAX 255 -#define CL_SHRT_MAX 32767 -#define CL_SHRT_MIN (-32767-1) -#define CL_USHRT_MAX 65535 -#define CL_INT_MAX 2147483647 -#define CL_INT_MIN (-2147483647-1) -#define CL_UINT_MAX 0xffffffffU -#define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL) -#define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL) -#define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL) - -#define CL_FLT_DIG 6 -#define CL_FLT_MANT_DIG 24 -#define CL_FLT_MAX_10_EXP +38 -#define CL_FLT_MAX_EXP +128 -#define CL_FLT_MIN_10_EXP -37 -#define CL_FLT_MIN_EXP -125 -#define CL_FLT_RADIX 2 -#define CL_FLT_MAX 340282346638528859811704183484516925440.0f -#define CL_FLT_MIN 1.175494350822287507969e-38f -#define CL_FLT_EPSILON 1.1920928955078125e-7f - -#define CL_HALF_DIG 3 -#define CL_HALF_MANT_DIG 11 -#define CL_HALF_MAX_10_EXP +4 -#define CL_HALF_MAX_EXP +16 -#define CL_HALF_MIN_10_EXP -4 -#define CL_HALF_MIN_EXP -13 -#define CL_HALF_RADIX 2 -#define CL_HALF_MAX 65504.0f -#define CL_HALF_MIN 6.103515625e-05f -#define CL_HALF_EPSILON 9.765625e-04f - -#define CL_DBL_DIG 15 -#define CL_DBL_MANT_DIG 53 -#define CL_DBL_MAX_10_EXP +308 -#define CL_DBL_MAX_EXP +1024 -#define CL_DBL_MIN_10_EXP -307 -#define CL_DBL_MIN_EXP -1021 -#define CL_DBL_RADIX 2 -#define CL_DBL_MAX 1.7976931348623158e+308 -#define CL_DBL_MIN 2.225073858507201383090e-308 -#define CL_DBL_EPSILON 2.220446049250313080847e-16 - -#define CL_M_E 2.7182818284590452354 -#define CL_M_LOG2E 1.4426950408889634074 -#define CL_M_LOG10E 0.43429448190325182765 -#define CL_M_LN2 0.69314718055994530942 -#define CL_M_LN10 2.30258509299404568402 -#define CL_M_PI 3.14159265358979323846 -#define CL_M_PI_2 1.57079632679489661923 -#define CL_M_PI_4 0.78539816339744830962 -#define CL_M_1_PI 0.31830988618379067154 -#define CL_M_2_PI 0.63661977236758134308 -#define CL_M_2_SQRTPI 1.12837916709551257390 -#define CL_M_SQRT2 1.41421356237309504880 -#define CL_M_SQRT1_2 0.70710678118654752440 - -#define CL_M_E_F 2.718281828f -#define CL_M_LOG2E_F 1.442695041f -#define CL_M_LOG10E_F 0.434294482f -#define CL_M_LN2_F 0.693147181f -#define CL_M_LN10_F 2.302585093f -#define CL_M_PI_F 3.141592654f -#define CL_M_PI_2_F 1.570796327f -#define CL_M_PI_4_F 0.785398163f -#define CL_M_1_PI_F 0.318309886f -#define CL_M_2_PI_F 0.636619772f -#define CL_M_2_SQRTPI_F 1.128379167f -#define CL_M_SQRT2_F 1.414213562f -#define CL_M_SQRT1_2_F 0.707106781f - -#define CL_NAN (CL_INFINITY - CL_INFINITY) -#define CL_HUGE_VALF ((cl_float) 1e50) -#define CL_HUGE_VAL ((cl_double) 1e500) -#define CL_MAXFLOAT CL_FLT_MAX -#define CL_INFINITY CL_HUGE_VALF - -#else - -#include - -/* scalar types */ -typedef int8_t cl_char; -typedef uint8_t cl_uchar; -typedef int16_t cl_short; -typedef uint16_t cl_ushort; -typedef int32_t cl_int; -typedef uint32_t cl_uint; -typedef int64_t cl_long; -typedef uint64_t cl_ulong; - -typedef uint16_t cl_half; -typedef float cl_float; -typedef double cl_double; - -/* Macro names and corresponding values defined by OpenCL */ -#define CL_CHAR_BIT 8 -#define CL_SCHAR_MAX 127 -#define CL_SCHAR_MIN (-127-1) -#define CL_CHAR_MAX CL_SCHAR_MAX -#define CL_CHAR_MIN CL_SCHAR_MIN -#define CL_UCHAR_MAX 255 -#define CL_SHRT_MAX 32767 -#define CL_SHRT_MIN (-32767-1) -#define CL_USHRT_MAX 65535 -#define CL_INT_MAX 2147483647 -#define CL_INT_MIN (-2147483647-1) -#define CL_UINT_MAX 0xffffffffU -#define CL_LONG_MAX ((cl_long) 0x7FFFFFFFFFFFFFFFLL) -#define CL_LONG_MIN ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL) -#define CL_ULONG_MAX ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL) - -#define CL_FLT_DIG 6 -#define CL_FLT_MANT_DIG 24 -#define CL_FLT_MAX_10_EXP +38 -#define CL_FLT_MAX_EXP +128 -#define CL_FLT_MIN_10_EXP -37 -#define CL_FLT_MIN_EXP -125 -#define CL_FLT_RADIX 2 -#define CL_FLT_MAX 340282346638528859811704183484516925440.0f -#define CL_FLT_MIN 1.175494350822287507969e-38f -#define CL_FLT_EPSILON 1.1920928955078125e-7f - -#define CL_HALF_DIG 3 -#define CL_HALF_MANT_DIG 11 -#define CL_HALF_MAX_10_EXP +4 -#define CL_HALF_MAX_EXP +16 -#define CL_HALF_MIN_10_EXP -4 -#define CL_HALF_MIN_EXP -13 -#define CL_HALF_RADIX 2 -#define CL_HALF_MAX 65504.0f -#define CL_HALF_MIN 6.103515625e-05f -#define CL_HALF_EPSILON 9.765625e-04f - -#define CL_DBL_DIG 15 -#define CL_DBL_MANT_DIG 53 -#define CL_DBL_MAX_10_EXP +308 -#define CL_DBL_MAX_EXP +1024 -#define CL_DBL_MIN_10_EXP -307 -#define CL_DBL_MIN_EXP -1021 -#define CL_DBL_RADIX 2 -#define CL_DBL_MAX 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0 -#define CL_DBL_MIN 2.225073858507201383090e-308 -#define CL_DBL_EPSILON 2.220446049250313080847e-16 - -#define CL_M_E 2.7182818284590452354 -#define CL_M_LOG2E 1.4426950408889634074 -#define CL_M_LOG10E 0.43429448190325182765 -#define CL_M_LN2 0.69314718055994530942 -#define CL_M_LN10 2.30258509299404568402 -#define CL_M_PI 3.14159265358979323846 -#define CL_M_PI_2 1.57079632679489661923 -#define CL_M_PI_4 0.78539816339744830962 -#define CL_M_1_PI 0.31830988618379067154 -#define CL_M_2_PI 0.63661977236758134308 -#define CL_M_2_SQRTPI 1.12837916709551257390 -#define CL_M_SQRT2 1.41421356237309504880 -#define CL_M_SQRT1_2 0.70710678118654752440 - -#define CL_M_E_F 2.718281828f -#define CL_M_LOG2E_F 1.442695041f -#define CL_M_LOG10E_F 0.434294482f -#define CL_M_LN2_F 0.693147181f -#define CL_M_LN10_F 2.302585093f -#define CL_M_PI_F 3.141592654f -#define CL_M_PI_2_F 1.570796327f -#define CL_M_PI_4_F 0.785398163f -#define CL_M_1_PI_F 0.318309886f -#define CL_M_2_PI_F 0.636619772f -#define CL_M_2_SQRTPI_F 1.128379167f -#define CL_M_SQRT2_F 1.414213562f -#define CL_M_SQRT1_2_F 0.707106781f - -#if defined( __GNUC__ ) - #define CL_HUGE_VALF __builtin_huge_valf() - #define CL_HUGE_VAL __builtin_huge_val() - #define CL_NAN __builtin_nanf( "" ) -#else - #define CL_HUGE_VALF ((cl_float) 1e50) - #define CL_HUGE_VAL ((cl_double) 1e500) - float nanf( const char * ); - #define CL_NAN nanf( "" ) -#endif -#define CL_MAXFLOAT CL_FLT_MAX -#define CL_INFINITY CL_HUGE_VALF - -#endif - -#include - -/* Mirror types to GL types. Mirror types allow us to avoid deciding which 87s to load based on whether we are using GL or GLES here. */ -typedef unsigned int cl_GLuint; -typedef int cl_GLint; -typedef unsigned int cl_GLenum; - -/* - * Vector types - * - * Note: OpenCL requires that all types be naturally aligned. - * This means that vector types must be naturally aligned. - * For example, a vector of four floats must be aligned to - * a 16 byte boundary (calculated as 4 * the natural 4-byte - * alignment of the float). The alignment qualifiers here - * will only function properly if your compiler supports them - * and if you don't actively work to defeat them. For example, - * in order for a cl_float4 to be 16 byte aligned in a struct, - * the start of the struct must itself be 16-byte aligned. - * - * Maintaining proper alignment is the user's responsibility. - */ - -/* Define basic vector types */ -#if defined( __VEC__ ) - #if !defined(__clang__) - #include /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */ - #endif - typedef __vector unsigned char __cl_uchar16; - typedef __vector signed char __cl_char16; - typedef __vector unsigned short __cl_ushort8; - typedef __vector signed short __cl_short8; - typedef __vector unsigned int __cl_uint4; - typedef __vector signed int __cl_int4; - typedef __vector float __cl_float4; - #define __CL_UCHAR16__ 1 - #define __CL_CHAR16__ 1 - #define __CL_USHORT8__ 1 - #define __CL_SHORT8__ 1 - #define __CL_UINT4__ 1 - #define __CL_INT4__ 1 - #define __CL_FLOAT4__ 1 -#endif - -#if defined( __SSE__ ) - #if defined( __MINGW64__ ) - #include - #else - #include - #endif - #if defined( __GNUC__ ) - typedef float __cl_float4 __attribute__((vector_size(16))); - #else - typedef __m128 __cl_float4; - #endif - #define __CL_FLOAT4__ 1 -#endif - -#if defined( __SSE2__ ) - #if defined( __MINGW64__ ) - #include - #else - #include - #endif - #if defined( __GNUC__ ) - typedef cl_uchar __cl_uchar16 __attribute__((vector_size(16))); - typedef cl_char __cl_char16 __attribute__((vector_size(16))); - typedef cl_ushort __cl_ushort8 __attribute__((vector_size(16))); - typedef cl_short __cl_short8 __attribute__((vector_size(16))); - typedef cl_uint __cl_uint4 __attribute__((vector_size(16))); - typedef cl_int __cl_int4 __attribute__((vector_size(16))); - typedef cl_ulong __cl_ulong2 __attribute__((vector_size(16))); - typedef cl_long __cl_long2 __attribute__((vector_size(16))); - typedef cl_double __cl_double2 __attribute__((vector_size(16))); - #else - typedef __m128i __cl_uchar16; - typedef __m128i __cl_char16; - typedef __m128i __cl_ushort8; - typedef __m128i __cl_short8; - typedef __m128i __cl_uint4; - typedef __m128i __cl_int4; - typedef __m128i __cl_ulong2; - typedef __m128i __cl_long2; - typedef __m128d __cl_double2; - #endif - #define __CL_UCHAR16__ 1 - #define __CL_CHAR16__ 1 - #define __CL_USHORT8__ 1 - #define __CL_SHORT8__ 1 - #define __CL_INT4__ 1 - #define __CL_UINT4__ 1 - #define __CL_ULONG2__ 1 - #define __CL_LONG2__ 1 - #define __CL_DOUBLE2__ 1 -#endif - -#if defined( __MMX__ ) - #include - #if defined( __GNUC__ ) - typedef cl_uchar __cl_uchar8 __attribute__((vector_size(8))); - typedef cl_char __cl_char8 __attribute__((vector_size(8))); - typedef cl_ushort __cl_ushort4 __attribute__((vector_size(8))); - typedef cl_short __cl_short4 __attribute__((vector_size(8))); - typedef cl_uint __cl_uint2 __attribute__((vector_size(8))); - typedef cl_int __cl_int2 __attribute__((vector_size(8))); - typedef cl_ulong __cl_ulong1 __attribute__((vector_size(8))); - typedef cl_long __cl_long1 __attribute__((vector_size(8))); - typedef cl_float __cl_float2 __attribute__((vector_size(8))); - #else - typedef __m64 __cl_uchar8; - typedef __m64 __cl_char8; - typedef __m64 __cl_ushort4; - typedef __m64 __cl_short4; - typedef __m64 __cl_uint2; - typedef __m64 __cl_int2; - typedef __m64 __cl_ulong1; - typedef __m64 __cl_long1; - typedef __m64 __cl_float2; - #endif - #define __CL_UCHAR8__ 1 - #define __CL_CHAR8__ 1 - #define __CL_USHORT4__ 1 - #define __CL_SHORT4__ 1 - #define __CL_INT2__ 1 - #define __CL_UINT2__ 1 - #define __CL_ULONG1__ 1 - #define __CL_LONG1__ 1 - #define __CL_FLOAT2__ 1 -#endif - -#if defined( __AVX__ ) - #if defined( __MINGW64__ ) - #include - #else - #include - #endif - #if defined( __GNUC__ ) - typedef cl_float __cl_float8 __attribute__((vector_size(32))); - typedef cl_double __cl_double4 __attribute__((vector_size(32))); - #else - typedef __m256 __cl_float8; - typedef __m256d __cl_double4; - #endif - #define __CL_FLOAT8__ 1 - #define __CL_DOUBLE4__ 1 -#endif - -/* Define capabilities for anonymous struct members. */ -#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L -#define __CL_HAS_ANON_STRUCT__ 1 -#define __CL_ANON_STRUCT__ -#elif defined(_WIN32) && defined(_MSC_VER) && !defined(__STDC__) -#define __CL_HAS_ANON_STRUCT__ 1 -#define __CL_ANON_STRUCT__ -#elif defined(__GNUC__) && ! defined(__STRICT_ANSI__) -#define __CL_HAS_ANON_STRUCT__ 1 -#define __CL_ANON_STRUCT__ __extension__ -#elif defined(__clang__) -#define __CL_HAS_ANON_STRUCT__ 1 -#define __CL_ANON_STRUCT__ __extension__ -#else -#define __CL_HAS_ANON_STRUCT__ 0 -#define __CL_ANON_STRUCT__ -#endif - -#if defined(_WIN32) && defined(_MSC_VER) && __CL_HAS_ANON_STRUCT__ - /* Disable warning C4201: nonstandard extension used : nameless struct/union */ - #pragma warning( push ) - #pragma warning( disable : 4201 ) -#endif - -/* Define alignment keys */ -#if defined( __GNUC__ ) || defined(__INTEGRITY) - #define CL_ALIGNED(_x) __attribute__ ((aligned(_x))) -#elif defined( _WIN32) && (_MSC_VER) - /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements */ - /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx */ - /* #include */ - /* #define CL_ALIGNED(_x) _CRT_ALIGN(_x) */ - #define CL_ALIGNED(_x) -#else - #warning Need to implement some method to align data here - #define CL_ALIGNED(_x) -#endif - -/* Indicate whether .xyzw, .s0123 and .hi.lo are supported */ -#if __CL_HAS_ANON_STRUCT__ - /* .xyzw and .s0123...{f|F} are supported */ - #define CL_HAS_NAMED_VECTOR_FIELDS 1 - /* .hi and .lo are supported */ - #define CL_HAS_HI_LO_VECTOR_FIELDS 1 -#endif - -/* Define cl_vector types */ - -/* ---- cl_charn ---- */ -typedef union -{ - cl_char CL_ALIGNED(2) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_char x, y; }; - __CL_ANON_STRUCT__ struct{ cl_char s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_char lo, hi; }; -#endif -#if defined( __CL_CHAR2__) - __cl_char2 v2; -#endif -}cl_char2; - -typedef union -{ - cl_char CL_ALIGNED(4) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_char x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_char s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_char2 lo, hi; }; -#endif -#if defined( __CL_CHAR2__) - __cl_char2 v2[2]; -#endif -#if defined( __CL_CHAR4__) - __cl_char4 v4; -#endif -}cl_char4; - -/* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */ -typedef cl_char4 cl_char3; - -typedef union -{ - cl_char CL_ALIGNED(8) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_char x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_char s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_char4 lo, hi; }; -#endif -#if defined( __CL_CHAR2__) - __cl_char2 v2[4]; -#endif -#if defined( __CL_CHAR4__) - __cl_char4 v4[2]; -#endif -#if defined( __CL_CHAR8__ ) - __cl_char8 v8; -#endif -}cl_char8; - -typedef union -{ - cl_char CL_ALIGNED(16) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_char x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_char s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_char8 lo, hi; }; -#endif -#if defined( __CL_CHAR2__) - __cl_char2 v2[8]; -#endif -#if defined( __CL_CHAR4__) - __cl_char4 v4[4]; -#endif -#if defined( __CL_CHAR8__ ) - __cl_char8 v8[2]; -#endif -#if defined( __CL_CHAR16__ ) - __cl_char16 v16; -#endif -}cl_char16; - - -/* ---- cl_ucharn ---- */ -typedef union -{ - cl_uchar CL_ALIGNED(2) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uchar x, y; }; - __CL_ANON_STRUCT__ struct{ cl_uchar s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_uchar lo, hi; }; -#endif -#if defined( __cl_uchar2__) - __cl_uchar2 v2; -#endif -}cl_uchar2; - -typedef union -{ - cl_uchar CL_ALIGNED(4) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uchar x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_uchar s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_uchar2 lo, hi; }; -#endif -#if defined( __CL_UCHAR2__) - __cl_uchar2 v2[2]; -#endif -#if defined( __CL_UCHAR4__) - __cl_uchar4 v4; -#endif -}cl_uchar4; - -/* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */ -typedef cl_uchar4 cl_uchar3; - -typedef union -{ - cl_uchar CL_ALIGNED(8) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uchar x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_uchar s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_uchar4 lo, hi; }; -#endif -#if defined( __CL_UCHAR2__) - __cl_uchar2 v2[4]; -#endif -#if defined( __CL_UCHAR4__) - __cl_uchar4 v4[2]; -#endif -#if defined( __CL_UCHAR8__ ) - __cl_uchar8 v8; -#endif -}cl_uchar8; - -typedef union -{ - cl_uchar CL_ALIGNED(16) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uchar x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_uchar s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_uchar8 lo, hi; }; -#endif -#if defined( __CL_UCHAR2__) - __cl_uchar2 v2[8]; -#endif -#if defined( __CL_UCHAR4__) - __cl_uchar4 v4[4]; -#endif -#if defined( __CL_UCHAR8__ ) - __cl_uchar8 v8[2]; -#endif -#if defined( __CL_UCHAR16__ ) - __cl_uchar16 v16; -#endif -}cl_uchar16; - - -/* ---- cl_shortn ---- */ -typedef union -{ - cl_short CL_ALIGNED(4) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_short x, y; }; - __CL_ANON_STRUCT__ struct{ cl_short s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_short lo, hi; }; -#endif -#if defined( __CL_SHORT2__) - __cl_short2 v2; -#endif -}cl_short2; - -typedef union -{ - cl_short CL_ALIGNED(8) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_short x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_short s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_short2 lo, hi; }; -#endif -#if defined( __CL_SHORT2__) - __cl_short2 v2[2]; -#endif -#if defined( __CL_SHORT4__) - __cl_short4 v4; -#endif -}cl_short4; - -/* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */ -typedef cl_short4 cl_short3; - -typedef union -{ - cl_short CL_ALIGNED(16) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_short x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_short s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_short4 lo, hi; }; -#endif -#if defined( __CL_SHORT2__) - __cl_short2 v2[4]; -#endif -#if defined( __CL_SHORT4__) - __cl_short4 v4[2]; -#endif -#if defined( __CL_SHORT8__ ) - __cl_short8 v8; -#endif -}cl_short8; - -typedef union -{ - cl_short CL_ALIGNED(32) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_short x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_short s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_short8 lo, hi; }; -#endif -#if defined( __CL_SHORT2__) - __cl_short2 v2[8]; -#endif -#if defined( __CL_SHORT4__) - __cl_short4 v4[4]; -#endif -#if defined( __CL_SHORT8__ ) - __cl_short8 v8[2]; -#endif -#if defined( __CL_SHORT16__ ) - __cl_short16 v16; -#endif -}cl_short16; - - -/* ---- cl_ushortn ---- */ -typedef union -{ - cl_ushort CL_ALIGNED(4) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ushort x, y; }; - __CL_ANON_STRUCT__ struct{ cl_ushort s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_ushort lo, hi; }; -#endif -#if defined( __CL_USHORT2__) - __cl_ushort2 v2; -#endif -}cl_ushort2; - -typedef union -{ - cl_ushort CL_ALIGNED(8) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ushort x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_ushort s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_ushort2 lo, hi; }; -#endif -#if defined( __CL_USHORT2__) - __cl_ushort2 v2[2]; -#endif -#if defined( __CL_USHORT4__) - __cl_ushort4 v4; -#endif -}cl_ushort4; - -/* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */ -typedef cl_ushort4 cl_ushort3; - -typedef union -{ - cl_ushort CL_ALIGNED(16) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ushort x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_ushort s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_ushort4 lo, hi; }; -#endif -#if defined( __CL_USHORT2__) - __cl_ushort2 v2[4]; -#endif -#if defined( __CL_USHORT4__) - __cl_ushort4 v4[2]; -#endif -#if defined( __CL_USHORT8__ ) - __cl_ushort8 v8; -#endif -}cl_ushort8; - -typedef union -{ - cl_ushort CL_ALIGNED(32) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ushort x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_ushort s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_ushort8 lo, hi; }; -#endif -#if defined( __CL_USHORT2__) - __cl_ushort2 v2[8]; -#endif -#if defined( __CL_USHORT4__) - __cl_ushort4 v4[4]; -#endif -#if defined( __CL_USHORT8__ ) - __cl_ushort8 v8[2]; -#endif -#if defined( __CL_USHORT16__ ) - __cl_ushort16 v16; -#endif -}cl_ushort16; - - -/* ---- cl_halfn ---- */ -typedef union -{ - cl_half CL_ALIGNED(4) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_half x, y; }; - __CL_ANON_STRUCT__ struct{ cl_half s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_half lo, hi; }; -#endif -#if defined( __CL_HALF2__) - __cl_half2 v2; -#endif -}cl_half2; - -typedef union -{ - cl_half CL_ALIGNED(8) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_half x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_half s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_half2 lo, hi; }; -#endif -#if defined( __CL_HALF2__) - __cl_half2 v2[2]; -#endif -#if defined( __CL_HALF4__) - __cl_half4 v4; -#endif -}cl_half4; - -/* cl_half3 is identical in size, alignment and behavior to cl_half4. See section 6.1.5. */ -typedef cl_half4 cl_half3; - -typedef union -{ - cl_half CL_ALIGNED(16) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_half x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_half s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_half4 lo, hi; }; -#endif -#if defined( __CL_HALF2__) - __cl_half2 v2[4]; -#endif -#if defined( __CL_HALF4__) - __cl_half4 v4[2]; -#endif -#if defined( __CL_HALF8__ ) - __cl_half8 v8; -#endif -}cl_half8; - -typedef union -{ - cl_half CL_ALIGNED(32) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_half x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_half s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_half8 lo, hi; }; -#endif -#if defined( __CL_HALF2__) - __cl_half2 v2[8]; -#endif -#if defined( __CL_HALF4__) - __cl_half4 v4[4]; -#endif -#if defined( __CL_HALF8__ ) - __cl_half8 v8[2]; -#endif -#if defined( __CL_HALF16__ ) - __cl_half16 v16; -#endif -}cl_half16; - -/* ---- cl_intn ---- */ -typedef union -{ - cl_int CL_ALIGNED(8) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_int x, y; }; - __CL_ANON_STRUCT__ struct{ cl_int s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_int lo, hi; }; -#endif -#if defined( __CL_INT2__) - __cl_int2 v2; -#endif -}cl_int2; - -typedef union -{ - cl_int CL_ALIGNED(16) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_int x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_int s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_int2 lo, hi; }; -#endif -#if defined( __CL_INT2__) - __cl_int2 v2[2]; -#endif -#if defined( __CL_INT4__) - __cl_int4 v4; -#endif -}cl_int4; - -/* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */ -typedef cl_int4 cl_int3; - -typedef union -{ - cl_int CL_ALIGNED(32) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_int x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_int s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_int4 lo, hi; }; -#endif -#if defined( __CL_INT2__) - __cl_int2 v2[4]; -#endif -#if defined( __CL_INT4__) - __cl_int4 v4[2]; -#endif -#if defined( __CL_INT8__ ) - __cl_int8 v8; -#endif -}cl_int8; - -typedef union -{ - cl_int CL_ALIGNED(64) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_int x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_int8 lo, hi; }; -#endif -#if defined( __CL_INT2__) - __cl_int2 v2[8]; -#endif -#if defined( __CL_INT4__) - __cl_int4 v4[4]; -#endif -#if defined( __CL_INT8__ ) - __cl_int8 v8[2]; -#endif -#if defined( __CL_INT16__ ) - __cl_int16 v16; -#endif -}cl_int16; - - -/* ---- cl_uintn ---- */ -typedef union -{ - cl_uint CL_ALIGNED(8) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uint x, y; }; - __CL_ANON_STRUCT__ struct{ cl_uint s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_uint lo, hi; }; -#endif -#if defined( __CL_UINT2__) - __cl_uint2 v2; -#endif -}cl_uint2; - -typedef union -{ - cl_uint CL_ALIGNED(16) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uint x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_uint s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_uint2 lo, hi; }; -#endif -#if defined( __CL_UINT2__) - __cl_uint2 v2[2]; -#endif -#if defined( __CL_UINT4__) - __cl_uint4 v4; -#endif -}cl_uint4; - -/* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */ -typedef cl_uint4 cl_uint3; - -typedef union -{ - cl_uint CL_ALIGNED(32) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uint x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_uint s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_uint4 lo, hi; }; -#endif -#if defined( __CL_UINT2__) - __cl_uint2 v2[4]; -#endif -#if defined( __CL_UINT4__) - __cl_uint4 v4[2]; -#endif -#if defined( __CL_UINT8__ ) - __cl_uint8 v8; -#endif -}cl_uint8; - -typedef union -{ - cl_uint CL_ALIGNED(64) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_uint x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_uint s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_uint8 lo, hi; }; -#endif -#if defined( __CL_UINT2__) - __cl_uint2 v2[8]; -#endif -#if defined( __CL_UINT4__) - __cl_uint4 v4[4]; -#endif -#if defined( __CL_UINT8__ ) - __cl_uint8 v8[2]; -#endif -#if defined( __CL_UINT16__ ) - __cl_uint16 v16; -#endif -}cl_uint16; - -/* ---- cl_longn ---- */ -typedef union -{ - cl_long CL_ALIGNED(16) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_long x, y; }; - __CL_ANON_STRUCT__ struct{ cl_long s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_long lo, hi; }; -#endif -#if defined( __CL_LONG2__) - __cl_long2 v2; -#endif -}cl_long2; - -typedef union -{ - cl_long CL_ALIGNED(32) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_long x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_long s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_long2 lo, hi; }; -#endif -#if defined( __CL_LONG2__) - __cl_long2 v2[2]; -#endif -#if defined( __CL_LONG4__) - __cl_long4 v4; -#endif -}cl_long4; - -/* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */ -typedef cl_long4 cl_long3; - -typedef union -{ - cl_long CL_ALIGNED(64) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_long x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_long s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_long4 lo, hi; }; -#endif -#if defined( __CL_LONG2__) - __cl_long2 v2[4]; -#endif -#if defined( __CL_LONG4__) - __cl_long4 v4[2]; -#endif -#if defined( __CL_LONG8__ ) - __cl_long8 v8; -#endif -}cl_long8; - -typedef union -{ - cl_long CL_ALIGNED(128) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_long x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_long s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_long8 lo, hi; }; -#endif -#if defined( __CL_LONG2__) - __cl_long2 v2[8]; -#endif -#if defined( __CL_LONG4__) - __cl_long4 v4[4]; -#endif -#if defined( __CL_LONG8__ ) - __cl_long8 v8[2]; -#endif -#if defined( __CL_LONG16__ ) - __cl_long16 v16; -#endif -}cl_long16; - - -/* ---- cl_ulongn ---- */ -typedef union -{ - cl_ulong CL_ALIGNED(16) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ulong x, y; }; - __CL_ANON_STRUCT__ struct{ cl_ulong s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_ulong lo, hi; }; -#endif -#if defined( __CL_ULONG2__) - __cl_ulong2 v2; -#endif -}cl_ulong2; - -typedef union -{ - cl_ulong CL_ALIGNED(32) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ulong x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_ulong s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_ulong2 lo, hi; }; -#endif -#if defined( __CL_ULONG2__) - __cl_ulong2 v2[2]; -#endif -#if defined( __CL_ULONG4__) - __cl_ulong4 v4; -#endif -}cl_ulong4; - -/* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */ -typedef cl_ulong4 cl_ulong3; - -typedef union -{ - cl_ulong CL_ALIGNED(64) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ulong x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_ulong s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_ulong4 lo, hi; }; -#endif -#if defined( __CL_ULONG2__) - __cl_ulong2 v2[4]; -#endif -#if defined( __CL_ULONG4__) - __cl_ulong4 v4[2]; -#endif -#if defined( __CL_ULONG8__ ) - __cl_ulong8 v8; -#endif -}cl_ulong8; - -typedef union -{ - cl_ulong CL_ALIGNED(128) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_ulong x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_ulong s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_ulong8 lo, hi; }; -#endif -#if defined( __CL_ULONG2__) - __cl_ulong2 v2[8]; -#endif -#if defined( __CL_ULONG4__) - __cl_ulong4 v4[4]; -#endif -#if defined( __CL_ULONG8__ ) - __cl_ulong8 v8[2]; -#endif -#if defined( __CL_ULONG16__ ) - __cl_ulong16 v16; -#endif -}cl_ulong16; - - -/* --- cl_floatn ---- */ - -typedef union -{ - cl_float CL_ALIGNED(8) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_float x, y; }; - __CL_ANON_STRUCT__ struct{ cl_float s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_float lo, hi; }; -#endif -#if defined( __CL_FLOAT2__) - __cl_float2 v2; -#endif -}cl_float2; - -typedef union -{ - cl_float CL_ALIGNED(16) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_float x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_float s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_float2 lo, hi; }; -#endif -#if defined( __CL_FLOAT2__) - __cl_float2 v2[2]; -#endif -#if defined( __CL_FLOAT4__) - __cl_float4 v4; -#endif -}cl_float4; - -/* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */ -typedef cl_float4 cl_float3; - -typedef union -{ - cl_float CL_ALIGNED(32) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_float x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_float s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_float4 lo, hi; }; -#endif -#if defined( __CL_FLOAT2__) - __cl_float2 v2[4]; -#endif -#if defined( __CL_FLOAT4__) - __cl_float4 v4[2]; -#endif -#if defined( __CL_FLOAT8__ ) - __cl_float8 v8; -#endif -}cl_float8; - -typedef union -{ - cl_float CL_ALIGNED(64) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_float x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_float s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_float8 lo, hi; }; -#endif -#if defined( __CL_FLOAT2__) - __cl_float2 v2[8]; -#endif -#if defined( __CL_FLOAT4__) - __cl_float4 v4[4]; -#endif -#if defined( __CL_FLOAT8__ ) - __cl_float8 v8[2]; -#endif -#if defined( __CL_FLOAT16__ ) - __cl_float16 v16; -#endif -}cl_float16; - -/* --- cl_doublen ---- */ - -typedef union -{ - cl_double CL_ALIGNED(16) s[2]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_double x, y; }; - __CL_ANON_STRUCT__ struct{ cl_double s0, s1; }; - __CL_ANON_STRUCT__ struct{ cl_double lo, hi; }; -#endif -#if defined( __CL_DOUBLE2__) - __cl_double2 v2; -#endif -}cl_double2; - -typedef union -{ - cl_double CL_ALIGNED(32) s[4]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_double x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_double s0, s1, s2, s3; }; - __CL_ANON_STRUCT__ struct{ cl_double2 lo, hi; }; -#endif -#if defined( __CL_DOUBLE2__) - __cl_double2 v2[2]; -#endif -#if defined( __CL_DOUBLE4__) - __cl_double4 v4; -#endif -}cl_double4; - -/* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */ -typedef cl_double4 cl_double3; - -typedef union -{ - cl_double CL_ALIGNED(64) s[8]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_double x, y, z, w; }; - __CL_ANON_STRUCT__ struct{ cl_double s0, s1, s2, s3, s4, s5, s6, s7; }; - __CL_ANON_STRUCT__ struct{ cl_double4 lo, hi; }; -#endif -#if defined( __CL_DOUBLE2__) - __cl_double2 v2[4]; -#endif -#if defined( __CL_DOUBLE4__) - __cl_double4 v4[2]; -#endif -#if defined( __CL_DOUBLE8__ ) - __cl_double8 v8; -#endif -}cl_double8; - -typedef union -{ - cl_double CL_ALIGNED(128) s[16]; -#if __CL_HAS_ANON_STRUCT__ - __CL_ANON_STRUCT__ struct{ cl_double x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; }; - __CL_ANON_STRUCT__ struct{ cl_double s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; }; - __CL_ANON_STRUCT__ struct{ cl_double8 lo, hi; }; -#endif -#if defined( __CL_DOUBLE2__) - __cl_double2 v2[8]; -#endif -#if defined( __CL_DOUBLE4__) - __cl_double4 v4[4]; -#endif -#if defined( __CL_DOUBLE8__ ) - __cl_double8 v8[2]; -#endif -#if defined( __CL_DOUBLE16__ ) - __cl_double16 v16; -#endif -}cl_double16; - -/* Macro to facilitate debugging - * Usage: - * Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source. - * The first line ends with: CL_PROGRAM_STRING_DEBUG_INFO \" - * Each line thereafter of OpenCL C source must end with: \n\ - * The last line ends in "; - * - * Example: - * - * const char *my_program = CL_PROGRAM_STRING_DEBUG_INFO "\ - * kernel void foo( int a, float * b ) \n\ - * { \n\ - * // my comment \n\ - * *b[ get_global_id(0)] = a; \n\ - * } \n\ - * "; - * - * This should correctly set up the line, (column) and file information for your source - * string so you can do source level debugging. - */ -#define __CL_STRINGIFY( _x ) # _x -#define _CL_STRINGIFY( _x ) __CL_STRINGIFY( _x ) -#define CL_PROGRAM_STRING_DEBUG_INFO "#line " _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n" - -#ifdef __cplusplus -} -#endif - -#if defined(_WIN32) && defined(_MSC_VER) && __CL_HAS_ANON_STRUCT__ - #pragma warning( pop ) -#endif - -#endif /* __CL_PLATFORM_H */ diff --git a/include/CL/cl_va_api_media_sharing_intel.h b/include/CL/cl_va_api_media_sharing_intel.h deleted file mode 100644 index 547e90e88..000000000 --- a/include/CL/cl_va_api_media_sharing_intel.h +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H -#define __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/*************************************************************** -* cl_intel_sharing_format_query_va_api -***************************************************************/ -#define cl_intel_sharing_format_query_va_api 1 - -/* when cl_intel_va_api_media_sharing is supported */ - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetSupportedVA_APIMediaSurfaceFormatsINTEL( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - VAImageFormat* va_api_formats, - cl_uint* num_surface_formats) ; - -typedef cl_int (CL_API_CALL * -clGetSupportedVA_APIMediaSurfaceFormatsINTEL_fn)( - cl_context context, - cl_mem_flags flags, - cl_mem_object_type image_type, - cl_uint plane, - cl_uint num_entries, - VAImageFormat* va_api_formats, - cl_uint* num_surface_formats) ; - -/****************************************** -* cl_intel_va_api_media_sharing extension * -*******************************************/ - -#define cl_intel_va_api_media_sharing 1 - -/* error codes */ -#define CL_INVALID_VA_API_MEDIA_ADAPTER_INTEL -1098 -#define CL_INVALID_VA_API_MEDIA_SURFACE_INTEL -1099 -#define CL_VA_API_MEDIA_SURFACE_ALREADY_ACQUIRED_INTEL -1100 -#define CL_VA_API_MEDIA_SURFACE_NOT_ACQUIRED_INTEL -1101 - -/* cl_va_api_device_source_intel */ -#define CL_VA_API_DISPLAY_INTEL 0x4094 - -/* cl_va_api_device_set_intel */ -#define CL_PREFERRED_DEVICES_FOR_VA_API_INTEL 0x4095 -#define CL_ALL_DEVICES_FOR_VA_API_INTEL 0x4096 - -/* cl_context_info */ -#define CL_CONTEXT_VA_API_DISPLAY_INTEL 0x4097 - -/* cl_mem_info */ -#define CL_MEM_VA_API_MEDIA_SURFACE_INTEL 0x4098 - -/* cl_image_info */ -#define CL_IMAGE_VA_API_PLANE_INTEL 0x4099 - -/* cl_command_type */ -#define CL_COMMAND_ACQUIRE_VA_API_MEDIA_SURFACES_INTEL 0x409A -#define CL_COMMAND_RELEASE_VA_API_MEDIA_SURFACES_INTEL 0x409B - -typedef cl_uint cl_va_api_device_source_intel; -typedef cl_uint cl_va_api_device_set_intel; - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceIDsFromVA_APIMediaAdapterINTEL( - cl_platform_id platform, - cl_va_api_device_source_intel media_adapter_type, - void* media_adapter, - cl_va_api_device_set_intel media_adapter_set, - cl_uint num_entries, - cl_device_id* devices, - cl_uint* num_devices) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL * clGetDeviceIDsFromVA_APIMediaAdapterINTEL_fn)( - cl_platform_id platform, - cl_va_api_device_source_intel media_adapter_type, - void* media_adapter, - cl_va_api_device_set_intel media_adapter_set, - cl_uint num_entries, - cl_device_id* devices, - cl_uint* num_devices) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_mem CL_API_CALL -clCreateFromVA_APIMediaSurfaceINTEL( - cl_context context, - cl_mem_flags flags, - VASurfaceID* surface, - cl_uint plane, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_mem (CL_API_CALL * clCreateFromVA_APIMediaSurfaceINTEL_fn)( - cl_context context, - cl_mem_flags flags, - VASurfaceID* surface, - cl_uint plane, - cl_int* errcode_ret) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueAcquireVA_APIMediaSurfacesINTEL( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueAcquireVA_APIMediaSurfacesINTEL_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueReleaseVA_APIMediaSurfacesINTEL( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -typedef cl_int (CL_API_CALL *clEnqueueReleaseVA_APIMediaSurfacesINTEL_fn)( - cl_command_queue command_queue, - cl_uint num_objects, - const cl_mem* mem_objects, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) CL_API_SUFFIX__VERSION_1_2; - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H */ - diff --git a/include/CL/cl_version.h b/include/CL/cl_version.h deleted file mode 100644 index 3844938d5..000000000 --- a/include/CL/cl_version.h +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2018-2020 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __CL_VERSION_H -#define __CL_VERSION_H - -/* Detect which version to target */ -#if !defined(CL_TARGET_OPENCL_VERSION) -#pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") -#define CL_TARGET_OPENCL_VERSION 300 -#endif -#if CL_TARGET_OPENCL_VERSION != 100 && \ - CL_TARGET_OPENCL_VERSION != 110 && \ - CL_TARGET_OPENCL_VERSION != 120 && \ - CL_TARGET_OPENCL_VERSION != 200 && \ - CL_TARGET_OPENCL_VERSION != 210 && \ - CL_TARGET_OPENCL_VERSION != 220 && \ - CL_TARGET_OPENCL_VERSION != 300 -#pragma message("cl_version: CL_TARGET_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220, 300). Defaulting to 300 (OpenCL 3.0)") -#undef CL_TARGET_OPENCL_VERSION -#define CL_TARGET_OPENCL_VERSION 300 -#endif - - -/* OpenCL Version */ -#if CL_TARGET_OPENCL_VERSION >= 300 && !defined(CL_VERSION_3_0) -#define CL_VERSION_3_0 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 220 && !defined(CL_VERSION_2_2) -#define CL_VERSION_2_2 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 210 && !defined(CL_VERSION_2_1) -#define CL_VERSION_2_1 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 200 && !defined(CL_VERSION_2_0) -#define CL_VERSION_2_0 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 120 && !defined(CL_VERSION_1_2) -#define CL_VERSION_1_2 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 110 && !defined(CL_VERSION_1_1) -#define CL_VERSION_1_1 1 -#endif -#if CL_TARGET_OPENCL_VERSION >= 100 && !defined(CL_VERSION_1_0) -#define CL_VERSION_1_0 1 -#endif - -/* Allow deprecated APIs for older OpenCL versions. */ -#if CL_TARGET_OPENCL_VERSION <= 220 && !defined(CL_USE_DEPRECATED_OPENCL_2_2_APIS) -#define CL_USE_DEPRECATED_OPENCL_2_2_APIS -#endif -#if CL_TARGET_OPENCL_VERSION <= 210 && !defined(CL_USE_DEPRECATED_OPENCL_2_1_APIS) -#define CL_USE_DEPRECATED_OPENCL_2_1_APIS -#endif -#if CL_TARGET_OPENCL_VERSION <= 200 && !defined(CL_USE_DEPRECATED_OPENCL_2_0_APIS) -#define CL_USE_DEPRECATED_OPENCL_2_0_APIS -#endif -#if CL_TARGET_OPENCL_VERSION <= 120 && !defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) -#define CL_USE_DEPRECATED_OPENCL_1_2_APIS -#endif -#if CL_TARGET_OPENCL_VERSION <= 110 && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -#define CL_USE_DEPRECATED_OPENCL_1_1_APIS -#endif -#if CL_TARGET_OPENCL_VERSION <= 100 && !defined(CL_USE_DEPRECATED_OPENCL_1_0_APIS) -#define CL_USE_DEPRECATED_OPENCL_1_0_APIS -#endif - -#endif /* __CL_VERSION_H */ diff --git a/include/CL/license.txt b/include/CL/license.txt deleted file mode 100644 index f49a4e16e..000000000 --- a/include/CL/license.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/include/CL/opencl.h b/include/CL/opencl.h deleted file mode 100644 index ef8dd1e03..000000000 --- a/include/CL/opencl.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008-2021 The Khronos Group Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -#ifndef __OPENCL_H -#define __OPENCL_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -#ifdef __cplusplus -} -#endif - -#endif /* __OPENCL_H */ diff --git a/include/CL/opencl.hpp b/include/CL/opencl.hpp deleted file mode 100644 index 1e61d7890..000000000 --- a/include/CL/opencl.hpp +++ /dev/null @@ -1,10372 +0,0 @@ -// -// Copyright (c) 2008-2020 The Khronos Group Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -/*! \file - * - * \brief C++ bindings for OpenCL 1.0, OpenCL 1.1, OpenCL 1.2, - * OpenCL 2.0, OpenCL 2.1, OpenCL 2.2, and OpenCL 3.0. - * \author Lee Howes and Bruce Merry - * - * Derived from the OpenCL 1.x C++ bindings written by - * Benedict R. Gaster, Laurent Morichetti and Lee Howes - * With additions and fixes from: - * Brian Cole, March 3rd 2010 and April 2012 - * Matt Gruenke, April 2012. - * Bruce Merry, February 2013. - * Tom Deakin and Simon McIntosh-Smith, July 2013 - * James Price, 2015- - * \version 2.2.0 - * \date 2019-09-18 - * - * Optional extension support - * - * cl_ext_device_fission - * #define CL_HPP_USE_CL_DEVICE_FISSION - * cl_khr_d3d10_sharing - * #define CL_HPP_USE_DX_INTEROP - * cl_khr_sub_groups - * #define CL_HPP_USE_CL_SUB_GROUPS_KHR - * cl_khr_image2d_from_buffer - * #define CL_HPP_USE_CL_IMAGE2D_FROM_BUFFER_KHR - * - * Doxygen documentation for this header is available here: - * - * http://khronosgroup.github.io/OpenCL-CLHPP/ - * - * The latest version of this header can be found on the GitHub releases page: - * - * https://github.com/KhronosGroup/OpenCL-CLHPP/releases - * - * Bugs and patches can be submitted to the GitHub repository: - * - * https://github.com/KhronosGroup/OpenCL-CLHPP - */ - -/*! \mainpage - * \section intro Introduction - * For many large applications C++ is the language of choice and so it seems - * reasonable to define C++ bindings for OpenCL. - * - * The interface is contained with a single C++ header file \em opencl.hpp and all - * definitions are contained within the namespace \em cl. There is no additional - * requirement to include \em cl.h and to use either the C++ or original C - * bindings; it is enough to simply include \em opencl.hpp. - * - * The bindings themselves are lightweight and correspond closely to the - * underlying C API. Using the C++ bindings introduces no additional execution - * overhead. - * - * There are numerous compatibility, portability and memory management - * fixes in the new header as well as additional OpenCL 2.0 features. - * As a result the header is not directly backward compatible and for this - * reason we release it as opencl.hpp rather than a new version of cl.hpp. - * - * - * \section compatibility Compatibility - * Due to the evolution of the underlying OpenCL API the 2.0 C++ bindings - * include an updated approach to defining supported feature versions - * and the range of valid underlying OpenCL runtime versions supported. - * - * The combination of preprocessor macros CL_HPP_TARGET_OPENCL_VERSION and - * CL_HPP_MINIMUM_OPENCL_VERSION control this range. These are three digit - * decimal values representing OpenCL runime versions. The default for - * the target is 200, representing OpenCL 2.0 and the minimum is also - * defined as 200. These settings would use 2.0 API calls only. - * If backward compatibility with a 1.2 runtime is required, the minimum - * version may be set to 120. - * - * Note that this is a compile-time setting, and so affects linking against - * a particular SDK version rather than the versioning of the loaded runtime. - * - * The earlier versions of the header included basic vector and string - * classes based loosely on STL versions. These were difficult to - * maintain and very rarely used. For the 2.0 header we now assume - * the presence of the standard library unless requested otherwise. - * We use std::array, std::vector, std::shared_ptr and std::string - * throughout to safely manage memory and reduce the chance of a - * recurrance of earlier memory management bugs. - * - * These classes are used through typedefs in the cl namespace: - * cl::array, cl::vector, cl::pointer and cl::string. - * In addition cl::allocate_pointer forwards to std::allocate_shared - * by default. - * In all cases these standard library classes can be replaced with - * custom interface-compatible versions using the CL_HPP_NO_STD_ARRAY, - * CL_HPP_NO_STD_VECTOR, CL_HPP_NO_STD_UNIQUE_PTR and - * CL_HPP_NO_STD_STRING macros. - * - * The OpenCL 1.x versions of the C++ bindings included a size_t wrapper - * class to interface with kernel enqueue. This caused unpleasant interactions - * with the standard size_t declaration and led to namespacing bugs. - * In the 2.0 version we have replaced this with a std::array-based interface. - * However, the old behaviour can be regained for backward compatibility - * using the CL_HPP_ENABLE_SIZE_T_COMPATIBILITY macro. - * - * Finally, the program construction interface used a clumsy vector-of-pairs - * design in the earlier versions. We have replaced that with a cleaner - * vector-of-vectors and vector-of-strings design. However, for backward - * compatibility old behaviour can be regained with the - * CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY macro. - * - * In OpenCL 2.0 OpenCL C is not entirely backward compatibility with - * earlier versions. As a result a flag must be passed to the OpenCL C - * compiled to request OpenCL 2.0 compilation of kernels with 1.2 as - * the default in the absence of the flag. - * In some cases the C++ bindings automatically compile code for ease. - * For those cases the compilation defaults to OpenCL C 2.0. - * If this is not wanted, the CL_HPP_CL_1_2_DEFAULT_BUILD macro may - * be specified to assume 1.2 compilation. - * If more fine-grained decisions on a per-kernel bases are required - * then explicit build operations that take the flag should be used. - * - * - * \section parameterization Parameters - * This header may be parameterized by a set of preprocessor macros. - * - * - CL_HPP_TARGET_OPENCL_VERSION - * - * Defines the target OpenCL runtime version to build the header - * against. Defaults to 200, representing OpenCL 2.0. - * - * - CL_HPP_NO_STD_STRING - * - * Do not use the standard library string class. cl::string is not - * defined and may be defined by the user before opencl.hpp is - * included. - * - * - CL_HPP_NO_STD_VECTOR - * - * Do not use the standard library vector class. cl::vector is not - * defined and may be defined by the user before opencl.hpp is - * included. - * - * - CL_HPP_NO_STD_ARRAY - * - * Do not use the standard library array class. cl::array is not - * defined and may be defined by the user before opencl.hpp is - * included. - * - * - CL_HPP_NO_STD_UNIQUE_PTR - * - * Do not use the standard library unique_ptr class. cl::pointer and - * the cl::allocate_pointer functions are not defined and may be - * defined by the user before opencl.hpp is included. - * - * - CL_HPP_ENABLE_EXCEPTIONS - * - * Enable exceptions for use in the C++ bindings header. This is the - * preferred error handling mechanism but is not required. - * - * - CL_HPP_ENABLE_SIZE_T_COMPATIBILITY - * - * Backward compatibility option to support cl.hpp-style size_t - * class. Replaces the updated std::array derived version and - * removal of size_t from the namespace. Note that in this case the - * new size_t class is placed in the cl::compatibility namespace and - * thus requires an additional using declaration for direct backward - * compatibility. - * - * - CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY - * - * Enable older vector of pairs interface for construction of - * programs. - * - * - CL_HPP_CL_1_2_DEFAULT_BUILD - * - * Default to OpenCL C 1.2 compilation rather than OpenCL C 2.0 - * applies to use of cl::Program construction and other program - * build variants. - * - * - CL_HPP_USE_CL_DEVICE_FISSION - * - * Enable the cl_ext_device_fission extension. - * - * - CL_HPP_USE_CL_IMAGE2D_FROM_BUFFER_KHR - * - * Enable the cl_khr_image2d_from_buffer extension. - * - * - CL_HPP_USE_CL_SUB_GROUPS_KHR - * - * Enable the cl_khr_subgroups extension. - * - * - CL_HPP_USE_DX_INTEROP - * - * Enable the cl_khr_d3d10_sharing extension. - * - * - CL_HPP_USE_IL_KHR - * - * Enable the cl_khr_il_program extension. - * - * - * \section example Example - * - * The following example shows a general use case for the C++ - * bindings, including support for the optional exception feature and - * also the supplied vector and string classes, see following sections for - * decriptions of these features. - * - * Note: the C++ bindings use std::call_once and therefore may need to be - * compiled using special command-line options (such as "-pthread") on some - * platforms! - * - * \code - #define CL_HPP_ENABLE_EXCEPTIONS - #define CL_HPP_TARGET_OPENCL_VERSION 200 - - #include - #include - #include - #include - #include - - const int numElements = 32; - - int main(void) - { - // Filter for a 2.0 or newer platform and set it as the default - std::vector platforms; - cl::Platform::get(&platforms); - cl::Platform plat; - for (auto &p : platforms) { - std::string platver = p.getInfo(); - if (platver.find("OpenCL 2.") != std::string::npos || - platver.find("OpenCL 3.") != std::string::npos) { - // Note: an OpenCL 3.x platform may not support all required features! - plat = p; - } - } - if (plat() == 0) { - std::cout << "No OpenCL 2.0 or newer platform found.\n"; - return -1; - } - - cl::Platform newP = cl::Platform::setDefault(plat); - if (newP != plat) { - std::cout << "Error setting default platform.\n"; - return -1; - } - - // C++11 raw string literal for the first kernel - std::string kernel1{R"CLC( - global int globalA; - kernel void updateGlobal() - { - globalA = 75; - } - )CLC"}; - - // Raw string literal for the second kernel - std::string kernel2{R"CLC( - typedef struct { global int *bar; } Foo; - kernel void vectorAdd(global const Foo* aNum, global const int *inputA, global const int *inputB, - global int *output, int val, write_only pipe int outPipe, queue_t childQueue) - { - output[get_global_id(0)] = inputA[get_global_id(0)] + inputB[get_global_id(0)] + val + *(aNum->bar); - write_pipe(outPipe, &val); - queue_t default_queue = get_default_queue(); - ndrange_t ndrange = ndrange_1D(get_global_size(0)/2, get_global_size(0)/2); - - // Have a child kernel write into third quarter of output - enqueue_kernel(default_queue, CLK_ENQUEUE_FLAGS_WAIT_KERNEL, ndrange, - ^{ - output[get_global_size(0)*2 + get_global_id(0)] = - inputA[get_global_size(0)*2 + get_global_id(0)] + inputB[get_global_size(0)*2 + get_global_id(0)] + globalA; - }); - - // Have a child kernel write into last quarter of output - enqueue_kernel(childQueue, CLK_ENQUEUE_FLAGS_WAIT_KERNEL, ndrange, - ^{ - output[get_global_size(0)*3 + get_global_id(0)] = - inputA[get_global_size(0)*3 + get_global_id(0)] + inputB[get_global_size(0)*3 + get_global_id(0)] + globalA + 2; - }); - } - )CLC"}; - - std::vector programStrings; - programStrings.push_back(kernel1); - programStrings.push_back(kernel2); - - cl::Program vectorAddProgram(programStrings); - try { - vectorAddProgram.build("-cl-std=CL2.0"); - } - catch (...) { - // Print build info for all devices - cl_int buildErr = CL_SUCCESS; - auto buildInfo = vectorAddProgram.getBuildInfo(&buildErr); - for (auto &pair : buildInfo) { - std::cerr << pair.second << std::endl << std::endl; - } - - return 1; - } - - typedef struct { int *bar; } Foo; - - // Get and run kernel that initializes the program-scope global - // A test for kernels that take no arguments - auto program2Kernel = - cl::KernelFunctor<>(vectorAddProgram, "updateGlobal"); - program2Kernel( - cl::EnqueueArgs( - cl::NDRange(1))); - - ////////////////// - // SVM allocations - - auto anSVMInt = cl::allocate_svm>(); - *anSVMInt = 5; - cl::SVMAllocator>> svmAllocReadOnly; - auto fooPointer = cl::allocate_pointer(svmAllocReadOnly); - fooPointer->bar = anSVMInt.get(); - cl::SVMAllocator> svmAlloc; - std::vector>> inputA(numElements, 1, svmAlloc); - cl::coarse_svm_vector inputB(numElements, 2, svmAlloc); - - ////////////// - // Traditional cl_mem allocations - - std::vector output(numElements, 0xdeadbeef); - cl::Buffer outputBuffer(begin(output), end(output), false); - cl::Pipe aPipe(sizeof(cl_int), numElements / 2); - - // Default command queue, also passed in as a parameter - cl::DeviceCommandQueue defaultDeviceQueue = cl::DeviceCommandQueue::makeDefault( - cl::Context::getDefault(), cl::Device::getDefault()); - - auto vectorAddKernel = - cl::KernelFunctor< - decltype(fooPointer)&, - int*, - cl::coarse_svm_vector&, - cl::Buffer, - int, - cl::Pipe&, - cl::DeviceCommandQueue - >(vectorAddProgram, "vectorAdd"); - - // Ensure that the additional SVM pointer is available to the kernel - // This one was not passed as a parameter - vectorAddKernel.setSVMPointers(anSVMInt); - - cl_int error; - vectorAddKernel( - cl::EnqueueArgs( - cl::NDRange(numElements/2), - cl::NDRange(numElements/2)), - fooPointer, - inputA.data(), - inputB, - outputBuffer, - 3, - aPipe, - defaultDeviceQueue, - error - ); - - cl::copy(outputBuffer, begin(output), end(output)); - - cl::Device d = cl::Device::getDefault(); - - std::cout << "Output:\n"; - for (int i = 1; i < numElements; ++i) { - std::cout << "\t" << output[i] << "\n"; - } - std::cout << "\n\n"; - - return 0; - } - * - * \endcode - * - */ -#ifndef CL_HPP_ -#define CL_HPP_ - -/* Handle deprecated preprocessor definitions. In each case, we only check for - * the old name if the new name is not defined, so that user code can define - * both and hence work with either version of the bindings. - */ -#if !defined(CL_HPP_USE_DX_INTEROP) && defined(USE_DX_INTEROP) -# pragma message("opencl.hpp: USE_DX_INTEROP is deprecated. Define CL_HPP_USE_DX_INTEROP instead") -# define CL_HPP_USE_DX_INTEROP -#endif -#if !defined(CL_HPP_USE_CL_DEVICE_FISSION) && defined(USE_CL_DEVICE_FISSION) -# pragma message("opencl.hpp: USE_CL_DEVICE_FISSION is deprecated. Define CL_HPP_USE_CL_DEVICE_FISSION instead") -# define CL_HPP_USE_CL_DEVICE_FISSION -#endif -#if !defined(CL_HPP_ENABLE_EXCEPTIONS) && defined(__CL_ENABLE_EXCEPTIONS) -# pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead") -# define CL_HPP_ENABLE_EXCEPTIONS -#endif -#if !defined(CL_HPP_NO_STD_VECTOR) && defined(__NO_STD_VECTOR) -# pragma message("opencl.hpp: __NO_STD_VECTOR is deprecated. Define CL_HPP_NO_STD_VECTOR instead") -# define CL_HPP_NO_STD_VECTOR -#endif -#if !defined(CL_HPP_NO_STD_STRING) && defined(__NO_STD_STRING) -# pragma message("opencl.hpp: __NO_STD_STRING is deprecated. Define CL_HPP_NO_STD_STRING instead") -# define CL_HPP_NO_STD_STRING -#endif -#if defined(VECTOR_CLASS) -# pragma message("opencl.hpp: VECTOR_CLASS is deprecated. Alias cl::vector instead") -#endif -#if defined(STRING_CLASS) -# pragma message("opencl.hpp: STRING_CLASS is deprecated. Alias cl::string instead.") -#endif -#if !defined(CL_HPP_USER_OVERRIDE_ERROR_STRINGS) && defined(__CL_USER_OVERRIDE_ERROR_STRINGS) -# pragma message("opencl.hpp: __CL_USER_OVERRIDE_ERROR_STRINGS is deprecated. Define CL_HPP_USER_OVERRIDE_ERROR_STRINGS instead") -# define CL_HPP_USER_OVERRIDE_ERROR_STRINGS -#endif - -/* Warn about features that are no longer supported - */ -#if defined(__USE_DEV_VECTOR) -# pragma message("opencl.hpp: __USE_DEV_VECTOR is no longer supported. Expect compilation errors") -#endif -#if defined(__USE_DEV_STRING) -# pragma message("opencl.hpp: __USE_DEV_STRING is no longer supported. Expect compilation errors") -#endif - -/* Detect which version to target */ -#if !defined(CL_HPP_TARGET_OPENCL_VERSION) -# pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)") -# define CL_HPP_TARGET_OPENCL_VERSION 300 -#endif -#if CL_HPP_TARGET_OPENCL_VERSION != 100 && \ - CL_HPP_TARGET_OPENCL_VERSION != 110 && \ - CL_HPP_TARGET_OPENCL_VERSION != 120 && \ - CL_HPP_TARGET_OPENCL_VERSION != 200 && \ - CL_HPP_TARGET_OPENCL_VERSION != 210 && \ - CL_HPP_TARGET_OPENCL_VERSION != 220 && \ - CL_HPP_TARGET_OPENCL_VERSION != 300 -# pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220 or 300). It will be set to 300 (OpenCL 3.0).") -# undef CL_HPP_TARGET_OPENCL_VERSION -# define CL_HPP_TARGET_OPENCL_VERSION 300 -#endif - -/* Forward target OpenCL version to C headers if necessary */ -#if defined(CL_TARGET_OPENCL_VERSION) -/* Warn if prior definition of CL_TARGET_OPENCL_VERSION is lower than - * requested C++ bindings version */ -#if CL_TARGET_OPENCL_VERSION < CL_HPP_TARGET_OPENCL_VERSION -# pragma message("CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION") -#endif -#else -# define CL_TARGET_OPENCL_VERSION CL_HPP_TARGET_OPENCL_VERSION -#endif - -#if !defined(CL_HPP_MINIMUM_OPENCL_VERSION) -# define CL_HPP_MINIMUM_OPENCL_VERSION 200 -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION != 100 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 110 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 120 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 200 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 210 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 220 && \ - CL_HPP_MINIMUM_OPENCL_VERSION != 300 -# pragma message("opencl.hpp: CL_HPP_MINIMUM_OPENCL_VERSION is not a valid value (100, 110, 120, 200, 210, 220 or 300). It will be set to 100") -# undef CL_HPP_MINIMUM_OPENCL_VERSION -# define CL_HPP_MINIMUM_OPENCL_VERSION 100 -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION > CL_HPP_TARGET_OPENCL_VERSION -# error "CL_HPP_MINIMUM_OPENCL_VERSION must not be greater than CL_HPP_TARGET_OPENCL_VERSION" -#endif - -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 100 && !defined(CL_USE_DEPRECATED_OPENCL_1_0_APIS) -# define CL_USE_DEPRECATED_OPENCL_1_0_APIS -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 110 && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -# define CL_USE_DEPRECATED_OPENCL_1_1_APIS -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 120 && !defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) -# define CL_USE_DEPRECATED_OPENCL_1_2_APIS -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 200 && !defined(CL_USE_DEPRECATED_OPENCL_2_0_APIS) -# define CL_USE_DEPRECATED_OPENCL_2_0_APIS -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 210 && !defined(CL_USE_DEPRECATED_OPENCL_2_1_APIS) -# define CL_USE_DEPRECATED_OPENCL_2_1_APIS -#endif -#if CL_HPP_MINIMUM_OPENCL_VERSION <= 220 && !defined(CL_USE_DEPRECATED_OPENCL_2_2_APIS) -# define CL_USE_DEPRECATED_OPENCL_2_2_APIS -#endif - -#ifdef _WIN32 - -#include - -#if defined(CL_HPP_USE_DX_INTEROP) -#include -#include -#endif -#endif // _WIN32 - -#if defined(_MSC_VER) -#include -#endif // _MSC_VER - - // Check for a valid C++ version - -// Need to do both tests here because for some reason __cplusplus is not -// updated in visual studio -#if (!defined(_MSC_VER) && __cplusplus < 201103L) || (defined(_MSC_VER) && _MSC_VER < 1700) -#error Visual studio 2013 or another C++11-supporting compiler required -#endif - -// -#if defined(CL_HPP_USE_CL_DEVICE_FISSION) || defined(CL_HPP_USE_CL_SUB_GROUPS_KHR) -#include -#endif - -#if defined(__APPLE__) || defined(__MACOSX) -#include -#else -#include -#endif // !__APPLE__ - -#if (__cplusplus >= 201103L || _MSVC_LANG >= 201103L ) -#define CL_HPP_NOEXCEPT_ noexcept -#else -#define CL_HPP_NOEXCEPT_ -#endif - -#if __cplusplus >= 201703L -# define CL_HPP_DEFINE_STATIC_MEMBER_ inline -#elif defined(_MSC_VER) -# define CL_HPP_DEFINE_STATIC_MEMBER_ __declspec(selectany) -#elif defined(__MINGW32__) -# define CL_HPP_DEFINE_STATIC_MEMBER_ __attribute__((selectany)) -#else -# define CL_HPP_DEFINE_STATIC_MEMBER_ __attribute__((weak)) -#endif // !_MSC_VER - -// Define deprecated prefixes and suffixes to ensure compilation -// in case they are not pre-defined -#if !defined(CL_API_PREFIX__VERSION_1_1_DEPRECATED) -#define CL_API_PREFIX__VERSION_1_1_DEPRECATED -#endif // #if !defined(CL_API_PREFIX__VERSION_1_1_DEPRECATED) -#if !defined(CL_API_SUFFIX__VERSION_1_1_DEPRECATED) -#define CL_API_SUFFIX__VERSION_1_1_DEPRECATED -#endif // #if !defined(CL_API_SUFFIX__VERSION_1_1_DEPRECATED) - -#if !defined(CL_API_PREFIX__VERSION_1_2_DEPRECATED) -#define CL_API_PREFIX__VERSION_1_2_DEPRECATED -#endif // #if !defined(CL_API_PREFIX__VERSION_1_2_DEPRECATED) -#if !defined(CL_API_SUFFIX__VERSION_1_2_DEPRECATED) -#define CL_API_SUFFIX__VERSION_1_2_DEPRECATED -#endif // #if !defined(CL_API_SUFFIX__VERSION_1_2_DEPRECATED) - -#if !defined(CL_API_PREFIX__VERSION_2_2_DEPRECATED) -#define CL_API_PREFIX__VERSION_2_2_DEPRECATED -#endif // #if !defined(CL_API_PREFIX__VERSION_2_2_DEPRECATED) -#if !defined(CL_API_SUFFIX__VERSION_2_2_DEPRECATED) -#define CL_API_SUFFIX__VERSION_2_2_DEPRECATED -#endif // #if !defined(CL_API_SUFFIX__VERSION_2_2_DEPRECATED) - -#if !defined(CL_CALLBACK) -#define CL_CALLBACK -#endif //CL_CALLBACK - -#include -#include -#include -#include -#include -#include - - -// Define a size_type to represent a correctly resolved size_t -#if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY) -namespace cl { - using size_type = ::size_t; -} // namespace cl -#else // #if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY) -namespace cl { - using size_type = size_t; -} // namespace cl -#endif // #if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY) - - -#if defined(CL_HPP_ENABLE_EXCEPTIONS) -#include -#endif // #if defined(CL_HPP_ENABLE_EXCEPTIONS) - -#if !defined(CL_HPP_NO_STD_VECTOR) -#include -namespace cl { - template < class T, class Alloc = std::allocator > - using vector = std::vector; -} // namespace cl -#endif // #if !defined(CL_HPP_NO_STD_VECTOR) - -#if !defined(CL_HPP_NO_STD_STRING) -#include -namespace cl { - using string = std::string; -} // namespace cl -#endif // #if !defined(CL_HPP_NO_STD_STRING) - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -#if !defined(CL_HPP_NO_STD_UNIQUE_PTR) -#include -namespace cl { - // Replace unique_ptr and allocate_pointer for internal use - // to allow user to replace them - template - using pointer = std::unique_ptr; -} // namespace cl -#endif -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if !defined(CL_HPP_NO_STD_ARRAY) -#include -namespace cl { - template < class T, size_type N > - using array = std::array; -} // namespace cl -#endif // #if !defined(CL_HPP_NO_STD_ARRAY) - -// Define size_type appropriately to allow backward-compatibility -// use of the old size_t interface class -#if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY) -namespace cl { - namespace compatibility { - /*! \brief class used to interface between C++ and - * OpenCL C calls that require arrays of size_t values, whose - * size is known statically. - */ - template - class size_t - { - private: - size_type data_[N]; - - public: - //! \brief Initialize size_t to all 0s - size_t() - { - for (int i = 0; i < N; ++i) { - data_[i] = 0; - } - } - - size_t(const array &rhs) - { - for (int i = 0; i < N; ++i) { - data_[i] = rhs[i]; - } - } - - size_type& operator[](int index) - { - return data_[index]; - } - - const size_type& operator[](int index) const - { - return data_[index]; - } - - //! \brief Conversion operator to T*. - operator size_type* () { return data_; } - - //! \brief Conversion operator to const T*. - operator const size_type* () const { return data_; } - - operator array() const - { - array ret; - - for (int i = 0; i < N; ++i) { - ret[i] = data_[i]; - } - return ret; - } - }; - } // namespace compatibility - - template - using size_t = compatibility::size_t; -} // namespace cl -#endif // #if defined(CL_HPP_ENABLE_SIZE_T_COMPATIBILITY) - -// Helper alias to avoid confusing the macros -namespace cl { - namespace detail { - using size_t_array = array; - } // namespace detail -} // namespace cl - - -/*! \namespace cl - * - * \brief The OpenCL C++ bindings are defined within this namespace. - * - */ -namespace cl { - class Memory; - -#define CL_HPP_INIT_CL_EXT_FCN_PTR_(name) \ - if (!pfn_##name) { \ - pfn_##name = (PFN_##name) \ - clGetExtensionFunctionAddress(#name); \ - if (!pfn_##name) { \ - } \ - } - -#define CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, name) \ - if (!pfn_##name) { \ - pfn_##name = (PFN_##name) \ - clGetExtensionFunctionAddressForPlatform(platform, #name); \ - if (!pfn_##name) { \ - } \ - } - - class Program; - class Device; - class Context; - class CommandQueue; - class DeviceCommandQueue; - class Memory; - class Buffer; - class Pipe; - -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - /*! \brief Exception class - * - * This may be thrown by API functions when CL_HPP_ENABLE_EXCEPTIONS is defined. - */ - class Error : public std::exception - { - private: - cl_int err_; - const char * errStr_; - public: - /*! \brief Create a new CL error exception for a given error code - * and corresponding message. - * - * \param err error code value. - * - * \param errStr a descriptive string that must remain in scope until - * handling of the exception has concluded. If set, it - * will be returned by what(). - */ - Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr) - {} - - ~Error() throw() {} - - /*! \brief Get error string associated with exception - * - * \return A memory pointer to the error message string. - */ - virtual const char * what() const throw () - { - if (errStr_ == NULL) { - return "empty"; - } - else { - return errStr_; - } - } - - /*! \brief Get error code associated with exception - * - * \return The error code. - */ - cl_int err(void) const { return err_; } - }; -#define CL_HPP_ERR_STR_(x) #x -#else -#define CL_HPP_ERR_STR_(x) NULL -#endif // CL_HPP_ENABLE_EXCEPTIONS - - -namespace detail -{ -#if defined(CL_HPP_ENABLE_EXCEPTIONS) -static inline cl_int errHandler ( - cl_int err, - const char * errStr = NULL) -{ - if (err != CL_SUCCESS) { - throw Error(err, errStr); - } - return err; -} -#else -static inline cl_int errHandler (cl_int err, const char * errStr = NULL) -{ - (void) errStr; // suppress unused variable warning - return err; -} -#endif // CL_HPP_ENABLE_EXCEPTIONS -} - - - -//! \cond DOXYGEN_DETAIL -#if !defined(CL_HPP_USER_OVERRIDE_ERROR_STRINGS) -#define __GET_DEVICE_INFO_ERR CL_HPP_ERR_STR_(clGetDeviceInfo) -#define __GET_PLATFORM_INFO_ERR CL_HPP_ERR_STR_(clGetPlatformInfo) -#define __GET_DEVICE_IDS_ERR CL_HPP_ERR_STR_(clGetDeviceIDs) -#define __GET_PLATFORM_IDS_ERR CL_HPP_ERR_STR_(clGetPlatformIDs) -#define __GET_CONTEXT_INFO_ERR CL_HPP_ERR_STR_(clGetContextInfo) -#define __GET_EVENT_INFO_ERR CL_HPP_ERR_STR_(clGetEventInfo) -#define __GET_EVENT_PROFILE_INFO_ERR CL_HPP_ERR_STR_(clGetEventProfileInfo) -#define __GET_MEM_OBJECT_INFO_ERR CL_HPP_ERR_STR_(clGetMemObjectInfo) -#define __GET_IMAGE_INFO_ERR CL_HPP_ERR_STR_(clGetImageInfo) -#define __GET_SAMPLER_INFO_ERR CL_HPP_ERR_STR_(clGetSamplerInfo) -#define __GET_KERNEL_INFO_ERR CL_HPP_ERR_STR_(clGetKernelInfo) -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __GET_KERNEL_ARG_INFO_ERR CL_HPP_ERR_STR_(clGetKernelArgInfo) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __GET_KERNEL_SUB_GROUP_INFO_ERR CL_HPP_ERR_STR_(clGetKernelSubGroupInfo) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __GET_KERNEL_WORK_GROUP_INFO_ERR CL_HPP_ERR_STR_(clGetKernelWorkGroupInfo) -#define __GET_PROGRAM_INFO_ERR CL_HPP_ERR_STR_(clGetProgramInfo) -#define __GET_PROGRAM_BUILD_INFO_ERR CL_HPP_ERR_STR_(clGetProgramBuildInfo) -#define __GET_COMMAND_QUEUE_INFO_ERR CL_HPP_ERR_STR_(clGetCommandQueueInfo) - -#define __CREATE_CONTEXT_ERR CL_HPP_ERR_STR_(clCreateContext) -#define __CREATE_CONTEXT_FROM_TYPE_ERR CL_HPP_ERR_STR_(clCreateContextFromType) -#define __GET_SUPPORTED_IMAGE_FORMATS_ERR CL_HPP_ERR_STR_(clGetSupportedImageFormats) - -#define __CREATE_BUFFER_ERR CL_HPP_ERR_STR_(clCreateBuffer) -#define __COPY_ERR CL_HPP_ERR_STR_(cl::copy) -#define __CREATE_SUBBUFFER_ERR CL_HPP_ERR_STR_(clCreateSubBuffer) -#define __CREATE_GL_BUFFER_ERR CL_HPP_ERR_STR_(clCreateFromGLBuffer) -#define __CREATE_GL_RENDER_BUFFER_ERR CL_HPP_ERR_STR_(clCreateFromGLBuffer) -#define __GET_GL_OBJECT_INFO_ERR CL_HPP_ERR_STR_(clGetGLObjectInfo) -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __CREATE_IMAGE_ERR CL_HPP_ERR_STR_(clCreateImage) -#define __CREATE_GL_TEXTURE_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture) -#define __IMAGE_DIMENSION_ERR CL_HPP_ERR_STR_(Incorrect image dimensions) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR CL_HPP_ERR_STR_(clSetMemObjectDestructorCallback) - -#define __CREATE_USER_EVENT_ERR CL_HPP_ERR_STR_(clCreateUserEvent) -#define __SET_USER_EVENT_STATUS_ERR CL_HPP_ERR_STR_(clSetUserEventStatus) -#define __SET_EVENT_CALLBACK_ERR CL_HPP_ERR_STR_(clSetEventCallback) -#define __WAIT_FOR_EVENTS_ERR CL_HPP_ERR_STR_(clWaitForEvents) - -#define __CREATE_KERNEL_ERR CL_HPP_ERR_STR_(clCreateKernel) -#define __SET_KERNEL_ARGS_ERR CL_HPP_ERR_STR_(clSetKernelArg) -#define __CREATE_PROGRAM_WITH_SOURCE_ERR CL_HPP_ERR_STR_(clCreateProgramWithSource) -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __CREATE_PROGRAM_WITH_IL_ERR CL_HPP_ERR_STR_(clCreateProgramWithIL) -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __CREATE_PROGRAM_WITH_BINARY_ERR CL_HPP_ERR_STR_(clCreateProgramWithBinary) -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 -#define __CREATE_PROGRAM_WITH_IL_ERR CL_HPP_ERR_STR_(clCreateProgramWithIL) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 210 -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR CL_HPP_ERR_STR_(clCreateProgramWithBuiltInKernels) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __BUILD_PROGRAM_ERR CL_HPP_ERR_STR_(clBuildProgram) -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __COMPILE_PROGRAM_ERR CL_HPP_ERR_STR_(clCompileProgram) -#define __LINK_PROGRAM_ERR CL_HPP_ERR_STR_(clLinkProgram) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __CREATE_KERNELS_IN_PROGRAM_ERR CL_HPP_ERR_STR_(clCreateKernelsInProgram) - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR CL_HPP_ERR_STR_(clCreateCommandQueueWithProperties) -#define __CREATE_SAMPLER_WITH_PROPERTIES_ERR CL_HPP_ERR_STR_(clCreateSamplerWithProperties) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#define __SET_COMMAND_QUEUE_PROPERTY_ERR CL_HPP_ERR_STR_(clSetCommandQueueProperty) -#define __ENQUEUE_READ_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueReadBuffer) -#define __ENQUEUE_READ_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueReadBufferRect) -#define __ENQUEUE_WRITE_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueWriteBuffer) -#define __ENQUEUE_WRITE_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueWriteBufferRect) -#define __ENQEUE_COPY_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueCopyBuffer) -#define __ENQEUE_COPY_BUFFER_RECT_ERR CL_HPP_ERR_STR_(clEnqueueCopyBufferRect) -#define __ENQUEUE_FILL_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueFillBuffer) -#define __ENQUEUE_READ_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueReadImage) -#define __ENQUEUE_WRITE_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueWriteImage) -#define __ENQUEUE_COPY_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueCopyImage) -#define __ENQUEUE_FILL_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueFillImage) -#define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueCopyImageToBuffer) -#define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueCopyBufferToImage) -#define __ENQUEUE_MAP_BUFFER_ERR CL_HPP_ERR_STR_(clEnqueueMapBuffer) -#define __ENQUEUE_MAP_IMAGE_ERR CL_HPP_ERR_STR_(clEnqueueMapImage) -#define __ENQUEUE_UNMAP_MEM_OBJECT_ERR CL_HPP_ERR_STR_(clEnqueueUnMapMemObject) -#define __ENQUEUE_NDRANGE_KERNEL_ERR CL_HPP_ERR_STR_(clEnqueueNDRangeKernel) -#define __ENQUEUE_NATIVE_KERNEL CL_HPP_ERR_STR_(clEnqueueNativeKernel) -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR CL_HPP_ERR_STR_(clEnqueueMigrateMemObjects) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 -#define __ENQUEUE_MIGRATE_SVM_ERR CL_HPP_ERR_STR_(clEnqueueSVMMigrateMem) -#define __SET_DEFAULT_DEVICE_COMMAND_QUEUE_ERR CL_HPP_ERR_STR_(clSetDefaultDeviceCommandQueue) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 210 - - -#define __ENQUEUE_ACQUIRE_GL_ERR CL_HPP_ERR_STR_(clEnqueueAcquireGLObjects) -#define __ENQUEUE_RELEASE_GL_ERR CL_HPP_ERR_STR_(clEnqueueReleaseGLObjects) - -#define __CREATE_PIPE_ERR CL_HPP_ERR_STR_(clCreatePipe) -#define __GET_PIPE_INFO_ERR CL_HPP_ERR_STR_(clGetPipeInfo) - - -#define __RETAIN_ERR CL_HPP_ERR_STR_(Retain Object) -#define __RELEASE_ERR CL_HPP_ERR_STR_(Release Object) -#define __FLUSH_ERR CL_HPP_ERR_STR_(clFlush) -#define __FINISH_ERR CL_HPP_ERR_STR_(clFinish) -#define __VECTOR_CAPACITY_ERR CL_HPP_ERR_STR_(Vector capacity error) - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 -#define __GET_HOST_TIMER_ERR CL_HPP_ERR_STR_(clGetHostTimer) -#define __GET_DEVICE_AND_HOST_TIMER_ERR CL_HPP_ERR_STR_(clGetDeviceAndHostTimer) -#endif -#if CL_HPP_TARGET_OPENCL_VERSION >= 220 -#define __SET_PROGRAM_RELEASE_CALLBACK_ERR CL_HPP_ERR_STR_(clSetProgramReleaseCallback) -#define __SET_PROGRAM_SPECIALIZATION_CONSTANT_ERR CL_HPP_ERR_STR_(clSetProgramSpecializationConstant) -#endif - - -/** - * CL 1.2 version that uses device fission. - */ -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __CREATE_SUB_DEVICES_ERR CL_HPP_ERR_STR_(clCreateSubDevices) -#else -#define __CREATE_SUB_DEVICES_ERR CL_HPP_ERR_STR_(clCreateSubDevicesEXT) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - -/** - * Deprecated APIs for 1.2 - */ -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -#define __ENQUEUE_MARKER_ERR CL_HPP_ERR_STR_(clEnqueueMarker) -#define __ENQUEUE_WAIT_FOR_EVENTS_ERR CL_HPP_ERR_STR_(clEnqueueWaitForEvents) -#define __ENQUEUE_BARRIER_ERR CL_HPP_ERR_STR_(clEnqueueBarrier) -#define __UNLOAD_COMPILER_ERR CL_HPP_ERR_STR_(clUnloadCompiler) -#define __CREATE_GL_TEXTURE_2D_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture2D) -#define __CREATE_GL_TEXTURE_3D_ERR CL_HPP_ERR_STR_(clCreateFromGLTexture3D) -#define __CREATE_IMAGE2D_ERR CL_HPP_ERR_STR_(clCreateImage2D) -#define __CREATE_IMAGE3D_ERR CL_HPP_ERR_STR_(clCreateImage3D) -#endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - -/** - * Deprecated APIs for 2.0 - */ -#if defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) -#define __CREATE_COMMAND_QUEUE_ERR CL_HPP_ERR_STR_(clCreateCommandQueue) -#define __ENQUEUE_TASK_ERR CL_HPP_ERR_STR_(clEnqueueTask) -#define __CREATE_SAMPLER_ERR CL_HPP_ERR_STR_(clCreateSampler) -#endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - -/** - * CL 1.2 marker and barrier commands - */ -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#define __ENQUEUE_MARKER_WAIT_LIST_ERR CL_HPP_ERR_STR_(clEnqueueMarkerWithWaitList) -#define __ENQUEUE_BARRIER_WAIT_LIST_ERR CL_HPP_ERR_STR_(clEnqueueBarrierWithWaitList) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 -#define __CLONE_KERNEL_ERR CL_HPP_ERR_STR_(clCloneKernel) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 210 - -#endif // CL_HPP_USER_OVERRIDE_ERROR_STRINGS -//! \endcond - - -namespace detail { - -// Generic getInfoHelper. The final parameter is used to guide overload -// resolution: the actual parameter passed is an int, which makes this -// a worse conversion sequence than a specialization that declares the -// parameter as an int. -template -inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long) -{ - return f(name, sizeof(T), param, NULL); -} - -// Specialized for getInfo -// Assumes that the output vector was correctly resized on the way in -template -inline cl_int getInfoHelper(Func f, cl_uint name, vector>* param, int) -{ - if (name != CL_PROGRAM_BINARIES) { - return CL_INVALID_VALUE; - } - if (param) { - // Create array of pointers, calculate total size and pass pointer array in - size_type numBinaries = param->size(); - vector binariesPointers(numBinaries); - - for (size_type i = 0; i < numBinaries; ++i) - { - binariesPointers[i] = (*param)[i].data(); - } - - cl_int err = f(name, numBinaries * sizeof(unsigned char*), binariesPointers.data(), NULL); - - if (err != CL_SUCCESS) { - return err; - } - } - - - return CL_SUCCESS; -} - -// Specialized getInfoHelper for vector params -template -inline cl_int getInfoHelper(Func f, cl_uint name, vector* param, long) -{ - size_type required; - cl_int err = f(name, 0, NULL, &required); - if (err != CL_SUCCESS) { - return err; - } - const size_type elements = required / sizeof(T); - - // Temporary to avoid changing param on an error - vector localData(elements); - err = f(name, required, localData.data(), NULL); - if (err != CL_SUCCESS) { - return err; - } - if (param) { - *param = std::move(localData); - } - - return CL_SUCCESS; -} - -/* Specialization for reference-counted types. This depends on the - * existence of Wrapper::cl_type, and none of the other types having the - * cl_type member. Note that simplify specifying the parameter as Wrapper - * does not work, because when using a derived type (e.g. Context) the generic - * template will provide a better match. - */ -template -inline cl_int getInfoHelper( - Func f, cl_uint name, vector* param, int, typename T::cl_type = 0) -{ - size_type required; - cl_int err = f(name, 0, NULL, &required); - if (err != CL_SUCCESS) { - return err; - } - - const size_type elements = required / sizeof(typename T::cl_type); - - vector value(elements); - err = f(name, required, value.data(), NULL); - if (err != CL_SUCCESS) { - return err; - } - - if (param) { - // Assign to convert CL type to T for each element - param->resize(elements); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < elements; i++) { - (*param)[i] = T(value[i], true); - } - } - return CL_SUCCESS; -} - -// Specialized GetInfoHelper for string params -template -inline cl_int getInfoHelper(Func f, cl_uint name, string* param, long) -{ - size_type required; - cl_int err = f(name, 0, NULL, &required); - if (err != CL_SUCCESS) { - return err; - } - - // std::string has a constant data member - // a char vector does not - if (required > 0) { - vector value(required); - err = f(name, required, value.data(), NULL); - if (err != CL_SUCCESS) { - return err; - } - if (param) { - param->assign(begin(value), prev(end(value))); - } - } - else if (param) { - param->assign(""); - } - return CL_SUCCESS; -} - -// Specialized GetInfoHelper for clsize_t params -template -inline cl_int getInfoHelper(Func f, cl_uint name, array* param, long) -{ - size_type required; - cl_int err = f(name, 0, NULL, &required); - if (err != CL_SUCCESS) { - return err; - } - - size_type elements = required / sizeof(size_type); - vector value(elements, 0); - - err = f(name, required, value.data(), NULL); - if (err != CL_SUCCESS) { - return err; - } - - // Bound the copy with N to prevent overruns - // if passed N > than the amount copied - if (elements > N) { - elements = N; - } - for (size_type i = 0; i < elements; ++i) { - (*param)[i] = value[i]; - } - - return CL_SUCCESS; -} - -template struct ReferenceHandler; - -/* Specialization for reference-counted types. This depends on the - * existence of Wrapper::cl_type, and none of the other types having the - * cl_type member. Note that simplify specifying the parameter as Wrapper - * does not work, because when using a derived type (e.g. Context) the generic - * template will provide a better match. - */ -template -inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_type = 0) -{ - typename T::cl_type value; - cl_int err = f(name, sizeof(value), &value, NULL); - if (err != CL_SUCCESS) { - return err; - } - *param = value; - if (value != NULL) - { - err = param->retain(); - if (err != CL_SUCCESS) { - return err; - } - } - return CL_SUCCESS; -} - -#define CL_HPP_PARAM_NAME_INFO_1_0_(F) \ - F(cl_platform_info, CL_PLATFORM_PROFILE, string) \ - F(cl_platform_info, CL_PLATFORM_VERSION, string) \ - F(cl_platform_info, CL_PLATFORM_NAME, string) \ - F(cl_platform_info, CL_PLATFORM_VENDOR, string) \ - F(cl_platform_info, CL_PLATFORM_EXTENSIONS, string) \ - \ - F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \ - F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, size_type) \ - F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, cl::vector) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \ - F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \ - F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, size_type) \ - F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \ - F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \ - F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \ - F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \ - F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \ - F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \ - F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\ - F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \ - F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \ - F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \ - F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \ - F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \ - F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \ - F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, size_type) \ - F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \ - F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \ - F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \ - F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \ - F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \ - F(cl_device_info, CL_DEVICE_NAME, string) \ - F(cl_device_info, CL_DEVICE_VENDOR, string) \ - F(cl_device_info, CL_DRIVER_VERSION, string) \ - F(cl_device_info, CL_DEVICE_PROFILE, string) \ - F(cl_device_info, CL_DEVICE_VERSION, string) \ - F(cl_device_info, CL_DEVICE_EXTENSIONS, string) \ - \ - F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \ - F(cl_context_info, CL_CONTEXT_DEVICES, cl::vector) \ - F(cl_context_info, CL_CONTEXT_PROPERTIES, cl::vector) \ - \ - F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \ - F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \ - F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \ - F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_int) \ - \ - F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \ - F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \ - F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \ - F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \ - \ - F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \ - F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \ - F(cl_mem_info, CL_MEM_SIZE, size_type) \ - F(cl_mem_info, CL_MEM_HOST_PTR, void*) \ - F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \ - F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \ - F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \ - \ - F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \ - F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, size_type) \ - F(cl_image_info, CL_IMAGE_ROW_PITCH, size_type) \ - F(cl_image_info, CL_IMAGE_SLICE_PITCH, size_type) \ - F(cl_image_info, CL_IMAGE_WIDTH, size_type) \ - F(cl_image_info, CL_IMAGE_HEIGHT, size_type) \ - F(cl_image_info, CL_IMAGE_DEPTH, size_type) \ - \ - F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \ - F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \ - F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_bool) \ - F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_addressing_mode) \ - F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_filter_mode) \ - \ - F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \ - F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \ - F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \ - F(cl_program_info, CL_PROGRAM_DEVICES, cl::vector) \ - F(cl_program_info, CL_PROGRAM_SOURCE, string) \ - F(cl_program_info, CL_PROGRAM_BINARY_SIZES, cl::vector) \ - F(cl_program_info, CL_PROGRAM_BINARIES, cl::vector>) \ - \ - F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \ - F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, string) \ - F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, string) \ - \ - F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, string) \ - F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \ - F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \ - F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \ - F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \ - \ - F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, size_type) \ - F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::detail::size_t_array) \ - F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \ - \ - F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \ - F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \ - F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \ - F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties) - - -#define CL_HPP_PARAM_NAME_INFO_1_1_(F) \ - F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\ - F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \ - F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \ - F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, string) \ - \ - F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \ - F(cl_mem_info, CL_MEM_OFFSET, size_type) \ - \ - F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, size_type) \ - F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \ - \ - F(cl_event_info, CL_EVENT_CONTEXT, cl::Context) - -#define CL_HPP_PARAM_NAME_INFO_1_2_(F) \ - F(cl_program_info, CL_PROGRAM_NUM_KERNELS, size_type) \ - F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, string) \ - \ - F(cl_program_build_info, CL_PROGRAM_BINARY_TYPE, cl_program_binary_type) \ - \ - F(cl_kernel_info, CL_KERNEL_ATTRIBUTES, string) \ - \ - F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \ - F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \ - F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, string) \ - F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, string) \ - F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_QUALIFIER, cl_kernel_arg_type_qualifier) \ - \ - F(cl_kernel_work_group_info, CL_KERNEL_GLOBAL_WORK_SIZE, cl::detail::size_t_array) \ - \ - F(cl_device_info, CL_DEVICE_LINKER_AVAILABLE, cl_bool) \ - F(cl_device_info, CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, size_type) \ - F(cl_device_info, CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, size_type) \ - F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl::Device) \ - F(cl_device_info, CL_DEVICE_PARTITION_MAX_SUB_DEVICES, cl_uint) \ - F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, cl::vector) \ - F(cl_device_info, CL_DEVICE_PARTITION_TYPE, cl::vector) \ - F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, cl_bool) \ - F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \ - F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, string) \ - F(cl_device_info, CL_DEVICE_PRINTF_BUFFER_SIZE, size_type) \ - \ - F(cl_image_info, CL_IMAGE_ARRAY_SIZE, size_type) \ - F(cl_image_info, CL_IMAGE_NUM_MIP_LEVELS, cl_uint) \ - F(cl_image_info, CL_IMAGE_NUM_SAMPLES, cl_uint) - -#define CL_HPP_PARAM_NAME_INFO_2_0_(F) \ - F(cl_device_info, CL_DEVICE_QUEUE_ON_HOST_PROPERTIES, cl_command_queue_properties) \ - F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES, cl_command_queue_properties) \ - F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE, cl_uint) \ - F(cl_device_info, CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_ON_DEVICE_QUEUES, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_ON_DEVICE_EVENTS, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_PIPE_ARGS, cl_uint) \ - F(cl_device_info, CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS, cl_uint) \ - F(cl_device_info, CL_DEVICE_PIPE_MAX_PACKET_SIZE, cl_uint) \ - F(cl_device_info, CL_DEVICE_SVM_CAPABILITIES, cl_device_svm_capabilities) \ - F(cl_device_info, CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT, cl_uint) \ - F(cl_device_info, CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT, cl_uint) \ - F(cl_device_info, CL_DEVICE_IMAGE_PITCH_ALIGNMENT, cl_uint) \ - F(cl_device_info, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT, cl_uint) \ - F(cl_device_info, CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS, cl_uint ) \ - F(cl_device_info, CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE, size_type ) \ - F(cl_device_info, CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE, size_type ) \ - F(cl_profiling_info, CL_PROFILING_COMMAND_COMPLETE, cl_ulong) \ - F(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM, cl_bool) \ - F(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_SVM_PTRS, void**) \ - F(cl_command_queue_info, CL_QUEUE_SIZE, cl_uint) \ - F(cl_mem_info, CL_MEM_USES_SVM_POINTER, cl_bool) \ - F(cl_program_build_info, CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE, size_type) \ - F(cl_pipe_info, CL_PIPE_PACKET_SIZE, cl_uint) \ - F(cl_pipe_info, CL_PIPE_MAX_PACKETS, cl_uint) - -#define CL_HPP_PARAM_NAME_INFO_SUBGROUP_KHR_(F) \ - F(cl_kernel_sub_group_info, CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR, size_type) \ - F(cl_kernel_sub_group_info, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR, size_type) - -#define CL_HPP_PARAM_NAME_INFO_IL_KHR_(F) \ - F(cl_device_info, CL_DEVICE_IL_VERSION_KHR, string) \ - F(cl_program_info, CL_PROGRAM_IL_KHR, cl::vector) - -#define CL_HPP_PARAM_NAME_INFO_2_1_(F) \ - F(cl_platform_info, CL_PLATFORM_HOST_TIMER_RESOLUTION, cl_ulong) \ - F(cl_program_info, CL_PROGRAM_IL, cl::vector) \ - F(cl_device_info, CL_DEVICE_MAX_NUM_SUB_GROUPS, cl_uint) \ - F(cl_device_info, CL_DEVICE_IL_VERSION, string) \ - F(cl_device_info, CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS, cl_bool) \ - F(cl_command_queue_info, CL_QUEUE_DEVICE_DEFAULT, cl::DeviceCommandQueue) \ - F(cl_kernel_sub_group_info, CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE, size_type) \ - F(cl_kernel_sub_group_info, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE, size_type) \ - F(cl_kernel_sub_group_info, CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT, cl::detail::size_t_array) \ - F(cl_kernel_sub_group_info, CL_KERNEL_MAX_NUM_SUB_GROUPS, size_type) \ - F(cl_kernel_sub_group_info, CL_KERNEL_COMPILE_NUM_SUB_GROUPS, size_type) - -#define CL_HPP_PARAM_NAME_INFO_2_2_(F) \ - F(cl_program_info, CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT, cl_bool) \ - F(cl_program_info, CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT, cl_bool) - -#define CL_HPP_PARAM_NAME_DEVICE_FISSION_(F) \ - F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \ - F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, cl::vector) \ - F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, cl::vector) \ - F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \ - F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, cl::vector) - -#define CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_CL3_SHARED_(F) \ - F(cl_platform_info, CL_PLATFORM_NUMERIC_VERSION_KHR, cl_version_khr) \ - F(cl_platform_info, CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR, cl::vector) \ - \ - F(cl_device_info, CL_DEVICE_NUMERIC_VERSION_KHR, cl_version_khr) \ - F(cl_device_info, CL_DEVICE_EXTENSIONS_WITH_VERSION_KHR, cl::vector) \ - F(cl_device_info, CL_DEVICE_ILS_WITH_VERSION_KHR, cl::vector) \ - F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION_KHR, cl::vector) - -#define CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_KHRONLY_(F) \ - F(cl_device_info, CL_DEVICE_OPENCL_C_NUMERIC_VERSION_KHR, cl_version_khr) - -#define CL_HPP_PARAM_NAME_INFO_3_0_(F) \ - F(cl_platform_info, CL_PLATFORM_NUMERIC_VERSION, cl_version) \ - F(cl_platform_info, CL_PLATFORM_EXTENSIONS_WITH_VERSION, cl::vector) \ - \ - F(cl_device_info, CL_DEVICE_NUMERIC_VERSION, cl_version) \ - F(cl_device_info, CL_DEVICE_EXTENSIONS_WITH_VERSION, cl::vector) \ - F(cl_device_info, CL_DEVICE_ILS_WITH_VERSION, cl::vector) \ - F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION, cl::vector) \ - F(cl_device_info, CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES, cl_device_atomic_capabilities) \ - F(cl_device_info, CL_DEVICE_ATOMIC_FENCE_CAPABILITIES, cl_device_atomic_capabilities) \ - F(cl_device_info, CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_OPENCL_C_ALL_VERSIONS, cl::vector) \ - F(cl_device_info, CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, size_type) \ - F(cl_device_info, CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_OPENCL_C_FEATURES, cl::vector) \ - F(cl_device_info, CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES, cl_device_device_enqueue_capabilities) \ - F(cl_device_info, CL_DEVICE_PIPE_SUPPORT, cl_bool) \ - F(cl_device_info, CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED, string) \ - \ - F(cl_command_queue_info, CL_QUEUE_PROPERTIES_ARRAY, cl::vector) \ - F(cl_mem_info, CL_MEM_PROPERTIES, cl::vector) \ - F(cl_pipe_info, CL_PIPE_PROPERTIES, cl::vector) \ - F(cl_sampler_info, CL_SAMPLER_PROPERTIES, cl::vector) - -template -struct param_traits {}; - -#define CL_HPP_DECLARE_PARAM_TRAITS_(token, param_name, T) \ -struct token; \ -template<> \ -struct param_traits \ -{ \ - enum { value = param_name }; \ - typedef T param_type; \ -}; - -CL_HPP_PARAM_NAME_INFO_1_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 -CL_HPP_PARAM_NAME_INFO_1_1_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -CL_HPP_PARAM_NAME_INFO_1_2_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -CL_HPP_PARAM_NAME_INFO_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 -CL_HPP_PARAM_NAME_INFO_2_1_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 210 -#if CL_HPP_TARGET_OPENCL_VERSION >= 220 -CL_HPP_PARAM_NAME_INFO_2_2_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 220 -#if CL_HPP_TARGET_OPENCL_VERSION >= 300 -CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 300 - -#if defined(CL_HPP_USE_CL_SUB_GROUPS_KHR) && CL_HPP_TARGET_OPENCL_VERSION < 210 -CL_HPP_PARAM_NAME_INFO_SUBGROUP_KHR_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // #if defined(CL_HPP_USE_CL_SUB_GROUPS_KHR) && CL_HPP_TARGET_OPENCL_VERSION < 210 - -#if defined(CL_HPP_USE_IL_KHR) && CL_HPP_TARGET_OPENCL_VERSION < 210 -CL_HPP_PARAM_NAME_INFO_IL_KHR_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // #if defined(CL_HPP_USE_IL_KHR) - - -// Flags deprecated in OpenCL 2.0 -#define CL_HPP_PARAM_NAME_INFO_1_0_DEPRECATED_IN_2_0_(F) \ - F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) - -#define CL_HPP_PARAM_NAME_INFO_1_1_DEPRECATED_IN_2_0_(F) \ - F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) - -#define CL_HPP_PARAM_NAME_INFO_1_2_DEPRECATED_IN_2_0_(F) \ - F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) - -// Include deprecated query flags based on versions -// Only include deprecated 1.0 flags if 2.0 not active as there is an enum clash -#if CL_HPP_TARGET_OPENCL_VERSION > 100 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 && CL_HPP_TARGET_OPENCL_VERSION < 200 -CL_HPP_PARAM_NAME_INFO_1_0_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 110 -#if CL_HPP_TARGET_OPENCL_VERSION > 110 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 -CL_HPP_PARAM_NAME_INFO_1_1_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 120 -#if CL_HPP_TARGET_OPENCL_VERSION > 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 -CL_HPP_PARAM_NAME_INFO_1_2_DEPRECATED_IN_2_0_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - -#if defined(CL_HPP_USE_CL_DEVICE_FISSION) -CL_HPP_PARAM_NAME_DEVICE_FISSION_(CL_HPP_DECLARE_PARAM_TRAITS_); -#endif // CL_HPP_USE_CL_DEVICE_FISSION - -#if defined(cl_khr_extended_versioning) -#if CL_HPP_TARGET_OPENCL_VERSION < 300 -CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_CL3_SHARED_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // CL_HPP_TARGET_OPENCL_VERSION < 300 -CL_HPP_PARAM_NAME_CL_KHR_EXTENDED_VERSIONING_KHRONLY_(CL_HPP_DECLARE_PARAM_TRAITS_) -#endif // cl_khr_extended_versioning - -#if defined(cl_khr_device_uuid) -using uuid_array = array; -using luid_array = array; -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_UUID_KHR, uuid_array) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DRIVER_UUID_KHR, uuid_array) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LUID_VALID_KHR, cl_bool) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LUID_KHR, luid_array) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_NODE_MASK_KHR, cl_uint) -#endif - -#if defined(cl_khr_pci_bus_info) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_PCI_BUS_INFO_KHR, cl_device_pci_bus_info_khr) -#endif - -#if defined(cl_khr_integer_dot_product) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_CAPABILITIES_KHR, cl_device_integer_dot_product_capabilities_khr) -#if defined(CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR, cl_device_integer_dot_product_acceleration_properties_khr) -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_4x8BIT_PACKED_KHR, cl_device_integer_dot_product_acceleration_properties_khr) -#endif // defined(CL_DEVICE_INTEGER_DOT_PRODUCT_ACCELERATION_PROPERTIES_8BIT_KHR) -#endif // defined(cl_khr_integer_dot_product) - -#ifdef CL_PLATFORM_ICD_SUFFIX_KHR -CL_HPP_DECLARE_PARAM_TRAITS_(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, string) -#endif - -#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong) -#endif -#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_FREE_MEMORY_AMD, vector) -#endif -#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_SIMD_WIDTH_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_WIDTH_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_WAVEFRONT_WIDTH_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_LOCAL_MEM_BANKS_AMD, cl_uint) -#endif -#ifdef CL_DEVICE_BOARD_NAME_AMD -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_BOARD_NAME_AMD, string) -#endif - -#ifdef CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM, cl_ulong) -#endif -#ifdef CL_DEVICE_JOB_SLOTS_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_JOB_SLOTS_ARM, cl_uint) -#endif -#ifdef CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM, cl_bitfield) -#endif -#ifdef CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_SUPPORTED_REGISTER_ALLOCATIONS_ARM, vector) -#endif -#ifdef CL_DEVICE_MAX_WARP_COUNT_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_MAX_WARP_COUNT_ARM, cl_uint) -#endif -#ifdef CL_KERNEL_MAX_WARP_COUNT_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_info, CL_KERNEL_MAX_WARP_COUNT_ARM, cl_uint) -#endif -#ifdef CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM, cl_uint) -#endif -#ifdef CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM, cl_int) -#endif -#ifdef CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_WARP_COUNT_LIMIT_ARM, cl_uint) -#endif -#ifdef CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM -CL_HPP_DECLARE_PARAM_TRAITS_(cl_kernel_exec_info, CL_KERNEL_EXEC_INFO_COMPUTE_UNIT_MAX_QUEUED_BATCHES_ARM, cl_uint) -#endif - -#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint) -#endif -#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint) -#endif -#ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint) -#endif -#ifdef CL_DEVICE_WARP_SIZE_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint) -#endif -#ifdef CL_DEVICE_GPU_OVERLAP_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool) -#endif -#ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool) -#endif -#ifdef CL_DEVICE_INTEGRATED_MEMORY_NV -CL_HPP_DECLARE_PARAM_TRAITS_(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool) -#endif - -// Convenience functions - -template -inline cl_int -getInfo(Func f, cl_uint name, T* param) -{ - return getInfoHelper(f, name, param, 0); -} - -template -struct GetInfoFunctor0 -{ - Func f_; const Arg0& arg0_; - cl_int operator ()( - cl_uint param, size_type size, void* value, size_type* size_ret) - { return f_(arg0_, param, size, value, size_ret); } -}; - -template -struct GetInfoFunctor1 -{ - Func f_; const Arg0& arg0_; const Arg1& arg1_; - cl_int operator ()( - cl_uint param, size_type size, void* value, size_type* size_ret) - { return f_(arg0_, arg1_, param, size, value, size_ret); } -}; - -template -inline cl_int -getInfo(Func f, const Arg0& arg0, cl_uint name, T* param) -{ - GetInfoFunctor0 f0 = { f, arg0 }; - return getInfoHelper(f0, name, param, 0); -} - -template -inline cl_int -getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param) -{ - GetInfoFunctor1 f0 = { f, arg0, arg1 }; - return getInfoHelper(f0, name, param, 0); -} - - -template -struct ReferenceHandler -{ }; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -/** - * OpenCL 1.2 devices do have retain/release. - */ -template <> -struct ReferenceHandler -{ - /** - * Retain the device. - * \param device A valid device created using createSubDevices - * \return - * CL_SUCCESS if the function executed successfully. - * CL_INVALID_DEVICE if device was not a valid subdevice - * CL_OUT_OF_RESOURCES - * CL_OUT_OF_HOST_MEMORY - */ - static cl_int retain(cl_device_id device) - { return ::clRetainDevice(device); } - /** - * Retain the device. - * \param device A valid device created using createSubDevices - * \return - * CL_SUCCESS if the function executed successfully. - * CL_INVALID_DEVICE if device was not a valid subdevice - * CL_OUT_OF_RESOURCES - * CL_OUT_OF_HOST_MEMORY - */ - static cl_int release(cl_device_id device) - { return ::clReleaseDevice(device); } -}; -#else // CL_HPP_TARGET_OPENCL_VERSION >= 120 -/** - * OpenCL 1.1 devices do not have retain/release. - */ -template <> -struct ReferenceHandler -{ - // cl_device_id does not have retain(). - static cl_int retain(cl_device_id) - { return CL_SUCCESS; } - // cl_device_id does not have release(). - static cl_int release(cl_device_id) - { return CL_SUCCESS; } -}; -#endif // ! (CL_HPP_TARGET_OPENCL_VERSION >= 120) - -template <> -struct ReferenceHandler -{ - // cl_platform_id does not have retain(). - static cl_int retain(cl_platform_id) - { return CL_SUCCESS; } - // cl_platform_id does not have release(). - static cl_int release(cl_platform_id) - { return CL_SUCCESS; } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_context context) - { return ::clRetainContext(context); } - static cl_int release(cl_context context) - { return ::clReleaseContext(context); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_command_queue queue) - { return ::clRetainCommandQueue(queue); } - static cl_int release(cl_command_queue queue) - { return ::clReleaseCommandQueue(queue); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_mem memory) - { return ::clRetainMemObject(memory); } - static cl_int release(cl_mem memory) - { return ::clReleaseMemObject(memory); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_sampler sampler) - { return ::clRetainSampler(sampler); } - static cl_int release(cl_sampler sampler) - { return ::clReleaseSampler(sampler); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_program program) - { return ::clRetainProgram(program); } - static cl_int release(cl_program program) - { return ::clReleaseProgram(program); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_kernel kernel) - { return ::clRetainKernel(kernel); } - static cl_int release(cl_kernel kernel) - { return ::clReleaseKernel(kernel); } -}; - -template <> -struct ReferenceHandler -{ - static cl_int retain(cl_event event) - { return ::clRetainEvent(event); } - static cl_int release(cl_event event) - { return ::clReleaseEvent(event); } -}; - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120 -// Extracts version number with major in the upper 16 bits, minor in the lower 16 -static cl_uint getVersion(const vector &versionInfo) -{ - int highVersion = 0; - int lowVersion = 0; - int index = 7; - while(versionInfo[index] != '.' ) { - highVersion *= 10; - highVersion += versionInfo[index]-'0'; - ++index; - } - ++index; - while(versionInfo[index] != ' ' && versionInfo[index] != '\0') { - lowVersion *= 10; - lowVersion += versionInfo[index]-'0'; - ++index; - } - return (highVersion << 16) | lowVersion; -} - -static cl_uint getPlatformVersion(cl_platform_id platform) -{ - size_type size = 0; - clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 0, NULL, &size); - - vector versionInfo(size); - clGetPlatformInfo(platform, CL_PLATFORM_VERSION, size, versionInfo.data(), &size); - return getVersion(versionInfo); -} - -static cl_uint getDevicePlatformVersion(cl_device_id device) -{ - cl_platform_id platform; - clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(platform), &platform, NULL); - return getPlatformVersion(platform); -} - -static cl_uint getContextPlatformVersion(cl_context context) -{ - // The platform cannot be queried directly, so we first have to grab a - // device and obtain its context - size_type size = 0; - clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &size); - if (size == 0) - return 0; - vector devices(size/sizeof(cl_device_id)); - clGetContextInfo(context, CL_CONTEXT_DEVICES, size, devices.data(), NULL); - return getDevicePlatformVersion(devices[0]); -} -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120 - -template -class Wrapper -{ -public: - typedef T cl_type; - -protected: - cl_type object_; - -public: - Wrapper() : object_(NULL) { } - - Wrapper(const cl_type &obj, bool retainObject) : object_(obj) - { - if (retainObject) { - detail::errHandler(retain(), __RETAIN_ERR); - } - } - - ~Wrapper() - { - if (object_ != NULL) { release(); } - } - - Wrapper(const Wrapper& rhs) - { - object_ = rhs.object_; - detail::errHandler(retain(), __RETAIN_ERR); - } - - Wrapper(Wrapper&& rhs) CL_HPP_NOEXCEPT_ - { - object_ = rhs.object_; - rhs.object_ = NULL; - } - - Wrapper& operator = (const Wrapper& rhs) - { - if (this != &rhs) { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs.object_; - detail::errHandler(retain(), __RETAIN_ERR); - } - return *this; - } - - Wrapper& operator = (Wrapper&& rhs) - { - if (this != &rhs) { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs.object_; - rhs.object_ = NULL; - } - return *this; - } - - Wrapper& operator = (const cl_type &rhs) - { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs; - return *this; - } - - const cl_type& operator ()() const { return object_; } - - cl_type& operator ()() { return object_; } - - cl_type get() const { return object_; } - -protected: - template - friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type); - - cl_int retain() const - { - if (object_ != nullptr) { - return ReferenceHandler::retain(object_); - } - else { - return CL_SUCCESS; - } - } - - cl_int release() const - { - if (object_ != nullptr) { - return ReferenceHandler::release(object_); - } - else { - return CL_SUCCESS; - } - } -}; - -template <> -class Wrapper -{ -public: - typedef cl_device_id cl_type; - -protected: - cl_type object_; - bool referenceCountable_; - - static bool isReferenceCountable(cl_device_id device) - { - bool retVal = false; -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 120 - if (device != NULL) { - int version = getDevicePlatformVersion(device); - if(version > ((1 << 16) + 1)) { - retVal = true; - } - } -#else // CL_HPP_MINIMUM_OPENCL_VERSION < 120 - retVal = true; -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 120 -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - (void)device; - return retVal; - } - -public: - Wrapper() : object_(NULL), referenceCountable_(false) - { - } - - Wrapper(const cl_type &obj, bool retainObject) : - object_(obj), - referenceCountable_(false) - { - referenceCountable_ = isReferenceCountable(obj); - - if (retainObject) { - detail::errHandler(retain(), __RETAIN_ERR); - } - } - - ~Wrapper() - { - release(); - } - - Wrapper(const Wrapper& rhs) - { - object_ = rhs.object_; - referenceCountable_ = isReferenceCountable(object_); - detail::errHandler(retain(), __RETAIN_ERR); - } - - Wrapper(Wrapper&& rhs) CL_HPP_NOEXCEPT_ - { - object_ = rhs.object_; - referenceCountable_ = rhs.referenceCountable_; - rhs.object_ = NULL; - rhs.referenceCountable_ = false; - } - - Wrapper& operator = (const Wrapper& rhs) - { - if (this != &rhs) { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs.object_; - referenceCountable_ = rhs.referenceCountable_; - detail::errHandler(retain(), __RETAIN_ERR); - } - return *this; - } - - Wrapper& operator = (Wrapper&& rhs) - { - if (this != &rhs) { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs.object_; - referenceCountable_ = rhs.referenceCountable_; - rhs.object_ = NULL; - rhs.referenceCountable_ = false; - } - return *this; - } - - Wrapper& operator = (const cl_type &rhs) - { - detail::errHandler(release(), __RELEASE_ERR); - object_ = rhs; - referenceCountable_ = isReferenceCountable(object_); - return *this; - } - - const cl_type& operator ()() const { return object_; } - - cl_type& operator ()() { return object_; } - - cl_type get() const { return object_; } - -protected: - template - friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type); - - template - friend inline cl_int getInfoHelper(Func, cl_uint, vector*, int, typename U::cl_type); - - cl_int retain() const - { - if( object_ != nullptr && referenceCountable_ ) { - return ReferenceHandler::retain(object_); - } - else { - return CL_SUCCESS; - } - } - - cl_int release() const - { - if (object_ != nullptr && referenceCountable_) { - return ReferenceHandler::release(object_); - } - else { - return CL_SUCCESS; - } - } -}; - -template -inline bool operator==(const Wrapper &lhs, const Wrapper &rhs) -{ - return lhs() == rhs(); -} - -template -inline bool operator!=(const Wrapper &lhs, const Wrapper &rhs) -{ - return !operator==(lhs, rhs); -} - -} // namespace detail -//! \endcond - - - - - -/*! \stuct ImageFormat - * \brief Adds constructors and member functions for cl_image_format. - * - * \see cl_image_format - */ -struct ImageFormat : public cl_image_format -{ - //! \brief Default constructor - performs no initialization. - ImageFormat(){} - - //! \brief Initializing constructor. - ImageFormat(cl_channel_order order, cl_channel_type type) - { - image_channel_order = order; - image_channel_data_type = type; - } - - //! \brief Copy constructor. - ImageFormat(const ImageFormat &other) { *this = other; } - - //! \brief Assignment operator. - ImageFormat& operator = (const ImageFormat& rhs) - { - if (this != &rhs) { - this->image_channel_data_type = rhs.image_channel_data_type; - this->image_channel_order = rhs.image_channel_order; - } - return *this; - } -}; - -/*! \brief Class interface for cl_device_id. - * - * \note Copies of these objects are inexpensive, since they don't 'own' - * any underlying resources or data structures. - * - * \see cl_device_id - */ -class Device : public detail::Wrapper -{ -private: - static std::once_flag default_initialized_; - static Device default_; - static cl_int default_error_; - - /*! \brief Create the default context. - * - * This sets @c default_ and @c default_error_. It does not throw - * @c cl::Error. - */ - static void makeDefault(); - - /*! \brief Create the default platform from a provided platform. - * - * This sets @c default_. It does not throw - * @c cl::Error. - */ - static void makeDefaultProvided(const Device &p) { - default_ = p; - } - -public: -#ifdef CL_HPP_UNIT_TEST_ENABLE - /*! \brief Reset the default. - * - * This sets @c default_ to an empty value to support cleanup in - * the unit test framework. - * This function is not thread safe. - */ - static void unitTestClearDefault() { - default_ = Device(); - } -#endif // #ifdef CL_HPP_UNIT_TEST_ENABLE - - //! \brief Default constructor - initializes to NULL. - Device() : detail::Wrapper() { } - - /*! \brief Constructor from cl_device_id. - * - * This simply copies the device ID value, which is an inexpensive operation. - */ - explicit Device(const cl_device_id &device, bool retainObject = false) : - detail::Wrapper(device, retainObject) { } - - /*! \brief Returns the first device on the default context. - * - * \see Context::getDefault() - */ - static Device getDefault( - cl_int *errResult = NULL) - { - std::call_once(default_initialized_, makeDefault); - detail::errHandler(default_error_); - if (errResult != NULL) { - *errResult = default_error_; - } - return default_; - } - - /** - * Modify the default device to be used by - * subsequent operations. - * Will only set the default if no default was previously created. - * @return updated default device. - * Should be compared to the passed value to ensure that it was updated. - */ - static Device setDefault(const Device &default_device) - { - std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_device)); - detail::errHandler(default_error_); - return default_; - } - - /*! \brief Assignment operator from cl_device_id. - * - * This simply copies the device ID value, which is an inexpensive operation. - */ - Device& operator = (const cl_device_id& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Device(const Device& dev) : detail::Wrapper(dev) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Device& operator = (const Device &dev) - { - detail::Wrapper::operator=(dev); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Device(Device&& dev) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(dev)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Device& operator = (Device &&dev) - { - detail::Wrapper::operator=(std::move(dev)); - return *this; - } - - //! \brief Wrapper for clGetDeviceInfo(). - template - cl_int getInfo(cl_device_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetDeviceInfo, object_, name, param), - __GET_DEVICE_INFO_ERR); - } - - //! \brief Wrapper for clGetDeviceInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_device_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - /** - * Return the current value of the host clock as seen by the device. - * The resolution of the device timer may be queried with the - * CL_DEVICE_PROFILING_TIMER_RESOLUTION query. - * @return The host timer value. - */ - cl_ulong getHostTimer(cl_int *error = nullptr) - { - cl_ulong retVal = 0; - cl_int err = - clGetHostTimer(this->get(), &retVal); - detail::errHandler( - err, - __GET_HOST_TIMER_ERR); - if (error) { - *error = err; - } - return retVal; - } - - /** - * Return a synchronized pair of host and device timestamps as seen by device. - * Use to correlate the clocks and get the host timer only using getHostTimer - * as a lower cost mechanism in between calls. - * The resolution of the host timer may be queried with the - * CL_PLATFORM_HOST_TIMER_RESOLUTION query. - * The resolution of the device timer may be queried with the - * CL_DEVICE_PROFILING_TIMER_RESOLUTION query. - * @return A pair of (device timer, host timer) timer values. - */ - std::pair getDeviceAndHostTimer(cl_int *error = nullptr) - { - std::pair retVal; - cl_int err = - clGetDeviceAndHostTimer(this->get(), &(retVal.first), &(retVal.second)); - detail::errHandler( - err, - __GET_DEVICE_AND_HOST_TIMER_ERR); - if (error) { - *error = err; - } - return retVal; - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - /** - * CL 1.2 version - */ -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - //! \brief Wrapper for clCreateSubDevices(). - cl_int createSubDevices( - const cl_device_partition_property * properties, - vector* devices) - { - cl_uint n = 0; - cl_int err = clCreateSubDevices(object_, properties, 0, NULL, &n); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR); - } - - vector ids(n); - err = clCreateSubDevices(object_, properties, n, ids.data(), NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR); - } - - // Cannot trivially assign because we need to capture intermediates - // with safe construction - if (devices) { - devices->resize(ids.size()); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < ids.size(); i++) { - // We do not need to retain because this device is being created - // by the runtime - (*devices)[i] = Device(ids[i], false); - } - } - - return CL_SUCCESS; - } -#elif defined(CL_HPP_USE_CL_DEVICE_FISSION) - -/** - * CL 1.1 version that uses device fission extension. - */ - cl_int createSubDevices( - const cl_device_partition_property_ext * properties, - vector* devices) - { - typedef CL_API_ENTRY cl_int - ( CL_API_CALL * PFN_clCreateSubDevicesEXT)( - cl_device_id /*in_device*/, - const cl_device_partition_property_ext * /* properties */, - cl_uint /*num_entries*/, - cl_device_id * /*out_devices*/, - cl_uint * /*num_devices*/ ) CL_API_SUFFIX__VERSION_1_1; - - static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL; - CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateSubDevicesEXT); - - cl_uint n = 0; - cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR); - } - - vector ids(n); - err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids.data(), NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_SUB_DEVICES_ERR); - } - // Cannot trivially assign because we need to capture intermediates - // with safe construction - if (devices) { - devices->resize(ids.size()); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < ids.size(); i++) { - // We do not need to retain because this device is being created - // by the runtime - (*devices)[i] = Device(ids[i], false); - } - } - return CL_SUCCESS; - } -#endif // defined(CL_HPP_USE_CL_DEVICE_FISSION) -}; - -using BuildLogType = vector::param_type>>; -#if defined(CL_HPP_ENABLE_EXCEPTIONS) -/** -* Exception class for build errors to carry build info -*/ -class BuildError : public Error -{ -private: - BuildLogType buildLogs; -public: - BuildError(cl_int err, const char * errStr, const BuildLogType &vec) : Error(err, errStr), buildLogs(vec) - { - } - - BuildLogType getBuildLog() const - { - return buildLogs; - } -}; -namespace detail { - static inline cl_int buildErrHandler( - cl_int err, - const char * errStr, - const BuildLogType &buildLogs) - { - if (err != CL_SUCCESS) { - throw BuildError(err, errStr, buildLogs); - } - return err; - } -} // namespace detail - -#else -namespace detail { - static inline cl_int buildErrHandler( - cl_int err, - const char * errStr, - const BuildLogType &buildLogs) - { - (void)buildLogs; // suppress unused variable warning - (void)errStr; - return err; - } -} // namespace detail -#endif // #if defined(CL_HPP_ENABLE_EXCEPTIONS) - -CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Device::default_initialized_; -CL_HPP_DEFINE_STATIC_MEMBER_ Device Device::default_; -CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Device::default_error_ = CL_SUCCESS; - -/*! \brief Class interface for cl_platform_id. - * - * \note Copies of these objects are inexpensive, since they don't 'own' - * any underlying resources or data structures. - * - * \see cl_platform_id - */ -class Platform : public detail::Wrapper -{ -private: - static std::once_flag default_initialized_; - static Platform default_; - static cl_int default_error_; - - /*! \brief Create the default context. - * - * This sets @c default_ and @c default_error_. It does not throw - * @c cl::Error. - */ - static void makeDefault() { - /* Throwing an exception from a call_once invocation does not do - * what we wish, so we catch it and save the error. - */ -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - try -#endif - { - // If default wasn't passed ,generate one - // Otherwise set it - cl_uint n = 0; - - cl_int err = ::clGetPlatformIDs(0, NULL, &n); - if (err != CL_SUCCESS) { - default_error_ = err; - return; - } - if (n == 0) { - default_error_ = CL_INVALID_PLATFORM; - return; - } - - vector ids(n); - err = ::clGetPlatformIDs(n, ids.data(), NULL); - if (err != CL_SUCCESS) { - default_error_ = err; - return; - } - - default_ = Platform(ids[0]); - } -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - catch (cl::Error &e) { - default_error_ = e.err(); - } -#endif - } - - /*! \brief Create the default platform from a provided platform. - * - * This sets @c default_. It does not throw - * @c cl::Error. - */ - static void makeDefaultProvided(const Platform &p) { - default_ = p; - } - -public: -#ifdef CL_HPP_UNIT_TEST_ENABLE - /*! \brief Reset the default. - * - * This sets @c default_ to an empty value to support cleanup in - * the unit test framework. - * This function is not thread safe. - */ - static void unitTestClearDefault() { - default_ = Platform(); - } -#endif // #ifdef CL_HPP_UNIT_TEST_ENABLE - - //! \brief Default constructor - initializes to NULL. - Platform() : detail::Wrapper() { } - - /*! \brief Constructor from cl_platform_id. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * This simply copies the platform ID value, which is an inexpensive operation. - */ - explicit Platform(const cl_platform_id &platform, bool retainObject = false) : - detail::Wrapper(platform, retainObject) { } - - /*! \brief Assignment operator from cl_platform_id. - * - * This simply copies the platform ID value, which is an inexpensive operation. - */ - Platform& operator = (const cl_platform_id& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - static Platform getDefault( - cl_int *errResult = NULL) - { - std::call_once(default_initialized_, makeDefault); - detail::errHandler(default_error_); - if (errResult != NULL) { - *errResult = default_error_; - } - return default_; - } - - /** - * Modify the default platform to be used by - * subsequent operations. - * Will only set the default if no default was previously created. - * @return updated default platform. - * Should be compared to the passed value to ensure that it was updated. - */ - static Platform setDefault(const Platform &default_platform) - { - std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_platform)); - detail::errHandler(default_error_); - return default_; - } - - //! \brief Wrapper for clGetPlatformInfo(). - template - cl_int getInfo(cl_platform_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetPlatformInfo, object_, name, param), - __GET_PLATFORM_INFO_ERR); - } - - //! \brief Wrapper for clGetPlatformInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_platform_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - /*! \brief Gets a list of devices for this platform. - * - * Wraps clGetDeviceIDs(). - */ - cl_int getDevices( - cl_device_type type, - vector* devices) const - { - cl_uint n = 0; - if( devices == NULL ) { - return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR); - } - cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n); - if (err != CL_SUCCESS && err != CL_DEVICE_NOT_FOUND) { - return detail::errHandler(err, __GET_DEVICE_IDS_ERR); - } - - vector ids(n); - if (n>0) { - err = ::clGetDeviceIDs(object_, type, n, ids.data(), NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_DEVICE_IDS_ERR); - } - } - - // Cannot trivially assign because we need to capture intermediates - // with safe construction - // We must retain things we obtain from the API to avoid releasing - // API-owned objects. - if (devices) { - devices->resize(ids.size()); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < ids.size(); i++) { - (*devices)[i] = Device(ids[i], true); - } - } - return CL_SUCCESS; - } - -#if defined(CL_HPP_USE_DX_INTEROP) - /*! \brief Get the list of available D3D10 devices. - * - * \param d3d_device_source. - * - * \param d3d_object. - * - * \param d3d_device_set. - * - * \param devices returns a vector of OpenCL D3D10 devices found. The cl::Device - * values returned in devices can be used to identify a specific OpenCL - * device. If \a devices argument is NULL, this argument is ignored. - * - * \return One of the following values: - * - CL_SUCCESS if the function is executed successfully. - * - * The application can query specific capabilities of the OpenCL device(s) - * returned by cl::getDevices. This can be used by the application to - * determine which device(s) to use. - * - * \note In the case that exceptions are enabled and a return value - * other than CL_SUCCESS is generated, then cl::Error exception is - * generated. - */ - cl_int getDevices( - cl_d3d10_device_source_khr d3d_device_source, - void * d3d_object, - cl_d3d10_device_set_khr d3d_device_set, - vector* devices) const - { - typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)( - cl_platform_id platform, - cl_d3d10_device_source_khr d3d_device_source, - void * d3d_object, - cl_d3d10_device_set_khr d3d_device_set, - cl_uint num_entries, - cl_device_id * devices, - cl_uint* num_devices); - - if( devices == NULL ) { - return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR); - } - - static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL; - CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(object_, clGetDeviceIDsFromD3D10KHR); - - cl_uint n = 0; - cl_int err = pfn_clGetDeviceIDsFromD3D10KHR( - object_, - d3d_device_source, - d3d_object, - d3d_device_set, - 0, - NULL, - &n); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_DEVICE_IDS_ERR); - } - - vector ids(n); - err = pfn_clGetDeviceIDsFromD3D10KHR( - object_, - d3d_device_source, - d3d_object, - d3d_device_set, - n, - ids.data(), - NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_DEVICE_IDS_ERR); - } - - // Cannot trivially assign because we need to capture intermediates - // with safe construction - // We must retain things we obtain from the API to avoid releasing - // API-owned objects. - if (devices) { - devices->resize(ids.size()); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < ids.size(); i++) { - (*devices)[i] = Device(ids[i], true); - } - } - return CL_SUCCESS; - } -#endif - - /*! \brief Gets a list of available platforms. - * - * Wraps clGetPlatformIDs(). - */ - static cl_int get( - vector* platforms) - { - cl_uint n = 0; - - if( platforms == NULL ) { - return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR); - } - - cl_int err = ::clGetPlatformIDs(0, NULL, &n); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); - } - - vector ids(n); - err = ::clGetPlatformIDs(n, ids.data(), NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_PLATFORM_IDS_ERR); - } - - if (platforms) { - platforms->resize(ids.size()); - - // Platforms don't reference count - for (size_type i = 0; i < ids.size(); i++) { - (*platforms)[i] = Platform(ids[i]); - } - } - return CL_SUCCESS; - } - - /*! \brief Gets the first available platform. - * - * Wraps clGetPlatformIDs(), returning the first result. - */ - static cl_int get( - Platform * platform) - { - cl_int err; - Platform default_platform = Platform::getDefault(&err); - if (platform) { - *platform = default_platform; - } - return err; - } - - /*! \brief Gets the first available platform, returning it by value. - * - * \return Returns a valid platform if one is available. - * If no platform is available will return a null platform. - * Throws an exception if no platforms are available - * or an error condition occurs. - * Wraps clGetPlatformIDs(), returning the first result. - */ - static Platform get( - cl_int * errResult = NULL) - { - cl_int err; - Platform default_platform = Platform::getDefault(&err); - if (errResult) { - *errResult = err; - } - return default_platform; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - //! \brief Wrapper for clUnloadCompiler(). - cl_int - unloadCompiler() - { - return ::clUnloadPlatformCompiler(object_); - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -}; // class Platform - -CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Platform::default_initialized_; -CL_HPP_DEFINE_STATIC_MEMBER_ Platform Platform::default_; -CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Platform::default_error_ = CL_SUCCESS; - - -/** - * Deprecated APIs for 1.2 - */ -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -/** - * Unload the OpenCL compiler. - * \note Deprecated for OpenCL 1.2. Use Platform::unloadCompiler instead. - */ -inline CL_API_PREFIX__VERSION_1_1_DEPRECATED cl_int -UnloadCompiler() CL_API_SUFFIX__VERSION_1_1_DEPRECATED; -inline cl_int -UnloadCompiler() -{ - return ::clUnloadCompiler(); -} -#endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - -/*! \brief Class interface for cl_context. - * - * \note Copies of these objects are shallow, meaning that the copy will refer - * to the same underlying cl_context as the original. For details, see - * clRetainContext() and clReleaseContext(). - * - * \see cl_context - */ -class Context - : public detail::Wrapper -{ -private: - static std::once_flag default_initialized_; - static Context default_; - static cl_int default_error_; - - /*! \brief Create the default context from the default device type in the default platform. - * - * This sets @c default_ and @c default_error_. It does not throw - * @c cl::Error. - */ - static void makeDefault() { - /* Throwing an exception from a call_once invocation does not do - * what we wish, so we catch it and save the error. - */ -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - try -#endif - { -#if !defined(__APPLE__) && !defined(__MACOS) - const Platform &p = Platform::getDefault(); - cl_platform_id defaultPlatform = p(); - cl_context_properties properties[3] = { - CL_CONTEXT_PLATFORM, (cl_context_properties)defaultPlatform, 0 - }; -#else // #if !defined(__APPLE__) && !defined(__MACOS) - cl_context_properties *properties = nullptr; -#endif // #if !defined(__APPLE__) && !defined(__MACOS) - - default_ = Context( - CL_DEVICE_TYPE_DEFAULT, - properties, - NULL, - NULL, - &default_error_); - } -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - catch (cl::Error &e) { - default_error_ = e.err(); - } -#endif - } - - - /*! \brief Create the default context from a provided Context. - * - * This sets @c default_. It does not throw - * @c cl::Error. - */ - static void makeDefaultProvided(const Context &c) { - default_ = c; - } - -public: -#ifdef CL_HPP_UNIT_TEST_ENABLE - /*! \brief Reset the default. - * - * This sets @c default_ to an empty value to support cleanup in - * the unit test framework. - * This function is not thread safe. - */ - static void unitTestClearDefault() { - default_ = Context(); - } -#endif // #ifdef CL_HPP_UNIT_TEST_ENABLE - - /*! \brief Constructs a context including a list of specified devices. - * - * Wraps clCreateContext(). - */ - Context( - const vector& devices, - const cl_context_properties* properties = NULL, - void (CL_CALLBACK * notifyFptr)( - const char *, - const void *, - size_type, - void *) = NULL, - void* data = NULL, - cl_int* err = NULL) - { - cl_int error; - - size_type numDevices = devices.size(); - vector deviceIDs(numDevices); - - for( size_type deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { - deviceIDs[deviceIndex] = (devices[deviceIndex])(); - } - - object_ = ::clCreateContext( - properties, (cl_uint) numDevices, - deviceIDs.data(), - notifyFptr, data, &error); - - detail::errHandler(error, __CREATE_CONTEXT_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Constructs a context including a specific device. - * - * Wraps clCreateContext(). - */ - Context( - const Device& device, - const cl_context_properties* properties = NULL, - void (CL_CALLBACK * notifyFptr)( - const char *, - const void *, - size_type, - void *) = NULL, - void* data = NULL, - cl_int* err = NULL) - { - cl_int error; - - cl_device_id deviceID = device(); - - object_ = ::clCreateContext( - properties, 1, - &deviceID, - notifyFptr, data, &error); - - detail::errHandler(error, __CREATE_CONTEXT_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Constructs a context including all or a subset of devices of a specified type. - * - * Wraps clCreateContextFromType(). - */ - Context( - cl_device_type type, - const cl_context_properties* properties = NULL, - void (CL_CALLBACK * notifyFptr)( - const char *, - const void *, - size_type, - void *) = NULL, - void* data = NULL, - cl_int* err = NULL) - { - cl_int error; - -#if !defined(__APPLE__) && !defined(__MACOS) - cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 }; - - if (properties == NULL) { - // Get a valid platform ID as we cannot send in a blank one - vector platforms; - error = Platform::get(&platforms); - if (error != CL_SUCCESS) { - detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR); - if (err != NULL) { - *err = error; - } - return; - } - - // Check the platforms we found for a device of our specified type - cl_context_properties platform_id = 0; - for (unsigned int i = 0; i < platforms.size(); i++) { - - vector devices; - -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - try { -#endif - - error = platforms[i].getDevices(type, &devices); - -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - } catch (cl::Error& e) { - error = e.err(); - } - // Catch if exceptions are enabled as we don't want to exit if first platform has no devices of type - // We do error checking next anyway, and can throw there if needed -#endif - - // Only squash CL_SUCCESS and CL_DEVICE_NOT_FOUND - if (error != CL_SUCCESS && error != CL_DEVICE_NOT_FOUND) { - detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR); - if (err != NULL) { - *err = error; - } - } - - if (devices.size() > 0) { - platform_id = (cl_context_properties)platforms[i](); - break; - } - } - - if (platform_id == 0) { - detail::errHandler(CL_DEVICE_NOT_FOUND, __CREATE_CONTEXT_FROM_TYPE_ERR); - if (err != NULL) { - *err = CL_DEVICE_NOT_FOUND; - } - return; - } - - prop[1] = platform_id; - properties = &prop[0]; - } -#endif - object_ = ::clCreateContextFromType( - properties, type, notifyFptr, data, &error); - - detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Context(const Context& ctx) : detail::Wrapper(ctx) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Context& operator = (const Context &ctx) - { - detail::Wrapper::operator=(ctx); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Context(Context&& ctx) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(ctx)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Context& operator = (Context &&ctx) - { - detail::Wrapper::operator=(std::move(ctx)); - return *this; - } - - - /*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT. - * - * \note All calls to this function return the same cl_context as the first. - */ - static Context getDefault(cl_int * err = NULL) - { - std::call_once(default_initialized_, makeDefault); - detail::errHandler(default_error_); - if (err != NULL) { - *err = default_error_; - } - return default_; - } - - /** - * Modify the default context to be used by - * subsequent operations. - * Will only set the default if no default was previously created. - * @return updated default context. - * Should be compared to the passed value to ensure that it was updated. - */ - static Context setDefault(const Context &default_context) - { - std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_context)); - detail::errHandler(default_error_); - return default_; - } - - //! \brief Default constructor - initializes to NULL. - Context() : detail::Wrapper() { } - - /*! \brief Constructor from cl_context - takes ownership. - * - * This effectively transfers ownership of a refcount on the cl_context - * into the new Context object. - */ - explicit Context(const cl_context& context, bool retainObject = false) : - detail::Wrapper(context, retainObject) { } - - /*! \brief Assignment operator from cl_context - takes ownership. - * - * This effectively transfers ownership of a refcount on the rhs and calls - * clReleaseContext() on the value previously held by this instance. - */ - Context& operator = (const cl_context& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - //! \brief Wrapper for clGetContextInfo(). - template - cl_int getInfo(cl_context_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetContextInfo, object_, name, param), - __GET_CONTEXT_INFO_ERR); - } - - //! \brief Wrapper for clGetContextInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_context_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - /*! \brief Gets a list of supported image formats. - * - * Wraps clGetSupportedImageFormats(). - */ - cl_int getSupportedImageFormats( - cl_mem_flags flags, - cl_mem_object_type type, - vector* formats) const - { - cl_uint numEntries; - - if (!formats) { - return CL_SUCCESS; - } - - cl_int err = ::clGetSupportedImageFormats( - object_, - flags, - type, - 0, - NULL, - &numEntries); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR); - } - - if (numEntries > 0) { - vector value(numEntries); - err = ::clGetSupportedImageFormats( - object_, - flags, - type, - numEntries, - (cl_image_format*)value.data(), - NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR); - } - - formats->assign(begin(value), end(value)); - } - else { - // If no values are being returned, ensure an empty vector comes back - formats->clear(); - } - - return CL_SUCCESS; - } -}; - -inline void Device::makeDefault() -{ - /* Throwing an exception from a call_once invocation does not do - * what we wish, so we catch it and save the error. - */ -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - try -#endif - { - cl_int error = 0; - - Context context = Context::getDefault(&error); - detail::errHandler(error, __CREATE_CONTEXT_ERR); - - if (error != CL_SUCCESS) { - default_error_ = error; - } - else { - default_ = context.getInfo()[0]; - default_error_ = CL_SUCCESS; - } - } -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - catch (cl::Error &e) { - default_error_ = e.err(); - } -#endif -} - -CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag Context::default_initialized_; -CL_HPP_DEFINE_STATIC_MEMBER_ Context Context::default_; -CL_HPP_DEFINE_STATIC_MEMBER_ cl_int Context::default_error_ = CL_SUCCESS; - -/*! \brief Class interface for cl_event. - * - * \note Copies of these objects are shallow, meaning that the copy will refer - * to the same underlying cl_event as the original. For details, see - * clRetainEvent() and clReleaseEvent(). - * - * \see cl_event - */ -class Event : public detail::Wrapper -{ -public: - //! \brief Default constructor - initializes to NULL. - Event() : detail::Wrapper() { } - - /*! \brief Constructor from cl_event - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * This effectively transfers ownership of a refcount on the cl_event - * into the new Event object. - */ - explicit Event(const cl_event& event, bool retainObject = false) : - detail::Wrapper(event, retainObject) { } - - /*! \brief Assignment operator from cl_event - takes ownership. - * - * This effectively transfers ownership of a refcount on the rhs and calls - * clReleaseEvent() on the value previously held by this instance. - */ - Event& operator = (const cl_event& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - //! \brief Wrapper for clGetEventInfo(). - template - cl_int getInfo(cl_event_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetEventInfo, object_, name, param), - __GET_EVENT_INFO_ERR); - } - - //! \brief Wrapper for clGetEventInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_event_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - //! \brief Wrapper for clGetEventProfilingInfo(). - template - cl_int getProfilingInfo(cl_profiling_info name, T* param) const - { - return detail::errHandler(detail::getInfo( - &::clGetEventProfilingInfo, object_, name, param), - __GET_EVENT_PROFILE_INFO_ERR); - } - - //! \brief Wrapper for clGetEventProfilingInfo() that returns by value. - template typename - detail::param_traits::param_type - getProfilingInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_profiling_info, name>::param_type param; - cl_int result = getProfilingInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - /*! \brief Blocks the calling thread until this event completes. - * - * Wraps clWaitForEvents(). - */ - cl_int wait() const - { - return detail::errHandler( - ::clWaitForEvents(1, &object_), - __WAIT_FOR_EVENTS_ERR); - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - /*! \brief Registers a user callback function for a specific command execution status. - * - * Wraps clSetEventCallback(). - */ - cl_int setCallback( - cl_int type, - void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *), - void * user_data = NULL) - { - return detail::errHandler( - ::clSetEventCallback( - object_, - type, - pfn_notify, - user_data), - __SET_EVENT_CALLBACK_ERR); - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 - - /*! \brief Blocks the calling thread until every event specified is complete. - * - * Wraps clWaitForEvents(). - */ - static cl_int - waitForEvents(const vector& events) - { - return detail::errHandler( - ::clWaitForEvents( - (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() : NULL), - __WAIT_FOR_EVENTS_ERR); - } -}; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 -/*! \brief Class interface for user events (a subset of cl_event's). - * - * See Event for details about copy semantics, etc. - */ -class UserEvent : public Event -{ -public: - /*! \brief Constructs a user event on a given context. - * - * Wraps clCreateUserEvent(). - */ - UserEvent( - const Context& context, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateUserEvent( - context(), - &error); - - detail::errHandler(error, __CREATE_USER_EVENT_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - UserEvent() : Event() { } - - /*! \brief Sets the execution status of a user event object. - * - * Wraps clSetUserEventStatus(). - */ - cl_int setStatus(cl_int status) - { - return detail::errHandler( - ::clSetUserEventStatus(object_,status), - __SET_USER_EVENT_STATUS_ERR); - } -}; -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 - -/*! \brief Blocks the calling thread until every event specified is complete. - * - * Wraps clWaitForEvents(). - */ -inline static cl_int -WaitForEvents(const vector& events) -{ - return detail::errHandler( - ::clWaitForEvents( - (cl_uint) events.size(), (events.size() > 0) ? (cl_event*)&events.front() : NULL), - __WAIT_FOR_EVENTS_ERR); -} - -/*! \brief Class interface for cl_mem. - * - * \note Copies of these objects are shallow, meaning that the copy will refer - * to the same underlying cl_mem as the original. For details, see - * clRetainMemObject() and clReleaseMemObject(). - * - * \see cl_mem - */ -class Memory : public detail::Wrapper -{ -public: - //! \brief Default constructor - initializes to NULL. - Memory() : detail::Wrapper() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * Optionally transfer ownership of a refcount on the cl_mem - * into the new Memory object. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * - * See Memory for further details. - */ - explicit Memory(const cl_mem& memory, bool retainObject) : - detail::Wrapper(memory, retainObject) { } - - /*! \brief Assignment operator from cl_mem - takes ownership. - * - * This effectively transfers ownership of a refcount on the rhs and calls - * clReleaseMemObject() on the value previously held by this instance. - */ - Memory& operator = (const cl_mem& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Memory(const Memory& mem) : detail::Wrapper(mem) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Memory& operator = (const Memory &mem) - { - detail::Wrapper::operator=(mem); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Memory(Memory&& mem) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(mem)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Memory& operator = (Memory &&mem) - { - detail::Wrapper::operator=(std::move(mem)); - return *this; - } - - - //! \brief Wrapper for clGetMemObjectInfo(). - template - cl_int getInfo(cl_mem_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetMemObjectInfo, object_, name, param), - __GET_MEM_OBJECT_INFO_ERR); - } - - //! \brief Wrapper for clGetMemObjectInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_mem_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - /*! \brief Registers a callback function to be called when the memory object - * is no longer needed. - * - * Wraps clSetMemObjectDestructorCallback(). - * - * Repeated calls to this function, for a given cl_mem value, will append - * to the list of functions called (in reverse order) when memory object's - * resources are freed and the memory object is deleted. - * - * \note - * The registered callbacks are associated with the underlying cl_mem - * value - not the Memory class instance. - */ - cl_int setDestructorCallback( - void (CL_CALLBACK * pfn_notify)(cl_mem, void *), - void * user_data = NULL) - { - return detail::errHandler( - ::clSetMemObjectDestructorCallback( - object_, - pfn_notify, - user_data), - __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR); - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 - -}; - -// Pre-declare copy functions -class Buffer; -template< typename IteratorType > -cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ); -template< typename IteratorType > -cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ); -template< typename IteratorType > -cl_int copy( const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ); -template< typename IteratorType > -cl_int copy( const CommandQueue &queue, const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ); - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -namespace detail -{ - class SVMTraitNull - { - public: - static cl_svm_mem_flags getSVMMemFlags() - { - return 0; - } - }; -} // namespace detail - -template -class SVMTraitReadWrite -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return CL_MEM_READ_WRITE | - Trait::getSVMMemFlags(); - } -}; - -template -class SVMTraitReadOnly -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return CL_MEM_READ_ONLY | - Trait::getSVMMemFlags(); - } -}; - -template -class SVMTraitWriteOnly -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return CL_MEM_WRITE_ONLY | - Trait::getSVMMemFlags(); - } -}; - -template> -class SVMTraitCoarse -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return Trait::getSVMMemFlags(); - } -}; - -template> -class SVMTraitFine -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return CL_MEM_SVM_FINE_GRAIN_BUFFER | - Trait::getSVMMemFlags(); - } -}; - -template> -class SVMTraitAtomic -{ -public: - static cl_svm_mem_flags getSVMMemFlags() - { - return - CL_MEM_SVM_FINE_GRAIN_BUFFER | - CL_MEM_SVM_ATOMICS | - Trait::getSVMMemFlags(); - } -}; - -// Pre-declare SVM map function -template -inline cl_int enqueueMapSVM( - T* ptr, - cl_bool blocking, - cl_map_flags flags, - size_type size, - const vector* events = NULL, - Event* event = NULL); - -/** - * STL-like allocator class for managing SVM objects provided for convenience. - * - * Note that while this behaves like an allocator for the purposes of constructing vectors and similar objects, - * care must be taken when using with smart pointers. - * The allocator should not be used to construct a unique_ptr if we are using coarse-grained SVM mode because - * the coarse-grained management behaviour would behave incorrectly with respect to reference counting. - * - * Instead the allocator embeds a Deleter which may be used with unique_ptr and is used - * with the allocate_shared and allocate_ptr supplied operations. - */ -template -class SVMAllocator { -private: - Context context_; - -public: - typedef T value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - template - struct rebind - { - typedef SVMAllocator other; - }; - - template - friend class SVMAllocator; - - SVMAllocator() : - context_(Context::getDefault()) - { - } - - explicit SVMAllocator(cl::Context context) : - context_(context) - { - } - - - SVMAllocator(const SVMAllocator &other) : - context_(other.context_) - { - } - - template - SVMAllocator(const SVMAllocator &other) : - context_(other.context_) - { - } - - ~SVMAllocator() - { - } - - pointer address(reference r) CL_HPP_NOEXCEPT_ - { - return std::addressof(r); - } - - const_pointer address(const_reference r) CL_HPP_NOEXCEPT_ - { - return std::addressof(r); - } - - /** - * Allocate an SVM pointer. - * - * If the allocator is coarse-grained, this will take ownership to allow - * containers to correctly construct data in place. - */ - pointer allocate( - size_type size, - typename cl::SVMAllocator::const_pointer = 0) - { - // Allocate memory with default alignment matching the size of the type - void* voidPointer = - clSVMAlloc( - context_(), - SVMTrait::getSVMMemFlags(), - size*sizeof(T), - 0); - pointer retValue = reinterpret_cast( - voidPointer); -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - if (!retValue) { - std::bad_alloc excep; - throw excep; - } -#endif // #if defined(CL_HPP_ENABLE_EXCEPTIONS) - - // If allocation was coarse-grained then map it - if (!(SVMTrait::getSVMMemFlags() & CL_MEM_SVM_FINE_GRAIN_BUFFER)) { - cl_int err = enqueueMapSVM(retValue, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, size*sizeof(T)); - if (err != CL_SUCCESS) { - std::bad_alloc excep; - throw excep; - } - } - - // If exceptions disabled, return null pointer from allocator - return retValue; - } - - void deallocate(pointer p, size_type) - { - clSVMFree(context_(), p); - } - - /** - * Return the maximum possible allocation size. - * This is the minimum of the maximum sizes of all devices in the context. - */ - size_type max_size() const CL_HPP_NOEXCEPT_ - { - size_type maxSize = std::numeric_limits::max() / sizeof(T); - - for (const Device &d : context_.getInfo()) { - maxSize = std::min( - maxSize, - static_cast(d.getInfo())); - } - - return maxSize; - } - - template< class U, class... Args > - void construct(U* p, Args&&... args) - { - new(p)T(args...); - } - - template< class U > - void destroy(U* p) - { - p->~U(); - } - - /** - * Returns true if the contexts match. - */ - inline bool operator==(SVMAllocator const& rhs) - { - return (context_==rhs.context_); - } - - inline bool operator!=(SVMAllocator const& a) - { - return !operator==(a); - } -}; // class SVMAllocator return cl::pointer(tmp, detail::Deleter{alloc, copies}); - - -template -class SVMAllocator { -public: - typedef void value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - - template - struct rebind - { - typedef SVMAllocator other; - }; - - template - friend class SVMAllocator; -}; - -#if !defined(CL_HPP_NO_STD_UNIQUE_PTR) -namespace detail -{ - template - class Deleter { - private: - Alloc alloc_; - size_type copies_; - - public: - typedef typename std::allocator_traits::pointer pointer; - - Deleter(const Alloc &alloc, size_type copies) : alloc_{ alloc }, copies_{ copies } - { - } - - void operator()(pointer ptr) const { - Alloc tmpAlloc{ alloc_ }; - std::allocator_traits::destroy(tmpAlloc, std::addressof(*ptr)); - std::allocator_traits::deallocate(tmpAlloc, ptr, copies_); - } - }; -} // namespace detail - -/** - * Allocation operation compatible with std::allocate_ptr. - * Creates a unique_ptr by default. - * This requirement is to ensure that the control block is not - * allocated in memory inaccessible to the host. - */ -template -cl::pointer> allocate_pointer(const Alloc &alloc_, Args&&... args) -{ - Alloc alloc(alloc_); - static const size_type copies = 1; - - // Ensure that creation of the management block and the - // object are dealt with separately such that we only provide a deleter - - T* tmp = std::allocator_traits::allocate(alloc, copies); - if (!tmp) { - std::bad_alloc excep; - throw excep; - } - try { - std::allocator_traits::construct( - alloc, - std::addressof(*tmp), - std::forward(args)...); - - return cl::pointer>(tmp, detail::Deleter{alloc, copies}); - } - catch (std::bad_alloc&) - { - std::allocator_traits::deallocate(alloc, tmp, copies); - throw; - } -} - -template< class T, class SVMTrait, class... Args > -cl::pointer>> allocate_svm(Args... args) -{ - SVMAllocator alloc; - return cl::allocate_pointer(alloc, args...); -} - -template< class T, class SVMTrait, class... Args > -cl::pointer>> allocate_svm(const cl::Context &c, Args... args) -{ - SVMAllocator alloc(c); - return cl::allocate_pointer(alloc, args...); -} -#endif // #if !defined(CL_HPP_NO_STD_UNIQUE_PTR) - -/*! \brief Vector alias to simplify contruction of coarse-grained SVM containers. - * - */ -template < class T > -using coarse_svm_vector = vector>>; - -/*! \brief Vector alias to simplify contruction of fine-grained SVM containers. -* -*/ -template < class T > -using fine_svm_vector = vector>>; - -/*! \brief Vector alias to simplify contruction of fine-grained SVM containers that support platform atomics. -* -*/ -template < class T > -using atomic_svm_vector = vector>>; - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - -/*! \brief Class interface for Buffer Memory Objects. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Buffer : public Memory -{ -public: - - /*! \brief Constructs a Buffer in a specified context. - * - * Wraps clCreateBuffer(). - * - * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was - * specified. Note alignment & exclusivity requirements. - */ - Buffer( - const Context& context, - cl_mem_flags flags, - size_type size, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error); - - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Constructs a Buffer in the default context. - * - * Wraps clCreateBuffer(). - * - * \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was - * specified. Note alignment & exclusivity requirements. - * - * \see Context::getDefault() - */ - Buffer( - cl_mem_flags flags, - size_type size, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - - Context context = Context::getDefault(err); - - object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error); - - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! - * \brief Construct a Buffer from a host container via iterators. - * IteratorType must be random access. - * If useHostPtr is specified iterators must represent contiguous data. - */ - template< typename IteratorType > - Buffer( - IteratorType startIterator, - IteratorType endIterator, - bool readOnly, - bool useHostPtr = false, - cl_int* err = NULL) - { - typedef typename std::iterator_traits::value_type DataType; - cl_int error; - - cl_mem_flags flags = 0; - if( readOnly ) { - flags |= CL_MEM_READ_ONLY; - } - else { - flags |= CL_MEM_READ_WRITE; - } - if( useHostPtr ) { - flags |= CL_MEM_USE_HOST_PTR; - } - - size_type size = sizeof(DataType)*(endIterator - startIterator); - - Context context = Context::getDefault(err); - - if( useHostPtr ) { - object_ = ::clCreateBuffer(context(), flags, size, const_cast(&*startIterator), &error); - } else { - object_ = ::clCreateBuffer(context(), flags, size, 0, &error); - } - - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - - if( !useHostPtr ) { - error = cl::copy(startIterator, endIterator, *this); - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - } - - /*! - * \brief Construct a Buffer from a host container via iterators using a specified context. - * IteratorType must be random access. - * If useHostPtr is specified iterators must represent contiguous data. - */ - template< typename IteratorType > - Buffer(const Context &context, IteratorType startIterator, IteratorType endIterator, - bool readOnly, bool useHostPtr = false, cl_int* err = NULL); - - /*! - * \brief Construct a Buffer from a host container via iterators using a specified queue. - * If useHostPtr is specified iterators must be random access. - */ - template< typename IteratorType > - Buffer(const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator, - bool readOnly, bool useHostPtr = false, cl_int* err = NULL); - - //! \brief Default constructor - initializes to NULL. - Buffer() : Memory() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with earlier versions. - * - * See Memory for further details. - */ - explicit Buffer(const cl_mem& buffer, bool retainObject = false) : - Memory(buffer, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Buffer& operator = (const cl_mem& rhs) - { - Memory::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Buffer(const Buffer& buf) : Memory(buf) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Buffer& operator = (const Buffer &buf) - { - Memory::operator=(buf); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Buffer(Buffer&& buf) CL_HPP_NOEXCEPT_ : Memory(std::move(buf)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Buffer& operator = (Buffer &&buf) - { - Memory::operator=(std::move(buf)); - return *this; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - /*! \brief Creates a new buffer object from this. - * - * Wraps clCreateSubBuffer(). - */ - Buffer createSubBuffer( - cl_mem_flags flags, - cl_buffer_create_type buffer_create_type, - const void * buffer_create_info, - cl_int * err = NULL) - { - Buffer result; - cl_int error; - result.object_ = ::clCreateSubBuffer( - object_, - flags, - buffer_create_type, - buffer_create_info, - &error); - - detail::errHandler(error, __CREATE_SUBBUFFER_ERR); - if (err != NULL) { - *err = error; - } - - return result; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 -}; - -#if defined (CL_HPP_USE_DX_INTEROP) -/*! \brief Class interface for creating OpenCL buffers from ID3D10Buffer's. - * - * This is provided to facilitate interoperability with Direct3D. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class BufferD3D10 : public Buffer -{ -public: - - - /*! \brief Constructs a BufferD3D10, in a specified context, from a - * given ID3D10Buffer. - * - * Wraps clCreateFromD3D10BufferKHR(). - */ - BufferD3D10( - const Context& context, - cl_mem_flags flags, - ID3D10Buffer* bufobj, - cl_int * err = NULL) : pfn_clCreateFromD3D10BufferKHR(nullptr) - { - typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)( - cl_context context, cl_mem_flags flags, ID3D10Buffer* buffer, - cl_int* errcode_ret); - PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR; -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - vector props = context.getInfo(); - cl_platform platform = -1; - for( int i = 0; i < props.size(); ++i ) { - if( props[i] == CL_CONTEXT_PLATFORM ) { - platform = props[i+1]; - } - } - CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clCreateFromD3D10BufferKHR); -#elif CL_HPP_TARGET_OPENCL_VERSION >= 110 - CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateFromD3D10BufferKHR); -#endif - - cl_int error; - object_ = pfn_clCreateFromD3D10BufferKHR( - context(), - flags, - bufobj, - &error); - - detail::errHandler(error, __CREATE_GL_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - BufferD3D10() : Buffer() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit BufferD3D10(const cl_mem& buffer, bool retainObject = false) : - Buffer(buffer, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - BufferD3D10& operator = (const cl_mem& rhs) - { - Buffer::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferD3D10(const BufferD3D10& buf) : - Buffer(buf) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferD3D10& operator = (const BufferD3D10 &buf) - { - Buffer::operator=(buf); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferD3D10(BufferD3D10&& buf) CL_HPP_NOEXCEPT_ : Buffer(std::move(buf)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferD3D10& operator = (BufferD3D10 &&buf) - { - Buffer::operator=(std::move(buf)); - return *this; - } -}; -#endif - -/*! \brief Class interface for GL Buffer Memory Objects. - * - * This is provided to facilitate interoperability with OpenGL. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class BufferGL : public Buffer -{ -public: - /*! \brief Constructs a BufferGL in a specified context, from a given - * GL buffer. - * - * Wraps clCreateFromGLBuffer(). - */ - BufferGL( - const Context& context, - cl_mem_flags flags, - cl_GLuint bufobj, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateFromGLBuffer( - context(), - flags, - bufobj, - &error); - - detail::errHandler(error, __CREATE_GL_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - BufferGL() : Buffer() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit BufferGL(const cl_mem& buffer, bool retainObject = false) : - Buffer(buffer, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - BufferGL& operator = (const cl_mem& rhs) - { - Buffer::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferGL(const BufferGL& buf) : Buffer(buf) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferGL& operator = (const BufferGL &buf) - { - Buffer::operator=(buf); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferGL(BufferGL&& buf) CL_HPP_NOEXCEPT_ : Buffer(std::move(buf)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferGL& operator = (BufferGL &&buf) - { - Buffer::operator=(std::move(buf)); - return *this; - } - - //! \brief Wrapper for clGetGLObjectInfo(). - cl_int getObjectInfo( - cl_gl_object_type *type, - cl_GLuint * gl_object_name) - { - return detail::errHandler( - ::clGetGLObjectInfo(object_,type,gl_object_name), - __GET_GL_OBJECT_INFO_ERR); - } -}; - -/*! \brief Class interface for GL Render Buffer Memory Objects. - * - * This is provided to facilitate interoperability with OpenGL. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class BufferRenderGL : public Buffer -{ -public: - /*! \brief Constructs a BufferRenderGL in a specified context, from a given - * GL Renderbuffer. - * - * Wraps clCreateFromGLRenderbuffer(). - */ - BufferRenderGL( - const Context& context, - cl_mem_flags flags, - cl_GLuint bufobj, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateFromGLRenderbuffer( - context(), - flags, - bufobj, - &error); - - detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - BufferRenderGL() : Buffer() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit BufferRenderGL(const cl_mem& buffer, bool retainObject = false) : - Buffer(buffer, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - BufferRenderGL& operator = (const cl_mem& rhs) - { - Buffer::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferRenderGL(const BufferRenderGL& buf) : Buffer(buf) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - BufferRenderGL& operator = (const BufferRenderGL &buf) - { - Buffer::operator=(buf); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferRenderGL(BufferRenderGL&& buf) CL_HPP_NOEXCEPT_ : Buffer(std::move(buf)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - BufferRenderGL& operator = (BufferRenderGL &&buf) - { - Buffer::operator=(std::move(buf)); - return *this; - } - - //! \brief Wrapper for clGetGLObjectInfo(). - cl_int getObjectInfo( - cl_gl_object_type *type, - cl_GLuint * gl_object_name) - { - return detail::errHandler( - ::clGetGLObjectInfo(object_,type,gl_object_name), - __GET_GL_OBJECT_INFO_ERR); - } -}; - -/*! \brief C++ base class for Image Memory objects. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Image : public Memory -{ -protected: - //! \brief Default constructor - initializes to NULL. - Image() : Memory() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image(const cl_mem& image, bool retainObject = false) : - Memory(image, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Image& operator = (const cl_mem& rhs) - { - Memory::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image(const Image& img) : Memory(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image& operator = (const Image &img) - { - Memory::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image(Image&& img) CL_HPP_NOEXCEPT_ : Memory(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image& operator = (Image &&img) - { - Memory::operator=(std::move(img)); - return *this; - } - - -public: - //! \brief Wrapper for clGetImageInfo(). - template - cl_int getImageInfo(cl_image_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetImageInfo, object_, name, param), - __GET_IMAGE_INFO_ERR); - } - - //! \brief Wrapper for clGetImageInfo() that returns by value. - template typename - detail::param_traits::param_type - getImageInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_image_info, name>::param_type param; - cl_int result = getImageInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } -}; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -/*! \brief Class interface for 1D Image Memory objects. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Image1D : public Image -{ -public: - /*! \brief Constructs a 1D Image in a specified context. - * - * Wraps clCreateImage(). - */ - Image1D( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type width, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE1D; - desc.image_width = width; - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - host_ptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - Image1D() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image1D(const cl_mem& image1D, bool retainObject = false) : - Image(image1D, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Image1D& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1D(const Image1D& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1D& operator = (const Image1D &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1D(Image1D&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1D& operator = (Image1D &&img) - { - Image::operator=(std::move(img)); - return *this; - } - -}; - -/*! \class Image1DBuffer - * \brief Image interface for 1D buffer images. - */ -class Image1DBuffer : public Image -{ -public: - Image1DBuffer( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type width, - const Buffer &buffer, - cl_int* err = NULL) - { - cl_int error; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; - desc.image_width = width; - desc.buffer = buffer(); - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - NULL, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } - - Image1DBuffer() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image1DBuffer(const cl_mem& image1D, bool retainObject = false) : - Image(image1D, retainObject) { } - - Image1DBuffer& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1DBuffer(const Image1DBuffer& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1DBuffer& operator = (const Image1DBuffer &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1DBuffer(Image1DBuffer&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1DBuffer& operator = (Image1DBuffer &&img) - { - Image::operator=(std::move(img)); - return *this; - } - -}; - -/*! \class Image1DArray - * \brief Image interface for arrays of 1D images. - */ -class Image1DArray : public Image -{ -public: - Image1DArray( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type arraySize, - size_type width, - size_type rowPitch, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY; - desc.image_width = width; - desc.image_array_size = arraySize; - desc.image_row_pitch = rowPitch; - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - host_ptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } - - Image1DArray() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image1DArray(const cl_mem& imageArray, bool retainObject = false) : - Image(imageArray, retainObject) { } - - - Image1DArray& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1DArray(const Image1DArray& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image1DArray& operator = (const Image1DArray &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1DArray(Image1DArray&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image1DArray& operator = (Image1DArray &&img) - { - Image::operator=(std::move(img)); - return *this; - } - -}; -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 120 - - -/*! \brief Class interface for 2D Image Memory objects. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Image2D : public Image -{ -public: - /*! \brief Constructs a 2D Image in a specified context. - * - * Wraps clCreateImage(). - */ - Image2D( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type width, - size_type height, - size_type row_pitch = 0, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - bool useCreateImage; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 120 - useCreateImage = true; -#else - useCreateImage = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - if (useCreateImage) - { - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE2D; - desc.image_width = width; - desc.image_height = height; - desc.image_row_pitch = row_pitch; - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - host_ptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 120 - if (!useCreateImage) - { - object_ = ::clCreateImage2D( - context(), flags,&format, width, height, row_pitch, host_ptr, &error); - - detail::errHandler(error, __CREATE_IMAGE2D_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 120 - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 || defined(CL_HPP_USE_CL_IMAGE2D_FROM_BUFFER_KHR) - /*! \brief Constructs a 2D Image from a buffer. - * \note This will share storage with the underlying buffer. - * - * Wraps clCreateImage(). - */ - Image2D( - const Context& context, - ImageFormat format, - const Buffer &sourceBuffer, - size_type width, - size_type height, - size_type row_pitch = 0, - cl_int* err = nullptr) - { - cl_int error; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE2D; - desc.image_width = width; - desc.image_height = height; - desc.image_row_pitch = row_pitch; - desc.buffer = sourceBuffer(); - - object_ = ::clCreateImage( - context(), - 0, // flags inherited from buffer - &format, - &desc, - nullptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != nullptr) { - *err = error; - } - } -#endif //#if CL_HPP_TARGET_OPENCL_VERSION >= 200 || defined(CL_HPP_USE_CL_IMAGE2D_FROM_BUFFER_KHR) - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - /*! \brief Constructs a 2D Image from an image. - * \note This will share storage with the underlying image but may - * reinterpret the channel order and type. - * - * The image will be created matching with a descriptor matching the source. - * - * \param order is the channel order to reinterpret the image data as. - * The channel order may differ as described in the OpenCL - * 2.0 API specification. - * - * Wraps clCreateImage(). - */ - Image2D( - const Context& context, - cl_channel_order order, - const Image &sourceImage, - cl_int* err = nullptr) - { - cl_int error; - - // Descriptor fields have to match source image - size_type sourceWidth = - sourceImage.getImageInfo(); - size_type sourceHeight = - sourceImage.getImageInfo(); - size_type sourceRowPitch = - sourceImage.getImageInfo(); - cl_uint sourceNumMIPLevels = - sourceImage.getImageInfo(); - cl_uint sourceNumSamples = - sourceImage.getImageInfo(); - cl_image_format sourceFormat = - sourceImage.getImageInfo(); - - // Update only the channel order. - // Channel format inherited from source. - sourceFormat.image_channel_order = order; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE2D; - desc.image_width = sourceWidth; - desc.image_height = sourceHeight; - desc.image_row_pitch = sourceRowPitch; - desc.num_mip_levels = sourceNumMIPLevels; - desc.num_samples = sourceNumSamples; - desc.buffer = sourceImage(); - - object_ = ::clCreateImage( - context(), - 0, // flags should be inherited from mem_object - &sourceFormat, - &desc, - nullptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != nullptr) { - *err = error; - } - } -#endif //#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - //! \brief Default constructor - initializes to NULL. - Image2D() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image2D(const cl_mem& image2D, bool retainObject = false) : - Image(image2D, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Image2D& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2D(const Image2D& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2D& operator = (const Image2D &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2D(Image2D&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2D& operator = (Image2D &&img) - { - Image::operator=(std::move(img)); - return *this; - } - -}; - - -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -/*! \brief Class interface for GL 2D Image Memory objects. - * - * This is provided to facilitate interoperability with OpenGL. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - * \note Deprecated for OpenCL 1.2. Please use ImageGL instead. - */ -class CL_API_PREFIX__VERSION_1_1_DEPRECATED Image2DGL : public Image2D -{ -public: - /*! \brief Constructs an Image2DGL in a specified context, from a given - * GL Texture. - * - * Wraps clCreateFromGLTexture2D(). - */ - Image2DGL( - const Context& context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texobj, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateFromGLTexture2D( - context(), - flags, - target, - miplevel, - texobj, - &error); - - detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR); - if (err != NULL) { - *err = error; - } - - } - - //! \brief Default constructor - initializes to NULL. - Image2DGL() : Image2D() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image2DGL(const cl_mem& image, bool retainObject = false) : - Image2D(image, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - *c - * See Memory for further details. - */ - Image2DGL& operator = (const cl_mem& rhs) - { - Image2D::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2DGL(const Image2DGL& img) : Image2D(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2DGL& operator = (const Image2DGL &img) - { - Image2D::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2DGL(Image2DGL&& img) CL_HPP_NOEXCEPT_ : Image2D(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2DGL& operator = (Image2DGL &&img) - { - Image2D::operator=(std::move(img)); - return *this; - } - -} CL_API_SUFFIX__VERSION_1_1_DEPRECATED; -#endif // CL_USE_DEPRECATED_OPENCL_1_1_APIS - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -/*! \class Image2DArray - * \brief Image interface for arrays of 2D images. - */ -class Image2DArray : public Image -{ -public: - Image2DArray( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type arraySize, - size_type width, - size_type height, - size_type rowPitch, - size_type slicePitch, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY; - desc.image_width = width; - desc.image_height = height; - desc.image_array_size = arraySize; - desc.image_row_pitch = rowPitch; - desc.image_slice_pitch = slicePitch; - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - host_ptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } - - Image2DArray() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image2DArray(const cl_mem& imageArray, bool retainObject = false) : Image(imageArray, retainObject) { } - - Image2DArray& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2DArray(const Image2DArray& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image2DArray& operator = (const Image2DArray &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2DArray(Image2DArray&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image2DArray& operator = (Image2DArray &&img) - { - Image::operator=(std::move(img)); - return *this; - } -}; -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 120 - -/*! \brief Class interface for 3D Image Memory objects. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Image3D : public Image -{ -public: - /*! \brief Constructs a 3D Image in a specified context. - * - * Wraps clCreateImage(). - */ - Image3D( - const Context& context, - cl_mem_flags flags, - ImageFormat format, - size_type width, - size_type height, - size_type depth, - size_type row_pitch = 0, - size_type slice_pitch = 0, - void* host_ptr = NULL, - cl_int* err = NULL) - { - cl_int error; - bool useCreateImage; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 && CL_HPP_MINIMUM_OPENCL_VERSION < 120 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 120 - useCreateImage = true; -#else - useCreateImage = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - if (useCreateImage) - { - cl_image_desc desc = {0}; - desc.image_type = CL_MEM_OBJECT_IMAGE3D; - desc.image_width = width; - desc.image_height = height; - desc.image_depth = depth; - desc.image_row_pitch = row_pitch; - desc.image_slice_pitch = slice_pitch; - - object_ = ::clCreateImage( - context(), - flags, - &format, - &desc, - host_ptr, - &error); - - detail::errHandler(error, __CREATE_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 120 - if (!useCreateImage) - { - object_ = ::clCreateImage3D( - context(), flags, &format, width, height, depth, row_pitch, - slice_pitch, host_ptr, &error); - - detail::errHandler(error, __CREATE_IMAGE3D_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 120 - } - - //! \brief Default constructor - initializes to NULL. - Image3D() : Image() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image3D(const cl_mem& image3D, bool retainObject = false) : - Image(image3D, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Image3D& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image3D(const Image3D& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image3D& operator = (const Image3D &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image3D(Image3D&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image3D& operator = (Image3D &&img) - { - Image::operator=(std::move(img)); - return *this; - } -}; - -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) -/*! \brief Class interface for GL 3D Image Memory objects. - * - * This is provided to facilitate interoperability with OpenGL. - * - * See Memory for details about copy semantics, etc. - * - * \see Memory - */ -class Image3DGL : public Image3D -{ -public: - /*! \brief Constructs an Image3DGL in a specified context, from a given - * GL Texture. - * - * Wraps clCreateFromGLTexture3D(). - */ - Image3DGL( - const Context& context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texobj, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateFromGLTexture3D( - context(), - flags, - target, - miplevel, - texobj, - &error); - - detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - Image3DGL() : Image3D() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit Image3DGL(const cl_mem& image, bool retainObject = false) : - Image3D(image, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Image3DGL& operator = (const cl_mem& rhs) - { - Image3D::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image3DGL(const Image3DGL& img) : Image3D(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Image3DGL& operator = (const Image3DGL &img) - { - Image3D::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Image3DGL(Image3DGL&& img) CL_HPP_NOEXCEPT_ : Image3D(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Image3DGL& operator = (Image3DGL &&img) - { - Image3D::operator=(std::move(img)); - return *this; - } -}; -#endif // CL_USE_DEPRECATED_OPENCL_1_1_APIS - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -/*! \class ImageGL - * \brief general image interface for GL interop. - * We abstract the 2D and 3D GL images into a single instance here - * that wraps all GL sourced images on the grounds that setup information - * was performed by OpenCL anyway. - */ -class ImageGL : public Image -{ -public: - ImageGL( - const Context& context, - cl_mem_flags flags, - cl_GLenum target, - cl_GLint miplevel, - cl_GLuint texobj, - cl_int * err = NULL) - { - cl_int error; - object_ = ::clCreateFromGLTexture( - context(), - flags, - target, - miplevel, - texobj, - &error); - - detail::errHandler(error, __CREATE_GL_TEXTURE_ERR); - if (err != NULL) { - *err = error; - } - } - - ImageGL() : Image() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * See Memory for further details. - */ - explicit ImageGL(const cl_mem& image, bool retainObject = false) : - Image(image, retainObject) { } - - ImageGL& operator = (const cl_mem& rhs) - { - Image::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - ImageGL(const ImageGL& img) : Image(img) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - ImageGL& operator = (const ImageGL &img) - { - Image::operator=(img); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - ImageGL(ImageGL&& img) CL_HPP_NOEXCEPT_ : Image(std::move(img)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - ImageGL& operator = (ImageGL &&img) - { - Image::operator=(std::move(img)); - return *this; - } -}; -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -/*! \brief Class interface for Pipe Memory Objects. -* -* See Memory for details about copy semantics, etc. -* -* \see Memory -*/ -class Pipe : public Memory -{ -public: - - /*! \brief Constructs a Pipe in a specified context. - * - * Wraps clCreatePipe(). - * @param context Context in which to create the pipe. - * @param flags Bitfield. Only CL_MEM_READ_WRITE and CL_MEM_HOST_NO_ACCESS are valid. - * @param packet_size Size in bytes of a single packet of the pipe. - * @param max_packets Number of packets that may be stored in the pipe. - * - */ - Pipe( - const Context& context, - cl_uint packet_size, - cl_uint max_packets, - cl_int* err = NULL) - { - cl_int error; - - cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS; - object_ = ::clCreatePipe(context(), flags, packet_size, max_packets, nullptr, &error); - - detail::errHandler(error, __CREATE_PIPE_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Constructs a Pipe in a the default context. - * - * Wraps clCreatePipe(). - * @param flags Bitfield. Only CL_MEM_READ_WRITE and CL_MEM_HOST_NO_ACCESS are valid. - * @param packet_size Size in bytes of a single packet of the pipe. - * @param max_packets Number of packets that may be stored in the pipe. - * - */ - Pipe( - cl_uint packet_size, - cl_uint max_packets, - cl_int* err = NULL) - { - cl_int error; - - Context context = Context::getDefault(err); - - cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_HOST_NO_ACCESS; - object_ = ::clCreatePipe(context(), flags, packet_size, max_packets, nullptr, &error); - - detail::errHandler(error, __CREATE_PIPE_ERR); - if (err != NULL) { - *err = error; - } - } - - //! \brief Default constructor - initializes to NULL. - Pipe() : Memory() { } - - /*! \brief Constructor from cl_mem - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with earlier versions. - * - * See Memory for further details. - */ - explicit Pipe(const cl_mem& pipe, bool retainObject = false) : - Memory(pipe, retainObject) { } - - /*! \brief Assignment from cl_mem - performs shallow copy. - * - * See Memory for further details. - */ - Pipe& operator = (const cl_mem& rhs) - { - Memory::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Pipe(const Pipe& pipe) : Memory(pipe) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Pipe& operator = (const Pipe &pipe) - { - Memory::operator=(pipe); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Pipe(Pipe&& pipe) CL_HPP_NOEXCEPT_ : Memory(std::move(pipe)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Pipe& operator = (Pipe &&pipe) - { - Memory::operator=(std::move(pipe)); - return *this; - } - - //! \brief Wrapper for clGetMemObjectInfo(). - template - cl_int getInfo(cl_pipe_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetPipeInfo, object_, name, param), - __GET_PIPE_INFO_ERR); - } - - //! \brief Wrapper for clGetMemObjectInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_pipe_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } -}; // class Pipe -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 - - -/*! \brief Class interface for cl_sampler. - * - * \note Copies of these objects are shallow, meaning that the copy will refer - * to the same underlying cl_sampler as the original. For details, see - * clRetainSampler() and clReleaseSampler(). - * - * \see cl_sampler - */ -class Sampler : public detail::Wrapper -{ -public: - //! \brief Default constructor - initializes to NULL. - Sampler() { } - - /*! \brief Constructs a Sampler in a specified context. - * - * Wraps clCreateSampler(). - */ - Sampler( - const Context& context, - cl_bool normalized_coords, - cl_addressing_mode addressing_mode, - cl_filter_mode filter_mode, - cl_int* err = NULL) - { - cl_int error; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - cl_sampler_properties sampler_properties[] = { - CL_SAMPLER_NORMALIZED_COORDS, normalized_coords, - CL_SAMPLER_ADDRESSING_MODE, addressing_mode, - CL_SAMPLER_FILTER_MODE, filter_mode, - 0 }; - object_ = ::clCreateSamplerWithProperties( - context(), - sampler_properties, - &error); - - detail::errHandler(error, __CREATE_SAMPLER_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } -#else - object_ = ::clCreateSampler( - context(), - normalized_coords, - addressing_mode, - filter_mode, - &error); - - detail::errHandler(error, __CREATE_SAMPLER_ERR); - if (err != NULL) { - *err = error; - } -#endif - } - - /*! \brief Constructor from cl_sampler - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * This effectively transfers ownership of a refcount on the cl_sampler - * into the new Sampler object. - */ - explicit Sampler(const cl_sampler& sampler, bool retainObject = false) : - detail::Wrapper(sampler, retainObject) { } - - /*! \brief Assignment operator from cl_sampler - takes ownership. - * - * This effectively transfers ownership of a refcount on the rhs and calls - * clReleaseSampler() on the value previously held by this instance. - */ - Sampler& operator = (const cl_sampler& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Sampler(const Sampler& sam) : detail::Wrapper(sam) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Sampler& operator = (const Sampler &sam) - { - detail::Wrapper::operator=(sam); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Sampler(Sampler&& sam) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(sam)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Sampler& operator = (Sampler &&sam) - { - detail::Wrapper::operator=(std::move(sam)); - return *this; - } - - //! \brief Wrapper for clGetSamplerInfo(). - template - cl_int getInfo(cl_sampler_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetSamplerInfo, object_, name, param), - __GET_SAMPLER_INFO_ERR); - } - - //! \brief Wrapper for clGetSamplerInfo() that returns by value. - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_sampler_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } -}; - -class Program; -class CommandQueue; -class DeviceCommandQueue; -class Kernel; - -//! \brief Class interface for specifying NDRange values. -class NDRange -{ -private: - size_type sizes_[3]; - cl_uint dimensions_; - -public: - //! \brief Default constructor - resulting range has zero dimensions. - NDRange() - : dimensions_(0) - { - sizes_[0] = 0; - sizes_[1] = 0; - sizes_[2] = 0; - } - - //! \brief Constructs one-dimensional range. - NDRange(size_type size0) - : dimensions_(1) - { - sizes_[0] = size0; - sizes_[1] = 1; - sizes_[2] = 1; - } - - //! \brief Constructs two-dimensional range. - NDRange(size_type size0, size_type size1) - : dimensions_(2) - { - sizes_[0] = size0; - sizes_[1] = size1; - sizes_[2] = 1; - } - - //! \brief Constructs three-dimensional range. - NDRange(size_type size0, size_type size1, size_type size2) - : dimensions_(3) - { - sizes_[0] = size0; - sizes_[1] = size1; - sizes_[2] = size2; - } - - /*! \brief Conversion operator to const size_type *. - * - * \returns a pointer to the size of the first dimension. - */ - operator const size_type*() const { - return sizes_; - } - - //! \brief Queries the number of dimensions in the range. - size_type dimensions() const - { - return dimensions_; - } - - //! \brief Returns the size of the object in bytes based on the - // runtime number of dimensions - size_type size() const - { - return dimensions_*sizeof(size_type); - } - - size_type* get() - { - return sizes_; - } - - const size_type* get() const - { - return sizes_; - } -}; - -//! \brief A zero-dimensional range. -static const NDRange NullRange; - -//! \brief Local address wrapper for use with Kernel::setArg -struct LocalSpaceArg -{ - size_type size_; -}; - -namespace detail { - -template -struct KernelArgumentHandler; - -// Enable for objects that are not subclasses of memory -// Pointers, constants etc -template -struct KernelArgumentHandler::value>::type> -{ - static size_type size(const T&) { return sizeof(T); } - static const T* ptr(const T& value) { return &value; } -}; - -// Enable for subclasses of memory where we want to get a reference to the cl_mem out -// and pass that in for safety -template -struct KernelArgumentHandler::value>::type> -{ - static size_type size(const T&) { return sizeof(cl_mem); } - static const cl_mem* ptr(const T& value) { return &(value()); } -}; - -// Specialization for DeviceCommandQueue defined later - -template <> -struct KernelArgumentHandler -{ - static size_type size(const LocalSpaceArg& value) { return value.size_; } - static const void* ptr(const LocalSpaceArg&) { return NULL; } -}; - -} -//! \endcond - -/*! Local - * \brief Helper function for generating LocalSpaceArg objects. - */ -inline LocalSpaceArg -Local(size_type size) -{ - LocalSpaceArg ret = { size }; - return ret; -} - -/*! \brief Class interface for cl_kernel. - * - * \note Copies of these objects are shallow, meaning that the copy will refer - * to the same underlying cl_kernel as the original. For details, see - * clRetainKernel() and clReleaseKernel(). - * - * \see cl_kernel - */ -class Kernel : public detail::Wrapper -{ -public: - inline Kernel(const Program& program, const char* name, cl_int* err = NULL); - - //! \brief Default constructor - initializes to NULL. - Kernel() { } - - /*! \brief Constructor from cl_kernel - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - * This effectively transfers ownership of a refcount on the cl_kernel - * into the new Kernel object. - */ - explicit Kernel(const cl_kernel& kernel, bool retainObject = false) : - detail::Wrapper(kernel, retainObject) { } - - /*! \brief Assignment operator from cl_kernel - takes ownership. - * - * This effectively transfers ownership of a refcount on the rhs and calls - * clReleaseKernel() on the value previously held by this instance. - */ - Kernel& operator = (const cl_kernel& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Kernel(const Kernel& kernel) : detail::Wrapper(kernel) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Kernel& operator = (const Kernel &kernel) - { - detail::Wrapper::operator=(kernel); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Kernel(Kernel&& kernel) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(kernel)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Kernel& operator = (Kernel &&kernel) - { - detail::Wrapper::operator=(std::move(kernel)); - return *this; - } - - template - cl_int getInfo(cl_kernel_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetKernelInfo, object_, name, param), - __GET_KERNEL_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_kernel_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - template - cl_int getArgInfo(cl_uint argIndex, cl_kernel_arg_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetKernelArgInfo, object_, argIndex, name, param), - __GET_KERNEL_ARG_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getArgInfo(cl_uint argIndex, cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_kernel_arg_info, name>::param_type param; - cl_int result = getArgInfo(argIndex, name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - template - cl_int getWorkGroupInfo( - const Device& device, cl_kernel_work_group_info name, T* param) const - { - return detail::errHandler( - detail::getInfo( - &::clGetKernelWorkGroupInfo, object_, device(), name, param), - __GET_KERNEL_WORK_GROUP_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getWorkGroupInfo(const Device& device, cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_kernel_work_group_info, name>::param_type param; - cl_int result = getWorkGroupInfo(device, name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - -#if (CL_HPP_TARGET_OPENCL_VERSION >= 200 && defined(CL_HPP_USE_CL_SUB_GROUPS_KHR)) || CL_HPP_TARGET_OPENCL_VERSION >= 210 - cl_int getSubGroupInfo(const cl::Device &dev, cl_kernel_sub_group_info name, const cl::NDRange &range, size_type* param) const - { -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - return detail::errHandler( - clGetKernelSubGroupInfo(object_, dev(), name, range.size(), range.get(), sizeof(size_type), param, nullptr), - __GET_KERNEL_SUB_GROUP_INFO_ERR); - -#else // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - typedef clGetKernelSubGroupInfoKHR_fn PFN_clGetKernelSubGroupInfoKHR; - static PFN_clGetKernelSubGroupInfoKHR pfn_clGetKernelSubGroupInfoKHR = NULL; - CL_HPP_INIT_CL_EXT_FCN_PTR_(clGetKernelSubGroupInfoKHR); - - return detail::errHandler( - pfn_clGetKernelSubGroupInfoKHR(object_, dev(), name, range.size(), range.get(), sizeof(size_type), param, nullptr), - __GET_KERNEL_SUB_GROUP_INFO_ERR); - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - } - - template - size_type getSubGroupInfo(const cl::Device &dev, const cl::NDRange &range, cl_int* err = NULL) const - { - size_type param; - cl_int result = getSubGroupInfo(dev, name, range, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - /*! \brief setArg overload taking a shared_ptr type - */ - template - cl_int setArg(cl_uint index, const cl::pointer &argPtr) - { - return detail::errHandler( - ::clSetKernelArgSVMPointer(object_, index, argPtr.get()), - __SET_KERNEL_ARGS_ERR); - } - - /*! \brief setArg overload taking a vector type. - */ - template - cl_int setArg(cl_uint index, const cl::vector &argPtr) - { - return detail::errHandler( - ::clSetKernelArgSVMPointer(object_, index, argPtr.data()), - __SET_KERNEL_ARGS_ERR); - } - - /*! \brief setArg overload taking a pointer type - */ - template - typename std::enable_if::value, cl_int>::type - setArg(cl_uint index, const T argPtr) - { - return detail::errHandler( - ::clSetKernelArgSVMPointer(object_, index, argPtr), - __SET_KERNEL_ARGS_ERR); - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - /*! \brief setArg overload taking a POD type - */ - template - typename std::enable_if::value, cl_int>::type - setArg(cl_uint index, const T &value) - { - return detail::errHandler( - ::clSetKernelArg( - object_, - index, - detail::KernelArgumentHandler::size(value), - detail::KernelArgumentHandler::ptr(value)), - __SET_KERNEL_ARGS_ERR); - } - - cl_int setArg(cl_uint index, size_type size, const void* argPtr) - { - return detail::errHandler( - ::clSetKernelArg(object_, index, size, argPtr), - __SET_KERNEL_ARGS_ERR); - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - /*! - * Specify a vector of SVM pointers that the kernel may access in - * addition to its arguments. - */ - cl_int setSVMPointers(const vector &pointerList) - { - return detail::errHandler( - ::clSetKernelExecInfo( - object_, - CL_KERNEL_EXEC_INFO_SVM_PTRS, - sizeof(void*)*pointerList.size(), - pointerList.data())); - } - - /*! - * Specify a std::array of SVM pointers that the kernel may access in - * addition to its arguments. - */ - template - cl_int setSVMPointers(const std::array &pointerList) - { - return detail::errHandler( - ::clSetKernelExecInfo( - object_, - CL_KERNEL_EXEC_INFO_SVM_PTRS, - sizeof(void*)*pointerList.size(), - pointerList.data())); - } - - /*! \brief Enable fine-grained system SVM. - * - * \note It is only possible to enable fine-grained system SVM if all devices - * in the context associated with kernel support it. - * - * \param svmEnabled True if fine-grained system SVM is requested. False otherwise. - * \return CL_SUCCESS if the function was executed succesfully. CL_INVALID_OPERATION - * if no devices in the context support fine-grained system SVM. - * - * \see clSetKernelExecInfo - */ - cl_int enableFineGrainedSystemSVM(bool svmEnabled) - { - cl_bool svmEnabled_ = svmEnabled ? CL_TRUE : CL_FALSE; - return detail::errHandler( - ::clSetKernelExecInfo( - object_, - CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM, - sizeof(cl_bool), - &svmEnabled_ - ) - ); - } - - template - void setSVMPointersHelper(std::array &pointerList, const pointer &t0, const pointer &t1, Ts & ... ts) - { - pointerList[index] = static_cast(t0.get()); - setSVMPointersHelper(pointerList, t1, ts...); - } - - template - typename std::enable_if::value, void>::type - setSVMPointersHelper(std::array &pointerList, T0 t0, T1 t1, Ts... ts) - { - pointerList[index] = static_cast(t0); - setSVMPointersHelper(pointerList, t1, ts...); - } - - template - void setSVMPointersHelper(std::array &pointerList, const pointer &t0) - { - pointerList[index] = static_cast(t0.get()); - } - - - template - typename std::enable_if::value, void>::type - setSVMPointersHelper(std::array &pointerList, T0 t0) - { - pointerList[index] = static_cast(t0); - } - - template - cl_int setSVMPointers(const T0 &t0, Ts & ... ts) - { - std::array pointerList; - - setSVMPointersHelper<0, 1 + sizeof...(Ts)>(pointerList, t0, ts...); - return detail::errHandler( - ::clSetKernelExecInfo( - object_, - CL_KERNEL_EXEC_INFO_SVM_PTRS, - sizeof(void*)*(1 + sizeof...(Ts)), - pointerList.data())); - } - - template - cl_int setExecInfo(cl_kernel_exec_info param_name, const T& val) - { - return detail::errHandler( - ::clSetKernelExecInfo( - object_, - param_name, - sizeof(T), - &val)); - } - - template - cl_int setExecInfo(typename detail::param_traits::param_type& val) - { - return setExecInfo(name, val); - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - /** - * Make a deep copy of the kernel object including its arguments. - * @return A new kernel object with internal state entirely separate from that - * of the original but with any arguments set on the original intact. - */ - Kernel clone() - { - cl_int error; - Kernel retValue(clCloneKernel(this->get(), &error)); - - detail::errHandler(error, __CLONE_KERNEL_ERR); - return retValue; - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 -}; - -/*! \class Program - * \brief Program interface that implements cl_program. - */ -class Program : public detail::Wrapper -{ -public: -#if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - typedef vector> Binaries; - typedef vector Sources; -#else // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - typedef vector > Binaries; - typedef vector > Sources; -#endif // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - - Program( - const string& source, - bool build = false, - cl_int* err = NULL) - { - cl_int error; - - const char * strings = source.c_str(); - const size_type length = source.size(); - - Context context = Context::getDefault(err); - - object_ = ::clCreateProgramWithSource( - context(), (cl_uint)1, &strings, &length, &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); - - if (error == CL_SUCCESS && build) { - - error = ::clBuildProgram( - object_, - 0, - NULL, -#if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - "-cl-std=CL2.0", -#else - "", -#endif // #if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - NULL, - NULL); - - detail::buildErrHandler(error, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - - if (err != NULL) { - *err = error; - } - } - - Program( - const Context& context, - const string& source, - bool build = false, - cl_int* err = NULL) - { - cl_int error; - - const char * strings = source.c_str(); - const size_type length = source.size(); - - object_ = ::clCreateProgramWithSource( - context(), (cl_uint)1, &strings, &length, &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); - - if (error == CL_SUCCESS && build) { - error = ::clBuildProgram( - object_, - 0, - NULL, -#if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - "-cl-std=CL2.0", -#else - "", -#endif // #if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - NULL, - NULL); - - detail::buildErrHandler(error, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - - if (err != NULL) { - *err = error; - } - } - - /** - * Create a program from a vector of source strings and the default context. - * Does not compile or link the program. - */ - Program( - const Sources& sources, - cl_int* err = NULL) - { - cl_int error; - Context context = Context::getDefault(err); - - const size_type n = (size_type)sources.size(); - - vector lengths(n); - vector strings(n); - - for (size_type i = 0; i < n; ++i) { -#if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - strings[i] = sources[(int)i].data(); - lengths[i] = sources[(int)i].length(); -#else // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - strings[i] = sources[(int)i].first; - lengths[i] = sources[(int)i].second; -#endif // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - } - - object_ = ::clCreateProgramWithSource( - context(), (cl_uint)n, strings.data(), lengths.data(), &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); - if (err != NULL) { - *err = error; - } - } - - /** - * Create a program from a vector of source strings and a provided context. - * Does not compile or link the program. - */ - Program( - const Context& context, - const Sources& sources, - cl_int* err = NULL) - { - cl_int error; - - const size_type n = (size_type)sources.size(); - - vector lengths(n); - vector strings(n); - - for (size_type i = 0; i < n; ++i) { -#if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - strings[i] = sources[(int)i].data(); - lengths[i] = sources[(int)i].length(); -#else // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - strings[i] = sources[(int)i].first; - lengths[i] = sources[(int)i].second; -#endif // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - } - - object_ = ::clCreateProgramWithSource( - context(), (cl_uint)n, strings.data(), lengths.data(), &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR); - if (err != NULL) { - *err = error; - } - } - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 || (CL_HPP_TARGET_OPENCL_VERSION==200 && defined(CL_HPP_USE_IL_KHR)) - /** - * Program constructor to allow construction of program from SPIR-V or another IL. - * Valid for either OpenCL >= 2.1 or when CL_HPP_USE_IL_KHR is defined. - */ - Program( - const vector& IL, - bool build = false, - cl_int* err = NULL) - { - cl_int error; - - Context context = Context::getDefault(err); - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - object_ = ::clCreateProgramWithIL( - context(), static_cast(IL.data()), IL.size(), &error); - -#else // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - typedef clCreateProgramWithILKHR_fn PFN_clCreateProgramWithILKHR; - static PFN_clCreateProgramWithILKHR pfn_clCreateProgramWithILKHR = NULL; - CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateProgramWithILKHR); - - object_ = pfn_clCreateProgramWithILKHR( - context(), static_cast(IL.data()), IL.size(), &error); - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - detail::errHandler(error, __CREATE_PROGRAM_WITH_IL_ERR); - - if (error == CL_SUCCESS && build) { - - error = ::clBuildProgram( - object_, - 0, - NULL, -#if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - "-cl-std=CL2.0", -#else - "", -#endif // #if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - NULL, - NULL); - - detail::buildErrHandler(error, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - - if (err != NULL) { - *err = error; - } - } - - /** - * Program constructor to allow construction of program from SPIR-V or another IL - * for a specific context. - * Valid for either OpenCL >= 2.1 or when CL_HPP_USE_IL_KHR is defined. - */ - Program( - const Context& context, - const vector& IL, - bool build = false, - cl_int* err = NULL) - { - cl_int error; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - object_ = ::clCreateProgramWithIL( - context(), static_cast(IL.data()), IL.size(), &error); - -#else // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - typedef clCreateProgramWithILKHR_fn PFN_clCreateProgramWithILKHR; - static PFN_clCreateProgramWithILKHR pfn_clCreateProgramWithILKHR = NULL; - CL_HPP_INIT_CL_EXT_FCN_PTR_(clCreateProgramWithILKHR); - - object_ = pfn_clCreateProgramWithILKHR( - context(), static_cast(IL.data()), IL.size(), &error); - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - detail::errHandler(error, __CREATE_PROGRAM_WITH_IL_ERR); - - if (error == CL_SUCCESS && build) { - error = ::clBuildProgram( - object_, - 0, - NULL, -#if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - "-cl-std=CL2.0", -#else - "", -#endif // #if !defined(CL_HPP_CL_1_2_DEFAULT_BUILD) - NULL, - NULL); - - detail::buildErrHandler(error, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - - if (err != NULL) { - *err = error; - } - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - /** - * Construct a program object from a list of devices and a per-device list of binaries. - * \param context A valid OpenCL context in which to construct the program. - * \param devices A vector of OpenCL device objects for which the program will be created. - * \param binaries A vector of pairs of a pointer to a binary object and its length. - * \param binaryStatus An optional vector that on completion will be resized to - * match the size of binaries and filled with values to specify if each binary - * was successfully loaded. - * Set to CL_SUCCESS if the binary was successfully loaded. - * Set to CL_INVALID_VALUE if the length is 0 or the binary pointer is NULL. - * Set to CL_INVALID_BINARY if the binary provided is not valid for the matching device. - * \param err if non-NULL will be set to CL_SUCCESS on successful operation or one of the following errors: - * CL_INVALID_CONTEXT if context is not a valid context. - * CL_INVALID_VALUE if the length of devices is zero; or if the length of binaries does not match the length of devices; - * or if any entry in binaries is NULL or has length 0. - * CL_INVALID_DEVICE if OpenCL devices listed in devices are not in the list of devices associated with context. - * CL_INVALID_BINARY if an invalid program binary was encountered for any device. binaryStatus will return specific status for each device. - * CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host. - */ - Program( - const Context& context, - const vector& devices, - const Binaries& binaries, - vector* binaryStatus = NULL, - cl_int* err = NULL) - { - cl_int error; - - const size_type numDevices = devices.size(); - - // Catch size mismatch early and return - if(binaries.size() != numDevices) { - error = CL_INVALID_VALUE; - detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR); - if (err != NULL) { - *err = error; - } - return; - } - - - vector lengths(numDevices); - vector images(numDevices); -#if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - for (size_type i = 0; i < numDevices; ++i) { - images[i] = binaries[i].data(); - lengths[i] = binaries[(int)i].size(); - } -#else // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - for (size_type i = 0; i < numDevices; ++i) { - images[i] = (const unsigned char*)binaries[i].first; - lengths[i] = binaries[(int)i].second; - } -#endif // #if !defined(CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY) - - vector deviceIDs(numDevices); - for( size_type deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { - deviceIDs[deviceIndex] = (devices[deviceIndex])(); - } - - if(binaryStatus) { - binaryStatus->resize(numDevices); - } - - object_ = ::clCreateProgramWithBinary( - context(), (cl_uint) devices.size(), - deviceIDs.data(), - lengths.data(), images.data(), (binaryStatus != NULL && numDevices > 0) - ? &binaryStatus->front() - : NULL, &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR); - if (err != NULL) { - *err = error; - } - } - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - /** - * Create program using builtin kernels. - * \param kernelNames Semi-colon separated list of builtin kernel names - */ - Program( - const Context& context, - const vector& devices, - const string& kernelNames, - cl_int* err = NULL) - { - cl_int error; - - - size_type numDevices = devices.size(); - vector deviceIDs(numDevices); - for( size_type deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { - deviceIDs[deviceIndex] = (devices[deviceIndex])(); - } - - object_ = ::clCreateProgramWithBuiltInKernels( - context(), - (cl_uint) devices.size(), - deviceIDs.data(), - kernelNames.c_str(), - &error); - - detail::errHandler(error, __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - Program() { } - - - /*! \brief Constructor from cl_program - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - */ - explicit Program(const cl_program& program, bool retainObject = false) : - detail::Wrapper(program, retainObject) { } - - Program& operator = (const cl_program& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - Program(const Program& program) : detail::Wrapper(program) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - Program& operator = (const Program &program) - { - detail::Wrapper::operator=(program); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - Program(Program&& program) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(program)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - Program& operator = (Program &&program) - { - detail::Wrapper::operator=(std::move(program)); - return *this; - } - - cl_int build( - const vector& devices, - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL) const - { - size_type numDevices = devices.size(); - vector deviceIDs(numDevices); - - for( size_type deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) { - deviceIDs[deviceIndex] = (devices[deviceIndex])(); - } - - cl_int buildError = ::clBuildProgram( - object_, - (cl_uint) - devices.size(), - deviceIDs.data(), - options, - notifyFptr, - data); - - return detail::buildErrHandler(buildError, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - - cl_int build( - const Device& device, - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL) const - { - cl_device_id deviceID = device(); - - cl_int buildError = ::clBuildProgram( - object_, - 1, - &deviceID, - options, - notifyFptr, - data); - - BuildLogType buildLog(0); - buildLog.push_back(std::make_pair(device, getBuildInfo(device))); - return detail::buildErrHandler(buildError, __BUILD_PROGRAM_ERR, buildLog); - } - - cl_int build( - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL) const - { - cl_int buildError = ::clBuildProgram( - object_, - 0, - NULL, - options, - notifyFptr, - data); - - return detail::buildErrHandler(buildError, __BUILD_PROGRAM_ERR, getBuildInfo()); - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - cl_int compile( - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL) const - { - cl_int error = ::clCompileProgram( - object_, - 0, - NULL, - options, - 0, - NULL, - NULL, - notifyFptr, - data); - return detail::buildErrHandler(error, __COMPILE_PROGRAM_ERR, getBuildInfo()); - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - template - cl_int getInfo(cl_program_info name, T* param) const - { - return detail::errHandler( - detail::getInfo(&::clGetProgramInfo, object_, name, param), - __GET_PROGRAM_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_program_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - template - cl_int getBuildInfo( - const Device& device, cl_program_build_info name, T* param) const - { - return detail::errHandler( - detail::getInfo( - &::clGetProgramBuildInfo, object_, device(), name, param), - __GET_PROGRAM_BUILD_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getBuildInfo(const Device& device, cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_program_build_info, name>::param_type param; - cl_int result = getBuildInfo(device, name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - /** - * Build info function that returns a vector of device/info pairs for the specified - * info type and for all devices in the program. - * On an error reading the info for any device, an empty vector of info will be returned. - */ - template - vector::param_type>> - getBuildInfo(cl_int *err = NULL) const - { - cl_int result = CL_SUCCESS; - - auto devs = getInfo(&result); - vector::param_type>> - devInfo; - - // If there was an initial error from getInfo return the error - if (result != CL_SUCCESS) { - if (err != NULL) { - *err = result; - } - return devInfo; - } - - for (const cl::Device &d : devs) { - typename detail::param_traits< - detail::cl_program_build_info, name>::param_type param; - result = getBuildInfo(d, name, ¶m); - devInfo.push_back( - std::pair::param_type> - (d, param)); - if (result != CL_SUCCESS) { - // On error, leave the loop and return the error code - break; - } - } - if (err != NULL) { - *err = result; - } - if (result != CL_SUCCESS) { - devInfo.clear(); - } - return devInfo; - } - - cl_int createKernels(vector* kernels) - { - cl_uint numKernels; - cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR); - } - - vector value(numKernels); - - err = ::clCreateKernelsInProgram( - object_, numKernels, value.data(), NULL); - if (err != CL_SUCCESS) { - return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR); - } - - if (kernels) { - kernels->resize(value.size()); - - // Assign to param, constructing with retain behaviour - // to correctly capture each underlying CL object - for (size_type i = 0; i < value.size(); i++) { - // We do not need to retain because this kernel is being created - // by the runtime - (*kernels)[i] = Kernel(value[i], false); - } - } - return CL_SUCCESS; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 220 -#if defined(CL_USE_DEPRECATED_OPENCL_2_2_APIS) - /*! \brief Registers a callback function to be called when destructors for - * program scope global variables are complete and before the - * program is released. - * - * Wraps clSetProgramReleaseCallback(). - * - * Each call to this function registers the specified user callback function - * on a callback stack associated with program. The registered user callback - * functions are called in the reverse order in which they were registered. - */ - CL_API_PREFIX__VERSION_2_2_DEPRECATED cl_int setReleaseCallback( - void (CL_CALLBACK * pfn_notify)(cl_program program, void * user_data), - void * user_data = NULL) CL_API_SUFFIX__VERSION_2_2_DEPRECATED - { - return detail::errHandler( - ::clSetProgramReleaseCallback( - object_, - pfn_notify, - user_data), - __SET_PROGRAM_RELEASE_CALLBACK_ERR); - } -#endif // #if defined(CL_USE_DEPRECATED_OPENCL_2_2_APIS) - - /*! \brief Sets a SPIR-V specialization constant. - * - * Wraps clSetProgramSpecializationConstant(). - */ - template - typename std::enable_if::value, cl_int>::type - setSpecializationConstant(cl_uint index, const T &value) - { - return detail::errHandler( - ::clSetProgramSpecializationConstant( - object_, - index, - sizeof(value), - &value), - __SET_PROGRAM_SPECIALIZATION_CONSTANT_ERR); - } - - /*! \brief Sets a SPIR-V specialization constant. - * - * Wraps clSetProgramSpecializationConstant(). - */ - cl_int setSpecializationConstant(cl_uint index, size_type size, const void* value) - { - return detail::errHandler( - ::clSetProgramSpecializationConstant( - object_, - index, - size, - value), - __SET_PROGRAM_SPECIALIZATION_CONSTANT_ERR); - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 220 -}; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 -inline Program linkProgram( - Program input1, - Program input2, - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL, - cl_int* err = NULL) -{ - cl_int error_local = CL_SUCCESS; - - cl_program programs[2] = { input1(), input2() }; - - Context ctx = input1.getInfo(&error_local); - if(error_local!=CL_SUCCESS) { - detail::errHandler(error_local, __LINK_PROGRAM_ERR); - } - - cl_program prog = ::clLinkProgram( - ctx(), - 0, - NULL, - options, - 2, - programs, - notifyFptr, - data, - &error_local); - - detail::errHandler(error_local,__COMPILE_PROGRAM_ERR); - if (err != NULL) { - *err = error_local; - } - - return Program(prog); -} - -inline Program linkProgram( - vector inputPrograms, - const char* options = NULL, - void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL, - void* data = NULL, - cl_int* err = NULL) -{ - cl_int error_local = CL_SUCCESS; - - vector programs(inputPrograms.size()); - - for (unsigned int i = 0; i < inputPrograms.size(); i++) { - programs[i] = inputPrograms[i](); - } - - Context ctx; - if(inputPrograms.size() > 0) { - ctx = inputPrograms[0].getInfo(&error_local); - if(error_local!=CL_SUCCESS) { - detail::errHandler(error_local, __LINK_PROGRAM_ERR); - } - } - cl_program prog = ::clLinkProgram( - ctx(), - 0, - NULL, - options, - (cl_uint)inputPrograms.size(), - programs.data(), - notifyFptr, - data, - &error_local); - - detail::errHandler(error_local,__COMPILE_PROGRAM_ERR); - if (err != NULL) { - *err = error_local; - } - - return Program(prog, false); -} -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - -// Template specialization for CL_PROGRAM_BINARIES -template <> -inline cl_int cl::Program::getInfo(cl_program_info name, vector>* param) const -{ - if (name != CL_PROGRAM_BINARIES) { - return CL_INVALID_VALUE; - } - if (param) { - // Resize the parameter array appropriately for each allocation - // and pass down to the helper - - vector sizes = getInfo(); - size_type numBinaries = sizes.size(); - - // Resize the parameter array and constituent arrays - param->resize(numBinaries); - for (size_type i = 0; i < numBinaries; ++i) { - (*param)[i].resize(sizes[i]); - } - - return detail::errHandler( - detail::getInfo(&::clGetProgramInfo, object_, name, param), - __GET_PROGRAM_INFO_ERR); - } - - return CL_SUCCESS; -} - -template<> -inline vector> cl::Program::getInfo(cl_int* err) const -{ - vector> binariesVectors; - - cl_int result = getInfo(CL_PROGRAM_BINARIES, &binariesVectors); - if (err != NULL) { - *err = result; - } - return binariesVectors; -} - -#if CL_HPP_TARGET_OPENCL_VERSION >= 220 -// Template specialization for clSetProgramSpecializationConstant -template <> -inline cl_int cl::Program::setSpecializationConstant(cl_uint index, const bool &value) -{ - cl_uchar ucValue = value ? CL_UCHAR_MAX : 0; - return detail::errHandler( - ::clSetProgramSpecializationConstant( - object_, - index, - sizeof(ucValue), - &ucValue), - __SET_PROGRAM_SPECIALIZATION_CONSTANT_ERR); -} -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 220 - -inline Kernel::Kernel(const Program& program, const char* name, cl_int* err) -{ - cl_int error; - - object_ = ::clCreateKernel(program(), name, &error); - detail::errHandler(error, __CREATE_KERNEL_ERR); - - if (err != NULL) { - *err = error; - } - -} - -enum class QueueProperties : cl_command_queue_properties -{ - None = 0, - Profiling = CL_QUEUE_PROFILING_ENABLE, - OutOfOrder = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, -}; - -inline QueueProperties operator|(QueueProperties lhs, QueueProperties rhs) -{ - return static_cast(static_cast(lhs) | static_cast(rhs)); -} - -inline QueueProperties operator&(QueueProperties lhs, QueueProperties rhs) -{ - return static_cast(static_cast(lhs) & static_cast(rhs)); -} - -/*! \class CommandQueue - * \brief CommandQueue interface for cl_command_queue. - */ -class CommandQueue : public detail::Wrapper -{ -private: - static std::once_flag default_initialized_; - static CommandQueue default_; - static cl_int default_error_; - - /*! \brief Create the default command queue returned by @ref getDefault. - * - * It sets default_error_ to indicate success or failure. It does not throw - * @c cl::Error. - */ - static void makeDefault() - { - /* We don't want to throw an error from this function, so we have to - * catch and set the error flag. - */ -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - try -#endif - { - int error; - Context context = Context::getDefault(&error); - - if (error != CL_SUCCESS) { - default_error_ = error; - } - else { - Device device = Device::getDefault(); - default_ = CommandQueue(context, device, 0, &default_error_); - } - } -#if defined(CL_HPP_ENABLE_EXCEPTIONS) - catch (cl::Error &e) { - default_error_ = e.err(); - } -#endif - } - - /*! \brief Create the default command queue. - * - * This sets @c default_. It does not throw - * @c cl::Error. - */ - static void makeDefaultProvided(const CommandQueue &c) { - default_ = c; - } - -public: -#ifdef CL_HPP_UNIT_TEST_ENABLE - /*! \brief Reset the default. - * - * This sets @c default_ to an empty value to support cleanup in - * the unit test framework. - * This function is not thread safe. - */ - static void unitTestClearDefault() { - default_ = CommandQueue(); - } -#endif // #ifdef CL_HPP_UNIT_TEST_ENABLE - - - /*! - * \brief Constructs a CommandQueue based on passed properties. - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - CommandQueue( - cl_command_queue_properties properties, - cl_int* err = NULL) - { - cl_int error; - - Context context = Context::getDefault(&error); - detail::errHandler(error, __CREATE_CONTEXT_ERR); - - if (error != CL_SUCCESS) { - if (err != NULL) { - *err = error; - } - } - else { - Device device = context.getInfo()[0]; - bool useWithProperties; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, 0 }; - if ((properties & CL_QUEUE_ON_DEVICE) == 0) { - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - } - else { - error = CL_INVALID_QUEUE_PROPERTIES; - } - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), device(), properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - } - } - - /*! - * \brief Constructs a CommandQueue based on passed properties. - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - CommandQueue( - QueueProperties properties, - cl_int* err = NULL) - { - cl_int error; - - Context context = Context::getDefault(&error); - detail::errHandler(error, __CREATE_CONTEXT_ERR); - - if (error != CL_SUCCESS) { - if (err != NULL) { - *err = error; - } - } - else { - Device device = context.getInfo()[0]; - bool useWithProperties; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, static_cast(properties), 0 }; - - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), device(), static_cast(properties), &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - - } - } - - /*! - * \brief Constructs a CommandQueue for an implementation defined device in the given context - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - explicit CommandQueue( - const Context& context, - cl_command_queue_properties properties = 0, - cl_int* err = NULL) - { - cl_int error; - bool useWithProperties; - vector devices; - error = context.getInfo(CL_CONTEXT_DEVICES, &devices); - - detail::errHandler(error, __CREATE_CONTEXT_ERR); - - if (error != CL_SUCCESS) - { - if (err != NULL) { - *err = error; - } - return; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, 0 }; - if ((properties & CL_QUEUE_ON_DEVICE) == 0) { - object_ = ::clCreateCommandQueueWithProperties( - context(), devices[0](), queue_properties, &error); - } - else { - error = CL_INVALID_QUEUE_PROPERTIES; - } - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), devices[0](), properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - } - - /*! - * \brief Constructs a CommandQueue for an implementation defined device in the given context - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - explicit CommandQueue( - const Context& context, - QueueProperties properties, - cl_int* err = NULL) - { - cl_int error; - bool useWithProperties; - vector devices; - error = context.getInfo(CL_CONTEXT_DEVICES, &devices); - - detail::errHandler(error, __CREATE_CONTEXT_ERR); - - if (error != CL_SUCCESS) - { - if (err != NULL) { - *err = error; - } - return; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, static_cast(properties), 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), devices[0](), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), devices[0](), static_cast(properties), &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - } - - /*! - * \brief Constructs a CommandQueue for a passed device and context - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - CommandQueue( - const Context& context, - const Device& device, - cl_command_queue_properties properties = 0, - cl_int* err = NULL) - { - cl_int error; - bool useWithProperties; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), device(), properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - } - - /*! - * \brief Constructs a CommandQueue for a passed device and context - * Will return an CL_INVALID_QUEUE_PROPERTIES error if CL_QUEUE_ON_DEVICE is specified. - */ - CommandQueue( - const Context& context, - const Device& device, - QueueProperties properties, - cl_int* err = NULL) - { - cl_int error; - bool useWithProperties; - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 && CL_HPP_MINIMUM_OPENCL_VERSION < 200 - // Run-time decision based on the actual platform - { - cl_uint version = detail::getContextPlatformVersion(context()); - useWithProperties = (version >= 0x20000); // OpenCL 2.0 or above - } -#elif CL_HPP_TARGET_OPENCL_VERSION >= 200 - useWithProperties = true; -#else - useWithProperties = false; -#endif - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (useWithProperties) { - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, static_cast(properties), 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 -#if CL_HPP_MINIMUM_OPENCL_VERSION < 200 - if (!useWithProperties) { - object_ = ::clCreateCommandQueue( - context(), device(), static_cast(properties), &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - } -#endif // CL_HPP_MINIMUM_OPENCL_VERSION < 200 - } - - static CommandQueue getDefault(cl_int * err = NULL) - { - std::call_once(default_initialized_, makeDefault); -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - detail::errHandler(default_error_, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); -#else // CL_HPP_TARGET_OPENCL_VERSION >= 200 - detail::errHandler(default_error_, __CREATE_COMMAND_QUEUE_ERR); -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 200 - if (err != NULL) { - *err = default_error_; - } - return default_; - } - - /** - * Modify the default command queue to be used by - * subsequent operations. - * Will only set the default if no default was previously created. - * @return updated default command queue. - * Should be compared to the passed value to ensure that it was updated. - */ - static CommandQueue setDefault(const CommandQueue &default_queue) - { - std::call_once(default_initialized_, makeDefaultProvided, std::cref(default_queue)); - detail::errHandler(default_error_); - return default_; - } - - CommandQueue() { } - - - /*! \brief Constructor from cl_command_queue - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - */ - explicit CommandQueue(const cl_command_queue& commandQueue, bool retainObject = false) : - detail::Wrapper(commandQueue, retainObject) { } - - CommandQueue& operator = (const cl_command_queue& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - CommandQueue(const CommandQueue& queue) : detail::Wrapper(queue) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - CommandQueue& operator = (const CommandQueue &queue) - { - detail::Wrapper::operator=(queue); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - CommandQueue(CommandQueue&& queue) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(queue)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - CommandQueue& operator = (CommandQueue &&queue) - { - detail::Wrapper::operator=(std::move(queue)); - return *this; - } - - template - cl_int getInfo(cl_command_queue_info name, T* param) const - { - return detail::errHandler( - detail::getInfo( - &::clGetCommandQueueInfo, object_, name, param), - __GET_COMMAND_QUEUE_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_command_queue_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - cl_int enqueueReadBuffer( - const Buffer& buffer, - cl_bool blocking, - size_type offset, - size_type size, - void* ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueReadBuffer( - object_, buffer(), blocking, offset, size, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_READ_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueWriteBuffer( - const Buffer& buffer, - cl_bool blocking, - size_type offset, - size_type size, - const void* ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueWriteBuffer( - object_, buffer(), blocking, offset, size, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_WRITE_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueCopyBuffer( - const Buffer& src, - const Buffer& dst, - size_type src_offset, - size_type dst_offset, - size_type size, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueCopyBuffer( - object_, src(), dst(), src_offset, dst_offset, size, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQEUE_COPY_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - cl_int enqueueReadBufferRect( - const Buffer& buffer, - cl_bool blocking, - const array& buffer_offset, - const array& host_offset, - const array& region, - size_type buffer_row_pitch, - size_type buffer_slice_pitch, - size_type host_row_pitch, - size_type host_slice_pitch, - void *ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueReadBufferRect( - object_, - buffer(), - blocking, - buffer_offset.data(), - host_offset.data(), - region.data(), - buffer_row_pitch, - buffer_slice_pitch, - host_row_pitch, - host_slice_pitch, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_READ_BUFFER_RECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueWriteBufferRect( - const Buffer& buffer, - cl_bool blocking, - const array& buffer_offset, - const array& host_offset, - const array& region, - size_type buffer_row_pitch, - size_type buffer_slice_pitch, - size_type host_row_pitch, - size_type host_slice_pitch, - const void *ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueWriteBufferRect( - object_, - buffer(), - blocking, - buffer_offset.data(), - host_offset.data(), - region.data(), - buffer_row_pitch, - buffer_slice_pitch, - host_row_pitch, - host_slice_pitch, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_WRITE_BUFFER_RECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueCopyBufferRect( - const Buffer& src, - const Buffer& dst, - const array& src_origin, - const array& dst_origin, - const array& region, - size_type src_row_pitch, - size_type src_slice_pitch, - size_type dst_row_pitch, - size_type dst_slice_pitch, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueCopyBufferRect( - object_, - src(), - dst(), - src_origin.data(), - dst_origin.data(), - region.data(), - src_row_pitch, - src_slice_pitch, - dst_row_pitch, - dst_slice_pitch, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQEUE_COPY_BUFFER_RECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - /** - * Enqueue a command to fill a buffer object with a pattern - * of a given size. The pattern is specified as a vector type. - * \tparam PatternType The datatype of the pattern field. - * The pattern type must be an accepted OpenCL data type. - * \tparam offset Is the offset in bytes into the buffer at - * which to start filling. This must be a multiple of - * the pattern size. - * \tparam size Is the size in bytes of the region to fill. - * This must be a multiple of the pattern size. - */ - template - cl_int enqueueFillBuffer( - const Buffer& buffer, - PatternType pattern, - size_type offset, - size_type size, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueFillBuffer( - object_, - buffer(), - static_cast(&pattern), - sizeof(PatternType), - offset, - size, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_FILL_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - cl_int enqueueReadImage( - const Image& image, - cl_bool blocking, - const array& origin, - const array& region, - size_type row_pitch, - size_type slice_pitch, - void* ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueReadImage( - object_, - image(), - blocking, - origin.data(), - region.data(), - row_pitch, - slice_pitch, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_READ_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueWriteImage( - const Image& image, - cl_bool blocking, - const array& origin, - const array& region, - size_type row_pitch, - size_type slice_pitch, - const void* ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueWriteImage( - object_, - image(), - blocking, - origin.data(), - region.data(), - row_pitch, - slice_pitch, - ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_WRITE_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueCopyImage( - const Image& src, - const Image& dst, - const array& src_origin, - const array& dst_origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueCopyImage( - object_, - src(), - dst(), - src_origin.data(), - dst_origin.data(), - region.data(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_COPY_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - /** - * Enqueue a command to fill an image object with a specified color. - * \param fillColor is the color to use to fill the image. - * This is a four component RGBA floating-point color value if - * the image channel data type is not an unnormalized signed or - * unsigned data type. - */ - cl_int enqueueFillImage( - const Image& image, - cl_float4 fillColor, - const array& origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueFillImage( - object_, - image(), - static_cast(&fillColor), - origin.data(), - region.data(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_FILL_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueue a command to fill an image object with a specified color. - * \param fillColor is the color to use to fill the image. - * This is a four component RGBA signed integer color value if - * the image channel data type is an unnormalized signed integer - * type. - */ - cl_int enqueueFillImage( - const Image& image, - cl_int4 fillColor, - const array& origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueFillImage( - object_, - image(), - static_cast(&fillColor), - origin.data(), - region.data(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_FILL_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueue a command to fill an image object with a specified color. - * \param fillColor is the color to use to fill the image. - * This is a four component RGBA unsigned integer color value if - * the image channel data type is an unnormalized unsigned integer - * type. - */ - cl_int enqueueFillImage( - const Image& image, - cl_uint4 fillColor, - const array& origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueFillImage( - object_, - image(), - static_cast(&fillColor), - origin.data(), - region.data(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_FILL_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - cl_int enqueueCopyImageToBuffer( - const Image& src, - const Buffer& dst, - const array& src_origin, - const array& region, - size_type dst_offset, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueCopyImageToBuffer( - object_, - src(), - dst(), - src_origin.data(), - region.data(), - dst_offset, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueCopyBufferToImage( - const Buffer& src, - const Image& dst, - size_type src_offset, - const array& dst_origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueCopyBufferToImage( - object_, - src(), - dst(), - src_offset, - dst_origin.data(), - region.data(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - void* enqueueMapBuffer( - const Buffer& buffer, - cl_bool blocking, - cl_map_flags flags, - size_type offset, - size_type size, - const vector* events = NULL, - Event* event = NULL, - cl_int* err = NULL) const - { - cl_event tmp; - cl_int error; - void * result = ::clEnqueueMapBuffer( - object_, buffer(), blocking, flags, offset, size, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL, - &error); - - detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - if (event != NULL && error == CL_SUCCESS) - *event = tmp; - - return result; - } - - void* enqueueMapImage( - const Image& buffer, - cl_bool blocking, - cl_map_flags flags, - const array& origin, - const array& region, - size_type * row_pitch, - size_type * slice_pitch, - const vector* events = NULL, - Event* event = NULL, - cl_int* err = NULL) const - { - cl_event tmp; - cl_int error; - void * result = ::clEnqueueMapImage( - object_, buffer(), blocking, flags, - origin.data(), - region.data(), - row_pitch, slice_pitch, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL, - &error); - - detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR); - if (err != NULL) { - *err = error; - } - if (event != NULL && error == CL_SUCCESS) - *event = tmp; - return result; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - /** - * Enqueues a command that will allow the host to update a region of a coarse-grained SVM buffer. - * This variant takes a raw SVM pointer. - */ - template - cl_int enqueueMapSVM( - T* ptr, - cl_bool blocking, - cl_map_flags flags, - size_type size, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler(::clEnqueueSVMMap( - object_, blocking, flags, static_cast(ptr), size, - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MAP_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - - /** - * Enqueues a command that will allow the host to update a region of a coarse-grained SVM buffer. - * This variant takes a cl::pointer instance. - */ - template - cl_int enqueueMapSVM( - cl::pointer &ptr, - cl_bool blocking, - cl_map_flags flags, - size_type size, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler(::clEnqueueSVMMap( - object_, blocking, flags, static_cast(ptr.get()), size, - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MAP_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueues a command that will allow the host to update a region of a coarse-grained SVM buffer. - * This variant takes a cl::vector instance. - */ - template - cl_int enqueueMapSVM( - cl::vector &container, - cl_bool blocking, - cl_map_flags flags, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler(::clEnqueueSVMMap( - object_, blocking, flags, static_cast(container.data()), container.size()*sizeof(T), - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MAP_BUFFER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - cl_int enqueueUnmapMemObject( - const Memory& memory, - void* mapped_ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueUnmapMemObject( - object_, memory(), mapped_ptr, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - /** - * Enqueues a command that will release a coarse-grained SVM buffer back to the OpenCL runtime. - * This variant takes a raw SVM pointer. - */ - template - cl_int enqueueUnmapSVM( - T* ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueSVMUnmap( - object_, static_cast(ptr), - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueues a command that will release a coarse-grained SVM buffer back to the OpenCL runtime. - * This variant takes a cl::pointer instance. - */ - template - cl_int enqueueUnmapSVM( - cl::pointer &ptr, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueSVMUnmap( - object_, static_cast(ptr.get()), - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueues a command that will release a coarse-grained SVM buffer back to the OpenCL runtime. - * This variant takes a cl::vector instance. - */ - template - cl_int enqueueUnmapSVM( - cl::vector &container, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueSVMUnmap( - object_, static_cast(container.data()), - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - /** - * Enqueues a marker command which waits for either a list of events to complete, - * or all previously enqueued commands to complete. - * - * Enqueues a marker command which waits for either a list of events to complete, - * or if the list is empty it waits for all commands previously enqueued in command_queue - * to complete before it completes. This command returns an event which can be waited on, - * i.e. this event can be waited on to insure that all events either in the event_wait_list - * or all previously enqueued commands, queued before this command to command_queue, - * have completed. - */ - cl_int enqueueMarkerWithWaitList( - const vector *events = 0, - Event *event = 0) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueMarkerWithWaitList( - object_, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MARKER_WAIT_LIST_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * A synchronization point that enqueues a barrier operation. - * - * Enqueues a barrier command which waits for either a list of events to complete, - * or if the list is empty it waits for all commands previously enqueued in command_queue - * to complete before it completes. This command blocks command execution, that is, any - * following commands enqueued after it do not execute until it completes. This command - * returns an event which can be waited on, i.e. this event can be waited on to insure that - * all events either in the event_wait_list or all previously enqueued commands, queued - * before this command to command_queue, have completed. - */ - cl_int enqueueBarrierWithWaitList( - const vector *events = 0, - Event *event = 0) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueBarrierWithWaitList( - object_, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_BARRIER_WAIT_LIST_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueues a command to indicate with which device a set of memory objects - * should be associated. - */ - cl_int enqueueMigrateMemObjects( - const vector &memObjects, - cl_mem_migration_flags flags, - const vector* events = NULL, - Event* event = NULL - ) const - { - cl_event tmp; - - vector localMemObjects(memObjects.size()); - - for( int i = 0; i < (int)memObjects.size(); ++i ) { - localMemObjects[i] = memObjects[i](); - } - - cl_int err = detail::errHandler( - ::clEnqueueMigrateMemObjects( - object_, - (cl_uint)memObjects.size(), - localMemObjects.data(), - flags, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - /** - * Enqueues a command that will allow the host associate ranges within a set of - * SVM allocations with a device. - * @param sizes - The length from each pointer to migrate. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector &svmRawPointers, - const cl::vector &sizes, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler(::clEnqueueSVMMigrateMem( - object_, - svmRawPointers.size(), static_cast(svmRawPointers.data()), - sizes.data(), // array of sizes not passed - flags, - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MIGRATE_SVM_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - /** - * Enqueues a command that will allow the host associate a set of SVM allocations with - * a device. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector &svmRawPointers, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - return enqueueMigrateSVM(svmRawPointers, cl::vector(svmRawPointers.size()), flags, events, event); - } - - - /** - * Enqueues a command that will allow the host associate ranges within a set of - * SVM allocations with a device. - * @param sizes - The length from each pointer to migrate. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector> &svmPointers, - const cl::vector &sizes, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - cl::vector svmRawPointers; - svmRawPointers.reserve(svmPointers.size()); - for (auto p : svmPointers) { - svmRawPointers.push_back(static_cast(p.get())); - } - - return enqueueMigrateSVM(svmRawPointers, sizes, flags, events, event); - } - - - /** - * Enqueues a command that will allow the host associate a set of SVM allocations with - * a device. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector> &svmPointers, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - return enqueueMigrateSVM(svmPointers, cl::vector(svmPointers.size()), flags, events, event); - } - - /** - * Enqueues a command that will allow the host associate ranges within a set of - * SVM allocations with a device. - * @param sizes - The length from the beginning of each container to migrate. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector> &svmContainers, - const cl::vector &sizes, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - cl::vector svmRawPointers; - svmRawPointers.reserve(svmContainers.size()); - for (auto p : svmContainers) { - svmRawPointers.push_back(static_cast(p.data())); - } - - return enqueueMigrateSVM(svmRawPointers, sizes, flags, events, event); - } - - /** - * Enqueues a command that will allow the host associate a set of SVM allocations with - * a device. - */ - template - cl_int enqueueMigrateSVM( - const cl::vector> &svmContainers, - cl_mem_migration_flags flags = 0, - const vector* events = NULL, - Event* event = NULL) const - { - return enqueueMigrateSVM(svmContainers, cl::vector(svmContainers.size()), flags, events, event); - } - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 - - cl_int enqueueNDRangeKernel( - const Kernel& kernel, - const NDRange& offset, - const NDRange& global, - const NDRange& local = NullRange, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueNDRangeKernel( - object_, kernel(), (cl_uint) global.dimensions(), - offset.dimensions() != 0 ? (const size_type*) offset : NULL, - (const size_type*) global, - local.dimensions() != 0 ? (const size_type*) local : NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_NDRANGE_KERNEL_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - -#if defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) - CL_API_PREFIX__VERSION_1_2_DEPRECATED cl_int enqueueTask( - const Kernel& kernel, - const vector* events = NULL, - Event* event = NULL) const CL_API_SUFFIX__VERSION_1_2_DEPRECATED - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueTask( - object_, kernel(), - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_TASK_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) - - cl_int enqueueNativeKernel( - void (CL_CALLBACK *userFptr)(void *), - std::pair args, - const vector* mem_objects = NULL, - const vector* mem_locs = NULL, - const vector* events = NULL, - Event* event = NULL) const - { - size_type elements = 0; - if (mem_objects != NULL) { - elements = mem_objects->size(); - } - vector mems(elements); - for (unsigned int i = 0; i < elements; i++) { - mems[i] = ((*mem_objects)[i])(); - } - - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueNativeKernel( - object_, userFptr, args.first, args.second, - (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, - mems.data(), - (mem_locs != NULL && mem_locs->size() > 0) ? (const void **) &mem_locs->front() : NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_NATIVE_KERNEL); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - -/** - * Deprecated APIs for 1.2 - */ -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - CL_API_PREFIX__VERSION_1_1_DEPRECATED - cl_int enqueueMarker(Event* event = NULL) const CL_API_SUFFIX__VERSION_1_1_DEPRECATED - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueMarker( - object_, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_MARKER_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - CL_API_PREFIX__VERSION_1_1_DEPRECATED - cl_int enqueueWaitForEvents(const vector& events) const CL_API_SUFFIX__VERSION_1_1_DEPRECATED - { - return detail::errHandler( - ::clEnqueueWaitForEvents( - object_, - (cl_uint) events.size(), - events.size() > 0 ? (const cl_event*) &events.front() : NULL), - __ENQUEUE_WAIT_FOR_EVENTS_ERR); - } -#endif // defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - - cl_int enqueueAcquireGLObjects( - const vector* mem_objects = NULL, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueAcquireGLObjects( - object_, - (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, - (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_ACQUIRE_GL_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueReleaseGLObjects( - const vector* mem_objects = NULL, - const vector* events = NULL, - Event* event = NULL) const - { - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueReleaseGLObjects( - object_, - (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, - (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_RELEASE_GL_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - -#if defined (CL_HPP_USE_DX_INTEROP) -typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem* mem_objects, cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, cl_event* event); -typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)( - cl_command_queue command_queue, cl_uint num_objects, - const cl_mem* mem_objects, cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, cl_event* event); - - cl_int enqueueAcquireD3D10Objects( - const vector* mem_objects = NULL, - const vector* events = NULL, - Event* event = NULL) const - { - static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL; -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - cl_context context = getInfo(); - cl::Device device(getInfo()); - cl_platform_id platform = device.getInfo(); - CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clEnqueueAcquireD3D10ObjectsKHR); -#endif -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - CL_HPP_INIT_CL_EXT_FCN_PTR_(clEnqueueAcquireD3D10ObjectsKHR); -#endif - - cl_event tmp; - cl_int err = detail::errHandler( - pfn_clEnqueueAcquireD3D10ObjectsKHR( - object_, - (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, - (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_ACQUIRE_GL_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } - - cl_int enqueueReleaseD3D10Objects( - const vector* mem_objects = NULL, - const vector* events = NULL, - Event* event = NULL) const - { - static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL; -#if CL_HPP_TARGET_OPENCL_VERSION >= 120 - cl_context context = getInfo(); - cl::Device device(getInfo()); - cl_platform_id platform = device.getInfo(); - CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_(platform, clEnqueueReleaseD3D10ObjectsKHR); -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 120 -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 - CL_HPP_INIT_CL_EXT_FCN_PTR_(clEnqueueReleaseD3D10ObjectsKHR); -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 - - cl_event tmp; - cl_int err = detail::errHandler( - pfn_clEnqueueReleaseD3D10ObjectsKHR( - object_, - (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0, - (mem_objects != NULL && mem_objects->size() > 0) ? (const cl_mem *) &mem_objects->front(): NULL, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_RELEASE_GL_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; - } -#endif - -/** - * Deprecated APIs for 1.2 - */ -#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) - CL_API_PREFIX__VERSION_1_1_DEPRECATED - cl_int enqueueBarrier() const CL_API_SUFFIX__VERSION_1_1_DEPRECATED - { - return detail::errHandler( - ::clEnqueueBarrier(object_), - __ENQUEUE_BARRIER_ERR); - } -#endif // CL_USE_DEPRECATED_OPENCL_1_1_APIS - - cl_int flush() const - { - return detail::errHandler(::clFlush(object_), __FLUSH_ERR); - } - - cl_int finish() const - { - return detail::errHandler(::clFinish(object_), __FINISH_ERR); - } -}; // CommandQueue - -CL_HPP_DEFINE_STATIC_MEMBER_ std::once_flag CommandQueue::default_initialized_; -CL_HPP_DEFINE_STATIC_MEMBER_ CommandQueue CommandQueue::default_; -CL_HPP_DEFINE_STATIC_MEMBER_ cl_int CommandQueue::default_error_ = CL_SUCCESS; - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -enum class DeviceQueueProperties : cl_command_queue_properties -{ - None = 0, - Profiling = CL_QUEUE_PROFILING_ENABLE, -}; - -inline DeviceQueueProperties operator|(DeviceQueueProperties lhs, DeviceQueueProperties rhs) -{ - return static_cast(static_cast(lhs) | static_cast(rhs)); -} - -/*! \class DeviceCommandQueue - * \brief DeviceCommandQueue interface for device cl_command_queues. - */ -class DeviceCommandQueue : public detail::Wrapper -{ -public: - - /*! - * Trivial empty constructor to create a null queue. - */ - DeviceCommandQueue() { } - - /*! - * Default construct device command queue on default context and device - */ - DeviceCommandQueue(DeviceQueueProperties properties, cl_int* err = NULL) - { - cl_int error; - cl::Context context = cl::Context::getDefault(); - cl::Device device = cl::Device::getDefault(); - - cl_command_queue_properties mergedProperties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | static_cast(properties); - - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, mergedProperties, 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! - * Create a device command queue for a specified device in the passed context. - */ - DeviceCommandQueue( - const Context& context, - const Device& device, - DeviceQueueProperties properties = DeviceQueueProperties::None, - cl_int* err = NULL) - { - cl_int error; - - cl_command_queue_properties mergedProperties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | static_cast(properties); - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, mergedProperties, 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! - * Create a device command queue for a specified device in the passed context. - */ - DeviceCommandQueue( - const Context& context, - const Device& device, - cl_uint queueSize, - DeviceQueueProperties properties = DeviceQueueProperties::None, - cl_int* err = NULL) - { - cl_int error; - - cl_command_queue_properties mergedProperties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | static_cast(properties); - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, mergedProperties, - CL_QUEUE_SIZE, queueSize, - 0 }; - object_ = ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - } - - /*! \brief Constructor from cl_command_queue - takes ownership. - * - * \param retainObject will cause the constructor to retain its cl object. - * Defaults to false to maintain compatibility with - * earlier versions. - */ - explicit DeviceCommandQueue(const cl_command_queue& commandQueue, bool retainObject = false) : - detail::Wrapper(commandQueue, retainObject) { } - - DeviceCommandQueue& operator = (const cl_command_queue& rhs) - { - detail::Wrapper::operator=(rhs); - return *this; - } - - /*! \brief Copy constructor to forward copy to the superclass correctly. - * Required for MSVC. - */ - DeviceCommandQueue(const DeviceCommandQueue& queue) : detail::Wrapper(queue) {} - - /*! \brief Copy assignment to forward copy to the superclass correctly. - * Required for MSVC. - */ - DeviceCommandQueue& operator = (const DeviceCommandQueue &queue) - { - detail::Wrapper::operator=(queue); - return *this; - } - - /*! \brief Move constructor to forward move to the superclass correctly. - * Required for MSVC. - */ - DeviceCommandQueue(DeviceCommandQueue&& queue) CL_HPP_NOEXCEPT_ : detail::Wrapper(std::move(queue)) {} - - /*! \brief Move assignment to forward move to the superclass correctly. - * Required for MSVC. - */ - DeviceCommandQueue& operator = (DeviceCommandQueue &&queue) - { - detail::Wrapper::operator=(std::move(queue)); - return *this; - } - - template - cl_int getInfo(cl_command_queue_info name, T* param) const - { - return detail::errHandler( - detail::getInfo( - &::clGetCommandQueueInfo, object_, name, param), - __GET_COMMAND_QUEUE_INFO_ERR); - } - - template typename - detail::param_traits::param_type - getInfo(cl_int* err = NULL) const - { - typename detail::param_traits< - detail::cl_command_queue_info, name>::param_type param; - cl_int result = getInfo(name, ¶m); - if (err != NULL) { - *err = result; - } - return param; - } - - /*! - * Create a new default device command queue for the default device, - * in the default context and of the default size. - * If there is already a default queue for the specified device this - * function will return the pre-existing queue. - */ - static DeviceCommandQueue makeDefault( - cl_int *err = nullptr) - { - cl_int error; - cl::Context context = cl::Context::getDefault(); - cl::Device device = cl::Device::getDefault(); - - cl_command_queue_properties properties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | CL_QUEUE_ON_DEVICE_DEFAULT; - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, - 0 }; - DeviceCommandQueue deviceQueue( - ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error)); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - - return deviceQueue; - } - - /*! - * Create a new default device command queue for the specified device - * and of the default size. - * If there is already a default queue for the specified device this - * function will return the pre-existing queue. - */ - static DeviceCommandQueue makeDefault( - const Context &context, const Device &device, cl_int *err = nullptr) - { - cl_int error; - - cl_command_queue_properties properties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | CL_QUEUE_ON_DEVICE_DEFAULT; - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, - 0 }; - DeviceCommandQueue deviceQueue( - ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error)); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - - return deviceQueue; - } - - /*! - * Create a new default device command queue for the specified device - * and of the requested size in bytes. - * If there is already a default queue for the specified device this - * function will return the pre-existing queue. - */ - static DeviceCommandQueue makeDefault( - const Context &context, const Device &device, cl_uint queueSize, cl_int *err = nullptr) - { - cl_int error; - - cl_command_queue_properties properties = - CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | CL_QUEUE_ON_DEVICE_DEFAULT; - cl_queue_properties queue_properties[] = { - CL_QUEUE_PROPERTIES, properties, - CL_QUEUE_SIZE, queueSize, - 0 }; - DeviceCommandQueue deviceQueue( - ::clCreateCommandQueueWithProperties( - context(), device(), queue_properties, &error)); - - detail::errHandler(error, __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR); - if (err != NULL) { - *err = error; - } - - return deviceQueue; - } - - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 210 - /*! - * Modify the default device command queue to be used for subsequent kernels. - * This can update the default command queue for a device repeatedly to account - * for kernels that rely on the default. - * @return updated default device command queue. - */ - static DeviceCommandQueue updateDefault(const Context &context, const Device &device, const DeviceCommandQueue &default_queue, cl_int *err = nullptr) - { - cl_int error; - error = clSetDefaultDeviceCommandQueue(context.get(), device.get(), default_queue.get()); - - detail::errHandler(error, __SET_DEFAULT_DEVICE_COMMAND_QUEUE_ERR); - if (err != NULL) { - *err = error; - } - return default_queue; - } - - /*! - * Return the current default command queue for the specified command queue - */ - static DeviceCommandQueue getDefault(const CommandQueue &queue, cl_int * err = NULL) - { - return queue.getInfo(err); - } - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 210 -}; // DeviceCommandQueue - -namespace detail -{ - // Specialization for device command queue - template <> - struct KernelArgumentHandler - { - static size_type size(const cl::DeviceCommandQueue&) { return sizeof(cl_command_queue); } - static const cl_command_queue* ptr(const cl::DeviceCommandQueue& value) { return &(value()); } - }; -} // namespace detail - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - -template< typename IteratorType > -Buffer::Buffer( - const Context &context, - IteratorType startIterator, - IteratorType endIterator, - bool readOnly, - bool useHostPtr, - cl_int* err) -{ - typedef typename std::iterator_traits::value_type DataType; - cl_int error; - - cl_mem_flags flags = 0; - if( readOnly ) { - flags |= CL_MEM_READ_ONLY; - } - else { - flags |= CL_MEM_READ_WRITE; - } - if( useHostPtr ) { - flags |= CL_MEM_USE_HOST_PTR; - } - - size_type size = sizeof(DataType)*(endIterator - startIterator); - - if( useHostPtr ) { - object_ = ::clCreateBuffer(context(), flags, size, const_cast(&*startIterator), &error); - } else { - object_ = ::clCreateBuffer(context(), flags, size, 0, &error); - } - - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - - if( !useHostPtr ) { - CommandQueue queue(context, 0, &error); - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - - error = cl::copy(queue, startIterator, endIterator, *this); - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } -} - -template< typename IteratorType > -Buffer::Buffer( - const CommandQueue &queue, - IteratorType startIterator, - IteratorType endIterator, - bool readOnly, - bool useHostPtr, - cl_int* err) -{ - typedef typename std::iterator_traits::value_type DataType; - cl_int error; - - cl_mem_flags flags = 0; - if (readOnly) { - flags |= CL_MEM_READ_ONLY; - } - else { - flags |= CL_MEM_READ_WRITE; - } - if (useHostPtr) { - flags |= CL_MEM_USE_HOST_PTR; - } - - size_type size = sizeof(DataType)*(endIterator - startIterator); - - Context context = queue.getInfo(); - - if (useHostPtr) { - object_ = ::clCreateBuffer(context(), flags, size, const_cast(&*startIterator), &error); - } - else { - object_ = ::clCreateBuffer(context(), flags, size, 0, &error); - } - - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - - if (!useHostPtr) { - error = cl::copy(queue, startIterator, endIterator, *this); - detail::errHandler(error, __CREATE_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - } -} - -inline cl_int enqueueReadBuffer( - const Buffer& buffer, - cl_bool blocking, - size_type offset, - size_type size, - void* ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event); -} - -inline cl_int enqueueWriteBuffer( - const Buffer& buffer, - cl_bool blocking, - size_type offset, - size_type size, - const void* ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event); -} - -inline void* enqueueMapBuffer( - const Buffer& buffer, - cl_bool blocking, - cl_map_flags flags, - size_type offset, - size_type size, - const vector* events = NULL, - Event* event = NULL, - cl_int* err = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - - void * result = ::clEnqueueMapBuffer( - queue(), buffer(), blocking, flags, offset, size, - (events != NULL) ? (cl_uint) events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL, - (cl_event*) event, - &error); - - detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - if (err != NULL) { - *err = error; - } - return result; -} - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -/** - * Enqueues to the default queue a command that will allow the host to - * update a region of a coarse-grained SVM buffer. - * This variant takes a raw SVM pointer. - */ -template -inline cl_int enqueueMapSVM( - T* ptr, - cl_bool blocking, - cl_map_flags flags, - size_type size, - const vector* events, - Event* event) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - } - - return queue.enqueueMapSVM( - ptr, blocking, flags, size, events, event); -} - -/** - * Enqueues to the default queue a command that will allow the host to - * update a region of a coarse-grained SVM buffer. - * This variant takes a cl::pointer instance. - */ -template -inline cl_int enqueueMapSVM( - cl::pointer &ptr, - cl_bool blocking, - cl_map_flags flags, - size_type size, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - } - - return queue.enqueueMapSVM( - ptr, blocking, flags, size, events, event); -} - -/** - * Enqueues to the default queue a command that will allow the host to - * update a region of a coarse-grained SVM buffer. - * This variant takes a cl::vector instance. - */ -template -inline cl_int enqueueMapSVM( - cl::vector &container, - cl_bool blocking, - cl_map_flags flags, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - } - - return queue.enqueueMapSVM( - container, blocking, flags, events, event); -} - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -inline cl_int enqueueUnmapMemObject( - const Memory& memory, - void* mapped_ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR); - if (error != CL_SUCCESS) { - return error; - } - - cl_event tmp; - cl_int err = detail::errHandler( - ::clEnqueueUnmapMemObject( - queue(), memory(), mapped_ptr, - (events != NULL) ? (cl_uint)events->size() : 0, - (events != NULL && events->size() > 0) ? (cl_event*)&events->front() : NULL, - (event != NULL) ? &tmp : NULL), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - - if (event != NULL && err == CL_SUCCESS) - *event = tmp; - - return err; -} - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -/** - * Enqueues to the default queue a command that will release a coarse-grained - * SVM buffer back to the OpenCL runtime. - * This variant takes a raw SVM pointer. - */ -template -inline cl_int enqueueUnmapSVM( - T* ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - } - - return detail::errHandler(queue.enqueueUnmapSVM(ptr, events, event), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - -} - -/** - * Enqueues to the default queue a command that will release a coarse-grained - * SVM buffer back to the OpenCL runtime. - * This variant takes a cl::pointer instance. - */ -template -inline cl_int enqueueUnmapSVM( - cl::pointer &ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - } - - return detail::errHandler(queue.enqueueUnmapSVM(ptr, events, event), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); -} - -/** - * Enqueues to the default queue a command that will release a coarse-grained - * SVM buffer back to the OpenCL runtime. - * This variant takes a cl::vector instance. - */ -template -inline cl_int enqueueUnmapSVM( - cl::vector &container, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) { - return detail::errHandler(error, __ENQUEUE_UNMAP_MEM_OBJECT_ERR); - } - - return detail::errHandler(queue.enqueueUnmapSVM(container, events, event), - __ENQUEUE_UNMAP_MEM_OBJECT_ERR); -} - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -inline cl_int enqueueCopyBuffer( - const Buffer& src, - const Buffer& dst, - size_type src_offset, - size_type dst_offset, - size_type size, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event); -} - -/** - * Blocking copy operation between iterators and a buffer. - * Host to Device. - * Uses default command queue. - */ -template< typename IteratorType > -inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) - return error; - - return cl::copy(queue, startIterator, endIterator, buffer); -} - -/** - * Blocking copy operation between iterators and a buffer. - * Device to Host. - * Uses default command queue. - */ -template< typename IteratorType > -inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - if (error != CL_SUCCESS) - return error; - - return cl::copy(queue, buffer, startIterator, endIterator); -} - -/** - * Blocking copy operation between iterators and a buffer. - * Host to Device. - * Uses specified queue. - */ -template< typename IteratorType > -inline cl_int copy( const CommandQueue &queue, IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer ) -{ - typedef typename std::iterator_traits::value_type DataType; - cl_int error; - - size_type length = endIterator-startIterator; - size_type byteLength = length*sizeof(DataType); - - DataType *pointer = - static_cast(queue.enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_WRITE, 0, byteLength, 0, 0, &error)); - // if exceptions enabled, enqueueMapBuffer will throw - if( error != CL_SUCCESS ) { - return error; - } -#if defined(_MSC_VER) - std::copy( - startIterator, - endIterator, - stdext::checked_array_iterator( - pointer, length)); -#else - std::copy(startIterator, endIterator, pointer); -#endif - Event endEvent; - error = queue.enqueueUnmapMemObject(buffer, pointer, 0, &endEvent); - // if exceptions enabled, enqueueUnmapMemObject will throw - if( error != CL_SUCCESS ) { - return error; - } - endEvent.wait(); - return CL_SUCCESS; -} - -/** - * Blocking copy operation between iterators and a buffer. - * Device to Host. - * Uses specified queue. - */ -template< typename IteratorType > -inline cl_int copy( const CommandQueue &queue, const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator ) -{ - typedef typename std::iterator_traits::value_type DataType; - cl_int error; - - size_type length = endIterator-startIterator; - size_type byteLength = length*sizeof(DataType); - - DataType *pointer = - static_cast(queue.enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_READ, 0, byteLength, 0, 0, &error)); - // if exceptions enabled, enqueueMapBuffer will throw - if( error != CL_SUCCESS ) { - return error; - } - std::copy(pointer, pointer + length, startIterator); - Event endEvent; - error = queue.enqueueUnmapMemObject(buffer, pointer, 0, &endEvent); - // if exceptions enabled, enqueueUnmapMemObject will throw - if( error != CL_SUCCESS ) { - return error; - } - endEvent.wait(); - return CL_SUCCESS; -} - - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 -/** - * Blocking SVM map operation - performs a blocking map underneath. - */ -template -inline cl_int mapSVM(cl::vector &container) -{ - return enqueueMapSVM(container, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE); -} - -/** -* Blocking SVM map operation - performs a blocking map underneath. -*/ -template -inline cl_int unmapSVM(cl::vector &container) -{ - return enqueueUnmapSVM(container); -} - -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - -#if CL_HPP_TARGET_OPENCL_VERSION >= 110 -inline cl_int enqueueReadBufferRect( - const Buffer& buffer, - cl_bool blocking, - const array& buffer_offset, - const array& host_offset, - const array& region, - size_type buffer_row_pitch, - size_type buffer_slice_pitch, - size_type host_row_pitch, - size_type host_slice_pitch, - void *ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueReadBufferRect( - buffer, - blocking, - buffer_offset, - host_offset, - region, - buffer_row_pitch, - buffer_slice_pitch, - host_row_pitch, - host_slice_pitch, - ptr, - events, - event); -} - -inline cl_int enqueueWriteBufferRect( - const Buffer& buffer, - cl_bool blocking, - const array& buffer_offset, - const array& host_offset, - const array& region, - size_type buffer_row_pitch, - size_type buffer_slice_pitch, - size_type host_row_pitch, - size_type host_slice_pitch, - const void *ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueWriteBufferRect( - buffer, - blocking, - buffer_offset, - host_offset, - region, - buffer_row_pitch, - buffer_slice_pitch, - host_row_pitch, - host_slice_pitch, - ptr, - events, - event); -} - -inline cl_int enqueueCopyBufferRect( - const Buffer& src, - const Buffer& dst, - const array& src_origin, - const array& dst_origin, - const array& region, - size_type src_row_pitch, - size_type src_slice_pitch, - size_type dst_row_pitch, - size_type dst_slice_pitch, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueCopyBufferRect( - src, - dst, - src_origin, - dst_origin, - region, - src_row_pitch, - src_slice_pitch, - dst_row_pitch, - dst_slice_pitch, - events, - event); -} -#endif // CL_HPP_TARGET_OPENCL_VERSION >= 110 - -inline cl_int enqueueReadImage( - const Image& image, - cl_bool blocking, - const array& origin, - const array& region, - size_type row_pitch, - size_type slice_pitch, - void* ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueReadImage( - image, - blocking, - origin, - region, - row_pitch, - slice_pitch, - ptr, - events, - event); -} - -inline cl_int enqueueWriteImage( - const Image& image, - cl_bool blocking, - const array& origin, - const array& region, - size_type row_pitch, - size_type slice_pitch, - const void* ptr, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueWriteImage( - image, - blocking, - origin, - region, - row_pitch, - slice_pitch, - ptr, - events, - event); -} - -inline cl_int enqueueCopyImage( - const Image& src, - const Image& dst, - const array& src_origin, - const array& dst_origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueCopyImage( - src, - dst, - src_origin, - dst_origin, - region, - events, - event); -} - -inline cl_int enqueueCopyImageToBuffer( - const Image& src, - const Buffer& dst, - const array& src_origin, - const array& region, - size_type dst_offset, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueCopyImageToBuffer( - src, - dst, - src_origin, - region, - dst_offset, - events, - event); -} - -inline cl_int enqueueCopyBufferToImage( - const Buffer& src, - const Image& dst, - size_type src_offset, - const array& dst_origin, - const array& region, - const vector* events = NULL, - Event* event = NULL) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.enqueueCopyBufferToImage( - src, - dst, - src_offset, - dst_origin, - region, - events, - event); -} - - -inline cl_int flush(void) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - return queue.flush(); -} - -inline cl_int finish(void) -{ - cl_int error; - CommandQueue queue = CommandQueue::getDefault(&error); - - if (error != CL_SUCCESS) { - return error; - } - - - return queue.finish(); -} - -class EnqueueArgs -{ -private: - CommandQueue queue_; - const NDRange offset_; - const NDRange global_; - const NDRange local_; - vector events_; - - template - friend class KernelFunctor; - -public: - EnqueueArgs(NDRange global) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(NullRange) - { - - } - - EnqueueArgs(NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(local) - { - - } - - EnqueueArgs(NDRange offset, NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(offset), - global_(global), - local_(local) - { - - } - - EnqueueArgs(Event e, NDRange global) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(NullRange) - { - events_.push_back(e); - } - - EnqueueArgs(Event e, NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(local) - { - events_.push_back(e); - } - - EnqueueArgs(Event e, NDRange offset, NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(offset), - global_(global), - local_(local) - { - events_.push_back(e); - } - - EnqueueArgs(const vector &events, NDRange global) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(NullRange), - events_(events) - { - - } - - EnqueueArgs(const vector &events, NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(NullRange), - global_(global), - local_(local), - events_(events) - { - - } - - EnqueueArgs(const vector &events, NDRange offset, NDRange global, NDRange local) : - queue_(CommandQueue::getDefault()), - offset_(offset), - global_(global), - local_(local), - events_(events) - { - - } - - EnqueueArgs(CommandQueue &queue, NDRange global) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(NullRange) - { - - } - - EnqueueArgs(CommandQueue &queue, NDRange global, NDRange local) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(local) - { - - } - - EnqueueArgs(CommandQueue &queue, NDRange offset, NDRange global, NDRange local) : - queue_(queue), - offset_(offset), - global_(global), - local_(local) - { - - } - - EnqueueArgs(CommandQueue &queue, Event e, NDRange global) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(NullRange) - { - events_.push_back(e); - } - - EnqueueArgs(CommandQueue &queue, Event e, NDRange global, NDRange local) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(local) - { - events_.push_back(e); - } - - EnqueueArgs(CommandQueue &queue, Event e, NDRange offset, NDRange global, NDRange local) : - queue_(queue), - offset_(offset), - global_(global), - local_(local) - { - events_.push_back(e); - } - - EnqueueArgs(CommandQueue &queue, const vector &events, NDRange global) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(NullRange), - events_(events) - { - - } - - EnqueueArgs(CommandQueue &queue, const vector &events, NDRange global, NDRange local) : - queue_(queue), - offset_(NullRange), - global_(global), - local_(local), - events_(events) - { - - } - - EnqueueArgs(CommandQueue &queue, const vector &events, NDRange offset, NDRange global, NDRange local) : - queue_(queue), - offset_(offset), - global_(global), - local_(local), - events_(events) - { - - } -}; - - -//---------------------------------------------------------------------------------------------- - - -/** - * Type safe kernel functor. - * - */ -template -class KernelFunctor -{ -private: - Kernel kernel_; - - template - void setArgs(T0&& t0, T1s&&... t1s) - { - kernel_.setArg(index, t0); - setArgs(std::forward(t1s)...); - } - - template - void setArgs(T0&& t0) - { - kernel_.setArg(index, t0); - } - - template - void setArgs() - { - } - - -public: - KernelFunctor(Kernel kernel) : kernel_(kernel) - {} - - KernelFunctor( - const Program& program, - const string name, - cl_int * err = NULL) : - kernel_(program, name.c_str(), err) - {} - - //! \brief Return type of the functor - typedef Event result_type; - - /** - * Enqueue kernel. - * @param args Launch parameters of the kernel. - * @param t0... List of kernel arguments based on the template type of the functor. - */ - Event operator() ( - const EnqueueArgs& args, - Ts... ts) - { - Event event; - setArgs<0>(std::forward(ts)...); - - args.queue_.enqueueNDRangeKernel( - kernel_, - args.offset_, - args.global_, - args.local_, - &args.events_, - &event); - - return event; - } - - /** - * Enqueue kernel with support for error code. - * @param args Launch parameters of the kernel. - * @param t0... List of kernel arguments based on the template type of the functor. - * @param error Out parameter returning the error code from the execution. - */ - Event operator() ( - const EnqueueArgs& args, - Ts... ts, - cl_int &error) - { - Event event; - setArgs<0>(std::forward(ts)...); - - error = args.queue_.enqueueNDRangeKernel( - kernel_, - args.offset_, - args.global_, - args.local_, - &args.events_, - &event); - - return event; - } - -#if CL_HPP_TARGET_OPENCL_VERSION >= 200 - cl_int setSVMPointers(const vector &pointerList) - { - return kernel_.setSVMPointers(pointerList); - } - - template - cl_int setSVMPointers(const T0 &t0, T1s &... ts) - { - return kernel_.setSVMPointers(t0, ts...); - } -#endif // #if CL_HPP_TARGET_OPENCL_VERSION >= 200 - - Kernel getKernel() - { - return kernel_; - } -}; - -namespace compatibility { - /** - * Backward compatibility class to ensure that cl.hpp code works with opencl.hpp. - * Please use KernelFunctor directly. - */ - template - struct make_kernel - { - typedef KernelFunctor FunctorType; - - FunctorType functor_; - - make_kernel( - const Program& program, - const string name, - cl_int * err = NULL) : - functor_(FunctorType(program, name, err)) - {} - - make_kernel( - const Kernel kernel) : - functor_(FunctorType(kernel)) - {} - - //! \brief Return type of the functor - typedef Event result_type; - - //! \brief Function signature of kernel functor with no event dependency. - typedef Event type_( - const EnqueueArgs&, - Ts...); - - Event operator()( - const EnqueueArgs& enqueueArgs, - Ts... args) - { - return functor_( - enqueueArgs, args...); - } - }; -} // namespace compatibility - - -//---------------------------------------------------------------------------------------------------------------------- - -#undef CL_HPP_ERR_STR_ -#if !defined(CL_HPP_USER_OVERRIDE_ERROR_STRINGS) -#undef __GET_DEVICE_INFO_ERR -#undef __GET_PLATFORM_INFO_ERR -#undef __GET_DEVICE_IDS_ERR -#undef __GET_PLATFORM_IDS_ERR -#undef __GET_CONTEXT_INFO_ERR -#undef __GET_EVENT_INFO_ERR -#undef __GET_EVENT_PROFILE_INFO_ERR -#undef __GET_MEM_OBJECT_INFO_ERR -#undef __GET_IMAGE_INFO_ERR -#undef __GET_SAMPLER_INFO_ERR -#undef __GET_KERNEL_INFO_ERR -#undef __GET_KERNEL_ARG_INFO_ERR -#undef __GET_KERNEL_SUB_GROUP_INFO_ERR -#undef __GET_KERNEL_WORK_GROUP_INFO_ERR -#undef __GET_PROGRAM_INFO_ERR -#undef __GET_PROGRAM_BUILD_INFO_ERR -#undef __GET_COMMAND_QUEUE_INFO_ERR -#undef __CREATE_CONTEXT_ERR -#undef __CREATE_CONTEXT_FROM_TYPE_ERR -#undef __GET_SUPPORTED_IMAGE_FORMATS_ERR -#undef __CREATE_BUFFER_ERR -#undef __COPY_ERR -#undef __CREATE_SUBBUFFER_ERR -#undef __CREATE_GL_BUFFER_ERR -#undef __CREATE_GL_RENDER_BUFFER_ERR -#undef __GET_GL_OBJECT_INFO_ERR -#undef __CREATE_IMAGE_ERR -#undef __CREATE_GL_TEXTURE_ERR -#undef __IMAGE_DIMENSION_ERR -#undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR -#undef __CREATE_USER_EVENT_ERR -#undef __SET_USER_EVENT_STATUS_ERR -#undef __SET_EVENT_CALLBACK_ERR -#undef __WAIT_FOR_EVENTS_ERR -#undef __CREATE_KERNEL_ERR -#undef __SET_KERNEL_ARGS_ERR -#undef __CREATE_PROGRAM_WITH_SOURCE_ERR -#undef __CREATE_PROGRAM_WITH_IL_ERR -#undef __CREATE_PROGRAM_WITH_BINARY_ERR -#undef __CREATE_PROGRAM_WITH_IL_ERR -#undef __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR -#undef __BUILD_PROGRAM_ERR -#undef __COMPILE_PROGRAM_ERR -#undef __LINK_PROGRAM_ERR -#undef __CREATE_KERNELS_IN_PROGRAM_ERR -#undef __CREATE_COMMAND_QUEUE_WITH_PROPERTIES_ERR -#undef __CREATE_SAMPLER_WITH_PROPERTIES_ERR -#undef __SET_COMMAND_QUEUE_PROPERTY_ERR -#undef __ENQUEUE_READ_BUFFER_ERR -#undef __ENQUEUE_READ_BUFFER_RECT_ERR -#undef __ENQUEUE_WRITE_BUFFER_ERR -#undef __ENQUEUE_WRITE_BUFFER_RECT_ERR -#undef __ENQEUE_COPY_BUFFER_ERR -#undef __ENQEUE_COPY_BUFFER_RECT_ERR -#undef __ENQUEUE_FILL_BUFFER_ERR -#undef __ENQUEUE_READ_IMAGE_ERR -#undef __ENQUEUE_WRITE_IMAGE_ERR -#undef __ENQUEUE_COPY_IMAGE_ERR -#undef __ENQUEUE_FILL_IMAGE_ERR -#undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR -#undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR -#undef __ENQUEUE_MAP_BUFFER_ERR -#undef __ENQUEUE_MAP_IMAGE_ERR -#undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR -#undef __ENQUEUE_NDRANGE_KERNEL_ERR -#undef __ENQUEUE_NATIVE_KERNEL -#undef __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR -#undef __ENQUEUE_MIGRATE_SVM_ERR -#undef __ENQUEUE_ACQUIRE_GL_ERR -#undef __ENQUEUE_RELEASE_GL_ERR -#undef __CREATE_PIPE_ERR -#undef __GET_PIPE_INFO_ERR -#undef __RETAIN_ERR -#undef __RELEASE_ERR -#undef __FLUSH_ERR -#undef __FINISH_ERR -#undef __VECTOR_CAPACITY_ERR -#undef __CREATE_SUB_DEVICES_ERR -#undef __CREATE_SUB_DEVICES_ERR -#undef __ENQUEUE_MARKER_ERR -#undef __ENQUEUE_WAIT_FOR_EVENTS_ERR -#undef __ENQUEUE_BARRIER_ERR -#undef __UNLOAD_COMPILER_ERR -#undef __CREATE_GL_TEXTURE_2D_ERR -#undef __CREATE_GL_TEXTURE_3D_ERR -#undef __CREATE_IMAGE2D_ERR -#undef __CREATE_IMAGE3D_ERR -#undef __CREATE_COMMAND_QUEUE_ERR -#undef __ENQUEUE_TASK_ERR -#undef __CREATE_SAMPLER_ERR -#undef __ENQUEUE_MARKER_WAIT_LIST_ERR -#undef __ENQUEUE_BARRIER_WAIT_LIST_ERR -#undef __CLONE_KERNEL_ERR -#undef __GET_HOST_TIMER_ERR -#undef __GET_DEVICE_AND_HOST_TIMER_ERR - -#endif //CL_HPP_USER_OVERRIDE_ERROR_STRINGS - -// Extensions -#undef CL_HPP_INIT_CL_EXT_FCN_PTR_ -#undef CL_HPP_INIT_CL_EXT_FCN_PTR_PLATFORM_ - -#if defined(CL_HPP_USE_CL_DEVICE_FISSION) -#undef CL_HPP_PARAM_NAME_DEVICE_FISSION_ -#endif // CL_HPP_USE_CL_DEVICE_FISSION - -#undef CL_HPP_NOEXCEPT_ -#undef CL_HPP_DEFINE_STATIC_MEMBER_ - -} // namespace cl - -#endif // CL_HPP_ diff --git a/include/cblas.h b/include/cblas.h deleted file mode 100644 index 48b47059d..000000000 --- a/include/cblas.h +++ /dev/null @@ -1,413 +0,0 @@ -#pragma once - -#ifndef CBLAS_H -#define CBLAS_H - -#include -#include - -#ifdef __cplusplus -extern "C" { - /* Assume C declarations for C++ */ -#endif /* __cplusplus */ - -/*Set the number of threads on runtime.*/ -void openblas_set_num_threads(int num_threads); -void goto_set_num_threads(int num_threads); - -/*Get the number of threads on runtime.*/ -int openblas_get_num_threads(void); - -/*Get the number of physical processors (cores).*/ -int openblas_get_num_procs(void); - -/*Get the build configure on runtime.*/ -char* openblas_get_config(void); - -/*Get the CPU corename on runtime.*/ -char* openblas_get_corename(void); - -#ifdef OPENBLAS_OS_LINUX -/* Sets thread affinity for OpenBLAS threads. `thread_idx` is in [0, openblas_get_num_threads()-1]. */ -int openblas_setaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set); -/* Queries thread affinity for OpenBLAS threads. `thread_idx` is in [0, openblas_get_num_threads()-1]. */ -int openblas_getaffinity(int thread_idx, size_t cpusetsize, cpu_set_t* cpu_set); -#endif - -/* Get the parallelization type which is used by OpenBLAS */ -int openblas_get_parallel(void); -/* OpenBLAS is compiled for sequential use */ -#define OPENBLAS_SEQUENTIAL 0 -/* OpenBLAS is compiled using normal threading model */ -#define OPENBLAS_THREAD 1 -/* OpenBLAS is compiled using OpenMP threading model */ -#define OPENBLAS_OPENMP 2 - - -/* - * Since all of GotoBlas was written without const, - * we disable it at build time. - */ -#ifndef OPENBLAS_CONST -# define OPENBLAS_CONST const -#endif - - -#define CBLAS_INDEX size_t - -typedef enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER; -typedef enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, CblasConjNoTrans=114} CBLAS_TRANSPOSE; -typedef enum CBLAS_UPLO {CblasUpper=121, CblasLower=122} CBLAS_UPLO; -typedef enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132} CBLAS_DIAG; -typedef enum CBLAS_SIDE {CblasLeft=141, CblasRight=142} CBLAS_SIDE; -typedef CBLAS_ORDER CBLAS_LAYOUT; - -float cblas_sdsdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy); -double cblas_dsdot (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy); -float cblas_sdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, OPENBLAS_CONST blasint incy); -double cblas_ddot(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double *y, OPENBLAS_CONST blasint incy); - -openblas_complex_float cblas_cdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy); -openblas_complex_float cblas_cdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy); -openblas_complex_double cblas_zdotu(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy); -openblas_complex_double cblas_zdotc(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy); - -void cblas_cdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret); -void cblas_cdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret); -void cblas_zdotu_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret); -void cblas_zdotc_sub(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *y, OPENBLAS_CONST blasint incy, void *ret); - -float cblas_sasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -double cblas_dasum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -float cblas_scasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -double cblas_dzasum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -float cblas_ssum (OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -double cblas_dsum (OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -float cblas_scsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -double cblas_dzsum(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -float cblas_snrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX); -double cblas_dnrm2 (OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX); -float cblas_scnrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX); -double cblas_dznrm2(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX); - -CBLAS_INDEX cblas_isamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_idamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_icamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_izamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -CBLAS_INDEX cblas_isamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_idamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_icamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_izamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -CBLAS_INDEX cblas_ismax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_idmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_icmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_izmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -CBLAS_INDEX cblas_ismin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_idmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_icmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); -CBLAS_INDEX cblas_izmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx); - -void cblas_saxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy); -void cblas_daxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy); -void cblas_caxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); -void cblas_zaxpy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); - -void cblas_scopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy); -void cblas_dcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy); -void cblas_ccopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); -void cblas_zcopy(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); - -void cblas_sswap(OPENBLAS_CONST blasint n, float *x, OPENBLAS_CONST blasint incx, float *y, OPENBLAS_CONST blasint incy); -void cblas_dswap(OPENBLAS_CONST blasint n, double *x, OPENBLAS_CONST blasint incx, double *y, OPENBLAS_CONST blasint incy); -void cblas_cswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); -void cblas_zswap(OPENBLAS_CONST blasint n, void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incy); - -void cblas_srot(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s); -void cblas_drot(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s); -void cblas_csrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, OPENBLAS_CONST float s); -void cblas_zdrot(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, void *y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, OPENBLAS_CONST double s); - -void cblas_srotg(float *a, float *b, float *c, float *s); -void cblas_drotg(double *a, double *b, double *c, double *s); -void cblas_crotg(void *a, void *b, float *c, void *s); -void cblas_zrotg(void *a, void *b, double *c, void *s); - - -void cblas_srotm(OPENBLAS_CONST blasint N, float *X, OPENBLAS_CONST blasint incX, float *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST float *P); -void cblas_drotm(OPENBLAS_CONST blasint N, double *X, OPENBLAS_CONST blasint incX, double *Y, OPENBLAS_CONST blasint incY, OPENBLAS_CONST double *P); - -void cblas_srotmg(float *d1, float *d2, float *b1, OPENBLAS_CONST float b2, float *P); -void cblas_drotmg(double *d1, double *d2, double *b1, OPENBLAS_CONST double b2, double *P); - -void cblas_sscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, float *X, OPENBLAS_CONST blasint incX); -void cblas_dscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, double *X, OPENBLAS_CONST blasint incX); -void cblas_cscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX); -void cblas_zscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, void *X, OPENBLAS_CONST blasint incX); -void cblas_csscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, void *X, OPENBLAS_CONST blasint incX); -void cblas_zdscal(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, void *X, OPENBLAS_CONST blasint incX); - -void cblas_sgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, - OPENBLAS_CONST float alpha, OPENBLAS_CONST float *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy); -void cblas_dgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, - OPENBLAS_CONST double alpha, OPENBLAS_CONST double *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy); -void cblas_cgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy); -void cblas_zgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy); - -void cblas_sger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda); -void cblas_dger (OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda); -void cblas_cgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); -void cblas_cgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); -void cblas_zgeru(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); -void cblas_zgerc(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); - -void cblas_strsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztrsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); - -void cblas_strmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztrmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); - -void cblas_ssyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *A, OPENBLAS_CONST blasint lda); -void cblas_dsyr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *A, OPENBLAS_CONST blasint lda); -void cblas_cher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda); -void cblas_zher(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A, OPENBLAS_CONST blasint lda); - -void cblas_ssyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo,OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, - OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A, OPENBLAS_CONST blasint lda); -void cblas_dsyr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, - OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A, OPENBLAS_CONST blasint lda); -void cblas_cher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, - OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); -void cblas_zher2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, - OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *A, OPENBLAS_CONST blasint lda); - -void cblas_sgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY); -void cblas_dgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY); -void cblas_cgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); -void cblas_zgbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); - -void cblas_ssbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY); -void cblas_dsbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY); - - -void cblas_stbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); - -void cblas_stbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztbsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *X, OPENBLAS_CONST blasint incX); - -void cblas_stpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX); - -void cblas_stpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, float *X, OPENBLAS_CONST blasint incX); -void cblas_dtpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, double *X, OPENBLAS_CONST blasint incX); -void cblas_ctpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX); -void cblas_ztpsv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_DIAG Diag, - OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, void *X, OPENBLAS_CONST blasint incX); - -void cblas_ssymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY); -void cblas_dsymv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY); -void cblas_chemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); -void cblas_zhemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, - OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); - - -void cblas_sspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *Ap, - OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float beta, float *Y, OPENBLAS_CONST blasint incY); -void cblas_dspmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *Ap, - OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double beta, double *Y, OPENBLAS_CONST blasint incY); - -void cblas_sspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, float *Ap); -void cblas_dspr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, double *Ap); - -void cblas_chpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, void *A); -void cblas_zhpr(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST void *X,OPENBLAS_CONST blasint incX, void *A); - -void cblas_sspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, float *A); -void cblas_dspr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, double *A); -void cblas_chpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap); -void cblas_zhpr2(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, void *Ap); - -void cblas_chbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); -void cblas_zhbmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); - -void cblas_chpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); -void cblas_zhpmv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *beta, void *Y, OPENBLAS_CONST blasint incY); - -void cblas_sgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc); -void cblas_dgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc); -void cblas_cgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_cgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zgemm3m(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); - - -void cblas_ssymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc); -void cblas_dsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc); -void cblas_csymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zsymm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_ssyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc); -void cblas_dsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc); -void cblas_csyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zsyrk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_ssyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc); -void cblas_dsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, double *C, OPENBLAS_CONST blasint ldc); -void cblas_csyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zsyr2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, - OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_strmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb); -void cblas_dtrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb); -void cblas_ctrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb); -void cblas_ztrmm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb); - -void cblas_strsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, float *B, OPENBLAS_CONST blasint ldb); -void cblas_dtrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, double *B, OPENBLAS_CONST blasint ldb); -void cblas_ctrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb); -void cblas_ztrsm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, - OPENBLAS_CONST enum CBLAS_DIAG Diag, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, void *B, OPENBLAS_CONST blasint ldb); - -void cblas_chemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zhemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_SIDE Side, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_cherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST float alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zherk(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST double alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST double beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_cher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, void *C, OPENBLAS_CONST blasint ldc); -void cblas_zher2k(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_UPLO Uplo, OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST double beta, void *C, OPENBLAS_CONST blasint ldc); - -void cblas_xerbla(blasint p, char *rout, char *form, ...); - -/*** BLAS extensions ***/ - -void cblas_saxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy); - -void cblas_daxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST double beta, double *y, OPENBLAS_CONST blasint incy); - -void cblas_caxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy); - -void cblas_zaxpby(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx,OPENBLAS_CONST void *beta, void *y, OPENBLAS_CONST blasint incy); - -void cblas_somatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, OPENBLAS_CONST float *a, - OPENBLAS_CONST blasint clda, float *b, OPENBLAS_CONST blasint cldb); -void cblas_domatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, OPENBLAS_CONST double *a, - OPENBLAS_CONST blasint clda, double *b, OPENBLAS_CONST blasint cldb); -void cblas_comatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, OPENBLAS_CONST float* a, - OPENBLAS_CONST blasint clda, float*b, OPENBLAS_CONST blasint cldb); -void cblas_zomatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, OPENBLAS_CONST double* a, - OPENBLAS_CONST blasint clda, double *b, OPENBLAS_CONST blasint cldb); - -void cblas_simatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, float *a, - OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb); -void cblas_dimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, double *a, - OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb); -void cblas_cimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float* calpha, float* a, - OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb); -void cblas_zimatcopy(OPENBLAS_CONST enum CBLAS_ORDER CORDER, OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double* calpha, double* a, - OPENBLAS_CONST blasint clda, OPENBLAS_CONST blasint cldb); - -void cblas_sgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float calpha, float *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST float cbeta, - float *c, OPENBLAS_CONST blasint cldc); -void cblas_dgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double calpha, double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double cbeta, - double *c, OPENBLAS_CONST blasint cldc); -void cblas_cgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST float *calpha, float *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST float *cbeta, - float *c, OPENBLAS_CONST blasint cldc); -void cblas_zgeadd(OPENBLAS_CONST enum CBLAS_ORDER CORDER,OPENBLAS_CONST blasint crows, OPENBLAS_CONST blasint ccols, OPENBLAS_CONST double *calpha, double *a, OPENBLAS_CONST blasint clda, OPENBLAS_CONST double *cbeta, - double *c, OPENBLAS_CONST blasint cldc); - -/*** BFLOAT16 and INT8 extensions ***/ -/* convert float array to BFLOAT16 array by rounding */ -void cblas_sbstobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout); -/* convert double array to BFLOAT16 array by rounding */ -void cblas_sbdtobf16(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *in, OPENBLAS_CONST blasint incin, bfloat16 *out, OPENBLAS_CONST blasint incout); -/* convert BFLOAT16 array to float array */ -void cblas_sbf16tos(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, float *out, OPENBLAS_CONST blasint incout); -/* convert BFLOAT16 array to double array */ -void cblas_dbf16tod(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *in, OPENBLAS_CONST blasint incin, double *out, OPENBLAS_CONST blasint incout); -/* dot production of BFLOAT16 input arrays, and output as float */ -float cblas_sbdot(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST bfloat16 *y, OPENBLAS_CONST blasint incy); -void cblas_sbgemv(OPENBLAS_CONST enum CBLAS_ORDER order, OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy); - -void cblas_sbgemm(OPENBLAS_CONST enum CBLAS_ORDER Order, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, - OPENBLAS_CONST float alpha, OPENBLAS_CONST bfloat16 *A, OPENBLAS_CONST blasint lda, OPENBLAS_CONST bfloat16 *B, OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, float *C, OPENBLAS_CONST blasint ldc); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/include/clblast.h b/include/clblast.h deleted file mode 100644 index 6c7481af0..000000000 --- a/include/clblast.h +++ /dev/null @@ -1,792 +0,0 @@ - -// ================================================================================================= -// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This -// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- -// width of 100 characters per line. -// -// Author(s): -// Cedric Nugteren -// -// This file contains the interface to the CLBlast BLAS routines. It also contains the definitions -// of the returned status codes and the layout and transpose types. This is the only header users -// of CLBlast should include and use. -// -// ================================================================================================= - -#ifndef CLBLAST_CLBLAST_H_ -#define CLBLAST_CLBLAST_H_ - -#include // For size_t -#include // For OverrideParameters function -#include // For OverrideParameters function - -// Includes the normal OpenCL C header -#if defined(__APPLE__) || defined(__MACOSX) - #include -#else - #include -#endif - -// Exports library functions under Windows when building a DLL. See also: -// https://msdn.microsoft.com/en-us/library/a90k134d.aspx -#if defined(_WIN32) && defined(CLBLAST_DLL) - #if defined(COMPILING_DLL) - #define PUBLIC_API __declspec(dllexport) - #else - #define PUBLIC_API __declspec(dllimport) - #endif -#else - #define PUBLIC_API -#endif - -// Version numbering (v1.6.0) -#define CLBLAST_VERSION_MAJOR 1 -#define CLBLAST_VERSION_MINOR 6 -#define CLBLAST_VERSION_PATCH 0 - -namespace clblast { -// ================================================================================================= - -// Status codes. These codes can be returned by functions declared in this header file. The error -// codes match either the standard OpenCL error codes or the clBLAS error codes. -enum class StatusCode { - - // Status codes in common with the OpenCL standard - kSuccess = 0, // CL_SUCCESS - kOpenCLCompilerNotAvailable= -3, // CL_COMPILER_NOT_AVAILABLE - kTempBufferAllocFailure = -4, // CL_MEM_OBJECT_ALLOCATION_FAILURE - kOpenCLOutOfResources = -5, // CL_OUT_OF_RESOURCES - kOpenCLOutOfHostMemory = -6, // CL_OUT_OF_HOST_MEMORY - kOpenCLBuildProgramFailure = -11, // CL_BUILD_PROGRAM_FAILURE: OpenCL compilation error - kInvalidValue = -30, // CL_INVALID_VALUE - kInvalidCommandQueue = -36, // CL_INVALID_COMMAND_QUEUE - kInvalidMemObject = -38, // CL_INVALID_MEM_OBJECT - kInvalidBinary = -42, // CL_INVALID_BINARY - kInvalidBuildOptions = -43, // CL_INVALID_BUILD_OPTIONS - kInvalidProgram = -44, // CL_INVALID_PROGRAM - kInvalidProgramExecutable = -45, // CL_INVALID_PROGRAM_EXECUTABLE - kInvalidKernelName = -46, // CL_INVALID_KERNEL_NAME - kInvalidKernelDefinition = -47, // CL_INVALID_KERNEL_DEFINITION - kInvalidKernel = -48, // CL_INVALID_KERNEL - kInvalidArgIndex = -49, // CL_INVALID_ARG_INDEX - kInvalidArgValue = -50, // CL_INVALID_ARG_VALUE - kInvalidArgSize = -51, // CL_INVALID_ARG_SIZE - kInvalidKernelArgs = -52, // CL_INVALID_KERNEL_ARGS - kInvalidLocalNumDimensions = -53, // CL_INVALID_WORK_DIMENSION: Too many thread dimensions - kInvalidLocalThreadsTotal = -54, // CL_INVALID_WORK_GROUP_SIZE: Too many threads in total - kInvalidLocalThreadsDim = -55, // CL_INVALID_WORK_ITEM_SIZE: ... or for a specific dimension - kInvalidGlobalOffset = -56, // CL_INVALID_GLOBAL_OFFSET - kInvalidEventWaitList = -57, // CL_INVALID_EVENT_WAIT_LIST - kInvalidEvent = -58, // CL_INVALID_EVENT - kInvalidOperation = -59, // CL_INVALID_OPERATION - kInvalidBufferSize = -61, // CL_INVALID_BUFFER_SIZE - kInvalidGlobalWorkSize = -63, // CL_INVALID_GLOBAL_WORK_SIZE - - // Status codes in common with the clBLAS library - kNotImplemented = -1024, // Routine or functionality not implemented yet - kInvalidMatrixA = -1022, // Matrix A is not a valid OpenCL buffer - kInvalidMatrixB = -1021, // Matrix B is not a valid OpenCL buffer - kInvalidMatrixC = -1020, // Matrix C is not a valid OpenCL buffer - kInvalidVectorX = -1019, // Vector X is not a valid OpenCL buffer - kInvalidVectorY = -1018, // Vector Y is not a valid OpenCL buffer - kInvalidDimension = -1017, // Dimensions M, N, and K have to be larger than zero - kInvalidLeadDimA = -1016, // LD of A is smaller than the matrix's first dimension - kInvalidLeadDimB = -1015, // LD of B is smaller than the matrix's first dimension - kInvalidLeadDimC = -1014, // LD of C is smaller than the matrix's first dimension - kInvalidIncrementX = -1013, // Increment of vector X cannot be zero - kInvalidIncrementY = -1012, // Increment of vector Y cannot be zero - kInsufficientMemoryA = -1011, // Matrix A's OpenCL buffer is too small - kInsufficientMemoryB = -1010, // Matrix B's OpenCL buffer is too small - kInsufficientMemoryC = -1009, // Matrix C's OpenCL buffer is too small - kInsufficientMemoryX = -1008, // Vector X's OpenCL buffer is too small - kInsufficientMemoryY = -1007, // Vector Y's OpenCL buffer is too small - - // Custom additional status codes for CLBlast - kInsufficientMemoryTemp = -2050, // Temporary buffer provided to GEMM routine is too small - kInvalidBatchCount = -2049, // The batch count needs to be positive - kInvalidOverrideKernel = -2048, // Trying to override parameters for an invalid kernel - kMissingOverrideParameter = -2047, // Missing override parameter(s) for the target kernel - kInvalidLocalMemUsage = -2046, // Not enough local memory available on this device - kNoHalfPrecision = -2045, // Half precision (16-bits) not supported by the device - kNoDoublePrecision = -2044, // Double precision (64-bits) not supported by the device - kInvalidVectorScalar = -2043, // The unit-sized vector is not a valid OpenCL buffer - kInsufficientMemoryScalar = -2042, // The unit-sized vector's OpenCL buffer is too small - kDatabaseError = -2041, // Entry for the device was not found in the database - kUnknownError = -2040, // A catch-all error code representing an unspecified error - kUnexpectedError = -2039, // A catch-all error code representing an unexpected exception -}; - -// Matrix layout and transpose types -enum class Layout { kRowMajor = 101, kColMajor = 102 }; -enum class Transpose { kNo = 111, kYes = 112, kConjugate = 113 }; -enum class Triangle { kUpper = 121, kLower = 122 }; -enum class Diagonal { kNonUnit = 131, kUnit = 132 }; -enum class Side { kLeft = 141, kRight = 142 }; -enum class KernelMode { kCrossCorrelation = 151, kConvolution = 152 }; - -// Precision scoped enum (values in bits) -enum class Precision { kHalf = 16, kSingle = 32, kDouble = 64, - kComplexSingle = 3232, kComplexDouble = 6464, kAny = -1 }; - -// ================================================================================================= -// BLAS level-1 (vector-vector) routines -// ================================================================================================= - -// Generate givens plane rotation: SROTG/DROTG -template -StatusCode Rotg(cl_mem sa_buffer, const size_t sa_offset, - cl_mem sb_buffer, const size_t sb_offset, - cl_mem sc_buffer, const size_t sc_offset, - cl_mem ss_buffer, const size_t ss_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Generate modified givens plane rotation: SROTMG/DROTMG -template -StatusCode Rotmg(cl_mem sd1_buffer, const size_t sd1_offset, - cl_mem sd2_buffer, const size_t sd2_offset, - cl_mem sx1_buffer, const size_t sx1_offset, - const cl_mem sy1_buffer, const size_t sy1_offset, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Apply givens plane rotation: SROT/DROT -template -StatusCode Rot(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const T cos, - const T sin, - cl_command_queue* queue, cl_event* event = nullptr); - -// Apply modified givens plane rotation: SROTM/DROTM -template -StatusCode Rotm(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Swap two vectors: SSWAP/DSWAP/CSWAP/ZSWAP/HSWAP -template -StatusCode Swap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Vector scaling: SSCAL/DSCAL/CSCAL/ZSCAL/HSCAL -template -StatusCode Scal(const size_t n, - const T alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Vector copy: SCOPY/DCOPY/CCOPY/ZCOPY/HCOPY -template -StatusCode Copy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Vector-times-constant plus vector: SAXPY/DAXPY/CAXPY/ZAXPY/HAXPY -template -StatusCode Axpy(const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Dot product of two vectors: SDOT/DDOT/HDOT -template -StatusCode Dot(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Dot product of two complex vectors: CDOTU/ZDOTU -template -StatusCode Dotu(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Dot product of two complex vectors, one conjugated: CDOTC/ZDOTC -template -StatusCode Dotc(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Euclidian norm of a vector: SNRM2/DNRM2/ScNRM2/DzNRM2/HNRM2 -template -StatusCode Nrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Absolute sum of values in a vector: SASUM/DASUM/ScASUM/DzASUM/HASUM -template -StatusCode Asum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Sum of values in a vector (non-BLAS function): SSUM/DSUM/ScSUM/DzSUM/HSUM -template -StatusCode Sum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Index of absolute maximum value in a vector: iSAMAX/iDAMAX/iCAMAX/iZAMAX/iHAMAX -template -StatusCode Amax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Index of absolute minimum value in a vector (non-BLAS function): iSAMIN/iDAMIN/iCAMIN/iZAMIN/iHAMIN -template -StatusCode Amin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Index of maximum value in a vector (non-BLAS function): iSMAX/iDMAX/iCMAX/iZMAX/iHMAX -template -StatusCode Max(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Index of minimum value in a vector (non-BLAS function): iSMIN/iDMIN/iCMIN/iZMIN/iHMIN -template -StatusCode Min(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// ================================================================================================= -// BLAS level-2 (matrix-vector) routines -// ================================================================================================= - -// General matrix-vector multiplication: SGEMV/DGEMV/CGEMV/ZGEMV/HGEMV -template -StatusCode Gemv(const Layout layout, const Transpose a_transpose, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// General banded matrix-vector multiplication: SGBMV/DGBMV/CGBMV/ZGBMV/HGBMV -template -StatusCode Gbmv(const Layout layout, const Transpose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian matrix-vector multiplication: CHEMV/ZHEMV -template -StatusCode Hemv(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian banded matrix-vector multiplication: CHBMV/ZHBMV -template -StatusCode Hbmv(const Layout layout, const Triangle triangle, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian packed matrix-vector multiplication: CHPMV/ZHPMV -template -StatusCode Hpmv(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric matrix-vector multiplication: SSYMV/DSYMV/HSYMV -template -StatusCode Symv(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric banded matrix-vector multiplication: SSBMV/DSBMV/HSBMV -template -StatusCode Sbmv(const Layout layout, const Triangle triangle, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric packed matrix-vector multiplication: SSPMV/DSPMV/HSPMV -template -StatusCode Spmv(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const T beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Triangular matrix-vector multiplication: STRMV/DTRMV/CTRMV/ZTRMV/HTRMV -template -StatusCode Trmv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Triangular banded matrix-vector multiplication: STBMV/DTBMV/CTBMV/ZTBMV/HTBMV -template -StatusCode Tbmv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Triangular packed matrix-vector multiplication: STPMV/DTPMV/CTPMV/ZTPMV/HTPMV -template -StatusCode Tpmv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Solves a triangular system of equations: STRSV/DTRSV/CTRSV/ZTRSV -template -StatusCode Trsv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Solves a banded triangular system of equations: STBSV/DTBSV/CTBSV/ZTBSV -template -StatusCode Tbsv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Solves a packed triangular system of equations: STPSV/DTPSV/CTPSV/ZTPSV -template -StatusCode Tpsv(const Layout layout, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// General rank-1 matrix update: SGER/DGER/HGER -template -StatusCode Ger(const Layout layout, - const size_t m, const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// General rank-1 complex matrix update: CGERU/ZGERU -template -StatusCode Geru(const Layout layout, - const size_t m, const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// General rank-1 complex conjugated matrix update: CGERC/ZGERC -template -StatusCode Gerc(const Layout layout, - const size_t m, const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian rank-1 matrix update: CHER/ZHER -template -StatusCode Her(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian packed rank-1 matrix update: CHPR/ZHPR -template -StatusCode Hpr(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian rank-2 matrix update: CHER2/ZHER2 -template -StatusCode Her2(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian packed rank-2 matrix update: CHPR2/ZHPR2 -template -StatusCode Hpr2(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric rank-1 matrix update: SSYR/DSYR/HSYR -template -StatusCode Syr(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric packed rank-1 matrix update: SSPR/DSPR/HSPR -template -StatusCode Spr(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric rank-2 matrix update: SSYR2/DSYR2/HSYR2 -template -StatusCode Syr2(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Symmetric packed rank-2 matrix update: SSPR2/DSPR2/HSPR2 -template -StatusCode Spr2(const Layout layout, const Triangle triangle, - const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// ================================================================================================= -// BLAS level-3 (matrix-matrix) routines -// ================================================================================================= - -// General matrix-matrix multiplication: SGEMM/DGEMM/CGEMM/ZGEMM/HGEMM -template -StatusCode Gemm(const Layout layout, const Transpose a_transpose, const Transpose b_transpose, - const size_t m, const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr, - cl_mem temp_buffer = nullptr); - -// Symmetric matrix-matrix multiplication: SSYMM/DSYMM/CSYMM/ZSYMM/HSYMM -template -StatusCode Symm(const Layout layout, const Side side, const Triangle triangle, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Hermitian matrix-matrix multiplication: CHEMM/ZHEMM -template -StatusCode Hemm(const Layout layout, const Side side, const Triangle triangle, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Rank-K update of a symmetric matrix: SSYRK/DSYRK/CSYRK/ZSYRK/HSYRK -template -StatusCode Syrk(const Layout layout, const Triangle triangle, const Transpose a_transpose, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Rank-K update of a hermitian matrix: CHERK/ZHERK -template -StatusCode Herk(const Layout layout, const Triangle triangle, const Transpose a_transpose, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Rank-2K update of a symmetric matrix: SSYR2K/DSYR2K/CSYR2K/ZSYR2K/HSYR2K -template -StatusCode Syr2k(const Layout layout, const Triangle triangle, const Transpose ab_transpose, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Rank-2K update of a hermitian matrix: CHER2K/ZHER2K -template -StatusCode Her2k(const Layout layout, const Triangle triangle, const Transpose ab_transpose, - const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const U beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Triangular matrix-matrix multiplication: STRMM/DTRMM/CTRMM/ZTRMM/HTRMM -template -StatusCode Trmm(const Layout layout, const Side side, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Solves a triangular system of equations: STRSM/DTRSM/CTRSM/ZTRSM -template -StatusCode Trsm(const Layout layout, const Side side, const Triangle triangle, const Transpose a_transpose, const Diagonal diagonal, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// ================================================================================================= -// Extra non-BLAS routines (level-X) -// ================================================================================================= - -// Element-wise vector product (Hadamard): SHAD/DHAD/CHAD/ZHAD/HHAD -template -StatusCode Had(const size_t n, - const T alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const T beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event = nullptr); - -// Scaling and out-place transpose/copy (non-BLAS function): SOMATCOPY/DOMATCOPY/COMATCOPY/ZOMATCOPY/HOMATCOPY -template -StatusCode Omatcopy(const Layout layout, const Transpose a_transpose, - const size_t m, const size_t n, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event = nullptr); - -// Im2col function (non-BLAS function): SIM2COL/DIM2COL/CIM2COL/ZIM2COL/HIM2COL -template -StatusCode Im2col(const KernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Col2im function (non-BLAS function): SCOL2IM/DCOL2IM/CCOL2IM/ZCOL2IM/HCOL2IM -template -StatusCode Col2im(const KernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Batched convolution as GEMM (non-BLAS function): SCONVGEMM/DCONVGEMM/HCONVGEMM -template -StatusCode Convgemm(const KernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, const size_t num_kernels, const size_t batch_count, - const cl_mem im_buffer, const size_t im_offset, - const cl_mem kernel_buffer, const size_t kernel_offset, - cl_mem result_buffer, const size_t result_offset, - cl_command_queue* queue, cl_event* event = nullptr); - -// Batched version of AXPY: SAXPYBATCHED/DAXPYBATCHED/CAXPYBATCHED/ZAXPYBATCHED/HAXPYBATCHED -template -StatusCode AxpyBatched(const size_t n, - const T *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event = nullptr); - -// Batched version of GEMM: SGEMMBATCHED/DGEMMBATCHED/CGEMMBATCHED/ZGEMMBATCHED/HGEMMBATCHED -template -StatusCode GemmBatched(const Layout layout, const Transpose a_transpose, const Transpose b_transpose, - const size_t m, const size_t n, const size_t k, - const T *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const T *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event = nullptr); - -// StridedBatched version of GEMM: SGEMMSTRIDEDBATCHED/DGEMMSTRIDEDBATCHED/CGEMMSTRIDEDBATCHED/ZGEMMSTRIDEDBATCHED/HGEMMSTRIDEDBATCHED -template -StatusCode GemmStridedBatched(const Layout layout, const Transpose a_transpose, const Transpose b_transpose, - const size_t m, const size_t n, const size_t k, - const T alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const T beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event = nullptr); - -// ================================================================================================= - -// Retrieves the required size of the temporary buffer for the GEMM kernel (optional) -template -StatusCode GemmTempBufferSize(const Layout layout, const Transpose a_transpose, const Transpose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, size_t& temp_buffer_size); - -// ================================================================================================= - -// CLBlast stores binaries of compiled kernels into a cache in case the same kernel is used later on -// for the same device. This cache can be cleared to free up system memory or in case of debugging. -StatusCode PUBLIC_API ClearCache(); - -// The cache can also be pre-initialized for a specific device with all possible CLBlast kernels. -// Further CLBlast routine calls will then run at maximum speed. -StatusCode PUBLIC_API FillCache(const cl_device_id device); - -// ================================================================================================= - -// Retrieves current tuning parameters for a specific device-precision-kernel combination -StatusCode PUBLIC_API RetrieveParameters(const cl_device_id device, const std::string &kernel_name, - const Precision precision, - std::unordered_map ¶meters); - -// Overrides tuning parameters for a specific device-precision-kernel combination. The next time -// the target routine is called it will re-compile and use the new parameters from then on. -StatusCode PUBLIC_API OverrideParameters(const cl_device_id device, const std::string &kernel_name, - const Precision precision, - const std::unordered_map ¶meters); - -// ================================================================================================= - -// Tunes the "Xaxpy" kernel, used for many level-1 routines such as XAXPY, XCOPY, and XSWAP -template -StatusCode TuneXaxpy(cl_command_queue* queue, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Xdot" kernel, used for level-1 reduction routines such as XDOT, XMAX, and XSUM -template -StatusCode TuneXdot(cl_command_queue* queue, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Xgemv" kernel, used for matrix-vector level-2 routines such as XGEMV, XGBMV, and XHEMV -template -StatusCode TuneXgemv(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Xger" kernel, used for matrix update level-2 routines such as XGER, XHER, and XSYR2 -template -StatusCode TuneXger(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Xgemm" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TuneXgemm(cl_command_queue* queue, const size_t m, const size_t n, const size_t k, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "XgemmDiret" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TuneXgemmDirect(cl_command_queue* queue, const size_t m, const size_t n, const size_t k, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Copy" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TuneCopy(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Pad" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TunePad(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Transpose" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TuneTranspose(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Padtranspose" kernel, used for most level-3 routines such as XGEMM, XSYMM, and XHER2K -template -StatusCode TunePadtranspose(cl_command_queue* queue, const size_t m, const size_t n, - const double fraction, std::unordered_map ¶meters); - -// Tunes the "Xgemm" kernel, used for the level-3 routine XTRSM -template -StatusCode TuneInvert(cl_command_queue* queue, const size_t m, const size_t n, const size_t k, - const double fraction, std::unordered_map ¶meters); - -// ================================================================================================= - -} // namespace clblast - -// CLBLAST_CLBLAST_H_ -#endif diff --git a/include/clblast_c.h b/include/clblast_c.h deleted file mode 100644 index c779c556e..000000000 --- a/include/clblast_c.h +++ /dev/null @@ -1,1707 +0,0 @@ - -// ================================================================================================= -// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This -// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- -// width of 100 characters per line. -// -// Author(s): -// Cedric Nugteren -// -// This file contains the plain C interface to the CLBlast BLAS routines, the counter-part of the -// normal 'clblast.h' C++ header. -// -// ================================================================================================= - -#ifndef CLBLAST_CLBLAST_C_H_ -#define CLBLAST_CLBLAST_C_H_ - -// Includes the normal OpenCL C header -#if defined(__APPLE__) || defined(__MACOSX) - #include -#else - #include -#endif - -// Exports library functions under Windows when building a DLL. See also: -// https://msdn.microsoft.com/en-us/library/a90k134d.aspx -#if defined(_WIN32) && defined(CLBLAST_DLL) - #if defined(COMPILING_DLL) - #define PUBLIC_API __declspec(dllexport) - #else - #define PUBLIC_API __declspec(dllimport) - #endif -#else - #define PUBLIC_API -#endif - -// Version numbering (v1.6.0) -#define CLBLAST_VERSION_MAJOR 1 -#define CLBLAST_VERSION_MINOR 6 -#define CLBLAST_VERSION_PATCH 0 - -// The C interface -#ifdef __cplusplus -extern "C" { -#endif - -// ================================================================================================= - -// Status codes. These codes can be returned by functions declared in this header file. The error -// codes match either the standard OpenCL error codes or the clBLAS error codes. -typedef enum CLBlastStatusCode_ { - - // Status codes in common with the OpenCL standard - CLBlastSuccess = 0, // CL_SUCCESS - CLBlastOpenCLCompilerNotAvailable= -3, // CL_COMPILER_NOT_AVAILABLE - CLBlastTempBufferAllocFailure = -4, // CL_MEM_OBJECT_ALLOCATION_FAILURE - CLBlastOpenCLOutOfResources = -5, // CL_OUT_OF_RESOURCES - CLBlastOpenCLOutOfHostMemory = -6, // CL_OUT_OF_HOST_MEMORY - CLBlastOpenCLBuildProgramFailure = -11, // CL_BUILD_PROGRAM_FAILURE: OpenCL compilation error - CLBlastInvalidValue = -30, // CL_INVALID_VALUE - CLBlastInvalidCommandQueue = -36, // CL_INVALID_COMMAND_QUEUE - CLBlastInvalidMemObject = -38, // CL_INVALID_MEM_OBJECT - CLBlastInvalidBinary = -42, // CL_INVALID_BINARY - CLBlastInvalidBuildOptions = -43, // CL_INVALID_BUILD_OPTIONS - CLBlastInvalidProgram = -44, // CL_INVALID_PROGRAM - CLBlastInvalidProgramExecutable = -45, // CL_INVALID_PROGRAM_EXECUTABLE - CLBlastInvalidKernelName = -46, // CL_INVALID_KERNEL_NAME - CLBlastInvalidKernelDefinition = -47, // CL_INVALID_KERNEL_DEFINITION - CLBlastInvalidKernel = -48, // CL_INVALID_KERNEL - CLBlastInvalidArgIndex = -49, // CL_INVALID_ARG_INDEX - CLBlastInvalidArgValue = -50, // CL_INVALID_ARG_VALUE - CLBlastInvalidArgSize = -51, // CL_INVALID_ARG_SIZE - CLBlastInvalidKernelArgs = -52, // CL_INVALID_KERNEL_ARGS - CLBlastInvalidLocalNumDimensions = -53, // CL_INVALID_WORK_DIMENSION: Too many thread dimensions - CLBlastInvalidLocalThreadsTotal = -54, // CL_INVALID_WORK_GROUP_SIZE: Too many threads in total - CLBlastInvalidLocalThreadsDim = -55, // CL_INVALID_WORK_ITEM_SIZE: ... or for a specific dimension - CLBlastInvalidGlobalOffset = -56, // CL_INVALID_GLOBAL_OFFSET - CLBlastInvalidEventWaitList = -57, // CL_INVALID_EVENT_WAIT_LIST - CLBlastInvalidEvent = -58, // CL_INVALID_EVENT - CLBlastInvalidOperation = -59, // CL_INVALID_OPERATION - CLBlastInvalidBufferSize = -61, // CL_INVALID_BUFFER_SIZE - CLBlastInvalidGlobalWorkSize = -63, // CL_INVALID_GLOBAL_WORK_SIZE - - // Status codes in common with the clBLAS library - CLBlastNotImplemented = -1024, // Routine or functionality not implemented yet - CLBlastInvalidMatrixA = -1022, // Matrix A is not a valid OpenCL buffer - CLBlastInvalidMatrixB = -1021, // Matrix B is not a valid OpenCL buffer - CLBlastInvalidMatrixC = -1020, // Matrix C is not a valid OpenCL buffer - CLBlastInvalidVectorX = -1019, // Vector X is not a valid OpenCL buffer - CLBlastInvalidVectorY = -1018, // Vector Y is not a valid OpenCL buffer - CLBlastInvalidDimension = -1017, // Dimensions M, N, and K have to be larger than zero - CLBlastInvalidLeadDimA = -1016, // LD of A is smaller than the matrix's first dimension - CLBlastInvalidLeadDimB = -1015, // LD of B is smaller than the matrix's first dimension - CLBlastInvalidLeadDimC = -1014, // LD of C is smaller than the matrix's first dimension - CLBlastInvalidIncrementX = -1013, // Increment of vector X cannot be zero - CLBlastInvalidIncrementY = -1012, // Increment of vector Y cannot be zero - CLBlastInsufficientMemoryA = -1011, // Matrix A's OpenCL buffer is too small - CLBlastInsufficientMemoryB = -1010, // Matrix B's OpenCL buffer is too small - CLBlastInsufficientMemoryC = -1009, // Matrix C's OpenCL buffer is too small - CLBlastInsufficientMemoryX = -1008, // Vector X's OpenCL buffer is too small - CLBlastInsufficientMemoryY = -1007, // Vector Y's OpenCL buffer is too small - - // Custom additional status codes for CLBlast - CLBlastInsufficientMemoryTemp = -2050, // Temporary buffer provided to GEMM routine is too small - CLBlastInvalidBatchCount = -2049, // The batch count needs to be positive - CLBlastInvalidOverrideKernel = -2048, // Trying to override parameters for an invalid kernel - CLBlastMissingOverrideParameter = -2047, // Missing override parameter(s) for the target kernel - CLBlastInvalidLocalMemUsage = -2046, // Not enough local memory available on this device - CLBlastNoHalfPrecision = -2045, // Half precision (16-bits) not supported by the device - CLBlastNoDoublePrecision = -2044, // Double precision (64-bits) not supported by the device - CLBlastInvalidVectorScalar = -2043, // The unit-sized vector is not a valid OpenCL buffer - CLBlastInsufficientMemoryScalar = -2042, // The unit-sized vector's OpenCL buffer is too small - CLBlastDatabaseError = -2041, // Entry for the device was not found in the database - CLBlastUnknownError = -2040, // A catch-all error code representing an unspecified error - CLBlastUnexpectedError = -2039, // A catch-all error code representing an unexpected exception -} CLBlastStatusCode; - -// Matrix layout and transpose types -typedef enum CLBlastLayout_ { CLBlastLayoutRowMajor = 101, - CLBlastLayoutColMajor = 102 } CLBlastLayout; -typedef enum CLBlastTranspose_ { CLBlastTransposeNo = 111, CLBlastTransposeYes = 112, - CLBlastTransposeConjugate = 113 } CLBlastTranspose; -typedef enum CLBlastTriangle_ { CLBlastTriangleUpper = 121, - CLBlastTriangleLower = 122 } CLBlastTriangle; -typedef enum CLBlastDiagonal_ { CLBlastDiagonalNonUnit = 131, - CLBlastDiagonalUnit = 132 } CLBlastDiagonal; -typedef enum CLBlastSide_ { CLBlastSideLeft = 141, CLBlastSideRight = 142 } CLBlastSide; -typedef enum CLBlastKernelMode_ { CLBlastKernelModeCrossCorrelation = 151, CLBlastKernelModeConvolution = 152 } CLBlastKernelMode; - -// Precision enum (values in bits) -typedef enum CLBlastPrecision_ { CLBlastPrecisionHalf = 16, CLBlastPrecisionSingle = 32, - CLBlastPrecisionDouble = 64, CLBlastPrecisionComplexSingle = 3232, - CLBlastPrecisionComplexDouble = 6464 } CLBlastPrecision; - -// ================================================================================================= -// BLAS level-1 (vector-vector) routines -// ================================================================================================= - -// Generate givens plane rotation: SROTG/DROTG -CLBlastStatusCode PUBLIC_API CLBlastSrotg(cl_mem sa_buffer, const size_t sa_offset, - cl_mem sb_buffer, const size_t sb_offset, - cl_mem sc_buffer, const size_t sc_offset, - cl_mem ss_buffer, const size_t ss_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDrotg(cl_mem sa_buffer, const size_t sa_offset, - cl_mem sb_buffer, const size_t sb_offset, - cl_mem sc_buffer, const size_t sc_offset, - cl_mem ss_buffer, const size_t ss_offset, - cl_command_queue* queue, cl_event* event); - -// Generate modified givens plane rotation: SROTMG/DROTMG -CLBlastStatusCode PUBLIC_API CLBlastSrotmg(cl_mem sd1_buffer, const size_t sd1_offset, - cl_mem sd2_buffer, const size_t sd2_offset, - cl_mem sx1_buffer, const size_t sx1_offset, - const cl_mem sy1_buffer, const size_t sy1_offset, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDrotmg(cl_mem sd1_buffer, const size_t sd1_offset, - cl_mem sd2_buffer, const size_t sd2_offset, - cl_mem sx1_buffer, const size_t sx1_offset, - const cl_mem sy1_buffer, const size_t sy1_offset, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event); - -// Apply givens plane rotation: SROT/DROT -CLBlastStatusCode PUBLIC_API CLBlastSrot(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const float cos, - const float sin, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDrot(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const double cos, - const double sin, - cl_command_queue* queue, cl_event* event); - -// Apply modified givens plane rotation: SROTM/DROTM -CLBlastStatusCode PUBLIC_API CLBlastSrotm(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDrotm(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem sparam_buffer, const size_t sparam_offset, - cl_command_queue* queue, cl_event* event); - -// Swap two vectors: SSWAP/DSWAP/CSWAP/ZSWAP/HSWAP -CLBlastStatusCode PUBLIC_API CLBlastSswap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDswap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCswap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZswap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHswap(const size_t n, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Vector scaling: SSCAL/DSCAL/CSCAL/ZSCAL/HSCAL -CLBlastStatusCode PUBLIC_API CLBlastSscal(const size_t n, - const float alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDscal(const size_t n, - const double alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCscal(const size_t n, - const cl_float2 alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZscal(const size_t n, - const cl_double2 alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHscal(const size_t n, - const cl_half alpha, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Vector copy: SCOPY/DCOPY/CCOPY/ZCOPY/HCOPY -CLBlastStatusCode PUBLIC_API CLBlastScopy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDcopy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCcopy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZcopy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHcopy(const size_t n, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Vector-times-constant plus vector: SAXPY/DAXPY/CAXPY/ZAXPY/HAXPY -CLBlastStatusCode PUBLIC_API CLBlastSaxpy(const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDaxpy(const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCaxpy(const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZaxpy(const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHaxpy(const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Dot product of two vectors: SDOT/DDOT/HDOT -CLBlastStatusCode PUBLIC_API CLBlastSdot(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDdot(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHdot(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Dot product of two complex vectors: CDOTU/ZDOTU -CLBlastStatusCode PUBLIC_API CLBlastCdotu(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZdotu(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Dot product of two complex vectors, one conjugated: CDOTC/ZDOTC -CLBlastStatusCode PUBLIC_API CLBlastCdotc(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZdotc(const size_t n, - cl_mem dot_buffer, const size_t dot_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Euclidian norm of a vector: SNRM2/DNRM2/ScNRM2/DzNRM2/HNRM2 -CLBlastStatusCode PUBLIC_API CLBlastSnrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDnrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastScnrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDznrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHnrm2(const size_t n, - cl_mem nrm2_buffer, const size_t nrm2_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Absolute sum of values in a vector: SASUM/DASUM/ScASUM/DzASUM/HASUM -CLBlastStatusCode PUBLIC_API CLBlastSasum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDasum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastScasum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDzasum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHasum(const size_t n, - cl_mem asum_buffer, const size_t asum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Sum of values in a vector (non-BLAS function): SSUM/DSUM/ScSUM/DzSUM/HSUM -CLBlastStatusCode PUBLIC_API CLBlastSsum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastScsum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDzsum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsum(const size_t n, - cl_mem sum_buffer, const size_t sum_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Index of absolute maximum value in a vector: iSAMAX/iDAMAX/iCAMAX/iZAMAX/iHAMAX -CLBlastStatusCode PUBLIC_API CLBlastiSamax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiDamax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiCamax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiZamax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiHamax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Index of absolute minimum value in a vector (non-BLAS function): iSAMIN/iDAMIN/iCAMIN/iZAMIN/iHAMIN -CLBlastStatusCode PUBLIC_API CLBlastiSamin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiDamin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiCamin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiZamin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiHamin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Index of maximum value in a vector (non-BLAS function): iSMAX/iDMAX/iCMAX/iZMAX/iHMAX -CLBlastStatusCode PUBLIC_API CLBlastiSmax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiDmax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiCmax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiZmax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiHmax(const size_t n, - cl_mem imax_buffer, const size_t imax_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Index of minimum value in a vector (non-BLAS function): iSMIN/iDMIN/iCMIN/iZMIN/iHMIN -CLBlastStatusCode PUBLIC_API CLBlastiSmin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiDmin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiCmin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiZmin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastiHmin(const size_t n, - cl_mem imin_buffer, const size_t imin_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// ================================================================================================= -// BLAS level-2 (matrix-vector) routines -// ================================================================================================= - -// General matrix-vector multiplication: SGEMV/DGEMV/CGEMV/ZGEMV/HGEMV -CLBlastStatusCode PUBLIC_API CLBlastSgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const float beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const double beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_float2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_double2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_half beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// General banded matrix-vector multiplication: SGBMV/DGBMV/CGBMV/ZGBMV/HGBMV -CLBlastStatusCode PUBLIC_API CLBlastSgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const float beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const double beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_float2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_double2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, const size_t kl, const size_t ku, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_half beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Hermitian matrix-vector multiplication: CHEMV/ZHEMV -CLBlastStatusCode PUBLIC_API CLBlastChemv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_float2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhemv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_double2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Hermitian banded matrix-vector multiplication: CHBMV/ZHBMV -CLBlastStatusCode PUBLIC_API CLBlastChbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_float2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_double2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Hermitian packed matrix-vector multiplication: CHPMV/ZHPMV -CLBlastStatusCode PUBLIC_API CLBlastChpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_float2 alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_float2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_double2 alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_double2 beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Symmetric matrix-vector multiplication: SSYMV/DSYMV/HSYMV -CLBlastStatusCode PUBLIC_API CLBlastSsymv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const float beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsymv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const double beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsymv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_half beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Symmetric banded matrix-vector multiplication: SSBMV/DSBMV/HSBMV -CLBlastStatusCode PUBLIC_API CLBlastSsbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const float beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const double beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_half beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Symmetric packed matrix-vector multiplication: SSPMV/DSPMV/HSPMV -CLBlastStatusCode PUBLIC_API CLBlastSspmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const float beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDspmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const double beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHspmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem ap_buffer, const size_t ap_offset, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_half beta, - cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_command_queue* queue, cl_event* event); - -// Triangular matrix-vector multiplication: STRMV/DTRMV/CTRMV/ZTRMV/HTRMV -CLBlastStatusCode PUBLIC_API CLBlastStrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHtrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Triangular banded matrix-vector multiplication: STBMV/DTBMV/CTBMV/ZTBMV/HTBMV -CLBlastStatusCode PUBLIC_API CLBlastStbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHtbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Triangular packed matrix-vector multiplication: STPMV/DTPMV/CTPMV/ZTPMV/HTPMV -CLBlastStatusCode PUBLIC_API CLBlastStpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHtpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Solves a triangular system of equations: STRSV/DTRSV/CTRSV/ZTRSV -CLBlastStatusCode PUBLIC_API CLBlastStrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Solves a banded triangular system of equations: STBSV/DTBSV/CTBSV/ZTBSV -CLBlastStatusCode PUBLIC_API CLBlastStbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, const size_t k, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// Solves a packed triangular system of equations: STPSV/DTPSV/CTPSV/ZTPSV -CLBlastStatusCode PUBLIC_API CLBlastStpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t n, - const cl_mem ap_buffer, const size_t ap_offset, - cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_command_queue* queue, cl_event* event); - -// General rank-1 matrix update: SGER/DGER/HGER -CLBlastStatusCode PUBLIC_API CLBlastSger(const CLBlastLayout layout, - const size_t m, const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDger(const CLBlastLayout layout, - const size_t m, const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHger(const CLBlastLayout layout, - const size_t m, const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// General rank-1 complex matrix update: CGERU/ZGERU -CLBlastStatusCode PUBLIC_API CLBlastCgeru(const CLBlastLayout layout, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgeru(const CLBlastLayout layout, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// General rank-1 complex conjugated matrix update: CGERC/ZGERC -CLBlastStatusCode PUBLIC_API CLBlastCgerc(const CLBlastLayout layout, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgerc(const CLBlastLayout layout, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// Hermitian rank-1 matrix update: CHER/ZHER -CLBlastStatusCode PUBLIC_API CLBlastCher(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZher(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// Hermitian packed rank-1 matrix update: CHPR/ZHPR -CLBlastStatusCode PUBLIC_API CLBlastChpr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhpr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); - -// Hermitian rank-2 matrix update: CHER2/ZHER2 -CLBlastStatusCode PUBLIC_API CLBlastCher2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZher2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// Hermitian packed rank-2 matrix update: CHPR2/ZHPR2 -CLBlastStatusCode PUBLIC_API CLBlastChpr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhpr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); - -// Symmetric rank-1 matrix update: SSYR/DSYR/HSYR -CLBlastStatusCode PUBLIC_API CLBlastSsyr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsyr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsyr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// Symmetric packed rank-1 matrix update: SSPR/DSPR/HSPR -CLBlastStatusCode PUBLIC_API CLBlastSspr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDspr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHspr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); - -// Symmetric rank-2 matrix update: SSYR2/DSYR2/HSYR2 -CLBlastStatusCode PUBLIC_API CLBlastSsyr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsyr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsyr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_command_queue* queue, cl_event* event); - -// Symmetric packed rank-2 matrix update: SSPR2/DSPR2/HSPR2 -CLBlastStatusCode PUBLIC_API CLBlastSspr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDspr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHspr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - cl_mem ap_buffer, const size_t ap_offset, - cl_command_queue* queue, cl_event* event); - -// ================================================================================================= -// BLAS level-3 (matrix-matrix) routines -// ================================================================================================= - -// General matrix-matrix multiplication: SGEMM/DGEMM/CGEMM/ZGEMM/HGEMM -CLBlastStatusCode PUBLIC_API CLBlastSgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Symmetric matrix-matrix multiplication: SSYMM/DSYMM/CSYMM/ZSYMM/HSYMM -CLBlastStatusCode PUBLIC_API CLBlastSsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Hermitian matrix-matrix multiplication: CHEMM/ZHEMM -CLBlastStatusCode PUBLIC_API CLBlastChemm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhemm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Rank-K update of a symmetric matrix: SSYRK/DSYRK/CSYRK/ZSYRK/HSYRK -CLBlastStatusCode PUBLIC_API CLBlastSsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Rank-K update of a hermitian matrix: CHERK/ZHERK -CLBlastStatusCode PUBLIC_API CLBlastCherk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZherk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Rank-2K update of a symmetric matrix: SSYR2K/DSYR2K/CSYR2K/ZSYR2K/HSYR2K -CLBlastStatusCode PUBLIC_API CLBlastSsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Rank-2K update of a hermitian matrix: CHER2K/ZHER2K -CLBlastStatusCode PUBLIC_API CLBlastCher2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZher2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event); - -// Triangular matrix-matrix multiplication: STRMM/DTRMM/CTRMM/ZTRMM/HTRMM -CLBlastStatusCode PUBLIC_API CLBlastStrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHtrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); - -// Solves a triangular system of equations: STRSM/DTRSM/CTRSM/ZTRSM -CLBlastStatusCode PUBLIC_API CLBlastStrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDtrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCtrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZtrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); - -// ================================================================================================= -// Extra non-BLAS routines (level-X) -// ================================================================================================= - -// Element-wise vector product (Hadamard): SHAD/DHAD/CHAD/ZHAD/HHAD -CLBlastStatusCode PUBLIC_API CLBlastShad(const size_t n, - const float alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const float beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDhad(const size_t n, - const double alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const double beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastChad(const size_t n, - const cl_float2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const cl_float2 beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZhad(const size_t n, - const cl_double2 alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const cl_double2 beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHhad(const size_t n, - const cl_half alpha, - const cl_mem x_buffer, const size_t x_offset, const size_t x_inc, - const cl_mem y_buffer, const size_t y_offset, const size_t y_inc, - const cl_half beta, - cl_mem z_buffer, const size_t z_offset, const size_t z_inc, - cl_command_queue* queue, cl_event* event); - -// Scaling and out-place transpose/copy (non-BLAS function): SOMATCOPY/DOMATCOPY/COMATCOPY/ZOMATCOPY/HOMATCOPY -CLBlastStatusCode PUBLIC_API CLBlastSomatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDomatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastComatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZomatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHomatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const size_t m, const size_t n, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - cl_command_queue* queue, cl_event* event); - -// Im2col function (non-BLAS function): SIM2COL/DIM2COL/CIM2COL/ZIM2COL/HIM2COL -CLBlastStatusCode PUBLIC_API CLBlastSim2col(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDim2col(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCim2col(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZim2col(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHim2col(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem im_buffer, const size_t im_offset, - cl_mem col_buffer, const size_t col_offset, - cl_command_queue* queue, cl_event* event); - -// Col2im function (non-BLAS function): SCOL2IM/DCOL2IM/CCOL2IM/ZCOL2IM/HCOL2IM -CLBlastStatusCode PUBLIC_API CLBlastScol2im(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDcol2im(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCcol2im(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZcol2im(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHcol2im(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, - const cl_mem col_buffer, const size_t col_offset, - cl_mem im_buffer, const size_t im_offset, - cl_command_queue* queue, cl_event* event); - -// Batched convolution as GEMM (non-BLAS function): SCONVGEMM/DCONVGEMM/HCONVGEMM -CLBlastStatusCode PUBLIC_API CLBlastSconvgemm(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, const size_t num_kernels, const size_t batch_count, - const cl_mem im_buffer, const size_t im_offset, - const cl_mem kernel_buffer, const size_t kernel_offset, - cl_mem result_buffer, const size_t result_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDconvgemm(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, const size_t num_kernels, const size_t batch_count, - const cl_mem im_buffer, const size_t im_offset, - const cl_mem kernel_buffer, const size_t kernel_offset, - cl_mem result_buffer, const size_t result_offset, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHconvgemm(const CLBlastKernelMode kernel_mode, - const size_t channels, const size_t height, const size_t width, const size_t kernel_h, const size_t kernel_w, const size_t pad_h, const size_t pad_w, const size_t stride_h, const size_t stride_w, const size_t dilation_h, const size_t dilation_w, const size_t num_kernels, const size_t batch_count, - const cl_mem im_buffer, const size_t im_offset, - const cl_mem kernel_buffer, const size_t kernel_offset, - cl_mem result_buffer, const size_t result_offset, - cl_command_queue* queue, cl_event* event); - -// Batched version of AXPY: SAXPYBATCHED/DAXPYBATCHED/CAXPYBATCHED/ZAXPYBATCHED/HAXPYBATCHED -CLBlastStatusCode PUBLIC_API CLBlastSaxpyBatched(const size_t n, - const float *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDaxpyBatched(const size_t n, - const double *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCaxpyBatched(const size_t n, - const cl_float2 *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZaxpyBatched(const size_t n, - const cl_double2 *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHaxpyBatched(const size_t n, - const cl_half *alphas, - const cl_mem x_buffer, const size_t *x_offsets, const size_t x_inc, - cl_mem y_buffer, const size_t *y_offsets, const size_t y_inc, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); - -// Batched version of GEMM: SGEMMBATCHED/DGEMMBATCHED/CGEMMBATCHED/ZGEMMBATCHED/HGEMMBATCHED -CLBlastStatusCode PUBLIC_API CLBlastSgemmBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const float *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const float *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDgemmBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const double *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const double *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCgemmBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_float2 *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const cl_float2 *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgemmBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_double2 *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const cl_double2 *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHgemmBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_half *alphas, - const cl_mem a_buffer, const size_t *a_offsets, const size_t a_ld, - const cl_mem b_buffer, const size_t *b_offsets, const size_t b_ld, - const cl_half *betas, - cl_mem c_buffer, const size_t *c_offsets, const size_t c_ld, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); - -// StridedBatched version of GEMM: SGEMMSTRIDEDBATCHED/DGEMMSTRIDEDBATCHED/CGEMMSTRIDEDBATCHED/ZGEMMSTRIDEDBATCHED/HGEMMSTRIDEDBATCHED -CLBlastStatusCode PUBLIC_API CLBlastSgemmStridedBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastDgemmStridedBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastCgemmStridedBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastZgemmStridedBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); -CLBlastStatusCode PUBLIC_API CLBlastHgemmStridedBatched(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, const size_t a_stride, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, const size_t b_stride, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, const size_t c_stride, - const size_t batch_count, - cl_command_queue* queue, cl_event* event); - -// ================================================================================================= -// General matrix-matrix multiplication with temporary buffer from user (optional, for advanced users): SGEMM/DGEMM/CGEMM/ZGEMM/HGEMM -CLBlastStatusCode PUBLIC_API CLBlastSgemmWithTempBuffer(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const float alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const float beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event, cl_mem temp_buffer); -CLBlastStatusCode PUBLIC_API CLBlastDgemmWithTempBuffer(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const double alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const double beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event, cl_mem temp_buffer); -CLBlastStatusCode PUBLIC_API CLBlastCgemmWithTempBuffer(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_float2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_float2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event, cl_mem temp_buffer); -CLBlastStatusCode PUBLIC_API CLBlastZgemmWithTempBuffer(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_double2 alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_double2 beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event, cl_mem temp_buffer); -CLBlastStatusCode PUBLIC_API CLBlastHgemmWithTempBuffer(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const cl_half alpha, - const cl_mem a_buffer, const size_t a_offset, const size_t a_ld, - const cl_mem b_buffer, const size_t b_offset, const size_t b_ld, - const cl_half beta, - cl_mem c_buffer, const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, cl_event* event, cl_mem temp_buffer); - -// ================================================================================================= -// Retrieves the required size of the temporary buffer for the GEMM kernel: SGEMM/DGEMM/CGEMM/ZGEMM/HGEMM (optional) -CLBlastStatusCode PUBLIC_API CLBlastSGemmTempBufferSize(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, - size_t* temp_buffer_size); - -CLBlastStatusCode PUBLIC_API CLBlastDGemmTempBufferSize(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, - size_t* temp_buffer_size); - -CLBlastStatusCode PUBLIC_API CLBlastCGemmTempBufferSize(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, - size_t* temp_buffer_size); - -CLBlastStatusCode PUBLIC_API CLBlastZGemmTempBufferSize(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, - size_t* temp_buffer_size); - -CLBlastStatusCode PUBLIC_API CLBlastHGemmTempBufferSize(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const size_t m, const size_t n, const size_t k, - const size_t a_offset, const size_t a_ld, - const size_t b_offset, const size_t b_ld, - const size_t c_offset, const size_t c_ld, - cl_command_queue* queue, - size_t* temp_buffer_size); - -// ================================================================================================= - -// CLBlast stores binaries of compiled kernels into a cache in case the same kernel is used later on -// for the same device. This cache can be cleared to free up system memory or in case of debugging. -CLBlastStatusCode PUBLIC_API CLBlastClearCache(); - -// The cache can also be pre-initialized for a specific device with all possible CLBlast kernels. -// Further CLBlast routine calls will then run at maximum speed. -CLBlastStatusCode PUBLIC_API CLBlastFillCache(const cl_device_id device); - -// ================================================================================================= - -// Overrides tuning parameters for a specific device-precision-kernel combination. The next time -// the target routine is called it will re-compile and use the new parameters from then on. -CLBlastStatusCode PUBLIC_API CLBlastOverrideParameters(const cl_device_id device, const char* kernel_name, - const CLBlastPrecision precision, const size_t num_parameters, - const char** parameters_names, const size_t* parameters_values); - -// ================================================================================================= - -#ifdef __cplusplus -} // extern "C" -#endif - -// CLBLAST_CLBLAST_C_H_ -#endif diff --git a/include/clblast_half.h b/include/clblast_half.h deleted file mode 100644 index cbea1723a..000000000 --- a/include/clblast_half.h +++ /dev/null @@ -1,249 +0,0 @@ - -// ================================================================================================= -// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This -// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- -// width of 100 characters per line. -// -// Author(s): -// Cedric Nugteren -// -// This file provides simple conversion operations between fp16 (half) and fp32 (float). These -// conversion functions are based on ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf and -// are also part of the C++ half-precision header (http://half.sourceforge.net/). -// -// This file is pure C99. -// -// ================================================================================================= - -#ifndef CLBLAST_HALF_H_ -#define CLBLAST_HALF_H_ - -// ================================================================================================= - -// The host data-type for half-precision floating-point (16-bit) is based on the `cl_half` OpenCL -// type, which is a typedef for unsigned short. -typedef unsigned short half; - -// 32-bit union for conversions -typedef union ConversionBits_ { - unsigned int i32; - float f32; -} ConversionBits; - -// ================================================================================================= - -// Converts a IEEE-compliant single-precision value to half-precision floating-point. This function -// applies simple truncation (round toward zero, but with overflows set to infinity) as rounding -// mode. -static half FloatToHalf(const float value) { - static const unsigned short base_table[512] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, - 0x0200, 0x0400, 0x0800, 0x0C00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x2400, 0x2800, 0x2C00, 0x3000, 0x3400, 0x3800, 0x3C00, - 0x4000, 0x4400, 0x4800, 0x4C00, 0x5000, 0x5400, 0x5800, 0x5C00, 0x6000, 0x6400, 0x6800, 0x6C00, 0x7000, 0x7400, 0x7800, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, 0x7C00, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8002, 0x8004, 0x8008, 0x8010, 0x8020, 0x8040, 0x8080, 0x8100, - 0x8200, 0x8400, 0x8800, 0x8C00, 0x9000, 0x9400, 0x9800, 0x9C00, 0xA000, 0xA400, 0xA800, 0xAC00, 0xB000, 0xB400, 0xB800, 0xBC00, - 0xC000, 0xC400, 0xC800, 0xCC00, 0xD000, 0xD400, 0xD800, 0xDC00, 0xE000, 0xE400, 0xE800, 0xEC00, 0xF000, 0xF400, 0xF800, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, - 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00, 0xFC00 - }; - static const unsigned char shift_table[512] = { - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 13, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 13 - }; - ConversionBits bits; - bits.f32 = value; - const unsigned short halfbits = base_table[bits.i32 >> 23] + - (unsigned short)((bits.i32 & 0x7FFFFF) >> shift_table[bits.i32 >> 23]); - return halfbits; -} - -// Converts a half-precision value to IEEE-compliant single-precision floating-point -static float HalfToFloat(const half value) { - static const unsigned int mantissa_table[2048] = { - 0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34A00000, 0x34C00000, 0x34E00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000, 0x35400000, 0x35500000, 0x35600000, 0x35700000, - 0x35800000, 0x35880000, 0x35900000, 0x35980000, 0x35A00000, 0x35A80000, 0x35B00000, 0x35B80000, 0x35C00000, 0x35C80000, 0x35D00000, 0x35D80000, 0x35E00000, 0x35E80000, 0x35F00000, 0x35F80000, - 0x36000000, 0x36040000, 0x36080000, 0x360C0000, 0x36100000, 0x36140000, 0x36180000, 0x361C0000, 0x36200000, 0x36240000, 0x36280000, 0x362C0000, 0x36300000, 0x36340000, 0x36380000, 0x363C0000, - 0x36400000, 0x36440000, 0x36480000, 0x364C0000, 0x36500000, 0x36540000, 0x36580000, 0x365C0000, 0x36600000, 0x36640000, 0x36680000, 0x366C0000, 0x36700000, 0x36740000, 0x36780000, 0x367C0000, - 0x36800000, 0x36820000, 0x36840000, 0x36860000, 0x36880000, 0x368A0000, 0x368C0000, 0x368E0000, 0x36900000, 0x36920000, 0x36940000, 0x36960000, 0x36980000, 0x369A0000, 0x369C0000, 0x369E0000, - 0x36A00000, 0x36A20000, 0x36A40000, 0x36A60000, 0x36A80000, 0x36AA0000, 0x36AC0000, 0x36AE0000, 0x36B00000, 0x36B20000, 0x36B40000, 0x36B60000, 0x36B80000, 0x36BA0000, 0x36BC0000, 0x36BE0000, - 0x36C00000, 0x36C20000, 0x36C40000, 0x36C60000, 0x36C80000, 0x36CA0000, 0x36CC0000, 0x36CE0000, 0x36D00000, 0x36D20000, 0x36D40000, 0x36D60000, 0x36D80000, 0x36DA0000, 0x36DC0000, 0x36DE0000, - 0x36E00000, 0x36E20000, 0x36E40000, 0x36E60000, 0x36E80000, 0x36EA0000, 0x36EC0000, 0x36EE0000, 0x36F00000, 0x36F20000, 0x36F40000, 0x36F60000, 0x36F80000, 0x36FA0000, 0x36FC0000, 0x36FE0000, - 0x37000000, 0x37010000, 0x37020000, 0x37030000, 0x37040000, 0x37050000, 0x37060000, 0x37070000, 0x37080000, 0x37090000, 0x370A0000, 0x370B0000, 0x370C0000, 0x370D0000, 0x370E0000, 0x370F0000, - 0x37100000, 0x37110000, 0x37120000, 0x37130000, 0x37140000, 0x37150000, 0x37160000, 0x37170000, 0x37180000, 0x37190000, 0x371A0000, 0x371B0000, 0x371C0000, 0x371D0000, 0x371E0000, 0x371F0000, - 0x37200000, 0x37210000, 0x37220000, 0x37230000, 0x37240000, 0x37250000, 0x37260000, 0x37270000, 0x37280000, 0x37290000, 0x372A0000, 0x372B0000, 0x372C0000, 0x372D0000, 0x372E0000, 0x372F0000, - 0x37300000, 0x37310000, 0x37320000, 0x37330000, 0x37340000, 0x37350000, 0x37360000, 0x37370000, 0x37380000, 0x37390000, 0x373A0000, 0x373B0000, 0x373C0000, 0x373D0000, 0x373E0000, 0x373F0000, - 0x37400000, 0x37410000, 0x37420000, 0x37430000, 0x37440000, 0x37450000, 0x37460000, 0x37470000, 0x37480000, 0x37490000, 0x374A0000, 0x374B0000, 0x374C0000, 0x374D0000, 0x374E0000, 0x374F0000, - 0x37500000, 0x37510000, 0x37520000, 0x37530000, 0x37540000, 0x37550000, 0x37560000, 0x37570000, 0x37580000, 0x37590000, 0x375A0000, 0x375B0000, 0x375C0000, 0x375D0000, 0x375E0000, 0x375F0000, - 0x37600000, 0x37610000, 0x37620000, 0x37630000, 0x37640000, 0x37650000, 0x37660000, 0x37670000, 0x37680000, 0x37690000, 0x376A0000, 0x376B0000, 0x376C0000, 0x376D0000, 0x376E0000, 0x376F0000, - 0x37700000, 0x37710000, 0x37720000, 0x37730000, 0x37740000, 0x37750000, 0x37760000, 0x37770000, 0x37780000, 0x37790000, 0x377A0000, 0x377B0000, 0x377C0000, 0x377D0000, 0x377E0000, 0x377F0000, - 0x37800000, 0x37808000, 0x37810000, 0x37818000, 0x37820000, 0x37828000, 0x37830000, 0x37838000, 0x37840000, 0x37848000, 0x37850000, 0x37858000, 0x37860000, 0x37868000, 0x37870000, 0x37878000, - 0x37880000, 0x37888000, 0x37890000, 0x37898000, 0x378A0000, 0x378A8000, 0x378B0000, 0x378B8000, 0x378C0000, 0x378C8000, 0x378D0000, 0x378D8000, 0x378E0000, 0x378E8000, 0x378F0000, 0x378F8000, - 0x37900000, 0x37908000, 0x37910000, 0x37918000, 0x37920000, 0x37928000, 0x37930000, 0x37938000, 0x37940000, 0x37948000, 0x37950000, 0x37958000, 0x37960000, 0x37968000, 0x37970000, 0x37978000, - 0x37980000, 0x37988000, 0x37990000, 0x37998000, 0x379A0000, 0x379A8000, 0x379B0000, 0x379B8000, 0x379C0000, 0x379C8000, 0x379D0000, 0x379D8000, 0x379E0000, 0x379E8000, 0x379F0000, 0x379F8000, - 0x37A00000, 0x37A08000, 0x37A10000, 0x37A18000, 0x37A20000, 0x37A28000, 0x37A30000, 0x37A38000, 0x37A40000, 0x37A48000, 0x37A50000, 0x37A58000, 0x37A60000, 0x37A68000, 0x37A70000, 0x37A78000, - 0x37A80000, 0x37A88000, 0x37A90000, 0x37A98000, 0x37AA0000, 0x37AA8000, 0x37AB0000, 0x37AB8000, 0x37AC0000, 0x37AC8000, 0x37AD0000, 0x37AD8000, 0x37AE0000, 0x37AE8000, 0x37AF0000, 0x37AF8000, - 0x37B00000, 0x37B08000, 0x37B10000, 0x37B18000, 0x37B20000, 0x37B28000, 0x37B30000, 0x37B38000, 0x37B40000, 0x37B48000, 0x37B50000, 0x37B58000, 0x37B60000, 0x37B68000, 0x37B70000, 0x37B78000, - 0x37B80000, 0x37B88000, 0x37B90000, 0x37B98000, 0x37BA0000, 0x37BA8000, 0x37BB0000, 0x37BB8000, 0x37BC0000, 0x37BC8000, 0x37BD0000, 0x37BD8000, 0x37BE0000, 0x37BE8000, 0x37BF0000, 0x37BF8000, - 0x37C00000, 0x37C08000, 0x37C10000, 0x37C18000, 0x37C20000, 0x37C28000, 0x37C30000, 0x37C38000, 0x37C40000, 0x37C48000, 0x37C50000, 0x37C58000, 0x37C60000, 0x37C68000, 0x37C70000, 0x37C78000, - 0x37C80000, 0x37C88000, 0x37C90000, 0x37C98000, 0x37CA0000, 0x37CA8000, 0x37CB0000, 0x37CB8000, 0x37CC0000, 0x37CC8000, 0x37CD0000, 0x37CD8000, 0x37CE0000, 0x37CE8000, 0x37CF0000, 0x37CF8000, - 0x37D00000, 0x37D08000, 0x37D10000, 0x37D18000, 0x37D20000, 0x37D28000, 0x37D30000, 0x37D38000, 0x37D40000, 0x37D48000, 0x37D50000, 0x37D58000, 0x37D60000, 0x37D68000, 0x37D70000, 0x37D78000, - 0x37D80000, 0x37D88000, 0x37D90000, 0x37D98000, 0x37DA0000, 0x37DA8000, 0x37DB0000, 0x37DB8000, 0x37DC0000, 0x37DC8000, 0x37DD0000, 0x37DD8000, 0x37DE0000, 0x37DE8000, 0x37DF0000, 0x37DF8000, - 0x37E00000, 0x37E08000, 0x37E10000, 0x37E18000, 0x37E20000, 0x37E28000, 0x37E30000, 0x37E38000, 0x37E40000, 0x37E48000, 0x37E50000, 0x37E58000, 0x37E60000, 0x37E68000, 0x37E70000, 0x37E78000, - 0x37E80000, 0x37E88000, 0x37E90000, 0x37E98000, 0x37EA0000, 0x37EA8000, 0x37EB0000, 0x37EB8000, 0x37EC0000, 0x37EC8000, 0x37ED0000, 0x37ED8000, 0x37EE0000, 0x37EE8000, 0x37EF0000, 0x37EF8000, - 0x37F00000, 0x37F08000, 0x37F10000, 0x37F18000, 0x37F20000, 0x37F28000, 0x37F30000, 0x37F38000, 0x37F40000, 0x37F48000, 0x37F50000, 0x37F58000, 0x37F60000, 0x37F68000, 0x37F70000, 0x37F78000, - 0x37F80000, 0x37F88000, 0x37F90000, 0x37F98000, 0x37FA0000, 0x37FA8000, 0x37FB0000, 0x37FB8000, 0x37FC0000, 0x37FC8000, 0x37FD0000, 0x37FD8000, 0x37FE0000, 0x37FE8000, 0x37FF0000, 0x37FF8000, - 0x38000000, 0x38004000, 0x38008000, 0x3800C000, 0x38010000, 0x38014000, 0x38018000, 0x3801C000, 0x38020000, 0x38024000, 0x38028000, 0x3802C000, 0x38030000, 0x38034000, 0x38038000, 0x3803C000, - 0x38040000, 0x38044000, 0x38048000, 0x3804C000, 0x38050000, 0x38054000, 0x38058000, 0x3805C000, 0x38060000, 0x38064000, 0x38068000, 0x3806C000, 0x38070000, 0x38074000, 0x38078000, 0x3807C000, - 0x38080000, 0x38084000, 0x38088000, 0x3808C000, 0x38090000, 0x38094000, 0x38098000, 0x3809C000, 0x380A0000, 0x380A4000, 0x380A8000, 0x380AC000, 0x380B0000, 0x380B4000, 0x380B8000, 0x380BC000, - 0x380C0000, 0x380C4000, 0x380C8000, 0x380CC000, 0x380D0000, 0x380D4000, 0x380D8000, 0x380DC000, 0x380E0000, 0x380E4000, 0x380E8000, 0x380EC000, 0x380F0000, 0x380F4000, 0x380F8000, 0x380FC000, - 0x38100000, 0x38104000, 0x38108000, 0x3810C000, 0x38110000, 0x38114000, 0x38118000, 0x3811C000, 0x38120000, 0x38124000, 0x38128000, 0x3812C000, 0x38130000, 0x38134000, 0x38138000, 0x3813C000, - 0x38140000, 0x38144000, 0x38148000, 0x3814C000, 0x38150000, 0x38154000, 0x38158000, 0x3815C000, 0x38160000, 0x38164000, 0x38168000, 0x3816C000, 0x38170000, 0x38174000, 0x38178000, 0x3817C000, - 0x38180000, 0x38184000, 0x38188000, 0x3818C000, 0x38190000, 0x38194000, 0x38198000, 0x3819C000, 0x381A0000, 0x381A4000, 0x381A8000, 0x381AC000, 0x381B0000, 0x381B4000, 0x381B8000, 0x381BC000, - 0x381C0000, 0x381C4000, 0x381C8000, 0x381CC000, 0x381D0000, 0x381D4000, 0x381D8000, 0x381DC000, 0x381E0000, 0x381E4000, 0x381E8000, 0x381EC000, 0x381F0000, 0x381F4000, 0x381F8000, 0x381FC000, - 0x38200000, 0x38204000, 0x38208000, 0x3820C000, 0x38210000, 0x38214000, 0x38218000, 0x3821C000, 0x38220000, 0x38224000, 0x38228000, 0x3822C000, 0x38230000, 0x38234000, 0x38238000, 0x3823C000, - 0x38240000, 0x38244000, 0x38248000, 0x3824C000, 0x38250000, 0x38254000, 0x38258000, 0x3825C000, 0x38260000, 0x38264000, 0x38268000, 0x3826C000, 0x38270000, 0x38274000, 0x38278000, 0x3827C000, - 0x38280000, 0x38284000, 0x38288000, 0x3828C000, 0x38290000, 0x38294000, 0x38298000, 0x3829C000, 0x382A0000, 0x382A4000, 0x382A8000, 0x382AC000, 0x382B0000, 0x382B4000, 0x382B8000, 0x382BC000, - 0x382C0000, 0x382C4000, 0x382C8000, 0x382CC000, 0x382D0000, 0x382D4000, 0x382D8000, 0x382DC000, 0x382E0000, 0x382E4000, 0x382E8000, 0x382EC000, 0x382F0000, 0x382F4000, 0x382F8000, 0x382FC000, - 0x38300000, 0x38304000, 0x38308000, 0x3830C000, 0x38310000, 0x38314000, 0x38318000, 0x3831C000, 0x38320000, 0x38324000, 0x38328000, 0x3832C000, 0x38330000, 0x38334000, 0x38338000, 0x3833C000, - 0x38340000, 0x38344000, 0x38348000, 0x3834C000, 0x38350000, 0x38354000, 0x38358000, 0x3835C000, 0x38360000, 0x38364000, 0x38368000, 0x3836C000, 0x38370000, 0x38374000, 0x38378000, 0x3837C000, - 0x38380000, 0x38384000, 0x38388000, 0x3838C000, 0x38390000, 0x38394000, 0x38398000, 0x3839C000, 0x383A0000, 0x383A4000, 0x383A8000, 0x383AC000, 0x383B0000, 0x383B4000, 0x383B8000, 0x383BC000, - 0x383C0000, 0x383C4000, 0x383C8000, 0x383CC000, 0x383D0000, 0x383D4000, 0x383D8000, 0x383DC000, 0x383E0000, 0x383E4000, 0x383E8000, 0x383EC000, 0x383F0000, 0x383F4000, 0x383F8000, 0x383FC000, - 0x38400000, 0x38404000, 0x38408000, 0x3840C000, 0x38410000, 0x38414000, 0x38418000, 0x3841C000, 0x38420000, 0x38424000, 0x38428000, 0x3842C000, 0x38430000, 0x38434000, 0x38438000, 0x3843C000, - 0x38440000, 0x38444000, 0x38448000, 0x3844C000, 0x38450000, 0x38454000, 0x38458000, 0x3845C000, 0x38460000, 0x38464000, 0x38468000, 0x3846C000, 0x38470000, 0x38474000, 0x38478000, 0x3847C000, - 0x38480000, 0x38484000, 0x38488000, 0x3848C000, 0x38490000, 0x38494000, 0x38498000, 0x3849C000, 0x384A0000, 0x384A4000, 0x384A8000, 0x384AC000, 0x384B0000, 0x384B4000, 0x384B8000, 0x384BC000, - 0x384C0000, 0x384C4000, 0x384C8000, 0x384CC000, 0x384D0000, 0x384D4000, 0x384D8000, 0x384DC000, 0x384E0000, 0x384E4000, 0x384E8000, 0x384EC000, 0x384F0000, 0x384F4000, 0x384F8000, 0x384FC000, - 0x38500000, 0x38504000, 0x38508000, 0x3850C000, 0x38510000, 0x38514000, 0x38518000, 0x3851C000, 0x38520000, 0x38524000, 0x38528000, 0x3852C000, 0x38530000, 0x38534000, 0x38538000, 0x3853C000, - 0x38540000, 0x38544000, 0x38548000, 0x3854C000, 0x38550000, 0x38554000, 0x38558000, 0x3855C000, 0x38560000, 0x38564000, 0x38568000, 0x3856C000, 0x38570000, 0x38574000, 0x38578000, 0x3857C000, - 0x38580000, 0x38584000, 0x38588000, 0x3858C000, 0x38590000, 0x38594000, 0x38598000, 0x3859C000, 0x385A0000, 0x385A4000, 0x385A8000, 0x385AC000, 0x385B0000, 0x385B4000, 0x385B8000, 0x385BC000, - 0x385C0000, 0x385C4000, 0x385C8000, 0x385CC000, 0x385D0000, 0x385D4000, 0x385D8000, 0x385DC000, 0x385E0000, 0x385E4000, 0x385E8000, 0x385EC000, 0x385F0000, 0x385F4000, 0x385F8000, 0x385FC000, - 0x38600000, 0x38604000, 0x38608000, 0x3860C000, 0x38610000, 0x38614000, 0x38618000, 0x3861C000, 0x38620000, 0x38624000, 0x38628000, 0x3862C000, 0x38630000, 0x38634000, 0x38638000, 0x3863C000, - 0x38640000, 0x38644000, 0x38648000, 0x3864C000, 0x38650000, 0x38654000, 0x38658000, 0x3865C000, 0x38660000, 0x38664000, 0x38668000, 0x3866C000, 0x38670000, 0x38674000, 0x38678000, 0x3867C000, - 0x38680000, 0x38684000, 0x38688000, 0x3868C000, 0x38690000, 0x38694000, 0x38698000, 0x3869C000, 0x386A0000, 0x386A4000, 0x386A8000, 0x386AC000, 0x386B0000, 0x386B4000, 0x386B8000, 0x386BC000, - 0x386C0000, 0x386C4000, 0x386C8000, 0x386CC000, 0x386D0000, 0x386D4000, 0x386D8000, 0x386DC000, 0x386E0000, 0x386E4000, 0x386E8000, 0x386EC000, 0x386F0000, 0x386F4000, 0x386F8000, 0x386FC000, - 0x38700000, 0x38704000, 0x38708000, 0x3870C000, 0x38710000, 0x38714000, 0x38718000, 0x3871C000, 0x38720000, 0x38724000, 0x38728000, 0x3872C000, 0x38730000, 0x38734000, 0x38738000, 0x3873C000, - 0x38740000, 0x38744000, 0x38748000, 0x3874C000, 0x38750000, 0x38754000, 0x38758000, 0x3875C000, 0x38760000, 0x38764000, 0x38768000, 0x3876C000, 0x38770000, 0x38774000, 0x38778000, 0x3877C000, - 0x38780000, 0x38784000, 0x38788000, 0x3878C000, 0x38790000, 0x38794000, 0x38798000, 0x3879C000, 0x387A0000, 0x387A4000, 0x387A8000, 0x387AC000, 0x387B0000, 0x387B4000, 0x387B8000, 0x387BC000, - 0x387C0000, 0x387C4000, 0x387C8000, 0x387CC000, 0x387D0000, 0x387D4000, 0x387D8000, 0x387DC000, 0x387E0000, 0x387E4000, 0x387E8000, 0x387EC000, 0x387F0000, 0x387F4000, 0x387F8000, 0x387FC000, - 0x38000000, 0x38002000, 0x38004000, 0x38006000, 0x38008000, 0x3800A000, 0x3800C000, 0x3800E000, 0x38010000, 0x38012000, 0x38014000, 0x38016000, 0x38018000, 0x3801A000, 0x3801C000, 0x3801E000, - 0x38020000, 0x38022000, 0x38024000, 0x38026000, 0x38028000, 0x3802A000, 0x3802C000, 0x3802E000, 0x38030000, 0x38032000, 0x38034000, 0x38036000, 0x38038000, 0x3803A000, 0x3803C000, 0x3803E000, - 0x38040000, 0x38042000, 0x38044000, 0x38046000, 0x38048000, 0x3804A000, 0x3804C000, 0x3804E000, 0x38050000, 0x38052000, 0x38054000, 0x38056000, 0x38058000, 0x3805A000, 0x3805C000, 0x3805E000, - 0x38060000, 0x38062000, 0x38064000, 0x38066000, 0x38068000, 0x3806A000, 0x3806C000, 0x3806E000, 0x38070000, 0x38072000, 0x38074000, 0x38076000, 0x38078000, 0x3807A000, 0x3807C000, 0x3807E000, - 0x38080000, 0x38082000, 0x38084000, 0x38086000, 0x38088000, 0x3808A000, 0x3808C000, 0x3808E000, 0x38090000, 0x38092000, 0x38094000, 0x38096000, 0x38098000, 0x3809A000, 0x3809C000, 0x3809E000, - 0x380A0000, 0x380A2000, 0x380A4000, 0x380A6000, 0x380A8000, 0x380AA000, 0x380AC000, 0x380AE000, 0x380B0000, 0x380B2000, 0x380B4000, 0x380B6000, 0x380B8000, 0x380BA000, 0x380BC000, 0x380BE000, - 0x380C0000, 0x380C2000, 0x380C4000, 0x380C6000, 0x380C8000, 0x380CA000, 0x380CC000, 0x380CE000, 0x380D0000, 0x380D2000, 0x380D4000, 0x380D6000, 0x380D8000, 0x380DA000, 0x380DC000, 0x380DE000, - 0x380E0000, 0x380E2000, 0x380E4000, 0x380E6000, 0x380E8000, 0x380EA000, 0x380EC000, 0x380EE000, 0x380F0000, 0x380F2000, 0x380F4000, 0x380F6000, 0x380F8000, 0x380FA000, 0x380FC000, 0x380FE000, - 0x38100000, 0x38102000, 0x38104000, 0x38106000, 0x38108000, 0x3810A000, 0x3810C000, 0x3810E000, 0x38110000, 0x38112000, 0x38114000, 0x38116000, 0x38118000, 0x3811A000, 0x3811C000, 0x3811E000, - 0x38120000, 0x38122000, 0x38124000, 0x38126000, 0x38128000, 0x3812A000, 0x3812C000, 0x3812E000, 0x38130000, 0x38132000, 0x38134000, 0x38136000, 0x38138000, 0x3813A000, 0x3813C000, 0x3813E000, - 0x38140000, 0x38142000, 0x38144000, 0x38146000, 0x38148000, 0x3814A000, 0x3814C000, 0x3814E000, 0x38150000, 0x38152000, 0x38154000, 0x38156000, 0x38158000, 0x3815A000, 0x3815C000, 0x3815E000, - 0x38160000, 0x38162000, 0x38164000, 0x38166000, 0x38168000, 0x3816A000, 0x3816C000, 0x3816E000, 0x38170000, 0x38172000, 0x38174000, 0x38176000, 0x38178000, 0x3817A000, 0x3817C000, 0x3817E000, - 0x38180000, 0x38182000, 0x38184000, 0x38186000, 0x38188000, 0x3818A000, 0x3818C000, 0x3818E000, 0x38190000, 0x38192000, 0x38194000, 0x38196000, 0x38198000, 0x3819A000, 0x3819C000, 0x3819E000, - 0x381A0000, 0x381A2000, 0x381A4000, 0x381A6000, 0x381A8000, 0x381AA000, 0x381AC000, 0x381AE000, 0x381B0000, 0x381B2000, 0x381B4000, 0x381B6000, 0x381B8000, 0x381BA000, 0x381BC000, 0x381BE000, - 0x381C0000, 0x381C2000, 0x381C4000, 0x381C6000, 0x381C8000, 0x381CA000, 0x381CC000, 0x381CE000, 0x381D0000, 0x381D2000, 0x381D4000, 0x381D6000, 0x381D8000, 0x381DA000, 0x381DC000, 0x381DE000, - 0x381E0000, 0x381E2000, 0x381E4000, 0x381E6000, 0x381E8000, 0x381EA000, 0x381EC000, 0x381EE000, 0x381F0000, 0x381F2000, 0x381F4000, 0x381F6000, 0x381F8000, 0x381FA000, 0x381FC000, 0x381FE000, - 0x38200000, 0x38202000, 0x38204000, 0x38206000, 0x38208000, 0x3820A000, 0x3820C000, 0x3820E000, 0x38210000, 0x38212000, 0x38214000, 0x38216000, 0x38218000, 0x3821A000, 0x3821C000, 0x3821E000, - 0x38220000, 0x38222000, 0x38224000, 0x38226000, 0x38228000, 0x3822A000, 0x3822C000, 0x3822E000, 0x38230000, 0x38232000, 0x38234000, 0x38236000, 0x38238000, 0x3823A000, 0x3823C000, 0x3823E000, - 0x38240000, 0x38242000, 0x38244000, 0x38246000, 0x38248000, 0x3824A000, 0x3824C000, 0x3824E000, 0x38250000, 0x38252000, 0x38254000, 0x38256000, 0x38258000, 0x3825A000, 0x3825C000, 0x3825E000, - 0x38260000, 0x38262000, 0x38264000, 0x38266000, 0x38268000, 0x3826A000, 0x3826C000, 0x3826E000, 0x38270000, 0x38272000, 0x38274000, 0x38276000, 0x38278000, 0x3827A000, 0x3827C000, 0x3827E000, - 0x38280000, 0x38282000, 0x38284000, 0x38286000, 0x38288000, 0x3828A000, 0x3828C000, 0x3828E000, 0x38290000, 0x38292000, 0x38294000, 0x38296000, 0x38298000, 0x3829A000, 0x3829C000, 0x3829E000, - 0x382A0000, 0x382A2000, 0x382A4000, 0x382A6000, 0x382A8000, 0x382AA000, 0x382AC000, 0x382AE000, 0x382B0000, 0x382B2000, 0x382B4000, 0x382B6000, 0x382B8000, 0x382BA000, 0x382BC000, 0x382BE000, - 0x382C0000, 0x382C2000, 0x382C4000, 0x382C6000, 0x382C8000, 0x382CA000, 0x382CC000, 0x382CE000, 0x382D0000, 0x382D2000, 0x382D4000, 0x382D6000, 0x382D8000, 0x382DA000, 0x382DC000, 0x382DE000, - 0x382E0000, 0x382E2000, 0x382E4000, 0x382E6000, 0x382E8000, 0x382EA000, 0x382EC000, 0x382EE000, 0x382F0000, 0x382F2000, 0x382F4000, 0x382F6000, 0x382F8000, 0x382FA000, 0x382FC000, 0x382FE000, - 0x38300000, 0x38302000, 0x38304000, 0x38306000, 0x38308000, 0x3830A000, 0x3830C000, 0x3830E000, 0x38310000, 0x38312000, 0x38314000, 0x38316000, 0x38318000, 0x3831A000, 0x3831C000, 0x3831E000, - 0x38320000, 0x38322000, 0x38324000, 0x38326000, 0x38328000, 0x3832A000, 0x3832C000, 0x3832E000, 0x38330000, 0x38332000, 0x38334000, 0x38336000, 0x38338000, 0x3833A000, 0x3833C000, 0x3833E000, - 0x38340000, 0x38342000, 0x38344000, 0x38346000, 0x38348000, 0x3834A000, 0x3834C000, 0x3834E000, 0x38350000, 0x38352000, 0x38354000, 0x38356000, 0x38358000, 0x3835A000, 0x3835C000, 0x3835E000, - 0x38360000, 0x38362000, 0x38364000, 0x38366000, 0x38368000, 0x3836A000, 0x3836C000, 0x3836E000, 0x38370000, 0x38372000, 0x38374000, 0x38376000, 0x38378000, 0x3837A000, 0x3837C000, 0x3837E000, - 0x38380000, 0x38382000, 0x38384000, 0x38386000, 0x38388000, 0x3838A000, 0x3838C000, 0x3838E000, 0x38390000, 0x38392000, 0x38394000, 0x38396000, 0x38398000, 0x3839A000, 0x3839C000, 0x3839E000, - 0x383A0000, 0x383A2000, 0x383A4000, 0x383A6000, 0x383A8000, 0x383AA000, 0x383AC000, 0x383AE000, 0x383B0000, 0x383B2000, 0x383B4000, 0x383B6000, 0x383B8000, 0x383BA000, 0x383BC000, 0x383BE000, - 0x383C0000, 0x383C2000, 0x383C4000, 0x383C6000, 0x383C8000, 0x383CA000, 0x383CC000, 0x383CE000, 0x383D0000, 0x383D2000, 0x383D4000, 0x383D6000, 0x383D8000, 0x383DA000, 0x383DC000, 0x383DE000, - 0x383E0000, 0x383E2000, 0x383E4000, 0x383E6000, 0x383E8000, 0x383EA000, 0x383EC000, 0x383EE000, 0x383F0000, 0x383F2000, 0x383F4000, 0x383F6000, 0x383F8000, 0x383FA000, 0x383FC000, 0x383FE000, - 0x38400000, 0x38402000, 0x38404000, 0x38406000, 0x38408000, 0x3840A000, 0x3840C000, 0x3840E000, 0x38410000, 0x38412000, 0x38414000, 0x38416000, 0x38418000, 0x3841A000, 0x3841C000, 0x3841E000, - 0x38420000, 0x38422000, 0x38424000, 0x38426000, 0x38428000, 0x3842A000, 0x3842C000, 0x3842E000, 0x38430000, 0x38432000, 0x38434000, 0x38436000, 0x38438000, 0x3843A000, 0x3843C000, 0x3843E000, - 0x38440000, 0x38442000, 0x38444000, 0x38446000, 0x38448000, 0x3844A000, 0x3844C000, 0x3844E000, 0x38450000, 0x38452000, 0x38454000, 0x38456000, 0x38458000, 0x3845A000, 0x3845C000, 0x3845E000, - 0x38460000, 0x38462000, 0x38464000, 0x38466000, 0x38468000, 0x3846A000, 0x3846C000, 0x3846E000, 0x38470000, 0x38472000, 0x38474000, 0x38476000, 0x38478000, 0x3847A000, 0x3847C000, 0x3847E000, - 0x38480000, 0x38482000, 0x38484000, 0x38486000, 0x38488000, 0x3848A000, 0x3848C000, 0x3848E000, 0x38490000, 0x38492000, 0x38494000, 0x38496000, 0x38498000, 0x3849A000, 0x3849C000, 0x3849E000, - 0x384A0000, 0x384A2000, 0x384A4000, 0x384A6000, 0x384A8000, 0x384AA000, 0x384AC000, 0x384AE000, 0x384B0000, 0x384B2000, 0x384B4000, 0x384B6000, 0x384B8000, 0x384BA000, 0x384BC000, 0x384BE000, - 0x384C0000, 0x384C2000, 0x384C4000, 0x384C6000, 0x384C8000, 0x384CA000, 0x384CC000, 0x384CE000, 0x384D0000, 0x384D2000, 0x384D4000, 0x384D6000, 0x384D8000, 0x384DA000, 0x384DC000, 0x384DE000, - 0x384E0000, 0x384E2000, 0x384E4000, 0x384E6000, 0x384E8000, 0x384EA000, 0x384EC000, 0x384EE000, 0x384F0000, 0x384F2000, 0x384F4000, 0x384F6000, 0x384F8000, 0x384FA000, 0x384FC000, 0x384FE000, - 0x38500000, 0x38502000, 0x38504000, 0x38506000, 0x38508000, 0x3850A000, 0x3850C000, 0x3850E000, 0x38510000, 0x38512000, 0x38514000, 0x38516000, 0x38518000, 0x3851A000, 0x3851C000, 0x3851E000, - 0x38520000, 0x38522000, 0x38524000, 0x38526000, 0x38528000, 0x3852A000, 0x3852C000, 0x3852E000, 0x38530000, 0x38532000, 0x38534000, 0x38536000, 0x38538000, 0x3853A000, 0x3853C000, 0x3853E000, - 0x38540000, 0x38542000, 0x38544000, 0x38546000, 0x38548000, 0x3854A000, 0x3854C000, 0x3854E000, 0x38550000, 0x38552000, 0x38554000, 0x38556000, 0x38558000, 0x3855A000, 0x3855C000, 0x3855E000, - 0x38560000, 0x38562000, 0x38564000, 0x38566000, 0x38568000, 0x3856A000, 0x3856C000, 0x3856E000, 0x38570000, 0x38572000, 0x38574000, 0x38576000, 0x38578000, 0x3857A000, 0x3857C000, 0x3857E000, - 0x38580000, 0x38582000, 0x38584000, 0x38586000, 0x38588000, 0x3858A000, 0x3858C000, 0x3858E000, 0x38590000, 0x38592000, 0x38594000, 0x38596000, 0x38598000, 0x3859A000, 0x3859C000, 0x3859E000, - 0x385A0000, 0x385A2000, 0x385A4000, 0x385A6000, 0x385A8000, 0x385AA000, 0x385AC000, 0x385AE000, 0x385B0000, 0x385B2000, 0x385B4000, 0x385B6000, 0x385B8000, 0x385BA000, 0x385BC000, 0x385BE000, - 0x385C0000, 0x385C2000, 0x385C4000, 0x385C6000, 0x385C8000, 0x385CA000, 0x385CC000, 0x385CE000, 0x385D0000, 0x385D2000, 0x385D4000, 0x385D6000, 0x385D8000, 0x385DA000, 0x385DC000, 0x385DE000, - 0x385E0000, 0x385E2000, 0x385E4000, 0x385E6000, 0x385E8000, 0x385EA000, 0x385EC000, 0x385EE000, 0x385F0000, 0x385F2000, 0x385F4000, 0x385F6000, 0x385F8000, 0x385FA000, 0x385FC000, 0x385FE000, - 0x38600000, 0x38602000, 0x38604000, 0x38606000, 0x38608000, 0x3860A000, 0x3860C000, 0x3860E000, 0x38610000, 0x38612000, 0x38614000, 0x38616000, 0x38618000, 0x3861A000, 0x3861C000, 0x3861E000, - 0x38620000, 0x38622000, 0x38624000, 0x38626000, 0x38628000, 0x3862A000, 0x3862C000, 0x3862E000, 0x38630000, 0x38632000, 0x38634000, 0x38636000, 0x38638000, 0x3863A000, 0x3863C000, 0x3863E000, - 0x38640000, 0x38642000, 0x38644000, 0x38646000, 0x38648000, 0x3864A000, 0x3864C000, 0x3864E000, 0x38650000, 0x38652000, 0x38654000, 0x38656000, 0x38658000, 0x3865A000, 0x3865C000, 0x3865E000, - 0x38660000, 0x38662000, 0x38664000, 0x38666000, 0x38668000, 0x3866A000, 0x3866C000, 0x3866E000, 0x38670000, 0x38672000, 0x38674000, 0x38676000, 0x38678000, 0x3867A000, 0x3867C000, 0x3867E000, - 0x38680000, 0x38682000, 0x38684000, 0x38686000, 0x38688000, 0x3868A000, 0x3868C000, 0x3868E000, 0x38690000, 0x38692000, 0x38694000, 0x38696000, 0x38698000, 0x3869A000, 0x3869C000, 0x3869E000, - 0x386A0000, 0x386A2000, 0x386A4000, 0x386A6000, 0x386A8000, 0x386AA000, 0x386AC000, 0x386AE000, 0x386B0000, 0x386B2000, 0x386B4000, 0x386B6000, 0x386B8000, 0x386BA000, 0x386BC000, 0x386BE000, - 0x386C0000, 0x386C2000, 0x386C4000, 0x386C6000, 0x386C8000, 0x386CA000, 0x386CC000, 0x386CE000, 0x386D0000, 0x386D2000, 0x386D4000, 0x386D6000, 0x386D8000, 0x386DA000, 0x386DC000, 0x386DE000, - 0x386E0000, 0x386E2000, 0x386E4000, 0x386E6000, 0x386E8000, 0x386EA000, 0x386EC000, 0x386EE000, 0x386F0000, 0x386F2000, 0x386F4000, 0x386F6000, 0x386F8000, 0x386FA000, 0x386FC000, 0x386FE000, - 0x38700000, 0x38702000, 0x38704000, 0x38706000, 0x38708000, 0x3870A000, 0x3870C000, 0x3870E000, 0x38710000, 0x38712000, 0x38714000, 0x38716000, 0x38718000, 0x3871A000, 0x3871C000, 0x3871E000, - 0x38720000, 0x38722000, 0x38724000, 0x38726000, 0x38728000, 0x3872A000, 0x3872C000, 0x3872E000, 0x38730000, 0x38732000, 0x38734000, 0x38736000, 0x38738000, 0x3873A000, 0x3873C000, 0x3873E000, - 0x38740000, 0x38742000, 0x38744000, 0x38746000, 0x38748000, 0x3874A000, 0x3874C000, 0x3874E000, 0x38750000, 0x38752000, 0x38754000, 0x38756000, 0x38758000, 0x3875A000, 0x3875C000, 0x3875E000, - 0x38760000, 0x38762000, 0x38764000, 0x38766000, 0x38768000, 0x3876A000, 0x3876C000, 0x3876E000, 0x38770000, 0x38772000, 0x38774000, 0x38776000, 0x38778000, 0x3877A000, 0x3877C000, 0x3877E000, - 0x38780000, 0x38782000, 0x38784000, 0x38786000, 0x38788000, 0x3878A000, 0x3878C000, 0x3878E000, 0x38790000, 0x38792000, 0x38794000, 0x38796000, 0x38798000, 0x3879A000, 0x3879C000, 0x3879E000, - 0x387A0000, 0x387A2000, 0x387A4000, 0x387A6000, 0x387A8000, 0x387AA000, 0x387AC000, 0x387AE000, 0x387B0000, 0x387B2000, 0x387B4000, 0x387B6000, 0x387B8000, 0x387BA000, 0x387BC000, 0x387BE000, - 0x387C0000, 0x387C2000, 0x387C4000, 0x387C6000, 0x387C8000, 0x387CA000, 0x387CC000, 0x387CE000, 0x387D0000, 0x387D2000, 0x387D4000, 0x387D6000, 0x387D8000, 0x387DA000, 0x387DC000, 0x387DE000, - 0x387E0000, 0x387E2000, 0x387E4000, 0x387E6000, 0x387E8000, 0x387EA000, 0x387EC000, 0x387EE000, 0x387F0000, 0x387F2000, 0x387F4000, 0x387F6000, 0x387F8000, 0x387FA000, 0x387FC000, 0x387FE000 - }; - static const unsigned int exponent_table[64] = { - 0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000, 0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000, 0x06000000, 0x06800000, 0x07000000, 0x07800000, - 0x08000000, 0x08800000, 0x09000000, 0x09800000, 0x0A000000, 0x0A800000, 0x0B000000, 0x0B800000, 0x0C000000, 0x0C800000, 0x0D000000, 0x0D800000, 0x0E000000, 0x0E800000, 0x0F000000, 0x47800000, - 0x80000000, 0x80800000, 0x81000000, 0x81800000, 0x82000000, 0x82800000, 0x83000000, 0x83800000, 0x84000000, 0x84800000, 0x85000000, 0x85800000, 0x86000000, 0x86800000, 0x87000000, 0x87800000, - 0x88000000, 0x88800000, 0x89000000, 0x89800000, 0x8A000000, 0x8A800000, 0x8B000000, 0x8B800000, 0x8C000000, 0x8C800000, 0x8D000000, 0x8D800000, 0x8E000000, 0x8E800000, 0x8F000000, 0xC7800000 - }; - static const unsigned short offset_table[64] = { - 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, - 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024 - }; - ConversionBits bits; - bits.i32 = mantissa_table[offset_table[value >> 10] + (value & 0x3FF)] + - exponent_table[value >> 10]; - return bits.f32; -} - -// ================================================================================================= - -// CLBLAST_HALF_H_ -#endif diff --git a/include/clblast_netlib_c.h b/include/clblast_netlib_c.h deleted file mode 100644 index 4c54fb188..000000000 --- a/include/clblast_netlib_c.h +++ /dev/null @@ -1,993 +0,0 @@ - -// ================================================================================================= -// This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This -// project loosely follows the Google C++ styleguide and uses a tab-size of two spaces and a max- -// width of 100 characters per line. -// -// Author(s): -// Cedric Nugteren -// -// This file contains the Netlib CBLAS interface to the CLBlast BLAS routines, performing all buffer -// copies automatically and running on the default OpenCL platform and device. For full control over -// performance, it is advised to use the regular clblast.h or clblast_c.h headers instead. -// -// ================================================================================================= - -#ifndef CLBLAST_CLBLAST_NETLIB_C_H_ -#define CLBLAST_CLBLAST_NETLIB_C_H_ - -// Exports library functions under Windows when building a DLL. See also: -// https://msdn.microsoft.com/en-us/library/a90k134d.aspx -#if defined(_WIN32) && defined(CLBLAST_DLL) - #if defined(COMPILING_DLL) - #define PUBLIC_API __declspec(dllexport) - #else - #define PUBLIC_API __declspec(dllimport) - #endif -#else - #define PUBLIC_API -#endif - -// The C interface -#ifdef __cplusplus -extern "C" { -#endif - -// ================================================================================================= - -// Matrix layout and transpose types -typedef enum CLBlastLayout_ { CLBlastLayoutRowMajor = 101, - CLBlastLayoutColMajor = 102 } CLBlastLayout; -typedef enum CLBlastTranspose_ { CLBlastTransposeNo = 111, CLBlastTransposeYes = 112, - CLBlastTransposeConjugate = 113 } CLBlastTranspose; -typedef enum CLBlastTriangle_ { CLBlastTriangleUpper = 121, - CLBlastTriangleLower = 122 } CLBlastTriangle; -typedef enum CLBlastDiagonal_ { CLBlastDiagonalNonUnit = 131, - CLBlastDiagonalUnit = 132 } CLBlastDiagonal; -typedef enum CLBlastSide_ { CLBlastSideLeft = 141, CLBlastSideRight = 142 } CLBlastSide; -typedef enum CLBlastKernelMode_ { CLBlastKernelModeCrossCorrelation = 141, CLBlastKernelModeConvolution = 152 } CLBlastKernelMode; - -// For full compatibility with CBLAS -typedef CLBlastLayout CBLAS_ORDER; -typedef CLBlastTranspose CBLAS_TRANSPOSE; -typedef CLBlastTriangle CBLAS_UPLO; -typedef CLBlastDiagonal CBLAS_DIAG; -typedef CLBlastSide CBLAS_SIDE; -#define CblasRowMajor CLBlastLayoutRowMajor -#define CblasColMajor CLBlastLayoutColMajor -#define CblasNoTrans CLBlastTransposeNo -#define CblasTrans CLBlastTransposeYes -#define CblasConjTrans CLBlastTransposeConjugate -#define CblasUpper CLBlastTriangleUpper -#define CblasLower CLBlastTriangleLower -#define CblasNonUnit CLBlastDiagonalNonUnit -#define CblasUnit CLBlastDiagonalUnit -#define CblasLeft CLBlastSideLeft -#define CblasRight CLBlastSideRight - -// ================================================================================================= -// BLAS level-1 (vector-vector) routines -// ================================================================================================= - -// Generate givens plane rotation: SROTG/DROTG -void PUBLIC_API cblas_srotg(float* sa, - float* sb, - float* sc, - float* ss); -void PUBLIC_API cblas_drotg(double* sa, - double* sb, - double* sc, - double* ss); - -// Generate modified givens plane rotation: SROTMG/DROTMG -void PUBLIC_API cblas_srotmg(float* sd1, - float* sd2, - float* sx1, - const float sy1, - float* sparam); -void PUBLIC_API cblas_drotmg(double* sd1, - double* sd2, - double* sx1, - const double sy1, - double* sparam); - -// Apply givens plane rotation: SROT/DROT -void PUBLIC_API cblas_srot(const int n, - float* x, const int x_inc, - float* y, const int y_inc, - const float cos, - const float sin); -void PUBLIC_API cblas_drot(const int n, - double* x, const int x_inc, - double* y, const int y_inc, - const double cos, - const double sin); - -// Apply modified givens plane rotation: SROTM/DROTM -void PUBLIC_API cblas_srotm(const int n, - float* x, const int x_inc, - float* y, const int y_inc, - float* sparam); -void PUBLIC_API cblas_drotm(const int n, - double* x, const int x_inc, - double* y, const int y_inc, - double* sparam); - -// Swap two vectors: SSWAP/DSWAP/CSWAP/ZSWAP/HSWAP -void PUBLIC_API cblas_sswap(const int n, - float* x, const int x_inc, - float* y, const int y_inc); -void PUBLIC_API cblas_dswap(const int n, - double* x, const int x_inc, - double* y, const int y_inc); -void PUBLIC_API cblas_cswap(const int n, - void* x, const int x_inc, - void* y, const int y_inc); -void PUBLIC_API cblas_zswap(const int n, - void* x, const int x_inc, - void* y, const int y_inc); - -// Vector scaling: SSCAL/DSCAL/CSCAL/ZSCAL/HSCAL -void PUBLIC_API cblas_sscal(const int n, - const float alpha, - float* x, const int x_inc); -void PUBLIC_API cblas_dscal(const int n, - const double alpha, - double* x, const int x_inc); -void PUBLIC_API cblas_cscal(const int n, - const void* alpha, - void* x, const int x_inc); -void PUBLIC_API cblas_zscal(const int n, - const void* alpha, - void* x, const int x_inc); - -// Vector copy: SCOPY/DCOPY/CCOPY/ZCOPY/HCOPY -void PUBLIC_API cblas_scopy(const int n, - const float* x, const int x_inc, - float* y, const int y_inc); -void PUBLIC_API cblas_dcopy(const int n, - const double* x, const int x_inc, - double* y, const int y_inc); -void PUBLIC_API cblas_ccopy(const int n, - const void* x, const int x_inc, - void* y, const int y_inc); -void PUBLIC_API cblas_zcopy(const int n, - const void* x, const int x_inc, - void* y, const int y_inc); - -// Vector-times-constant plus vector: SAXPY/DAXPY/CAXPY/ZAXPY/HAXPY -void PUBLIC_API cblas_saxpy(const int n, - const float alpha, - const float* x, const int x_inc, - float* y, const int y_inc); -void PUBLIC_API cblas_daxpy(const int n, - const double alpha, - const double* x, const int x_inc, - double* y, const int y_inc); -void PUBLIC_API cblas_caxpy(const int n, - const void* alpha, - const void* x, const int x_inc, - void* y, const int y_inc); -void PUBLIC_API cblas_zaxpy(const int n, - const void* alpha, - const void* x, const int x_inc, - void* y, const int y_inc); - -// Dot product of two vectors: SDOT/DDOT/HDOT -float PUBLIC_API cblas_sdot(const int n, - const float* x, const int x_inc, - const float* y, const int y_inc); -double PUBLIC_API cblas_ddot(const int n, - const double* x, const int x_inc, - const double* y, const int y_inc); - -// Dot product of two complex vectors: CDOTU/ZDOTU -void PUBLIC_API cblas_cdotu_sub(const int n, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* dot); -void PUBLIC_API cblas_zdotu_sub(const int n, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* dot); - -// Dot product of two complex vectors, one conjugated: CDOTC/ZDOTC -void PUBLIC_API cblas_cdotc_sub(const int n, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* dot); -void PUBLIC_API cblas_zdotc_sub(const int n, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* dot); - -// Euclidian norm of a vector: SNRM2/DNRM2/ScNRM2/DzNRM2/HNRM2 -float PUBLIC_API cblas_snrm2(const int n, - const float* x, const int x_inc); -double PUBLIC_API cblas_dnrm2(const int n, - const double* x, const int x_inc); -float PUBLIC_API cblas_scnrm2(const int n, - const void* x, const int x_inc); -double PUBLIC_API cblas_dznrm2(const int n, - const void* x, const int x_inc); - -// Absolute sum of values in a vector: SASUM/DASUM/ScASUM/DzASUM/HASUM -float PUBLIC_API cblas_sasum(const int n, - const float* x, const int x_inc); -double PUBLIC_API cblas_dasum(const int n, - const double* x, const int x_inc); -float PUBLIC_API cblas_scasum(const int n, - const void* x, const int x_inc); -double PUBLIC_API cblas_dzasum(const int n, - const void* x, const int x_inc); - -// Sum of values in a vector (non-BLAS function): SSUM/DSUM/ScSUM/DzSUM/HSUM -float PUBLIC_API cblas_ssum(const int n, - const float* x, const int x_inc); -double PUBLIC_API cblas_dsum(const int n, - const double* x, const int x_inc); -float PUBLIC_API cblas_scsum(const int n, - const void* x, const int x_inc); -double PUBLIC_API cblas_dzsum(const int n, - const void* x, const int x_inc); - -// Index of absolute maximum value in a vector: iSAMAX/iDAMAX/iCAMAX/iZAMAX/iHAMAX -int PUBLIC_API cblas_isamax(const int n, - const float* x, const int x_inc); -int PUBLIC_API cblas_idamax(const int n, - const double* x, const int x_inc); -int PUBLIC_API cblas_icamax(const int n, - const void* x, const int x_inc); -int PUBLIC_API cblas_izamax(const int n, - const void* x, const int x_inc); - -// Index of absolute minimum value in a vector (non-BLAS function): iSAMIN/iDAMIN/iCAMIN/iZAMIN/iHAMIN -int PUBLIC_API cblas_isamin(const int n, - const float* x, const int x_inc); -int PUBLIC_API cblas_idamin(const int n, - const double* x, const int x_inc); -int PUBLIC_API cblas_icamin(const int n, - const void* x, const int x_inc); -int PUBLIC_API cblas_izamin(const int n, - const void* x, const int x_inc); - -// Index of maximum value in a vector (non-BLAS function): iSMAX/iDMAX/iCMAX/iZMAX/iHMAX -int PUBLIC_API cblas_ismax(const int n, - const float* x, const int x_inc); -int PUBLIC_API cblas_idmax(const int n, - const double* x, const int x_inc); -int PUBLIC_API cblas_icmax(const int n, - const void* x, const int x_inc); -int PUBLIC_API cblas_izmax(const int n, - const void* x, const int x_inc); - -// Index of minimum value in a vector (non-BLAS function): iSMIN/iDMIN/iCMIN/iZMIN/iHMIN -int PUBLIC_API cblas_ismin(const int n, - const float* x, const int x_inc); -int PUBLIC_API cblas_idmin(const int n, - const double* x, const int x_inc); -int PUBLIC_API cblas_icmin(const int n, - const void* x, const int x_inc); -int PUBLIC_API cblas_izmin(const int n, - const void* x, const int x_inc); - -// ================================================================================================= -// BLAS level-2 (matrix-vector) routines -// ================================================================================================= - -// General matrix-vector multiplication: SGEMV/DGEMV/CGEMV/ZGEMV/HGEMV -void PUBLIC_API cblas_sgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const float alpha, - const float* a, const int a_ld, - const float* x, const int x_inc, - const float beta, - float* y, const int y_inc); -void PUBLIC_API cblas_dgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const double alpha, - const double* a, const int a_ld, - const double* x, const int x_inc, - const double beta, - double* y, const int y_inc); -void PUBLIC_API cblas_cgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); -void PUBLIC_API cblas_zgemv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); - -// General banded matrix-vector multiplication: SGBMV/DGBMV/CGBMV/ZGBMV/HGBMV -void PUBLIC_API cblas_sgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, const int kl, const int ku, - const float alpha, - const float* a, const int a_ld, - const float* x, const int x_inc, - const float beta, - float* y, const int y_inc); -void PUBLIC_API cblas_dgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, const int kl, const int ku, - const double alpha, - const double* a, const int a_ld, - const double* x, const int x_inc, - const double beta, - double* y, const int y_inc); -void PUBLIC_API cblas_cgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, const int kl, const int ku, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); -void PUBLIC_API cblas_zgbmv(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, const int kl, const int ku, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); - -// Hermitian matrix-vector multiplication: CHEMV/ZHEMV -void PUBLIC_API cblas_chemv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); -void PUBLIC_API cblas_zhemv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); - -// Hermitian banded matrix-vector multiplication: CHBMV/ZHBMV -void PUBLIC_API cblas_chbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); -void PUBLIC_API cblas_zhbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); - -// Hermitian packed matrix-vector multiplication: CHPMV/ZHPMV -void PUBLIC_API cblas_chpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* ap, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); -void PUBLIC_API cblas_zhpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* ap, - const void* x, const int x_inc, - const void* beta, - void* y, const int y_inc); - -// Symmetric matrix-vector multiplication: SSYMV/DSYMV/HSYMV -void PUBLIC_API cblas_ssymv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* a, const int a_ld, - const float* x, const int x_inc, - const float beta, - float* y, const int y_inc); -void PUBLIC_API cblas_dsymv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* a, const int a_ld, - const double* x, const int x_inc, - const double beta, - double* y, const int y_inc); - -// Symmetric banded matrix-vector multiplication: SSBMV/DSBMV/HSBMV -void PUBLIC_API cblas_ssbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, const int k, - const float alpha, - const float* a, const int a_ld, - const float* x, const int x_inc, - const float beta, - float* y, const int y_inc); -void PUBLIC_API cblas_dsbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, const int k, - const double alpha, - const double* a, const int a_ld, - const double* x, const int x_inc, - const double beta, - double* y, const int y_inc); - -// Symmetric packed matrix-vector multiplication: SSPMV/DSPMV/HSPMV -void PUBLIC_API cblas_sspmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* ap, - const float* x, const int x_inc, - const float beta, - float* y, const int y_inc); -void PUBLIC_API cblas_dspmv(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* ap, - const double* x, const int x_inc, - const double beta, - double* y, const int y_inc); - -// Triangular matrix-vector multiplication: STRMV/DTRMV/CTRMV/ZTRMV/HTRMV -void PUBLIC_API cblas_strmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const float* a, const int a_ld, - float* x, const int x_inc); -void PUBLIC_API cblas_dtrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const double* a, const int a_ld, - double* x, const int x_inc); -void PUBLIC_API cblas_ctrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* a, const int a_ld, - void* x, const int x_inc); -void PUBLIC_API cblas_ztrmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* a, const int a_ld, - void* x, const int x_inc); - -// Triangular banded matrix-vector multiplication: STBMV/DTBMV/CTBMV/ZTBMV/HTBMV -void PUBLIC_API cblas_stbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const float* a, const int a_ld, - float* x, const int x_inc); -void PUBLIC_API cblas_dtbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const double* a, const int a_ld, - double* x, const int x_inc); -void PUBLIC_API cblas_ctbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const void* a, const int a_ld, - void* x, const int x_inc); -void PUBLIC_API cblas_ztbmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const void* a, const int a_ld, - void* x, const int x_inc); - -// Triangular packed matrix-vector multiplication: STPMV/DTPMV/CTPMV/ZTPMV/HTPMV -void PUBLIC_API cblas_stpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const float* ap, - float* x, const int x_inc); -void PUBLIC_API cblas_dtpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const double* ap, - double* x, const int x_inc); -void PUBLIC_API cblas_ctpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* ap, - void* x, const int x_inc); -void PUBLIC_API cblas_ztpmv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* ap, - void* x, const int x_inc); - -// Solves a triangular system of equations: STRSV/DTRSV/CTRSV/ZTRSV -void PUBLIC_API cblas_strsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const float* a, const int a_ld, - float* x, const int x_inc); -void PUBLIC_API cblas_dtrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const double* a, const int a_ld, - double* x, const int x_inc); -void PUBLIC_API cblas_ctrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* a, const int a_ld, - void* x, const int x_inc); -void PUBLIC_API cblas_ztrsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* a, const int a_ld, - void* x, const int x_inc); - -// Solves a banded triangular system of equations: STBSV/DTBSV/CTBSV/ZTBSV -void PUBLIC_API cblas_stbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const float* a, const int a_ld, - float* x, const int x_inc); -void PUBLIC_API cblas_dtbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const double* a, const int a_ld, - double* x, const int x_inc); -void PUBLIC_API cblas_ctbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const void* a, const int a_ld, - void* x, const int x_inc); -void PUBLIC_API cblas_ztbsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, const int k, - const void* a, const int a_ld, - void* x, const int x_inc); - -// Solves a packed triangular system of equations: STPSV/DTPSV/CTPSV/ZTPSV -void PUBLIC_API cblas_stpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const float* ap, - float* x, const int x_inc); -void PUBLIC_API cblas_dtpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const double* ap, - double* x, const int x_inc); -void PUBLIC_API cblas_ctpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* ap, - void* x, const int x_inc); -void PUBLIC_API cblas_ztpsv(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int n, - const void* ap, - void* x, const int x_inc); - -// General rank-1 matrix update: SGER/DGER/HGER -void PUBLIC_API cblas_sger(const CLBlastLayout layout, - const int m, const int n, - const float alpha, - const float* x, const int x_inc, - const float* y, const int y_inc, - float* a, const int a_ld); -void PUBLIC_API cblas_dger(const CLBlastLayout layout, - const int m, const int n, - const double alpha, - const double* x, const int x_inc, - const double* y, const int y_inc, - double* a, const int a_ld); - -// General rank-1 complex matrix update: CGERU/ZGERU -void PUBLIC_API cblas_cgeru(const CLBlastLayout layout, - const int m, const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); -void PUBLIC_API cblas_zgeru(const CLBlastLayout layout, - const int m, const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); - -// General rank-1 complex conjugated matrix update: CGERC/ZGERC -void PUBLIC_API cblas_cgerc(const CLBlastLayout layout, - const int m, const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); -void PUBLIC_API cblas_zgerc(const CLBlastLayout layout, - const int m, const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); - -// Hermitian rank-1 matrix update: CHER/ZHER -void PUBLIC_API cblas_cher(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const void* x, const int x_inc, - void* a, const int a_ld); -void PUBLIC_API cblas_zher(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const void* x, const int x_inc, - void* a, const int a_ld); - -// Hermitian packed rank-1 matrix update: CHPR/ZHPR -void PUBLIC_API cblas_chpr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const void* x, const int x_inc, - void* ap); -void PUBLIC_API cblas_zhpr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const void* x, const int x_inc, - void* ap); - -// Hermitian rank-2 matrix update: CHER2/ZHER2 -void PUBLIC_API cblas_cher2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); -void PUBLIC_API cblas_zher2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* a, const int a_ld); - -// Hermitian packed rank-2 matrix update: CHPR2/ZHPR2 -void PUBLIC_API cblas_chpr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* ap); -void PUBLIC_API cblas_zhpr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - void* ap); - -// Symmetric rank-1 matrix update: SSYR/DSYR/HSYR -void PUBLIC_API cblas_ssyr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* x, const int x_inc, - float* a, const int a_ld); -void PUBLIC_API cblas_dsyr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* x, const int x_inc, - double* a, const int a_ld); - -// Symmetric packed rank-1 matrix update: SSPR/DSPR/HSPR -void PUBLIC_API cblas_sspr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* x, const int x_inc, - float* ap); -void PUBLIC_API cblas_dspr(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* x, const int x_inc, - double* ap); - -// Symmetric rank-2 matrix update: SSYR2/DSYR2/HSYR2 -void PUBLIC_API cblas_ssyr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* x, const int x_inc, - const float* y, const int y_inc, - float* a, const int a_ld); -void PUBLIC_API cblas_dsyr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* x, const int x_inc, - const double* y, const int y_inc, - double* a, const int a_ld); - -// Symmetric packed rank-2 matrix update: SSPR2/DSPR2/HSPR2 -void PUBLIC_API cblas_sspr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const float alpha, - const float* x, const int x_inc, - const float* y, const int y_inc, - float* ap); -void PUBLIC_API cblas_dspr2(const CLBlastLayout layout, const CLBlastTriangle triangle, - const int n, - const double alpha, - const double* x, const int x_inc, - const double* y, const int y_inc, - double* ap); - -// ================================================================================================= -// BLAS level-3 (matrix-matrix) routines -// ================================================================================================= - -// General matrix-matrix multiplication: SGEMM/DGEMM/CGEMM/ZGEMM/HGEMM -void PUBLIC_API cblas_sgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const int m, const int n, const int k, - const float alpha, - const float* a, const int a_ld, - const float* b, const int b_ld, - const float beta, - float* c, const int c_ld); -void PUBLIC_API cblas_dgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const int m, const int n, const int k, - const double alpha, - const double* a, const int a_ld, - const double* b, const int b_ld, - const double beta, - double* c, const int c_ld); -void PUBLIC_API cblas_cgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const int m, const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zgemm(const CLBlastLayout layout, const CLBlastTranspose a_transpose, const CLBlastTranspose b_transpose, - const int m, const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); - -// Symmetric matrix-matrix multiplication: SSYMM/DSYMM/CSYMM/ZSYMM/HSYMM -void PUBLIC_API cblas_ssymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const float alpha, - const float* a, const int a_ld, - const float* b, const int b_ld, - const float beta, - float* c, const int c_ld); -void PUBLIC_API cblas_dsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const double alpha, - const double* a, const int a_ld, - const double* b, const int b_ld, - const double beta, - double* c, const int c_ld); -void PUBLIC_API cblas_csymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zsymm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); - -// Hermitian matrix-matrix multiplication: CHEMM/ZHEMM -void PUBLIC_API cblas_chemm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zhemm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); - -// Rank-K update of a symmetric matrix: SSYRK/DSYRK/CSYRK/ZSYRK/HSYRK -void PUBLIC_API cblas_ssyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const float alpha, - const float* a, const int a_ld, - const float beta, - float* c, const int c_ld); -void PUBLIC_API cblas_dsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const double alpha, - const double* a, const int a_ld, - const double beta, - double* c, const int c_ld); -void PUBLIC_API cblas_csyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zsyrk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* beta, - void* c, const int c_ld); - -// Rank-K update of a hermitian matrix: CHERK/ZHERK -void PUBLIC_API cblas_cherk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const float alpha, - const void* a, const int a_ld, - const float beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zherk(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, - const int n, const int k, - const double alpha, - const void* a, const int a_ld, - const double beta, - void* c, const int c_ld); - -// Rank-2K update of a symmetric matrix: SSYR2K/DSYR2K/CSYR2K/ZSYR2K/HSYR2K -void PUBLIC_API cblas_ssyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const float alpha, - const float* a, const int a_ld, - const float* b, const int b_ld, - const float beta, - float* c, const int c_ld); -void PUBLIC_API cblas_dsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const double alpha, - const double* a, const int a_ld, - const double* b, const int b_ld, - const double beta, - double* c, const int c_ld); -void PUBLIC_API cblas_csyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zsyr2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const void* beta, - void* c, const int c_ld); - -// Rank-2K update of a hermitian matrix: CHER2K/ZHER2K -void PUBLIC_API cblas_cher2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const float beta, - void* c, const int c_ld); -void PUBLIC_API cblas_zher2k(const CLBlastLayout layout, const CLBlastTriangle triangle, const CLBlastTranspose ab_transpose, - const int n, const int k, - const void* alpha, - const void* a, const int a_ld, - const void* b, const int b_ld, - const double beta, - void* c, const int c_ld); - -// Triangular matrix-matrix multiplication: STRMM/DTRMM/CTRMM/ZTRMM/HTRMM -void PUBLIC_API cblas_strmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const float alpha, - const float* a, const int a_ld, - float* b, const int b_ld); -void PUBLIC_API cblas_dtrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const double alpha, - const double* a, const int a_ld, - double* b, const int b_ld); -void PUBLIC_API cblas_ctrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); -void PUBLIC_API cblas_ztrmm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); - -// Solves a triangular system of equations: STRSM/DTRSM/CTRSM/ZTRSM -void PUBLIC_API cblas_strsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const float alpha, - const float* a, const int a_ld, - float* b, const int b_ld); -void PUBLIC_API cblas_dtrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const double alpha, - const double* a, const int a_ld, - double* b, const int b_ld); -void PUBLIC_API cblas_ctrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); -void PUBLIC_API cblas_ztrsm(const CLBlastLayout layout, const CLBlastSide side, const CLBlastTriangle triangle, const CLBlastTranspose a_transpose, const CLBlastDiagonal diagonal, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); - -// ================================================================================================= -// Extra non-BLAS routines (level-X) -// ================================================================================================= - -// Element-wise vector product (Hadamard): SHAD/DHAD/CHAD/ZHAD/HHAD -void PUBLIC_API cblas_shad(const int n, - const float alpha, - const float* x, const int x_inc, - const float* y, const int y_inc, - const float beta, - float* z, const int z_inc); -void PUBLIC_API cblas_dhad(const int n, - const double alpha, - const double* x, const int x_inc, - const double* y, const int y_inc, - const double beta, - double* z, const int z_inc); -void PUBLIC_API cblas_chad(const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - const void* beta, - void* z, const int z_inc); -void PUBLIC_API cblas_zhad(const int n, - const void* alpha, - const void* x, const int x_inc, - const void* y, const int y_inc, - const void* beta, - void* z, const int z_inc); - -// Scaling and out-place transpose/copy (non-BLAS function): SOMATCOPY/DOMATCOPY/COMATCOPY/ZOMATCOPY/HOMATCOPY -void PUBLIC_API cblas_somatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const float alpha, - const float* a, const int a_ld, - float* b, const int b_ld); -void PUBLIC_API cblas_domatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const double alpha, - const double* a, const int a_ld, - double* b, const int b_ld); -void PUBLIC_API cblas_comatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); -void PUBLIC_API cblas_zomatcopy(const CLBlastLayout layout, const CLBlastTranspose a_transpose, - const int m, const int n, - const void* alpha, - const void* a, const int a_ld, - void* b, const int b_ld); - -// Im2col function (non-BLAS function): SIM2COL/DIM2COL/CIM2COL/ZIM2COL/HIM2COL -void PUBLIC_API cblas_sim2col(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const float* im, - float* col); -void PUBLIC_API cblas_dim2col(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const double* im, - double* col); -void PUBLIC_API cblas_cim2col(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const void* im, - void* col); -void PUBLIC_API cblas_zim2col(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const void* im, - void* col); - -// Col2im function (non-BLAS function): SCOL2IM/DCOL2IM/CCOL2IM/ZCOL2IM/HCOL2IM -void PUBLIC_API cblas_scol2im(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const float* col, - float* im); -void PUBLIC_API cblas_dcol2im(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const double* col, - double* im); -void PUBLIC_API cblas_ccol2im(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const void* col, - void* im); -void PUBLIC_API cblas_zcol2im(const CLBlastKernelMode kernel_mode, - const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, - const void* col, - void* im); - -// ================================================================================================= - -#ifdef __cplusplus -} // extern "C" -#endif - -// CLBLAST_CLBLAST_NETLIB_C_H_ -#endif diff --git a/include/openblas_config.h b/include/openblas_config.h deleted file mode 100644 index 1a783e1c0..000000000 --- a/include/openblas_config.h +++ /dev/null @@ -1,133 +0,0 @@ -#ifndef OPENBLAS_CONFIG_H -#define OPENBLAS_CONFIG_H -#define OPENBLAS_OS_WINNT 1 -#define OPENBLAS_ARCH_X86_64 1 -#define OPENBLAS_C_GCC 1 -#define OPENBLAS___64BIT__ 1 -#define OPENBLAS_HAVE_C11 1 -#define OPENBLAS_PTHREAD_CREATE_FUNC pthread_create -#define OPENBLAS_BUNDERSCORE _ -#define OPENBLAS_NEEDBUNDERSCORE 1 -#define OPENBLAS_GENERIC -#define OPENBLAS_L1_DATA_SIZE 32768 -#define OPENBLAS_L1_DATA_LINESIZE 128 -#define OPENBLAS_L2_SIZE 512488 -#define OPENBLAS_L2_LINESIZE 128 -#define OPENBLAS_DTB_DEFAULT_ENTRIES 128 -#define OPENBLAS_DTB_SIZE 4096 -#define OPENBLAS_L2_ASSOCIATIVE 8 -#define OPENBLAS_CORE_generic -#define OPENBLAS_CHAR_CORENAME "generic" -#define OPENBLAS_SLOCAL_BUFFER_SIZE 4096 -#define OPENBLAS_DLOCAL_BUFFER_SIZE 4096 -#define OPENBLAS_CLOCAL_BUFFER_SIZE 8192 -#define OPENBLAS_ZLOCAL_BUFFER_SIZE 8192 -#define OPENBLAS_GEMM_MULTITHREAD_THRESHOLD 4 -#define OPENBLAS_VERSION " OpenBLAS 0.3.22 " -/*This is only for "make install" target.*/ - -#if defined(OPENBLAS_OS_WINNT) || defined(OPENBLAS_OS_CYGWIN_NT) || defined(OPENBLAS_OS_INTERIX) -#define OPENBLAS_WINDOWS_ABI -#define OPENBLAS_OS_WINDOWS - -#ifdef DOUBLE -#define DOUBLE_DEFINED DOUBLE -#undef DOUBLE -#endif -#endif - -#ifdef OPENBLAS_NEEDBUNDERSCORE -#define BLASFUNC(FUNC) FUNC##_ -#else -#define BLASFUNC(FUNC) FUNC -#endif - -#ifdef OPENBLAS_QUAD_PRECISION -typedef struct { - unsigned long x[2]; -} xdouble; -#elif defined OPENBLAS_EXPRECISION -#define xdouble long double -#else -#define xdouble double -#endif - -#if defined(OPENBLAS_OS_WINDOWS) && defined(OPENBLAS___64BIT__) -typedef long long BLASLONG; -typedef unsigned long long BLASULONG; -#else -typedef long BLASLONG; -typedef unsigned long BLASULONG; -#endif - -#ifndef BFLOAT16 -#include -typedef uint16_t bfloat16; -#endif - -#ifdef OPENBLAS_USE64BITINT -typedef BLASLONG blasint; -#else -typedef int blasint; -#endif - -#if defined(XDOUBLE) || defined(DOUBLE) -#define FLOATRET FLOAT -#else -#ifdef NEED_F2CCONV -#define FLOATRET double -#else -#define FLOATRET float -#endif -#endif - -/* Inclusion of a standard header file is needed for definition of __STDC_* - predefined macros with some compilers (e.g. GCC 4.7 on Linux). This occurs - as a side effect of including either or . */ -#include - -/* C99 supports complex floating numbers natively, which GCC also offers as an - extension since version 3.0. If neither are available, use a compatible - structure as fallback (see Clause 6.2.5.13 of the C99 standard). */ -#if ((defined(__STDC_IEC_559_COMPLEX__) || __STDC_VERSION__ >= 199901L || \ - (__GNUC__ >= 3 && !defined(__cplusplus))) && !(defined(FORCE_OPENBLAS_COMPLEX_STRUCT))) && !defined(_MSC_VER) - #define OPENBLAS_COMPLEX_C99 -#ifndef __cplusplus - #include -#endif - typedef float _Complex openblas_complex_float; - typedef double _Complex openblas_complex_double; - typedef xdouble _Complex openblas_complex_xdouble; - #define openblas_make_complex_float(real, imag) ((real) + ((imag) * _Complex_I)) - #define openblas_make_complex_double(real, imag) ((real) + ((imag) * _Complex_I)) - #define openblas_make_complex_xdouble(real, imag) ((real) + ((imag) * _Complex_I)) - #define openblas_complex_float_real(z) (creal(z)) - #define openblas_complex_float_imag(z) (cimag(z)) - #define openblas_complex_double_real(z) (creal(z)) - #define openblas_complex_double_imag(z) (cimag(z)) - #define openblas_complex_xdouble_real(z) (creal(z)) - #define openblas_complex_xdouble_imag(z) (cimag(z)) -#else - #define OPENBLAS_COMPLEX_STRUCT - typedef struct { float real, imag; } openblas_complex_float; - typedef struct { double real, imag; } openblas_complex_double; - typedef struct { xdouble real, imag; } openblas_complex_xdouble; - #define openblas_make_complex_float(real, imag) {(real), (imag)} - #define openblas_make_complex_double(real, imag) {(real), (imag)} - #define openblas_make_complex_xdouble(real, imag) {(real), (imag)} - #define openblas_complex_float_real(z) ((z).real) - #define openblas_complex_float_imag(z) ((z).imag) - #define openblas_complex_double_real(z) ((z).real) - #define openblas_complex_double_imag(z) ((z).imag) - #define openblas_complex_xdouble_real(z) ((z).real) - #define openblas_complex_xdouble_imag(z) ((z).imag) -#endif - -/* Inclusion of Linux-specific header is needed for definition of cpu_set_t. */ -#ifdef OPENBLAS_OS_LINUX -#ifndef _GNU_SOURCE - #define _GNU_SOURCE -#endif -#include -#endif -#endif /* OPENBLAS_CONFIG_H */ diff --git a/lib/OpenCL.lib b/lib/OpenCL.lib deleted file mode 100644 index 60ab6e0b041c80fe7bf5b808a1a9d17aba71e384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28824 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 diff --git a/lib/clblast.lib b/lib/clblast.lib deleted file mode 100644 index c913737abfcdba27643c96618a4e34c95453a4a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397138 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 b!qHr_-pV+_N&(pIHp)?4v);})T+jajFsCB; diff --git a/otherarch/ggml_v2-opencl-legacy.c b/otherarch/ggml_v2-opencl-legacy.c deleted file mode 100644 index 50ade6de3..000000000 --- a/otherarch/ggml_v2-opencl-legacy.c +++ /dev/null @@ -1,427 +0,0 @@ -#include "ggml_v2-opencl-legacy.h" - -#define CL_TARGET_OPENCL_VERSION 110 -#include - -#include -#include -#include - -#include "ggml_v2.h" - -#define MULTILINE_QUOTE(...) #__VA_ARGS__ -const char * clblast_dequant_legacy = MULTILINE_QUOTE( - -struct block_q4_0 -{ - float d; - uchar qs[16]; -}; - -__kernel void dequantize_row_q4_0(__global struct block_q4_0* blocks, __global float* result) { - const uint i = get_global_id(0) / 32; - const uint l = get_local_id(0); - - const float d = blocks[i].d; - - const uchar vi = blocks[i].qs[l]; - - const uint index = i*32 + l*2; - result[index + 0] = ((vi & 0xf) - 8)*d; - result[index + 1] = ((vi >> 4) - 8)*d; -} - -struct block_q4_1 -{ - float d; - float m; - uchar qs[16]; -}; - -__kernel void dequantize_row_q4_1(__global struct block_q4_1* blocks, __global float* result) { - const uint i = get_global_id(0) / 32; - const uint l = get_local_id(0); - - const float d = blocks[i].d; - const float m = blocks[i].m; - - const uchar vi = blocks[i].qs[l]; - - const uint index = i*32 + l*2; - result[index + 0] = (vi & 0xf) * d + m; - result[index + 1] = (vi >> 4) * d + m; -} - -struct block_q4_2 -{ - ushort d; - uchar qs[8]; -}; - -__kernel void dequantize_row_q4_2(__global struct block_q4_2* blocks, __global float* result) { - const uint i = get_global_id(0) / 16; - const uint l = get_local_id(0); - - const float d = vload_half(0, (__global half*) &blocks[i].d); - - const uchar vi = blocks[i].qs[l]; - - const uint index = i*16 + l*2; - result[index + 0] = ((vi & 0xf) - 8)*d; - result[index + 1] = ((vi >> 4) - 8)*d; -} - -struct block_q4_3 -{ - ushort d; - ushort m; - uchar qs[8]; -}; - -__kernel void dequantize_row_q4_3(__global struct block_q4_3* blocks, __global float* result) { - const uint i = get_global_id(0) / 16; - const uint l = get_local_id(0); - - const float d = vload_half(0, (__global half*) &(blocks[i].d)); - const float m = vload_half(0, (__global half*) &(blocks[i].m)); - - const uchar vi = blocks[i].qs[l]; - - const uint index = i*16 + l*2; - result[index + 0] = (vi & 0xf) * d + m; - result[index + 1] = (vi >> 4) * d + m; -} - -struct block_q5_0 -{ - float d; - uint qh; - uchar qs[16]; -}; - -__kernel void dequantize_row_q5_0(__global struct block_q5_0* blocks, __global float* result) { - const uint i = get_global_id(0) / 32; - const uint l = get_local_id(0); - - const float d = blocks[i].d; - - const uchar vi = blocks[i].qs[l]; - - const uint l2 = l * 2; - - const uchar vh0 = ((blocks[i].qh & (1 << (l2 + 0))) >> (l2 + 0)) << 4; - const uchar vh1 = ((blocks[i].qh & (1 << (l2 + 1))) >> (l2 + 1)) << 4; - - const uint index = i*32 + l2; - result[index + 0] = (((vi & 0xf) | vh0) - 16)*d; - result[index + 1] = (((vi >> 4) | vh1) - 16)*d; -} - -struct block_q5_1 -{ - ushort d; - ushort m; - uint qh; - uchar qs[16]; -}; - -__kernel void dequantize_row_q5_1(__global struct block_q5_1* blocks, __global float* result) { - const uint i = get_global_id(0) / 32; - const uint l = get_local_id(0); - - const float d = vload_half(0, (__global half*) &blocks[i].d); - const float m = vload_half(0, (__global half*) &blocks[i].m); - - const uchar vi = blocks[i].qs[l]; - - const uint l2 = l * 2; - - const uchar vh0 = ((blocks[i].qh & (1 << (l2 + 0))) >> (l2 + 0)) << 4; - const uchar vh1 = ((blocks[i].qh & (1 << (l2 + 1))) >> (l2 + 1)) << 4; - - const uint index = i*32 + l2; - result[index + 0] = ((vi & 0xf) | vh0)*d + m; - result[index + 1] = ((vi >> 4) | vh1)*d + m; -} - -struct block_q8_0 -{ - float d; - char qs[32]; -}; - -__kernel void dequantize_row_q8_0(__global struct block_q8_0* blocks, __global float* result) { - const uint i = get_global_id(0) / 32; - const uint l = get_local_id(0); - - result[i*32 + l] = blocks[i].qs[l] * blocks[i].d; -} - -); - -#define CL_CHECK(err, name) \ - do { \ - cl_int err_ = (err); \ - if (err_ != CL_SUCCESS) { \ - fprintf(stderr, "OpenCL %s error %d at %s:%d\n", name, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n"); \ - exit(1); \ - } \ - } while (0) - -#define QK5_0 32 -typedef struct { - ggml_v2_fp16_t d; // delta - uint8_t qh[4]; // 5-th bit of quants - uint8_t qs[QK5_0 / 2]; // nibbles / quants -} block_q5_0; - - -typedef struct { - float d; // delta - uint32_t qh; // 5-th bit of quants - uint8_t qs[QK5_0 / 2]; // nibbles / quants -} cl_block_q5_0; - -static cl_platform_id platform; -static cl_device_id device; -static cl_context context; -static cl_command_queue queue; -static cl_program program; -static cl_kernel kernel_q4_0, kernel_q4_1, kernel_q4_2, kernel_q4_3, kernel_q5_0, kernel_q5_1, kernel_q8_0; -static cl_mem cl_buffer_a, cl_buffer_qb, cl_buffer_b, cl_buffer_c; -static size_t cl_size_a = 0, cl_size_qb = 0, cl_size_b = 0, cl_size_c = 0; - -static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { - cl_program p; - char *program_log; - size_t program_size, log_size; - int err; - - program_size = strlen(program_buffer); - - p = clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); - if(err < 0) { - fprintf(stderr, "OpenCL error creating program"); - exit(1); - } - - err = clBuildProgram(p, 0, NULL, NULL, NULL, NULL); - if(err < 0) { - - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); - program_log = (char*) malloc(log_size + 1); - program_log[log_size] = '\0'; - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); - printf("%s\n", program_log); - free(program_log); - exit(1); - } - - return p; -} - -void ggml_v2_cl_init_legacy(void) { - cl_int err = 0; - char * GGML_V2_CLBLAST_PLATFORM = getenv("GGML_OPENCL_PLATFORM"); - char * GGML_V2_CLBLAST_DEVICE = getenv("GGML_OPENCL_DEVICE"); - int plat_num = (GGML_V2_CLBLAST_PLATFORM == NULL ? 0 : atoi(GGML_V2_CLBLAST_PLATFORM)); - int dev_num = (GGML_V2_CLBLAST_DEVICE == NULL ? 0 : atoi(GGML_V2_CLBLAST_DEVICE)); - printf("\nInitializing LEGACY CLBlast (First Run)..."); - printf("\nAttempting to use: Platform=%d, Device=%d (If invalid, program will crash)\n",plat_num,dev_num); - cl_uint num_platforms; - clGetPlatformIDs(0, NULL, &num_platforms); - cl_platform_id* platforms = (cl_platform_id*)malloc(num_platforms*sizeof(cl_platform_id)); - clGetPlatformIDs(num_platforms, platforms, NULL); - platform = platforms[plat_num]; - char platform_buffer[1024]; - clGetPlatformInfo(platform, CL_PLATFORM_NAME, sizeof(platform_buffer), &platform_buffer, NULL); - cl_uint num_devices; - clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices); - cl_device_id* devices = (cl_device_id*)malloc(num_devices*sizeof(cl_device_id)); - clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL); - device = devices[dev_num]; - char device_buffer[1024]; - clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_buffer), &device_buffer, NULL); - printf("Using Platform: %s Device: %s\n", platform_buffer, device_buffer); - context = clCreateContext(NULL, 1, &device, NULL, NULL, &err); - CL_CHECK(err, "clCreateContext"); - queue = clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err); - CL_CHECK(err, "clCreateCommandQueue"); - - free(platforms); - free(devices); - - program = build_program_from_source(context, device, clblast_dequant_legacy); - - // Prepare dequantize kernels - kernel_q4_0 = clCreateKernel(program, "dequantize_row_q4_0", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q4_1 = clCreateKernel(program, "dequantize_row_q4_1", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q4_2 = clCreateKernel(program, "dequantize_row_q4_2", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q4_3 = clCreateKernel(program, "dequantize_row_q4_3", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q5_0 = clCreateKernel(program, "dequantize_row_q5_0", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q5_1 = clCreateKernel(program, "dequantize_row_q5_1", &err); - CL_CHECK(err, "clCreateKernel"); - kernel_q8_0 = clCreateKernel(program, "dequantize_row_q8_0", &err); - CL_CHECK(err, "clCreateKernel"); -} - -static void ggml_v2_cl_malloc(size_t req_size, size_t* cur_size, cl_mem_flags flags, cl_mem* buf) { - if (req_size <= *cur_size) { - return; - } - - // Reallocate buffer with enough space - if (*cur_size > 0) { - clReleaseMemObject(*buf); - } - cl_int err; - *buf = clCreateBuffer(context, flags, req_size, NULL, &err); - *cur_size = req_size; - CL_CHECK(err, "clCreateBuffer"); -} - -void ggml_v2_cl_sgemm_wrapper_legacy( - const enum ggml_v2_blas_order order, const enum ggml_v2_blas_op trans_a, const enum ggml_v2_blas_op trans_b, - const int m, const int n, const int k, - const float alpha, const void *host_a, const int lda, - const float *host_b, const int ldb, const float beta, - float *host_c, const int ldc, const int btype) { - cl_int err = 0; - - cl_kernel kernel; - size_t global = n * k, local, size_qb; - bool dequant; - cl_block_q5_0* cl_host_b; - - switch (btype) { - case GGML_V2_TYPE_F32: - dequant = false; - break; - case GGML_V2_TYPE_Q4_0: - dequant = true; - kernel = kernel_q4_0; - local = 16; - size_qb = global * (sizeof(float) + local) / 32; - break; - case GGML_V2_TYPE_Q4_1: - dequant = true; - kernel = kernel_q4_1; - local = 16; - size_qb = global * (sizeof(float) * 2 + local) / 32; - break; - case GGML_V2_TYPE_Q4_2: - dequant = true; - kernel = kernel_q4_2; - local = 8; - size_qb = global * (sizeof(ggml_v2_fp16_t) + local) / 16; - break; - case GGML_V2_TYPE_Q4_3: - dequant = true; - kernel = kernel_q4_3; - local = 8; - size_qb = global * (sizeof(short) * 2 + local) / 16; - break; - case GGML_V2_TYPE_Q5_0: - dequant = true; - kernel = kernel_q5_0; - local = 16; - // For some reason OpenCL seems to be incapable of working with structs of size 22. - // 20 and 24 bytes are fine. Workaround to do the fp16 to fp32 step on CPU... - // TODO Find the reason, fix and remove workaround. - const block_q5_0* b = (const block_q5_0*) host_b; - cl_host_b = (cl_block_q5_0*) malloc(sizeof(cl_block_q5_0) * global / 32); - for (size_t i = 0; i < global / 32; i++) { - cl_host_b[i].d = ggml_v2_fp16_to_fp32(b[i].d); - memcpy(&cl_host_b[i].qh, b[i].qh, sizeof(uint32_t)); - memcpy(&cl_host_b[i].qs, b[i].qs, QK5_0 / 2); - } - host_b = (const float*) cl_host_b; - size_qb = global * (sizeof(float) + sizeof(uint32_t) + local) / 32; - break; - case GGML_V2_TYPE_Q5_1: - dequant = true; - kernel = kernel_q5_1; - local = 16; - size_qb = global * (sizeof(ggml_v2_fp16_t) * 2 + sizeof(uint32_t) + local) / 32; - break; - case GGML_V2_TYPE_Q8_0: - dequant = true; - kernel = kernel_q8_0; - local = 32; - size_qb = global * (sizeof(float) + local) / 32; - break; - default: - fprintf(stderr, "Error: Unsupported OpenCL btype %d\n", btype); - abort(); - } - - const size_t size_a = m * k * sizeof(float); - const size_t size_b = n * k * sizeof(float); - const size_t size_c = m * n * sizeof(float); - - // Prepare buffers - ggml_v2_cl_malloc(size_a, &cl_size_a, CL_MEM_READ_ONLY, &cl_buffer_a); - if (dequant) { - ggml_v2_cl_malloc(size_qb, &cl_size_qb, CL_MEM_READ_ONLY, &cl_buffer_qb); - } - ggml_v2_cl_malloc(size_b, &cl_size_b, CL_MEM_READ_WRITE, &cl_buffer_b); - ggml_v2_cl_malloc(size_c, &cl_size_c, CL_MEM_WRITE_ONLY, &cl_buffer_c); - - cl_event ev_a, ev_qb, ev_b; - - if (dequant) { - err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &cl_buffer_qb); - err |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &cl_buffer_b); - CL_CHECK(err, "clSetKernelArg"); - err = clEnqueueWriteBuffer(queue, cl_buffer_qb, CL_FALSE, 0, size_qb, host_b, 0, NULL, &ev_qb); - CL_CHECK(err, "clEnqueueWriteBuffer qb"); - } else { - err = clEnqueueWriteBuffer(queue, cl_buffer_b, CL_FALSE, 0, size_b, host_b, 0, NULL, &ev_b); - CL_CHECK(err, "clEnqueueWriteBuffer b"); - } - - err = clEnqueueWriteBuffer(queue, cl_buffer_a, CL_FALSE, 0, size_a, host_a, 0, NULL, &ev_a); - CL_CHECK(err, "clEnqueueWriteBuffer a"); - if (dequant) { - err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, &local, 1, &ev_qb, &ev_b); - CL_CHECK(err, "clEnqueueNDRangeKernel"); - clReleaseEvent(ev_qb); - } - clWaitForEvents(1, &ev_a); - clWaitForEvents(1, &ev_b); - clReleaseEvent(ev_a); - clReleaseEvent(ev_b); - - cl_event ev_sgemm; - CLBlastStatusCode status = CLBlastSgemm((CLBlastLayout)order, - (CLBlastTranspose)trans_a, (CLBlastTranspose)trans_b, - m, n, k, - alpha, - cl_buffer_a, 0, lda, - cl_buffer_b, 0, ldb, - beta, - cl_buffer_c, 0, ldc, - &queue, &ev_sgemm); - - if (status != CLBlastSuccess) { - fprintf(stderr, "Error: CLBlast SGEMM %d\n", status); - abort(); - } - - cl_event ev_c; - clEnqueueReadBuffer(queue, cl_buffer_c, CL_TRUE, 0, size_c, host_c, 1, &ev_sgemm, &ev_c); - - // Wait for completion - clWaitForEvents(1, &ev_c); - clReleaseEvent(ev_sgemm); - clReleaseEvent(ev_c); - if (btype == GGML_V2_TYPE_Q5_0) { - free((void*) cl_host_b); - } -} diff --git a/otherarch/ggml_v2-opencl-legacy.h b/otherarch/ggml_v2-opencl-legacy.h deleted file mode 100644 index bcfe670c9..000000000 --- a/otherarch/ggml_v2-opencl-legacy.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "ggml_v2-opencl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void ggml_v2_cl_init_legacy(void); - -void ggml_v2_cl_sgemm_wrapper_legacy(const enum ggml_v2_blas_order order, const enum ggml_v2_blas_op trans_a, const enum ggml_v2_blas_op trans_b, const int m, const int n, const int k, const float alpha, const void *host_a, const int lda, const float *host_b, const int ldb, const float beta, float *host_c, const int ldc, const int btype); - -#ifdef __cplusplus -} -#endif diff --git a/otherarch/ggml_v2-opencl.cpp b/otherarch/ggml_v2-opencl.cpp deleted file mode 100644 index 660d93baa..000000000 --- a/otherarch/ggml_v2-opencl.cpp +++ /dev/null @@ -1,1005 +0,0 @@ -#include "ggml_v2-opencl.h" - -#include -#include -#include - -#define CL_TARGET_OPENCL_VERSION 110 -#include -#include - -#include -#include -#include - -#include "ggml_v2.h" - -#define CL_DMMV_BLOCK_SIZE 32; - -#define MULTILINE_QUOTE(...) #__VA_ARGS__ -static std::string program_source = MULTILINE_QUOTE( - -typedef char int8_t; -typedef uchar uint8_t; -typedef int int32_t; -typedef uint uint32_t; - -struct block_q4_0 -{ - float d; - uint8_t qs[16]; -}; - -struct block_q4_1 -{ - float d; - float m; - uint8_t qs[16]; -}; - -struct __attribute__ ((packed)) block_q5_0 -{ - half d; - uint32_t qh; - uint8_t qs[16]; -}; - -struct block_q5_1 -{ - half d; - half m; - uint32_t qh; - uint8_t qs[16]; -}; - -struct block_q8_0 -{ - float d; - uint8_t qs[32]; -}; - - -__kernel void convert_fp16_to_fp32(__global half* x, __global float* y) { - const uint i = get_global_id(0); - - y[i] = vload_half(0, &x[i]); -} - -void dequantize_q4_0(__global const struct block_q4_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = x[ib].d; - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = (vi0 - 8)*d; - *v1 = (vi1 - 8)*d; -} -void dequantize_q4_1(__global const struct block_q4_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = x[ib].d; - const float m = x[ib].m; - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = vi0*d + m; - *v1 = vi1*d + m; -} -void dequantize_q5_0(__global const struct block_q5_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, (__global half*) &x[ib].d); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0) - 16; - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1) - 16; - - *v0 = x0*d; - *v1 = x1*d; -} -void dequantize_q5_1(__global const struct block_q5_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, (__global half*) &x[ib].d); - const float m = vload_half(0, (__global half*) &x[ib].m); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0); - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1); - - *v0 = x0*d + m; - *v1 = x1*d + m; -} -void dequantize_q8_0(__global const struct block_q8_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = x[ib].d; - - const int8_t vi0 = x[ib].qs[iqs + 0]; - const int8_t vi1 = x[ib].qs[iqs + 1]; - - *v0 = vi0*d; - *v1 = vi1*d; -} -static void convert_f16(__global half* x, const int ib, const int iqs, float* v0, float* v1){ - *v0 = vload_half(0, &x[ib + 0]); - *v1 = vload_half(0, &x[ib + 1]); -} -); - -static std::string dequant_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __global float* y) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0)*2; - - if (i >= get_global_size(0)) { - return; - } - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int ib = i/qk; // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - y[iybs + iqs + 0] = v0; - y[iybs + iqs + y_offset] = v1; -} -); - -static std::string dequant_mul_mat_vec_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __local float* tmp, __global float* y, __global float* dst, const int ncols) { - const int block_size = get_local_size(0); - const int row = get_global_id(0) / block_size; - const int tid = get_local_id(0); - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int y_offset = qr == 1 ? 1 : qk/2; - - tmp[tid] = 0; - - for (int i = 0; i < ncols/block_size; i += 2) { - const int col = i*block_size + 2*tid; - const int ib = (row*ncols + col)/qk; // block index - const int iqs = (col%qk)/qr; // quant index - const int iybs = col - col%qk; // y block start index - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - - // matrix multiplication - tmp[tid] += v0 * y[iybs + iqs + 0]; - tmp[tid] += v1 * y[iybs + iqs + y_offset]; - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=block_size/2; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} -); - -static std::array dequant_str_keys = { - "KERNEL_NAME", "X_TYPE", "QUANT_K", "QUANT_R", "DEQUANT_FUNC" -}; - -static std::array dequant_str_values = { - "dequantize_row_q4_0", "struct block_q4_0", "32", "2", "dequantize_q4_0", - "dequantize_row_q4_1", "struct block_q4_1", "32", "2", "dequantize_q4_1", - "dequantize_row_q5_0", "struct block_q5_0", "32", "2", "dequantize_q5_0", - "dequantize_row_q5_1", "struct block_q5_1", "32", "2", "dequantize_q5_1", - "dequantize_row_q8_0", "struct block_q8_0", "32", "1", "dequantize_q8_0", - "convert_row_f16", "half", "1", "1", "convert_f16" -}; - -static std::array dequant_mul_mat_vec_str_values = { - "dequantize_mul_mat_vec_q4_0", "struct block_q4_0", "32", "2", "dequantize_q4_0", - "dequantize_mul_mat_vec_q4_1", "struct block_q4_1", "32", "2", "dequantize_q4_1", - "dequantize_mul_mat_vec_q5_0", "struct block_q5_0", "32", "2", "dequantize_q5_0", - "dequantize_mul_mat_vec_q5_1", "struct block_q5_1", "32", "2", "dequantize_q5_1", - "dequantize_mul_mat_vec_q8_0", "struct block_q8_0", "32", "1", "dequantize_q8_0", - "convert_mul_mat_vec_f16", "half", "1", "1", "convert_f16" -}; - -static std::string& sreplace2(std::string& s, const std::string& from, const std::string& to) { - size_t pos = 0; - while ((pos = s.find(from, pos)) != std::string::npos) { - s.replace(pos, from.length(), to); - pos += to.length(); - } - return s; -} - -static std::string generate_kernels() { - std::stringstream src; - src << program_source << '\n'; - for (size_t i = 0; i < dequant_str_values.size(); i += dequant_str_keys.size()) { - std::string dequant_kernel = dequant_template; - std::string dmmv_kernel = dequant_mul_mat_vec_template; - for (size_t j = 0; j < dequant_str_keys.size(); j++) { - sreplace2(dequant_kernel, dequant_str_keys[j], dequant_str_values[i + j]); - sreplace2(dmmv_kernel, dequant_str_keys[j], dequant_mul_mat_vec_str_values[i + j]); - } - src << dequant_kernel << '\n'; - src << dmmv_kernel << '\n'; - } - return src.str(); -} - -#define CL_CHECK(err, name) \ - do { \ - cl_int err_ = (err); \ - if (err_ != CL_SUCCESS) { \ - fprintf(stderr, "OpenCL %s error %d at %s:%d\n", name, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n"); \ - exit(1); \ - } \ - } while (0) - -static cl_platform_id platform; -static cl_device_id device; -static cl_context context; -static cl_command_queue queue; -static cl_program program; -static cl_mem cl_buffer_a, cl_buffer_qb, cl_buffer_b, cl_buffer_c; -static size_t cl_size_a = 0, cl_size_qb = 0, cl_size_b = 0, cl_size_c = 0; -static cl_kernel convert_row_f16_cl; -static cl_kernel dequantize_row_q4_0_cl, dequantize_row_q4_1_cl, dequantize_row_q5_0_cl, dequantize_row_q5_1_cl, dequantize_row_q8_0_cl; -static cl_kernel dequantize_mul_mat_vec_q4_0_cl, dequantize_mul_mat_vec_q4_1_cl, dequantize_mul_mat_vec_q5_0_cl, dequantize_mul_mat_vec_q5_1_cl, dequantize_mul_mat_vec_q8_0_cl, convert_mul_mat_vec_f16_cl; -static bool fp16_support = false; - -static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { - cl_program p; - char *program_log; - size_t program_size, log_size; - int err; - - program_size = strlen(program_buffer); - - p = clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); - if(err < 0) { - fprintf(stderr, "OpenCL error creating program"); - exit(1); - } - - err = clBuildProgram(p, 0, NULL, NULL, NULL, NULL); - if(err < 0) { - - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); - program_log = (char*) malloc(log_size + 1); - program_log[log_size] = '\0'; - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); - printf("%s\n", program_log); - free(program_log); - exit(1); - } - - return p; -} - -void ggml_v2_cl_init(void) { - cl_int err = 0; - char * GGML_V2_CLBLAST_PLATFORM = getenv("GGML_OPENCL_PLATFORM"); - char * GGML_V2_CLBLAST_DEVICE = getenv("GGML_OPENCL_DEVICE"); - int plat_num = (GGML_V2_CLBLAST_PLATFORM == NULL ? 0 : atoi(GGML_V2_CLBLAST_PLATFORM)); - int dev_num = (GGML_V2_CLBLAST_DEVICE == NULL ? 0 : atoi(GGML_V2_CLBLAST_DEVICE)); - printf("\nInitializing LEGACY v2 CLBlast (First Run)..."); - printf("\nAttempting to use: Platform=%d, Device=%d (If invalid, program will crash)\n",plat_num,dev_num); - cl_uint num_platforms; - clGetPlatformIDs(0, NULL, &num_platforms); - cl_platform_id* platforms = (cl_platform_id*)malloc(num_platforms*sizeof(cl_platform_id)); - clGetPlatformIDs(num_platforms, platforms, NULL); - platform = platforms[plat_num]; - char platform_buffer[1024]; - clGetPlatformInfo(platform, CL_PLATFORM_NAME, sizeof(platform_buffer), &platform_buffer, NULL); - cl_uint num_devices; - clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices); - cl_device_id* devices = (cl_device_id*)malloc(num_devices*sizeof(cl_device_id)); - clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL); - device = devices[dev_num]; - char device_buffer[1024]; - clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_buffer), &device_buffer, NULL); - size_t ext_str_size; - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, 0, NULL, &ext_str_size); - char* ext_buffer = (char*) malloc(sizeof(char) * ext_str_size); - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ext_str_size, ext_buffer, NULL); - // Check if ext_buffer contains cl_khr_fp16 - for (size_t i = 0; i < ext_str_size - 12; i++) { - if (memcmp(ext_buffer + i, "cl_khr_fp16", 11) == 0) { - fp16_support = true; - break; - } - } - free(ext_buffer); - printf("Using Platform: %s Device: %s FP16: %d\n", platform_buffer, device_buffer, fp16_support); - fp16_support = false; - printf("CL FP16 temporarily disabled pending further optimization.\n"); - context = clCreateContext(NULL, 1, &device, NULL, NULL, &err); - CL_CHECK(err, "clCreateContext"); - queue = clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err); - CL_CHECK(err, "clCreateCommandQueue"); - - free(platforms); - free(devices); - - std::string kernel_src = generate_kernels(); - - program = build_program_from_source(context, device, kernel_src.c_str()); - - // FP16 to FP32 kernel - convert_row_f16_cl = clCreateKernel(program, "convert_row_f16", &err); - CL_CHECK(err, "clCreateKernel"); - - // Dequantize kernels - dequantize_row_q4_0_cl = clCreateKernel(program, "dequantize_row_q4_0", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_row_q4_1_cl = clCreateKernel(program, "dequantize_row_q4_1", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_row_q5_0_cl = clCreateKernel(program, "dequantize_row_q5_0", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_row_q5_1_cl = clCreateKernel(program, "dequantize_row_q5_1", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_row_q8_0_cl = clCreateKernel(program, "dequantize_row_q8_0", &err); - CL_CHECK(err, "clCreateKernel"); - - // dequant mul mat kernel - dequantize_mul_mat_vec_q4_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_0", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_mul_mat_vec_q4_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_1", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_mul_mat_vec_q5_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_0", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_mul_mat_vec_q5_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_1", &err); - CL_CHECK(err, "clCreateKernel"); - dequantize_mul_mat_vec_q8_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q8_0", &err); - CL_CHECK(err, "clCreateKernel"); - convert_mul_mat_vec_f16_cl = clCreateKernel(program, "convert_mul_mat_vec_f16", &err); - CL_CHECK(err, "clCreateKernel"); -} - -static void ggml_v2_cl_malloc(size_t req_size, size_t* cur_size, cl_mem_flags flags, cl_mem* buf) { - if (req_size <= *cur_size) { - return; - } - - // Reallocate buffer with enough space - if (*cur_size > 0) { - clReleaseMemObject(*buf); - } - cl_int err; - *buf = clCreateBuffer(context, flags, req_size, NULL, &err); - *cur_size = req_size; - CL_CHECK(err, "clCreateBuffer"); -} - -static cl_kernel* ggml_v2_get_to_fp32_cl(ggml_v2_type type) { - switch (type) { - case GGML_V2_TYPE_Q4_0: - return &dequantize_row_q4_0_cl; - case GGML_V2_TYPE_Q4_1: - return &dequantize_row_q4_1_cl; - case GGML_V2_TYPE_Q5_0: - return &dequantize_row_q5_0_cl; - case GGML_V2_TYPE_Q5_1: - return &dequantize_row_q5_1_cl; - case GGML_V2_TYPE_Q8_0: - return &dequantize_row_q8_0_cl; - case GGML_V2_TYPE_F16: - return &convert_row_f16_cl; - default: - return nullptr; - } -} - -static cl_kernel* ggml_v2_get_dequantize_mul_mat_vec_cl(ggml_v2_type type) { - switch (type) { - case GGML_V2_TYPE_Q4_0: - return &dequantize_mul_mat_vec_q4_0_cl; - case GGML_V2_TYPE_Q4_1: - return &dequantize_mul_mat_vec_q4_1_cl; - case GGML_V2_TYPE_Q5_0: - return &dequantize_mul_mat_vec_q5_0_cl; - case GGML_V2_TYPE_Q5_1: - return &dequantize_mul_mat_vec_q5_1_cl; - case GGML_V2_TYPE_Q8_0: - return &dequantize_mul_mat_vec_q8_0_cl; - case GGML_V2_TYPE_F16: - return &convert_mul_mat_vec_f16_cl; - default: - return nullptr; - } -} - -// buffer pool for cl -#define MAX_CL_BUFFERS 256 - -struct scoped_spin_lock { - std::atomic_flag& lock; - scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { - while (lock.test_and_set(std::memory_order_acquire)) { - ; // spin - } - } - ~scoped_spin_lock() { - lock.clear(std::memory_order_release); - } - scoped_spin_lock(const scoped_spin_lock&) = delete; - scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; -}; - -struct cl_buffer { - cl_mem mem; - size_t size = 0; -}; - -static cl_buffer g_cl_buffer_pool[MAX_CL_BUFFERS]; -static std::atomic_flag g_cl_pool_lock = ATOMIC_FLAG_INIT; - -static cl_mem ggml_v2_cl_pool_malloc(size_t size, size_t * actual_size, cl_mem_flags flags) { - scoped_spin_lock lock(g_cl_pool_lock); - cl_int err; - - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer& b = g_cl_buffer_pool[i]; - if (b.size > 0 && b.size >= size) { - cl_mem mem = b.mem; - *actual_size = b.size; - b.size = 0; - return mem; - } - } - cl_mem mem = clCreateBuffer(context, flags, size, NULL, &err); - CL_CHECK(err, "clCreateBuffer"); - *actual_size = size; - return mem; -} - -static void ggml_v2_cl_pool_free(cl_mem mem, size_t size) { - scoped_spin_lock lock(g_cl_pool_lock); - - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer& b = g_cl_buffer_pool[i]; - if (b.size == 0) { - b.mem = mem; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: cl buffer pool full, increase MAX_CL_BUFFERS\n"); - clReleaseMemObject(mem); -} - -static cl_int ggml_v2_cl_h2d_tensor_2d(cl_command_queue queue, cl_mem dst, size_t offset, const struct ggml_v2_tensor * src, uint64_t i3, uint64_t i2, cl_event* ev) { - cl_int err; - const uint64_t ne0 = src->ne[0]; - const uint64_t ne1 = src->ne[1]; - const uint64_t nb0 = src->nb[0]; - const uint64_t nb1 = src->nb[1]; - const uint64_t nb2 = src->nb[2]; - const uint64_t nb3 = src->nb[3]; - const enum ggml_v2_type type = src->type; - const size_t ts = ggml_v2_type_size(type); - const size_t bs = ggml_v2_blck_size(type); - - const void * x = (const void *) ((const char *) src->data + i2*nb2 + i3*nb3); - if (nb0 == ts && nb1 == ts*ne0/bs) { - err = clEnqueueWriteBuffer(queue, dst, CL_FALSE, offset, ne1*nb1, x, 0, NULL, ev); - return err; - } - if (nb0 == ts) { - const size_t buffer_origin[3] = { offset, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { ts*ne0/bs, ne1, 1 }; - err = clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, ts*ne0/bs, 0, nb1, 0, x, 0, NULL, ev); - return err; - } - for (uint64_t i1 = 0; i1 < ne1; i1++) { - // pretend the row is a matrix with cols=1 - const size_t buffer_origin[3] = { offset, i1, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { ts/bs, ne0, 1 }; - err = clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, 0, 0, nb0, 0, ((const char *)x) + i1*nb0, 0, NULL, ev); - if (err != CL_SUCCESS) { - break; - } - } - return err; -} - -static void ggml_v2_cl_mul_mat_f32(const ggml_v2_tensor * src0, const ggml_v2_tensor * src1, ggml_v2_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - size_t x_size, y_size, d_size; - cl_mem d_X = ggml_v2_cl_pool_malloc(sizeof(float) * x_ne, &x_size, CL_MEM_READ_ONLY); - cl_mem d_Y = ggml_v2_cl_pool_malloc(sizeof(float) * y_ne, &y_size, CL_MEM_READ_ONLY); - cl_mem d_D = ggml_v2_cl_pool_malloc(sizeof(float) * d_ne, &d_size, CL_MEM_WRITE_ONLY); - - cl_int err; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - // copy data to device - err = ggml_v2_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL); - err |= ggml_v2_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i03, i02, NULL); - CL_CHECK(err, "ggml_v2_cl_h2d_tensor_2d"); - - CL_CHECK(clFinish(queue), "clFinish"); - - // compute - cl_event ev_sgemm; - - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V2_ASSERT(false); - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - err = clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &ev_sgemm, NULL); - CL_CHECK(err, "clEnqueueReadBuffer"); - } - } - - ggml_v2_cl_pool_free(d_X, x_size); - ggml_v2_cl_pool_free(d_Y, y_size); - ggml_v2_cl_pool_free(d_D, d_size); -} - -static void ggml_v2_cl_mul_mat_f16(const ggml_v2_tensor * src0, const ggml_v2_tensor * src1, ggml_v2_tensor * dst, void * wdata, size_t /* wsize */) { - GGML_V2_ASSERT(fp16_support); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - - const int nb10 = src1->nb[0]; - const int nb11 = src1->nb[1]; - const int nb12 = src1->nb[2]; - const int nb13 = src1->nb[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const ggml_v2_fp16_t alpha = ggml_v2_fp32_to_fp16(1.0f); - const ggml_v2_fp16_t beta = ggml_v2_fp32_to_fp16(0.0f); - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - size_t x_size, y_size, d_size; - cl_mem d_X = ggml_v2_cl_pool_malloc(sizeof(ggml_v2_fp16_t) * x_ne, &x_size, CL_MEM_READ_ONLY); - cl_mem d_Y = ggml_v2_cl_pool_malloc(sizeof(ggml_v2_fp16_t) * y_ne, &y_size, CL_MEM_READ_ONLY); - cl_mem d_D = ggml_v2_cl_pool_malloc(sizeof(ggml_v2_fp16_t) * d_ne, &d_size, CL_MEM_WRITE_ONLY); - - cl_int err; - - bool src1_cont_rows = nb10 == sizeof(float); - bool src1_cont_cols = (size_t)nb11 == ne11*sizeof(float); - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - // copy src0 to device - err = ggml_v2_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL); - CL_CHECK(err, "ggml_v2_cl_h2d_tensor_2d"); - - // convert src1 to fp16 - // TODO: use multiple threads - ggml_v2_fp16_t * const tmp = (ggml_v2_fp16_t *) wdata + (ne11 * ne10) * (i03 * ne02 + i02); - char * src1i = (char *) src1->data + i03*nb13 + i02*nb12; - if (src1_cont_rows) { - if (src1_cont_cols) { - ggml_v2_fp32_to_fp16_row((float *) src1i, tmp, ne10*ne11); - } - else { - for (int64_t i01 = 0; i01 < ne11; i01++) { - ggml_v2_fp32_to_fp16_row((float *) (src1i + i01*nb11), tmp + i01*ne10, ne10); - } - } - } - else { - for (int64_t i01 = 0; i01 < ne11; i01++) { - for (int64_t i00 = 0; i00 < ne10; i00++) { - // very slow due to no inlining - tmp[i01*ne10 + i00] = ggml_v2_fp32_to_fp16(*(float *) (src1i + i01*nb11 + i00*nb10)); - } - } - } - - // copy src1 to device - err |= clEnqueueWriteBuffer(queue, d_Y, false, 0, sizeof(ggml_v2_fp16_t) * y_ne, tmp, 0, NULL, NULL); - CL_CHECK(err, "ggml_v2_cl_h2d_tensor_2d"); - - CL_CHECK(clFinish(queue), "clFinish"); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = (clblast::StatusCode)CLBlastHgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF16 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V2_ASSERT(false); - } - - // copy dst to host, then convert to float - err = clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(ggml_v2_fp16_t) * d_ne, tmp, 1, &ev_sgemm, NULL); - - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - - ggml_v2_fp16_to_fp32_row(tmp, d, d_ne); - } - } - - ggml_v2_cl_pool_free(d_X, x_size); - ggml_v2_cl_pool_free(d_Y, y_size); - ggml_v2_cl_pool_free(d_D, d_size); -} - -static void ggml_v2_cl_mul_mat_q_f32(const ggml_v2_tensor * src0, const ggml_v2_tensor * src1, ggml_v2_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - const ggml_v2_type type = src0->type; - const bool mul_mat_vec = ne11 == 1; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - const size_t q_sz = ggml_v2_type_size(type) * x_ne / ggml_v2_blck_size(type); - - size_t x_size, y_size, d_size, q_size; - cl_mem d_X; - if (!mul_mat_vec) { - d_X = ggml_v2_cl_pool_malloc(sizeof(float) * x_ne, &x_size, CL_MEM_READ_WRITE); - } - cl_mem d_Y = ggml_v2_cl_pool_malloc(sizeof(float) * y_ne, &y_size, CL_MEM_READ_ONLY); - cl_mem d_D = ggml_v2_cl_pool_malloc(sizeof(float) * d_ne, &d_size, CL_MEM_WRITE_ONLY); - cl_mem d_Q; - if (src0->backend == GGML_V2_BACKEND_CPU) { - d_Q = ggml_v2_cl_pool_malloc(q_sz, &q_size, CL_MEM_READ_ONLY); - } - - cl_kernel* to_fp32_cl = ggml_v2_get_to_fp32_cl(type); - cl_kernel* dmmv = ggml_v2_get_dequantize_mul_mat_vec_cl(type); - GGML_V2_ASSERT(to_fp32_cl != nullptr); - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev_sgemm; - - // copy src0 to device if necessary - if (src0->backend == GGML_V2_BACKEND_CPU) { - CL_CHECK(ggml_v2_cl_h2d_tensor_2d(queue, d_Q, 0, src0, i03, i02, NULL), "ggml_v2_cl_h2d_tensor_2d"); - } else if (src0->backend == GGML_V2_BACKEND_CL) { - d_Q = *(cl_mem*) src0->data; - } else { - GGML_V2_ASSERT(false); - } - if (mul_mat_vec) { // specialized dequantize_mul_mat_vec kernel - // copy src1 to device - CL_CHECK(ggml_v2_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i03, i02, NULL), "ggml_v2_cl_h2d_tensor_2d"); - - // compute - const size_t global = ne01 * CL_DMMV_BLOCK_SIZE; - const size_t local = CL_DMMV_BLOCK_SIZE; - const cl_int ncols = ne00; - CL_CHECK(clSetKernelArg(*dmmv, 0, sizeof(cl_mem), &d_Q), "clSetKernelArg"); - CL_CHECK(clSetKernelArg(*dmmv, 1, sizeof(float) * local, NULL), "clSetKernelArg"); - CL_CHECK(clSetKernelArg(*dmmv, 2, sizeof(cl_mem), &d_Y), "clSetKernelArg"); - CL_CHECK(clSetKernelArg(*dmmv, 3, sizeof(cl_mem), &d_D), "clSetKernelArg"); - CL_CHECK(clSetKernelArg(*dmmv, 4, sizeof(cl_int), &ncols), "clSetKernelArg"); - CL_CHECK(clFinish(queue), "clFinish"); - CL_CHECK(clEnqueueNDRangeKernel(queue, *dmmv, 1, NULL, &global, &local, 0, NULL, &ev_sgemm), "clEnqueueNDRangeKernel"); - } else { // general dequantization kernel + CLBlast matrix matrix multiplication - // convert src0 to fp32 on device - const size_t global = x_ne; - CL_CHECK(clSetKernelArg(*to_fp32_cl, 0, sizeof(cl_mem), &d_Q), "clSetKernelArg"); - CL_CHECK(clSetKernelArg(*to_fp32_cl, 1, sizeof(cl_mem), &d_X), "clSetKernelArg"); - CL_CHECK(clFinish(queue), "clFinish"); - CL_CHECK(clEnqueueNDRangeKernel(queue, *to_fp32_cl, 1, NULL, &global, NULL, 0, NULL, NULL), "clEnqueueNDRangeKernel"); - - // copy src1 to device - CL_CHECK(ggml_v2_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i03, i02, NULL), "ggml_v2_cl_h2d_tensor_2d"); - - // wait for conversion - CL_CHECK(clFinish(queue), "clFinish"); - - // compute - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nQF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V2_ASSERT(false); - } - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &ev_sgemm, NULL), "clEnqueueReadBuffer"); - clReleaseEvent(ev_sgemm); - } - } - - if (!mul_mat_vec) { - ggml_v2_cl_pool_free(d_X, x_size); - } - ggml_v2_cl_pool_free(d_Y, y_size); - ggml_v2_cl_pool_free(d_D, d_size); - if (src0->backend == GGML_V2_BACKEND_CPU) { - ggml_v2_cl_pool_free(d_Q, q_size); - } -} - - -bool ggml_v2_cl_can_mul_mat(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst) { - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - if ((src0->type == GGML_V2_TYPE_F32 || src0->type == GGML_V2_TYPE_F16 || ggml_v2_is_quantized(src0->type)) && - src1->type == GGML_V2_TYPE_F32 && - dst->type == GGML_V2_TYPE_F32 && - ((GetQuantsUnshuffled() && ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->backend == GGML_V2_BACKEND_CL)) { - return true; - } - - return false; -} - -bool ggml_v2_cl_mul_mat_use_f16(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * /* dst */) { - // If device doesn't support FP16 - if (!fp16_support) { - return false; - } - - size_t src0_sz = ggml_v2_nbytes(src0); - size_t src1_sz = ggml_v2_nbytes(src1); - - // mul_mat_q: src0 is converted to fp32 on device - size_t mul_mat_q_transfer = src0_sz + src1_sz; - - // mul_mat_f16: src1 is converted to fp16 on cpu - size_t mul_mat_f16_transfer = src0_sz + sizeof(ggml_v2_fp16_t) * ggml_v2_nelements(src1); - - // choose the smaller one to transfer to the device - // TODO: this is not always the best choice due to the overhead of converting to fp16 - return mul_mat_f16_transfer < mul_mat_q_transfer; -} - -void ggml_v2_cl_mul_mat(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst, void * wdata, size_t wsize) { - GGML_V2_ASSERT(ggml_v2_cl_can_mul_mat(src0, src1, dst)); - - if (src0->type == GGML_V2_TYPE_F32) { - ggml_v2_cl_mul_mat_f32(src0, src1, dst); - } - else if (src0->type == GGML_V2_TYPE_F16) { - if (ggml_v2_cl_mul_mat_use_f16(src0, src1, dst)) { - ggml_v2_cl_mul_mat_f16(src0, src1, dst, wdata, wsize); - } - else { - ggml_v2_cl_mul_mat_q_f32(src0, src1, dst); - } - } - else if (ggml_v2_is_quantized(src0->type)) { - ggml_v2_cl_mul_mat_q_f32(src0, src1, dst); - } - else { - GGML_V2_ASSERT(false); - } -} - -size_t ggml_v2_cl_mul_mat_get_wsize(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst) { - if (ggml_v2_cl_mul_mat_use_f16(src0, src1, dst)) { - return ggml_v2_nelements(src1) * sizeof(ggml_v2_fp16_t); - } - return 0; -} - -void ggml_v2_cl_transform_tensor(ggml_v2_tensor * tensor) { - const int64_t ne0 = tensor->ne[0]; - const int64_t ne1 = tensor->ne[1]; - const int64_t ne2 = tensor->ne[2]; - const int64_t ne3 = tensor->ne[3]; - - const ggml_v2_type type = tensor->type; - const size_t q_sz = ggml_v2_type_size(type) * ne0 * ne1 * ne2 * ne3 / ggml_v2_blck_size(type); - - size_t q_size; - cl_mem* dst = (cl_mem*) malloc(sizeof(cl_mem)); - *dst = ggml_v2_cl_pool_malloc(q_sz, &q_size, CL_MEM_READ_ONLY); - - // copy tensor to device - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - int i = i3*ne2 + i2; - CL_CHECK(ggml_v2_cl_h2d_tensor_2d(queue, *dst, i*ne0*ne1, tensor, i3, i2, NULL), "ggml_v2_cl_h2d_tensor_2d"); - } - } - - CL_CHECK(clFinish(queue), "clFinish"); - - tensor->data = dst; - tensor->backend = GGML_V2_BACKEND_CL; -} - -void ggml_v2_cl_sgemm_wrapper( - const enum ggml_v2_blas_order order, const enum ggml_v2_blas_op trans_a, const enum ggml_v2_blas_op trans_b, - const int m, const int n, const int k, - const float alpha, const void *host_a, const int lda, - const float *host_b, const int ldb, const float beta, - float *host_c, const int ldc, const int btype) { - cl_int err = 0; - - cl_kernel * kernel = ggml_v2_get_to_fp32_cl((ggml_v2_type)btype); - size_t global = n * k, local, size_qb; - bool dequant; - - switch (btype) { - case GGML_V2_TYPE_F32: - dequant = false; - break; - case GGML_V2_TYPE_Q4_0: - dequant = true; - local = 16; - size_qb = global * (sizeof(float) + local) / 32; - break; - case GGML_V2_TYPE_Q4_1: - dequant = true; - local = 16; - size_qb = global * (sizeof(float) * 2 + local) / 32; - break; - case GGML_V2_TYPE_Q5_0: - dequant = true; - local = 16; - size_qb = global * (sizeof(ggml_v2_fp16_t) + sizeof(uint32_t) + local) / 32; - break; - case GGML_V2_TYPE_Q5_1: - dequant = true; - local = 16; - size_qb = global * (sizeof(ggml_v2_fp16_t) * 2 + sizeof(uint32_t) + local) / 32; - break; - case GGML_V2_TYPE_Q8_0: - dequant = true; - local = 32; - size_qb = global * (sizeof(float) + local) / 32; - break; - default: - fprintf(stderr, "Error: Unsupported OpenCL btype %d\n", btype); - abort(); - } - - const size_t size_a = m * k * sizeof(float); - const size_t size_b = n * k * sizeof(float); - const size_t size_c = m * n * sizeof(float); - - // Prepare buffers - ggml_v2_cl_malloc(size_a, &cl_size_a, CL_MEM_READ_ONLY, &cl_buffer_a); - if (dequant) { - ggml_v2_cl_malloc(size_qb, &cl_size_qb, CL_MEM_READ_ONLY, &cl_buffer_qb); - } - ggml_v2_cl_malloc(size_b, &cl_size_b, CL_MEM_READ_WRITE, &cl_buffer_b); - ggml_v2_cl_malloc(size_c, &cl_size_c, CL_MEM_WRITE_ONLY, &cl_buffer_c); - - cl_event ev_a, ev_qb, ev_b; - - if (dequant) { - err = clSetKernelArg(*kernel, 0, sizeof(cl_mem), &cl_buffer_qb); - err |= clSetKernelArg(*kernel, 1, sizeof(cl_mem), &cl_buffer_b); - CL_CHECK(err, "clSetKernelArg"); - err = clEnqueueWriteBuffer(queue, cl_buffer_qb, CL_FALSE, 0, size_qb, host_b, 0, NULL, &ev_qb); - CL_CHECK(err, "clEnqueueWriteBuffer qb"); - } else { - err = clEnqueueWriteBuffer(queue, cl_buffer_b, CL_FALSE, 0, size_b, host_b, 0, NULL, &ev_b); - CL_CHECK(err, "clEnqueueWriteBuffer b"); - } - - err = clEnqueueWriteBuffer(queue, cl_buffer_a, CL_FALSE, 0, size_a, host_a, 0, NULL, &ev_a); - CL_CHECK(err, "clEnqueueWriteBuffer a"); - if (dequant) { - err = clEnqueueNDRangeKernel(queue, *kernel, 1, NULL, &global, &local, 1, &ev_qb, &ev_b); - CL_CHECK(err, "clEnqueueNDRangeKernel"); - clReleaseEvent(ev_qb); - } - clWaitForEvents(1, &ev_a); - clWaitForEvents(1, &ev_b); - clReleaseEvent(ev_a); - clReleaseEvent(ev_b); - - cl_event ev_sgemm; - CLBlastStatusCode status = CLBlastSgemm((CLBlastLayout)order, - (CLBlastTranspose)trans_a, (CLBlastTranspose)trans_b, - m, n, k, - alpha, - cl_buffer_a, 0, lda, - cl_buffer_b, 0, ldb, - beta, - cl_buffer_c, 0, ldc, - &queue, &ev_sgemm); - - if (status != CLBlastSuccess) { - fprintf(stderr, "Error: CLBlast SGEMM %d\n", status); - abort(); - } - - cl_event ev_c; - clEnqueueReadBuffer(queue, cl_buffer_c, CL_TRUE, 0, size_c, host_c, 1, &ev_sgemm, &ev_c); - - // Wait for completion - clWaitForEvents(1, &ev_c); - clReleaseEvent(ev_sgemm); - clReleaseEvent(ev_c); -} diff --git a/otherarch/ggml_v2-opencl.h b/otherarch/ggml_v2-opencl.h deleted file mode 100644 index c21de9186..000000000 --- a/otherarch/ggml_v2-opencl.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include "ggml_v2.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum ggml_v2_blas_order { - GGML_V2_BLAS_ORDER_ROW_MAJOR = 101, - GGML_V2_BLAS_ORDER_COLUMN_MAJOR = 102, -}; - -enum ggml_v2_blas_op { - GGML_V2_BLAS_OP_N = 111, - GGML_V2_BLAS_OP_T = 112, - GGML_V2_BLAS_OP_C = 113, -}; - -void ggml_v2_cl_init(void); - -bool ggml_v2_cl_can_mul_mat(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst); -size_t ggml_v2_cl_mul_mat_get_wsize(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst); -void ggml_v2_cl_mul_mat(const struct ggml_v2_tensor * src0, const struct ggml_v2_tensor * src1, struct ggml_v2_tensor * dst, void * wdata, size_t wsize); - -void * ggml_v2_cl_host_malloc(size_t size); -void ggml_v2_cl_host_free(void * ptr); - -void ggml_v2_cl_transform_tensor(struct ggml_v2_tensor * tensor); - -void ggml_v2_cl_sgemm_wrapper(const enum ggml_v2_blas_order order, const enum ggml_v2_blas_op trans_a, const enum ggml_v2_blas_op trans_b, const int m, const int n, const int k, const float alpha, const void *host_a, const int lda, const float *host_b, const int ldb, const float beta, float *host_c, const int ldc, const int btype); - -#ifdef __cplusplus -} -#endif diff --git a/otherarch/ggml_v2.c b/otherarch/ggml_v2.c index bcb04b991..bb9a309a6 100644 --- a/otherarch/ggml_v2.c +++ b/otherarch/ggml_v2.c @@ -140,10 +140,6 @@ inline static void* ggml_v2_aligned_malloc(size_t size) { #include "ggml_v2-cuda.h" #include "ggml_v2-cuda-legacy.h" #endif -#if defined(GGML_USE_CLBLAST) -#include "ggml_v2-opencl.h" -#include "ggml_v2-opencl-legacy.h" -#endif #undef MIN #undef MAX @@ -3904,15 +3900,6 @@ struct ggml_v2_context * ggml_v2_init(struct ggml_v2_init_params params) { { ggml_v2_init_cublas_legacy(); } -#elif defined(GGML_USE_CLBLAST) - if(quants_unshuffled) - { - ggml_v2_cl_init(); - } - else - { - ggml_v2_cl_init_legacy(); - } #endif is_first_call = false; diff --git a/otherarch/ggml_v3-opencl.cpp b/otherarch/ggml_v3-opencl.cpp deleted file mode 100644 index ac218bb0e..000000000 --- a/otherarch/ggml_v3-opencl.cpp +++ /dev/null @@ -1,1908 +0,0 @@ -#include "ggml_v3.h" -#include "ggml_v3-opencl.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define CL_TARGET_OPENCL_VERSION 110 -#include -#include - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -#define CL_DMMV_LOCAL_SIZE 32 - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 1 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -#define MULTILINE_QUOTE(...) #__VA_ARGS__ -static std::string program_source = MULTILINE_QUOTE( - -typedef char int8_t; -typedef uchar uint8_t; -typedef short int16_t; -typedef ushort uint16_t; -typedef int int32_t; -typedef uint uint32_t; - -struct __attribute__ ((packed)) block_q4_0 -{ - half d; - uint8_t qs[QK4_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q4_1 -{ - half d; - half m; - uint8_t qs[QK4_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_0 -{ - half d; - uint32_t qh; - uint8_t qs[QK5_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_1 -{ - half d; - half m; - uint32_t qh; - uint8_t qs[QK5_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q8_0 -{ - half d; - int8_t qs[QK8_0]; -}; - -struct __attribute__((packed)) block_q2_K -{ - uint8_t scales[16]; - uint8_t qs[64]; - half d; - half dmin; -}; - -struct __attribute__((packed)) block_q3_K -{ - uint8_t hmask[32]; - uint8_t qs[64]; - uint8_t scales[12]; - half d; -}; - -struct __attribute__((packed)) block_q4_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q5_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qh[32]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q6_K -{ - uint8_t ql[128]; - uint8_t qh[64]; - int8_t scales[16]; - half d; -}; - -__kernel void convert_fp16_to_fp32(__global half* x, __global float* y) { - const uint i = get_global_id(0); - - y[i] = vload_half(0, &x[i]); -} - -void dequantize_q4_0(__global const struct block_q4_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = (vi0 - 8)*d; - *v1 = (vi1 - 8)*d; -} -void dequantize_q4_1(__global const struct block_q4_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = vi0*d + m; - *v1 = vi1*d + m; -} -void dequantize_q5_0(__global const struct block_q5_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0) - 16; - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1) - 16; - - *v0 = x0*d; - *v1 = x1*d; -} -void dequantize_q5_1(__global const struct block_q5_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0); - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1); - - *v0 = x0*d + m; - *v1 = x1*d + m; -} -void dequantize_q8_0(__global const struct block_q8_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const int8_t vi0 = x[ib].qs[iqs + 0]; - const int8_t vi1 = x[ib].qs[iqs + 1]; - - *v0 = vi0*d; - *v1 = vi1*d; -} -void convert_f16(__global half* x, const int ib, const int iqs, float* v0, float* v1){ - *v0 = vload_half(0, &x[ib + 0]); - *v1 = vload_half(0, &x[ib + 1]); -} -); - -static std::string k_quants_source = MULTILINE_QUOTE( -inline void get_scale_min_k4(int j, const __global uint8_t *q, uint8_t *d, uint8_t *m) -{ - if (j < 4) - { - *d = q[j] & 63; - *m = q[j + 4] & 63; - } - else - { - *d = (q[j + 4] & 0xF) | ((q[j - 4] >> 6) << 4); - *m = (q[j + 4] >> 4) | ((q[j - 0] >> 6) << 4); - } -} - -__kernel void dequantize_block_q2_K(__global const struct block_q2_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int n = tid / 32; - const int l = tid - 32 * n; - const int is = 8 * n + l / 16; - - const uint8_t q = x[i].qs[32 * n + l]; - __global float *y = yy + get_group_id(0) * QK_K + 128 * n; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - y[l + 0] = dall * (x[i].scales[is + 0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is + 0] >> 4); - y[l + 32] = dall * (x[i].scales[is + 2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is + 2] >> 4); - y[l + 64] = dall * (x[i].scales[is + 4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is + 4] >> 4); - y[l + 96] = dall * (x[i].scales[is + 6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is + 6] >> 4); -} - -__kernel void dequantize_block_q3_K(__global const struct block_q3_K *x, __global float *yy) -{ - int r = get_local_id(0) / 4; - int i = get_group_id(0) + get_global_offset(0); - int tid = r / 2; - int is0 = r % 2; - int l0 = 16 * is0 + 4 * (get_local_id(0) % 4); - int n = tid / 4; - int j = tid - 4 * n; - - uint8_t m = 1 << (4 * n + j); - int is = 8 * n + 2 * j + is0; - int shift = 2 * j; - - int8_t us = is < 4 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 8] >> 0) & 3) << 4) - : is < 8 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 4] >> 2) & 3) << 4) - : is < 12 ? (x[i].scales[is - 8] >> 4) | (((x[i].scales[is + 0] >> 4) & 3) << 4) - : (x[i].scales[is - 8] >> 4) | (((x[i].scales[is - 4] >> 6) & 3) << 4); - float d_all = vload_half(0, &x[i].d); - float dl = d_all * (us - 32); - - __global float *y = yy + get_group_id(0) * QK_K + 128 * n + 32 * j; - const __global uint8_t *q = x[i].qs + 32 * n; - const __global uint8_t *hm = x[i].hmask; - - for (int l = l0; l < l0 + 4; ++l) - y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4)); -} - -__kernel void dequantize_block_q4_K(__global const struct block_q4_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 8; - const int ir = tid % 8; - const int is = 2 * il; - const int n = 4; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + n * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *q = x[i].qs + 32 * il + n * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - float d1 = dall * sc; - float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - float d2 = dall * sc; - float m2 = dmin * m; - for (int l = 0; l < n; ++l) - { - y[l + 0] = d1 * (q[l] & 0xF) - m1; - y[l + 32] = d2 * (q[l] >> 4) - m2; - } -} - -__kernel void dequantize_block_q5_K(__global const struct block_q5_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 16; - const int ir = tid % 16; - const int is = 2 * il; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + 2 * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *ql = x[i].qs + 32 * il + 2 * ir; - __global const uint8_t *qh = x[i].qh + 2 * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = dall * sc; - const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = dall * sc; - const float m2 = dmin * m; - - uint8_t hm = 1 << (2 * il); - y[0] = d1 * ((ql[0] & 0xF) + (qh[0] & hm ? 16 : 0)) - m1; - y[1] = d1 * ((ql[1] & 0xF) + (qh[1] & hm ? 16 : 0)) - m1; - hm <<= 1; - y[32] = d2 * ((ql[0] >> 4) + (qh[0] & hm ? 16 : 0)) - m2; - y[33] = d2 * ((ql[1] >> 4) + (qh[1] & hm ? 16 : 0)) - m2; -} - -__kernel void dequantize_block_q6_K(__global const struct block_q6_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int ip = tid / 32; - const int il = tid - 32 * ip; - const int is = 8 * ip + il / 16; - - __global float *y = yy + get_group_id(0) * QK_K + 128 * ip + il; - - const float d = vload_half(0, &x[i].d); - - __global const uint8_t *ql = x[i].ql + 64 * ip + il; - const uint8_t qh = x[i].qh[32 * ip + il]; - __global const int8_t *sc = x[i].scales + is; - - y[0] = d * sc[0] * ((int8_t)((ql[0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32); - y[64] = d * sc[4] * ((int8_t)((ql[0] >> 4) | (((qh >> 4) & 3) << 4)) - 32); - y[96] = d * sc[6] * ((int8_t)((ql[32] >> 4) | (((qh >> 6) & 3) << 4)) - 32); -} - -__kernel void dequantize_mul_mat_vec_q2_K(__global const struct block_q2_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q2_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 16/K_QUANTS_PER_ITERATION; - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int s_offset = 8*im; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; - - uint32_t aux[4]; - const uint8_t * d = (const uint8_t *)aux; - const uint8_t * m = (const uint8_t *)(aux + 2); - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint32_t * a = (__global const uint32_t *)(x[i].scales + s_offset); - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = a[1] & 0x0f0f0f0f; - aux[2] = (a[0] >> 4) & 0x0f0f0f0f; - aux[3] = (a[1] >> 4) & 0x0f0f0f0f; - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3) - + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3) - + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3) - + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3) - + y[l+16] * d[1] * ((q[l+16] >> 0) & 3) - + y[l+48] * d[3] * ((q[l+16] >> 2) & 3) - + y[l+80] * d[5] * ((q[l+16] >> 4) & 3) - +y[l+112] * d[7] * ((q[l+16] >> 6) & 3); - sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6] - + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7]; - - } - tmp[16 * ix + tid] += dall * sum1 - dmin * sum2; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q3_K(__global const struct block_q3_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q3_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop - const int step = 16/K_QUANTS_PER_ITERATION; - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0....15 or 0...7 - - const uint8_t m = 1 << (4*im); - - const int l0 = n*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int y_offset = 128*im + l0; - - uint16_t utmp[4]; - const int8_t * s = (const int8_t *)utmp; - - const uint16_t s_shift = 4*im; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - __global const uint8_t * h = x[i].hmask + l0; - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4); - utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4); - utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4); - utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4); - - const float d = vload_half(0, &x[i].d); - - float sum = 0; - for (int l = 0; l < n; ++l) { - sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4)) - + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4)) - + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4)) - + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4)); - sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4)) - + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4)) - + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4)) - + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4)); - } - tmp[16 * ix + tid] += d * sum; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q4_K(__global const struct block_q4_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - //to rename it later, just to test now - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; - - const int step = 8/K_QUANTS_PER_ITERATION; - - const int il = tid/step; // 0...3 - const int ir = tid - step*il;// 0...3 - const int n = 2*K_QUANTS_PER_ITERATION; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q4_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const uint8_t * q1 = x[i].qs + q_offset; - __global const uint8_t * q2 = q1 + 64; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 s = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - s.x += y1[l] * (q1[l] & 0xF); s.y += y1[l+32] * (q1[l] >> 4); - s.z += y2[l] * (q2[l] & 0xF); s.w += y2[l+32] * (q2[l] >> 4); - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp[16 * ix + tid] += dall * (s.x * sc[0] + s.y * sc[1] + s.z * sc[4] + s.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q5_K(__global const struct block_q5_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/2; // 0...15 - const int ix = get_local_id(0)%2; - - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 2; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - const uint8_t hm1 = 1 << (2*im); - const uint8_t hm2 = hm1 << 4; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q5_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += 2) { - - __global const uint8_t * ql1 = x[i].qs + q_offset; - __global const uint8_t * ql2 = ql1 + 64; - __global const uint8_t * qh = x[i].qh + l0; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 sum = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - sum.x += y1[l+ 0] * ((ql1[l+ 0] & 0xF) + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) - + y1[l+16] * ((ql1[l+16] & 0xF) + (qh[l+16] & (hm1 << 0) ? 16 : 0)); - sum.y += y1[l+32] * ((ql1[l+ 0] >> 4) + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) - + y1[l+48] * ((ql1[l+16] >> 4) + (qh[l+16] & (hm1 << 1) ? 16 : 0)); - sum.z += y2[l+ 0] * ((ql2[l+ 0] & 0xF) + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) - + y2[l+16] * ((ql2[l+16] & 0xF) + (qh[l+16] & (hm2 << 0) ? 16 : 0)); - sum.w += y2[l+32] * ((ql2[l+ 0] >> 4) + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) - + y2[l+48] * ((ql2[l+16] >> 4) + (qh[l+16] & (hm2 << 1) ? 16 : 0)); - smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] - + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; - } - tmp[16 * ix + tid] += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q6_K(__global const struct block_q6_K * xx, __local float* tmp, __global const float * yy, __global float * dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q6_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - -\n#if K_QUANTS_PER_ITERATION == 1\n - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 - const int is = 0; - -\n#else\n - - const int l0 = 4 * in; // 0, 4, 8, ..., 28 - const int is = in / 4; - -\n#endif\n - - const int ql_offset = 64*im + l0; - const int qh_offset = 32*im + l0; - const int s_offset = 8*im + is; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * ql = x[i].ql + ql_offset; - __global const uint8_t * qh = x[i].qh + qh_offset; - __global const int8_t * s = x[i].scales + s_offset; - - const float d = vload_half(0, &x[i].d); - -\n#if K_QUANTS_PER_ITERATION == 1\n - float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32) - + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32) - + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32) - + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32) - + y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32) - + y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32) - + y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32) - +y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32); - tmp[16 * ix + tid] += sum; -\n#else\n - float sum = 0; - for (int l = 0; l < 4; ++l) { - sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32) - + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32) - + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32) - + y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32); - } - tmp[16 * ix + tid] += sum; -\n#endif\n - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -); - - -static std::string dequant_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __global float* y) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0)*2; - - if (i >= get_global_size(0)) { - return; - } - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int ib = i/qk + get_global_offset(0); // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - y[iybs + iqs + 0] = v0; - y[iybs + iqs + y_offset] = v1; -} -); - -static std::string dequant_mul_mat_vec_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __local float* tmp, __global float* y, __global float* dst, const int ncols) { - const int local_size = get_local_size(0); - const int row = get_group_id(0); - const int tid = get_local_id(0); - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int col_step = local_size * 2; - const int y_offset = qr == 1 ? 1 : qk/2; - - x += get_global_offset(0); - - tmp[tid] = 0; - - for (int col = tid*2; col < ncols; col += col_step) { - const int ib = (row*ncols + col)/qk; // block index - const int iqs = (col%qk)/qr; // quant index - const int iybs = col - col%qk; // y block start index - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - - // matrix multiplication - tmp[tid] += v0 * y[iybs + iqs + 0]; - tmp[tid] += v1 * y[iybs + iqs + y_offset]; - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=local_size/2; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} -); - - -static std::string mul_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global TYPE* x, const int x_offset, __global TYPE* y, const int y_offset, __global TYPE* dst, const int dst_offset, const int ky) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0); - - if (i >= get_global_size(0)) { - return; - } - - dst[dst_offset + i] = x[x_offset + i] * y[y_offset + i%ky]; -} -); - -#define CL_CHECK(err) \ - do { \ - cl_int err_ = (err); \ - if (err_ != CL_SUCCESS) { \ - fprintf(stderr, "ggml_v3_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n");\ - exit(1); \ - } \ - } while (0) - -#define CLBLAST_CHECK(err) \ - do { \ - CLBlastStatusCode err_ = (err); \ - if (err_ != CLBlastSuccess) { \ - fprintf(stderr, "ggml_v3_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n");\ - exit(1); \ - } \ - } while (0) - -static std::array dequant_str_keys = { - "KERNEL_NAME", "X_TYPE", "QUANT_K", "QUANT_R", "DEQUANT_FUNC" -}; - -static std::array dequant_str_values = { - "dequantize_row_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_row_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_row_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_row_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_row_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_row_f16", "half", "1", "1", "convert_f16" -}; - -static std::array dequant_mul_mat_vec_str_values = { - "dequantize_mul_mat_vec_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_mul_mat_vec_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_mul_mat_vec_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_mul_mat_vec_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_mul_mat_vec_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_mul_mat_vec_f16", "half", "1", "1", "convert_f16" -}; - -static std::array mul_str_keys = { - "KERNEL_NAME", "TYPE" -}; -static std::array mul_str_values = { - "mul_f32", "float" -}; - -static std::string& replace(std::string& s, const std::string& from, const std::string& to) { - size_t pos = 0; - while ((pos = s.find(from, pos)) != std::string::npos) { - s.replace(pos, from.length(), to); - pos += to.length(); - } - return s; -} - -static std::string generate_kernels() { - std::stringstream src; - src << program_source << '\n'; - src << k_quants_source << '\n'; - for (size_t i = 0; i < dequant_str_values.size(); i += dequant_str_keys.size()) { - std::string dequant_kernel = dequant_template; - std::string dmmv_kernel = dequant_mul_mat_vec_template; - for (size_t j = 0; j < dequant_str_keys.size(); j++) { - replace(dequant_kernel, dequant_str_keys[j], dequant_str_values[i + j]); - replace(dmmv_kernel, dequant_str_keys[j], dequant_mul_mat_vec_str_values[i + j]); - } - src << dequant_kernel << '\n'; - src << dmmv_kernel << '\n'; - } - for (size_t i = 0; i < mul_str_values.size(); i += mul_str_keys.size()) { - std::string mul_kernel = mul_template; - for (size_t j = 0; j < mul_str_keys.size(); j++) { - replace(mul_kernel, mul_str_keys[j], mul_str_values[i + j]); - } - src << mul_kernel << '\n'; - } - - return src.str(); -} - -static cl_platform_id platform; -static cl_device_id device; -static cl_context context; -static cl_command_queue queue; -static cl_program program; -static cl_kernel convert_row_f16_cl; -static cl_kernel dequantize_row_q4_0_cl, dequantize_row_q4_1_cl, dequantize_row_q5_0_cl, dequantize_row_q5_1_cl, dequantize_row_q8_0_cl; -static cl_kernel dequantize_mul_mat_vec_q4_0_cl, dequantize_mul_mat_vec_q4_1_cl, dequantize_mul_mat_vec_q5_0_cl, dequantize_mul_mat_vec_q5_1_cl, dequantize_mul_mat_vec_q8_0_cl, convert_mul_mat_vec_f16_cl; -static cl_kernel dequantize_block_q2_k_cl, dequantize_block_q3_k_cl, dequantize_block_q4_k_cl, dequantize_block_q5_k_cl, dequantize_block_q6_k_cl; -static cl_kernel dequantize_mul_mat_vec_q2_K_cl, dequantize_mul_mat_vec_q3_K_cl, dequantize_mul_mat_vec_q4_K_cl, dequantize_mul_mat_vec_q5_K_cl, dequantize_mul_mat_vec_q6_K_cl; -static cl_kernel mul_f32_cl; -static bool fp16_support; - -static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { - cl_program p; - char *program_log; - size_t program_size; - size_t log_size; - int err; - - program_size = strlen(program_buffer); - - p = clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); - if(err < 0) { - fprintf(stderr, "OpenCL error creating program"); - exit(1); - } - - std::string compile_opts = "-cl-mad-enable -cl-unsafe-math-optimizations -cl-finite-math-only -cl-fast-relaxed-math " - "-DQK4_0=32 -DQR4_0=2 -DQK4_1=32 -DQR4_1=2 -DQK5_0=32 -DQR5_0=2 -DQK5_1=32 -DQR5_1=2 -DQK8_0=32 -DQR8_0=1 " - "-DQK_K=256 -DK_QUANTS_PER_ITERATION=" + std::to_string(K_QUANTS_PER_ITERATION); - - err = clBuildProgram(p, 0, NULL, compile_opts.c_str(), NULL, NULL); - if(err < 0) { - - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); - program_log = (char*) malloc(log_size + 1); - program_log[log_size] = '\0'; - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); - fprintf(stderr, "ggml_v3_opencl: kernel compile error:\n\n%s\n", program_log); - free(program_log); - exit(1); - } - - return p; -} - -void ggml_v3_cl_init(void) { - cl_int err; - - struct cl_device; - struct cl_platform { - cl_platform_id id; - unsigned number; - char name[128]; - char vendor[128]; - struct cl_device * devices; - unsigned n_devices; - struct cl_device * default_device; - }; - - struct cl_device { - struct cl_platform * platform; - cl_device_id id; - unsigned number; - cl_device_type type; - char name[128]; - }; - - enum { NPLAT = 16, NDEV = 16 }; - - struct cl_platform platforms[NPLAT]; - unsigned n_platforms = 0; - struct cl_device devices[NDEV]; - unsigned n_devices = 0; - struct cl_device * default_device = NULL; - - platform = NULL; - device = NULL; - - cl_platform_id platform_ids[NPLAT]; - CL_CHECK(clGetPlatformIDs(NPLAT, platform_ids, &n_platforms)); - - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - p->number = i; - p->id = platform_ids[i]; - CL_CHECK(clGetPlatformInfo(p->id, CL_PLATFORM_NAME, sizeof(p->name), &p->name, NULL)); - CL_CHECK(clGetPlatformInfo(p->id, CL_PLATFORM_VENDOR, sizeof(p->vendor), &p->vendor, NULL)); - - cl_device_id device_ids[NDEV]; - cl_int clGetDeviceIDsError = clGetDeviceIDs(p->id, CL_DEVICE_TYPE_ALL, NDEV, device_ids, &p->n_devices); - if (clGetDeviceIDsError == CL_DEVICE_NOT_FOUND) { - p->n_devices = 0; - } else { - CL_CHECK(clGetDeviceIDsError); - } - p->devices = p->n_devices > 0 ? &devices[n_devices] : NULL; - p->default_device = NULL; - - for (unsigned j = 0; j < p->n_devices; j++) { - struct cl_device * d = &devices[n_devices]; - d->number = n_devices++; - d->id = device_ids[j]; - d->platform = p; - CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_NAME, sizeof(d->name), &d->name, NULL)); - CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_TYPE, sizeof(d->type), &d->type, NULL)); - printf("\nPlatform:%d Device:%d - %s with %s",i,j,p->name,d->name); - - if (p->default_device == NULL && d->type == CL_DEVICE_TYPE_GPU) { - p->default_device = d; - } - } - - if (default_device == NULL && p->default_device != NULL) { - default_device = p->default_device; - } - } - - printf("\n\n"); - - if (n_devices == 0) { - fprintf(stderr, "ggml_v3_opencl: could find any OpenCL devices.\n"); - exit(1); - } - - char * user_platform_string = getenv("GGML_OPENCL_PLATFORM"); - char * user_device_string = getenv("GGML_OPENCL_DEVICE"); - int user_platform_number = -1; - int user_device_number = -1; - - unsigned n; - if (user_platform_string != NULL && sscanf(user_platform_string, " %u", &n) == 1 && n < n_platforms) { - user_platform_number = (int)n; - } - if (user_device_string != NULL && sscanf(user_device_string, " %u", &n) == 1 && n < n_devices) { - user_device_number = (int)n; - } - if (user_platform_number != -1 && user_device_number != -1) { - cl_platform* platform = &platforms[user_platform_number]; - if ((unsigned)user_device_number >= platform->n_devices) { - fprintf(stderr, "ggml_v3_opencl: invalid device number %d\n", user_device_number); - exit(1); - } - default_device = &platform->devices[user_device_number]; - } else { - - struct cl_device * selected_devices = devices; - unsigned n_selected_devices = n_devices; - - if (user_platform_number == -1 && user_platform_string != NULL && user_platform_string[0] != 0) { - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - if (strstr(p->name, user_platform_string) != NULL || - strstr(p->vendor, user_platform_string) != NULL) { - user_platform_number = (int)i; - break; - } - } - if (user_platform_number == -1) { - fprintf(stderr, "ggml_v3_opencl: no platform matching '%s' was found.\n", user_platform_string); - exit(1); - } - } - if (user_platform_number != -1) { - struct cl_platform * p = &platforms[user_platform_number]; - selected_devices = p->devices; - n_selected_devices = p->n_devices; - default_device = p->default_device; - if (n_selected_devices == 0) { - fprintf(stderr, "ggml_v3_opencl: selected platform '%s' does not have any devices.\n", p->name); - exit(1); - } - } - - if (user_device_number == -1 && user_device_string != NULL && user_device_string[0] != 0) { - for (unsigned i = 0; i < n_selected_devices; i++) { - struct cl_device * d = &selected_devices[i]; - if (strstr(d->name, user_device_string) != NULL) { - user_device_number = d->number; - break; - } - } - if (user_device_number == -1) { - fprintf(stderr, "ggml_v3_opencl: no device matching '%s' was found.\n", user_device_string); - exit(1); - } - } - if (user_device_number != -1) { - selected_devices = &devices[user_device_number]; - n_selected_devices = 1; - default_device = &selected_devices[0]; - } - - GGML_V3_ASSERT(n_selected_devices > 0); - - if (default_device == NULL) { - default_device = &selected_devices[0]; - } - } - - fprintf(stderr, "ggml_v3_opencl: selecting platform: '%s'\n", default_device->platform->name); - fprintf(stderr, "ggml_v3_opencl: selecting device: '%s'\n", default_device->name); - if (default_device->type != CL_DEVICE_TYPE_GPU) { - fprintf(stderr, "ggml_v3_opencl: warning, not a GPU: '%s'.\n", default_device->name); - } - - platform = default_device->platform->id; - device = default_device->id; - - size_t ext_str_size; - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, 0, NULL, &ext_str_size); - char *ext_buffer = (char *)alloca(ext_str_size + 1); - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ext_str_size, ext_buffer, NULL); - ext_buffer[ext_str_size] = '\0'; // ensure it is null terminated - // Check if ext_buffer contains cl_khr_fp16 - fp16_support = strstr(ext_buffer, "cl_khr_fp16") != NULL; - fprintf(stderr, "ggml_v3_opencl: device FP16 support: %s\n", fp16_support ? "true" : "false"); - fp16_support = false; - printf("CL FP16 temporarily disabled pending further optimization.\n"); - - cl_context_properties properties[] = { - (intptr_t)CL_CONTEXT_PLATFORM, (intptr_t)platform, 0 - }; - - CL_CHECK((context = clCreateContext(properties, 1, &device, NULL, NULL, &err), err)); - - CL_CHECK((queue = clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err), - (err != CL_INVALID_QUEUE_PROPERTIES && err != CL_INVALID_VALUE ? err : - (queue = clCreateCommandQueue(context, device, 0, &err), err) - ))); - - const std::string kernel_src = generate_kernels(); - - program = build_program_from_source(context, device, kernel_src.c_str()); - - // FP16 to FP32 kernel - CL_CHECK((convert_row_f16_cl = clCreateKernel(program, "convert_row_f16", &err), err)); - - // Dequantize kernels - CL_CHECK((dequantize_row_q4_0_cl = clCreateKernel(program, "dequantize_row_q4_0", &err), err)); - CL_CHECK((dequantize_row_q4_1_cl = clCreateKernel(program, "dequantize_row_q4_1", &err), err)); - CL_CHECK((dequantize_row_q5_0_cl = clCreateKernel(program, "dequantize_row_q5_0", &err), err)); - CL_CHECK((dequantize_row_q5_1_cl = clCreateKernel(program, "dequantize_row_q5_1", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_block_q2_k_cl = clCreateKernel(program, "dequantize_block_q2_K", &err), err)); - CL_CHECK((dequantize_block_q3_k_cl = clCreateKernel(program, "dequantize_block_q3_K", &err), err)); - CL_CHECK((dequantize_block_q4_k_cl = clCreateKernel(program, "dequantize_block_q4_K", &err), err)); - CL_CHECK((dequantize_block_q5_k_cl = clCreateKernel(program, "dequantize_block_q5_K", &err), err)); - CL_CHECK((dequantize_block_q6_k_cl = clCreateKernel(program, "dequantize_block_q6_K", &err), err)); - - // dequant mul mat kernel - CL_CHECK((dequantize_mul_mat_vec_q4_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q8_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q8_0", &err), err)); - CL_CHECK((convert_mul_mat_vec_f16_cl = clCreateKernel(program, "convert_mul_mat_vec_f16", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q2_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q2_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q3_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q3_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q6_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q6_K", &err), err)); - - // mul kernel - CL_CHECK((mul_f32_cl = clCreateKernel(program, "mul_f32", &err), err)); -} - -static cl_kernel* ggml_v3_get_to_fp32_cl(ggml_v3_type type) { - switch (type) { - case GGML_V3_TYPE_Q4_0: - return &dequantize_row_q4_0_cl; - case GGML_V3_TYPE_Q4_1: - return &dequantize_row_q4_1_cl; - case GGML_V3_TYPE_Q5_0: - return &dequantize_row_q5_0_cl; - case GGML_V3_TYPE_Q5_1: - return &dequantize_row_q5_1_cl; - case GGML_V3_TYPE_Q8_0: - return &dequantize_row_q8_0_cl; - case GGML_V3_TYPE_Q2_K: - return &dequantize_block_q2_k_cl; - case GGML_V3_TYPE_Q3_K: - return &dequantize_block_q3_k_cl; - case GGML_V3_TYPE_Q4_K: - return &dequantize_block_q4_k_cl; - case GGML_V3_TYPE_Q5_K: - return &dequantize_block_q5_k_cl; - case GGML_V3_TYPE_Q6_K: - return &dequantize_block_q6_k_cl; - case GGML_V3_TYPE_F16: - return &convert_row_f16_cl; - default: - return nullptr; - } -} - -static size_t ggml_v3_cl_global_denom(ggml_v3_type type) { - switch (type) { - case GGML_V3_TYPE_Q4_0: - case GGML_V3_TYPE_Q4_1: - case GGML_V3_TYPE_Q5_0: - case GGML_V3_TYPE_Q5_1: - case GGML_V3_TYPE_Q8_0: - return 1; - case GGML_V3_TYPE_Q2_K: - case GGML_V3_TYPE_Q3_K: - return 4; - case GGML_V3_TYPE_Q4_K: - return 8; - case GGML_V3_TYPE_Q5_K: - case GGML_V3_TYPE_Q6_K: - return 4; - case GGML_V3_TYPE_F16: - default: - return 1; - } -} - -static size_t ggml_v3_cl_local_size(ggml_v3_type type) { - switch (type) { - case GGML_V3_TYPE_Q4_0: - case GGML_V3_TYPE_Q4_1: - case GGML_V3_TYPE_Q5_0: - case GGML_V3_TYPE_Q5_1: - case GGML_V3_TYPE_Q8_0: - return 0; - case GGML_V3_TYPE_Q2_K: - case GGML_V3_TYPE_Q3_K: - return 64; - case GGML_V3_TYPE_Q4_K: - return 32; - case GGML_V3_TYPE_Q5_K: - case GGML_V3_TYPE_Q6_K: - return 64; - case GGML_V3_TYPE_F16: - default: - return 0; - } -} - -static cl_kernel* ggml_v3_get_dequantize_mul_mat_vec_cl(ggml_v3_type type) { - switch (type) { - case GGML_V3_TYPE_Q4_0: - return &dequantize_mul_mat_vec_q4_0_cl; - case GGML_V3_TYPE_Q4_1: - return &dequantize_mul_mat_vec_q4_1_cl; - case GGML_V3_TYPE_Q5_0: - return &dequantize_mul_mat_vec_q5_0_cl; - case GGML_V3_TYPE_Q5_1: - return &dequantize_mul_mat_vec_q5_1_cl; - case GGML_V3_TYPE_Q8_0: - return &dequantize_mul_mat_vec_q8_0_cl; - case GGML_V3_TYPE_F16: - return &convert_mul_mat_vec_f16_cl; - case GGML_V3_TYPE_Q2_K: - return &dequantize_mul_mat_vec_q2_K_cl; - case GGML_V3_TYPE_Q3_K: - return &dequantize_mul_mat_vec_q3_K_cl; - case GGML_V3_TYPE_Q4_K: - return &dequantize_mul_mat_vec_q4_K_cl; - case GGML_V3_TYPE_Q5_K: - return &dequantize_mul_mat_vec_q5_K_cl; - case GGML_V3_TYPE_Q6_K: - return &dequantize_mul_mat_vec_q6_K_cl; - default: - return nullptr; - } -} - -// buffer pool for cl -#define MAX_CL_BUFFERS 400 - -struct scoped_spin_lock { - std::atomic_flag& lock; - scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { - while (lock.test_and_set(std::memory_order_acquire)) { - ; // spin - } - } - ~scoped_spin_lock() { - lock.clear(std::memory_order_release); - } - scoped_spin_lock(const scoped_spin_lock&) = delete; - scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; -}; - -struct cl_buffer { - cl_mem mem; - size_t size = 0; -}; - -static cl_buffer g_cl_buffer_pool[MAX_CL_BUFFERS]; -static std::atomic_flag g_cl_pool_lock = ATOMIC_FLAG_INIT; - -static cl_mem ggml_v3_cl_pool_malloc(size_t size, size_t * actual_size) { - scoped_spin_lock lock(g_cl_pool_lock); - cl_int err; - - int best_i = -1; - size_t best_size = std::numeric_limits::max(); //smallest unused buffer that fits our needs - int worst_i = -1; - size_t worst_size = 0; //largest unused buffer seen so far - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer &b = g_cl_buffer_pool[i]; - if (b.size > 0 && b.size >= size && b.size < best_size) - { - best_i = i; - best_size = b.size; - } - if (b.size > 0 && b.size > worst_size) - { - worst_i = i; - worst_size = b.size; - } - } - if(best_i!=-1) //found the smallest buffer that fits our needs - { - cl_buffer& b = g_cl_buffer_pool[best_i]; - cl_mem mem = b.mem; - *actual_size = b.size; - b.size = 0; - return mem; - } - if(worst_i!=-1) //no buffer that fits our needs, resize largest one to save memory - { - cl_buffer& b = g_cl_buffer_pool[worst_i]; - cl_mem mem = b.mem; - b.size = 0; - clReleaseMemObject(mem); - } - cl_mem mem; - CL_CHECK((mem = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err), err)); - *actual_size = size; - return mem; -} - -static void ggml_v3_cl_pool_free(cl_mem mem, size_t size) { - scoped_spin_lock lock(g_cl_pool_lock); - - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer& b = g_cl_buffer_pool[i]; - if (b.size == 0) { - b.mem = mem; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: cl buffer pool full, increase MAX_CL_BUFFERS\n"); - clReleaseMemObject(mem); -} - -void ggml_v3_cl_free_data(const struct ggml_v3_tensor* tensor) { - if (tensor->backend != GGML_V3_BACKEND_GPU) { - return; - } - - cl_mem mem = (cl_mem)tensor->extra; - clReleaseMemObject(mem); -} - -static cl_int ggml_v3_cl_h2d_tensor_2d(cl_command_queue queue, cl_mem dst, size_t offset, const struct ggml_v3_tensor * src, uint64_t i3, uint64_t i2, cl_event* ev) { - cl_int err; - const uint64_t ne0 = src->ne[0]; - const uint64_t ne1 = src->ne[1]; - const uint64_t nb0 = src->nb[0]; - const uint64_t nb1 = src->nb[1]; - const uint64_t nb2 = src->nb[2]; - const uint64_t nb3 = src->nb[3]; - const enum ggml_v3_type type = src->type; - const size_t ts = ggml_v3_type_size(type); - const size_t bs = ggml_v3_blck_size(type); - const uint64_t row_size = ts*ne0/bs; - - const char * x = (const char *) src->data + i2*nb2 + i3*nb3; - if (nb0 == ts && nb1 == row_size) { - return clEnqueueWriteBuffer(queue, dst, CL_FALSE, offset, ne1*row_size, x, 0, NULL, ev); - } - if (nb0 == ts) { - const size_t buffer_origin[3] = { offset, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { row_size, ne1, 1 }; - return clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, row_size, 0, nb1, 0, x, 0, NULL, ev); - } - std::vector events; - if (ev && ne1>1) events.reserve(ne1-1); - for (uint64_t i1 = 0; i1 < ne1; i1++) { - // pretend the row is a matrix with cols=1 - const size_t buffer_origin[3] = { offset + i1*row_size, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { ts, ne0/bs, 1 }; - // if an event is requested, make the last write wait for all previous writes to complete - if (ev && i1) { - events.push_back(*ev); - } - cl_uint nevents = i1 == ne1-1 ? events.size() : 0U; - err = clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, ts, 0, nb0, 0, x + i1*nb1, nevents, nevents ? events.data() : nullptr, ev); - if (err != CL_SUCCESS) { - for (auto event : events) { - clReleaseEvent(event); - } - return err; - } - } - for (auto event : events) { - CL_CHECK(clReleaseEvent(event)); - } - return CL_SUCCESS; -} - -static void ggml_v3_cl_mul_f32(const ggml_v3_tensor * src0, const ggml_v3_tensor * src1, ggml_v3_tensor * dst) { - GGML_V3_ASSERT(src1->backend == GGML_V3_BACKEND_GPU); - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - size_t x_size; - size_t d_size; - - cl_mem d_X = ggml_v3_cl_pool_malloc(ne00 * ne01 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. - cl_mem d_D = ggml_v3_cl_pool_malloc(ne00 * ne01 * sizeof(float), &d_size); // dst - - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev; - - // copy src0 to device - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, &ev)); - - const int64_t i13 = i03%ne13; - const int64_t i12 = i02%ne12; - const int i1 = i13*ne12*ne11 + i12*ne11; - - cl_int x_offset = 0; - cl_int y_offset = i1*ne10; - cl_int d_offset = 0; - - size_t global = ne00 * ne01; - cl_int ky = ne10 * ne11; - - CL_CHECK(clSetKernelArg(mul_f32_cl, 0, sizeof(cl_mem), &d_X)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 1, sizeof(cl_int), &x_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 3, sizeof(cl_int), &y_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 4, sizeof(cl_mem), &d_D)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 5, sizeof(cl_int), &d_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 6, sizeof(cl_int), &ky)); - CL_CHECK(clEnqueueNDRangeKernel(queue, mul_f32_cl, 1, NULL, &global, NULL, 1, &ev, NULL)); - - CL_CHECK(clReleaseEvent(ev)); - CL_CHECK(clFinish(queue)); - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * ne00*ne01, d, 0, NULL, NULL)); - } - } - ggml_v3_cl_pool_free(d_X, x_size); - ggml_v3_cl_pool_free(d_D, d_size); -} - -void ggml_v3_cl_mul(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst) { - GGML_V3_ASSERT(src0->type == GGML_V3_TYPE_F32 && src1->type == GGML_V3_TYPE_F32 && dst->type == GGML_V3_TYPE_F32); - ggml_v3_cl_mul_f32(src0, src1, dst); -} - -static void ggml_v3_cl_mul_mat_f32(const ggml_v3_tensor * src0, const ggml_v3_tensor * src1, ggml_v3_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->backend == GGML_V3_BACKEND_GPU) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_v3_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = ggml_v3_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = ggml_v3_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->backend == GGML_V3_BACKEND_GPU) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // copy src1 to device - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - - CL_CHECK(clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V3_ASSERT(false); - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &ev_sgemm, NULL)); - } - } - } - } - - if (src0->backend != GGML_V3_BACKEND_GPU) { - ggml_v3_cl_pool_free(d_X, x_size); - } - ggml_v3_cl_pool_free(d_Y, y_size); - ggml_v3_cl_pool_free(d_D, d_size); -} - -static void ggml_v3_cl_mul_mat_f16(const ggml_v3_tensor * src0, const ggml_v3_tensor * src1, ggml_v3_tensor * dst, void * wdata, size_t wsize) { - GGML_V3_ASSERT(fp16_support); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb10 = src1->nb[0]; - const int nb11 = src1->nb[1]; - const int nb12 = src1->nb[2]; - const int nb13 = src1->nb[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const ggml_v3_fp16_t alpha = ggml_v3_fp32_to_fp16(1.0f); - const ggml_v3_fp16_t beta = ggml_v3_fp32_to_fp16(0.0f); - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - GGML_V3_ASSERT(wsize >= sizeof(ggml_v3_fp16_t) * y_ne); - GGML_V3_ASSERT(wsize >= sizeof(ggml_v3_fp16_t) * d_ne); - ggml_v3_fp16_t * const tmp = (ggml_v3_fp16_t *) wdata; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->backend == GGML_V3_BACKEND_GPU) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_v3_cl_pool_malloc(sizeof(ggml_v3_fp16_t) * x_ne, &x_size); - } - cl_mem d_Y = ggml_v3_cl_pool_malloc(sizeof(ggml_v3_fp16_t) * y_ne, &y_size); - cl_mem d_D = ggml_v3_cl_pool_malloc(sizeof(ggml_v3_fp16_t) * d_ne, &d_size); - - bool src1_cont_rows = nb10 == sizeof(float); - bool src1_cont_cols = (size_t)nb11 == ne11*sizeof(float); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->backend == GGML_V3_BACKEND_GPU) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // convert src1 to fp16 - // TODO: use multiple threads - char * src1i = (char *) src1->data + i13*nb13 + i12*nb12; - if (src1_cont_rows) { - if (src1_cont_cols) { - ggml_v3_fp32_to_fp16_row((float *) src1i, tmp, ne10*ne11); - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - ggml_v3_fp32_to_fp16_row((float *) (src1i + i11*nb11), tmp + i11*ne10, ne10); - } - } - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - for (int64_t i10 = 0; i10 < ne10; i10++) { - // very slow due to no inlining - tmp[i11*ne10 + i10] = ggml_v3_fp32_to_fp16(*(float *) (src1i + i11*nb11 + i10*nb10)); - } - } - } - - // copy src1 to device - CL_CHECK(clEnqueueWriteBuffer(queue, d_Y, false, 0, sizeof(ggml_v3_fp16_t) * y_ne, tmp, 0, NULL, NULL)); - - CL_CHECK(clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = (clblast::StatusCode)CLBlastHgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF16 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V3_ASSERT(false); - } - - // copy dst to host, then convert to float - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(ggml_v3_fp16_t) * d_ne, tmp, 1, &ev_sgemm, NULL)); - - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - - ggml_v3_fp16_to_fp32_row(tmp, d, d_ne); - } - } - } - } - - if (src0->backend != GGML_V3_BACKEND_GPU) { - ggml_v3_cl_pool_free(d_X, x_size); - } - ggml_v3_cl_pool_free(d_Y, y_size); - ggml_v3_cl_pool_free(d_D, d_size); -} - -static void ggml_v3_cl_mul_mat_q_f32(const ggml_v3_tensor * src0, const ggml_v3_tensor * src1, ggml_v3_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - const ggml_v3_type type = src0->type; - const bool mul_mat_vec = ne11 == 1 && ne00%2 == 0; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - const int x_bps = x_ne / ggml_v3_blck_size(type); // blocks per 2D slice - const size_t q_sz = ggml_v3_type_size(type) * x_bps; - - size_t x_size; - size_t y_size; - size_t d_size; - size_t q_size; - cl_mem d_X; - if (!mul_mat_vec) { - d_X = ggml_v3_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = ggml_v3_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = ggml_v3_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - cl_mem d_Q; - if (src0->backend == GGML_V3_BACKEND_CPU) { - d_Q = ggml_v3_cl_pool_malloc(q_sz, &q_size); - } - - cl_kernel* to_fp32_cl = ggml_v3_get_to_fp32_cl(type); - cl_kernel* dmmv = ggml_v3_get_dequantize_mul_mat_vec_cl(type); - GGML_V3_ASSERT(to_fp32_cl != nullptr); - - const size_t global_denom = ggml_v3_cl_global_denom(type); - const size_t local = mul_mat_vec ? CL_DMMV_LOCAL_SIZE : ggml_v3_cl_local_size(type); - - size_t ev_idx = 0; - std::vector events; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy and dequantize src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - // copy src0 to device if necessary - if (src0->backend == GGML_V3_BACKEND_CPU) { - events.emplace_back(); - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_Q, 0, src0, i03, i02, events.data() + ev_idx++)); - } else if (src0->backend == GGML_V3_BACKEND_GPU) { - d_Q = (cl_mem) src0->extra; - } else { - GGML_V3_ASSERT(false); - } - - if (!mul_mat_vec) { - // convert src0 to fp32 on device - const size_t global = x_ne / global_denom; - const size_t offset = src0->backend == GGML_V3_BACKEND_GPU ? (i03 * ne02 + i02) * x_bps : 0; - CL_CHECK(clSetKernelArg(*to_fp32_cl, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clSetKernelArg(*to_fp32_cl, 1, sizeof(cl_mem), &d_X)); - CL_CHECK(clEnqueueNDRangeKernel(queue, *to_fp32_cl, 1, &offset, &global, local > 0 ? &local : NULL, events.size(), !events.empty() ? events.data() : NULL, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - if (mul_mat_vec) { // specialized dequantize_mul_mat_vec kernel - // copy src1 to device - events.emplace_back(); - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, events.data() + ev_idx++)); - - // compute - const size_t global = ne01 * local; - const size_t offset = src0->backend == GGML_V3_BACKEND_GPU ? (i03 * ne02 + i02) * x_bps : 0; - const cl_int ncols = ne00; - events.emplace_back(); - CL_CHECK(clSetKernelArg(*dmmv, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clSetKernelArg(*dmmv, 1, sizeof(float) * local, NULL)); - CL_CHECK(clSetKernelArg(*dmmv, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clSetKernelArg(*dmmv, 3, sizeof(cl_mem), &d_D)); - CL_CHECK(clSetKernelArg(*dmmv, 4, sizeof(cl_int), &ncols)); - CL_CHECK(clEnqueueNDRangeKernel(queue, *dmmv, 1, &offset, &global, &local, events.size() - 1, events.data(), events.data() + ev_idx++)); - } else { // CLBlast matrix matrix multiplication - // copy src1 to device - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - - // wait for conversion - CL_CHECK(clFinish(queue)); - - // compute - events.emplace_back(); - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, events.data() + ev_idx++); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nQF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_V3_ASSERT(false); - } - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &events[events.size() - 1], NULL)); - for (auto *event : events) { - clReleaseEvent(event); - } - - ev_idx = 0; - events.clear(); - } - } - } - } - - if (!mul_mat_vec) { - ggml_v3_cl_pool_free(d_X, x_size); - } - ggml_v3_cl_pool_free(d_Y, y_size); - ggml_v3_cl_pool_free(d_D, d_size); - if (src0->backend == GGML_V3_BACKEND_CPU) { - ggml_v3_cl_pool_free(d_Q, q_size); - } -} - - -bool ggml_v3_cl_can_mul_mat(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst) { - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - if ((src0->type == GGML_V3_TYPE_F32 || src0->type == GGML_V3_TYPE_F16 || ggml_v3_is_quantized(src0->type)) && - src1->type == GGML_V3_TYPE_F32 && - dst->type == GGML_V3_TYPE_F32 && - ((ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->backend == GGML_V3_BACKEND_GPU)) { - return true; - } - - return false; -} - -static bool ggml_v3_cl_mul_mat_use_f16(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * /* dst */) { - // If device doesn't support FP16 - if (!fp16_support) { - return false; - } - - size_t src0_sz = ggml_v3_nbytes(src0); - size_t src1_sz = ggml_v3_nbytes(src1); - - // mul_mat_q: src0 is converted to fp32 on device - size_t mul_mat_q_transfer = src0_sz + src1_sz; - - // mul_mat_f16: src1 is converted to fp16 on cpu - size_t mul_mat_f16_transfer = src0_sz + sizeof(ggml_v3_fp16_t) * ggml_v3_nelements(src1); - - // choose the smaller one to transfer to the device - // TODO: this is not always the best choice due to the overhead of converting to fp16 - return mul_mat_f16_transfer < mul_mat_q_transfer; -} - -void ggml_v3_cl_mul_mat(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst, void * wdata, size_t wsize) { - GGML_V3_ASSERT(ggml_v3_cl_can_mul_mat(src0, src1, dst)); - - if (src0->type == GGML_V3_TYPE_F32) { - ggml_v3_cl_mul_mat_f32(src0, src1, dst); - } - else if (src0->type == GGML_V3_TYPE_F16) { - if (ggml_v3_cl_mul_mat_use_f16(src0, src1, dst)) { - ggml_v3_cl_mul_mat_f16(src0, src1, dst, wdata, wsize); - } - else { - ggml_v3_cl_mul_mat_q_f32(src0, src1, dst); - } - } - else if (ggml_v3_is_quantized(src0->type)) { - ggml_v3_cl_mul_mat_q_f32(src0, src1, dst); - } - else { - GGML_V3_ASSERT(false); - } -} - -size_t ggml_v3_cl_mul_mat_get_wsize(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst) { - if (src0->type == GGML_V3_TYPE_F16 && ggml_v3_cl_mul_mat_use_f16(src0, src1, dst)) { - return sizeof(ggml_v3_fp16_t) * std::max(src1->ne[0] * src1->ne[1], dst->ne[0] * dst->ne[1]); - } - return 0; -} - -void ggml_v3_cl_transform_tensor(void * data, ggml_v3_tensor * tensor) { - const int64_t ne0 = tensor->ne[0]; - const int64_t ne1 = tensor->ne[1]; - const int64_t ne2 = tensor->ne[2]; - const int64_t ne3 = tensor->ne[3]; - - const ggml_v3_type type = tensor->type; - const size_t s_sz = ggml_v3_type_size(type) * (size_t) (ne0 * ne1 / ggml_v3_blck_size(type)); - const size_t q_sz = s_sz * (size_t) (ne2 * ne3); - - size_t q_size; - cl_mem dst = ggml_v3_cl_pool_malloc(q_sz, &q_size); - - tensor->data = data; - // copy tensor to device - size_t offset = 0; - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - CL_CHECK(ggml_v3_cl_h2d_tensor_2d(queue, dst, offset, tensor, i3, i2, NULL)); - offset += s_sz; - } - } - - CL_CHECK(clFinish(queue)); - - tensor->extra = dst; - GGML_V3_ASSERT(tensor->backend == GGML_V3_BACKEND_GPU); -} \ No newline at end of file diff --git a/otherarch/ggml_v3-opencl.h b/otherarch/ggml_v3-opencl.h deleted file mode 100644 index 3aa499ba9..000000000 --- a/otherarch/ggml_v3-opencl.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "ggml_v3.h" - -#ifdef __cplusplus -extern "C" { -#endif - -GGML_V3_API void ggml_v3_cl_init(void); - -GGML_V3_API void ggml_v3_cl_mul(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst); -GGML_V3_API bool ggml_v3_cl_can_mul_mat(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst); -GGML_V3_API size_t ggml_v3_cl_mul_mat_get_wsize(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst); -GGML_V3_API void ggml_v3_cl_mul_mat(const struct ggml_v3_tensor * src0, const struct ggml_v3_tensor * src1, struct ggml_v3_tensor * dst, void * wdata, size_t wsize); - -GGML_V3_API void * ggml_v3_cl_host_malloc(size_t size); -GGML_V3_API void ggml_v3_cl_host_free(void * ptr); - -GGML_V3_API void ggml_v3_cl_free_data(const struct ggml_v3_tensor* tensor); - -GGML_V3_API void ggml_v3_cl_transform_tensor(void * data, struct ggml_v3_tensor * tensor); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/otherarch/ggml_v3b-opencl.cpp b/otherarch/ggml_v3b-opencl.cpp deleted file mode 100644 index 0ec647a57..000000000 --- a/otherarch/ggml_v3b-opencl.cpp +++ /dev/null @@ -1,2015 +0,0 @@ -#include "ggml.h" -#include "ggml_v3b-opencl.h" -#include "ggml-backend-impl.h" -#include "ggml-cpu.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define CL_TARGET_OPENCL_VERSION 120 -#include -#include - -#if defined(_MSC_VER) -#pragma warning(disable: 4244 4267) // possible loss of data -#endif - -#define CL_DMMV_LOCAL_SIZE 32 - -#ifndef K_QUANTS_PER_ITERATION -#define K_QUANTS_PER_ITERATION 1 -#else -static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2"); -#endif - -#define MULTILINE_QUOTE(...) #__VA_ARGS__ -static std::string program_source = MULTILINE_QUOTE( - -typedef char int8_t; -typedef uchar uint8_t; -typedef short int16_t; -typedef ushort uint16_t; -typedef int int32_t; -typedef uint uint32_t; - -struct __attribute__ ((packed)) block_q4_0 -{ - half d; - uint8_t qs[QK4_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q4_1 -{ - half d; - half m; - uint8_t qs[QK4_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_0 -{ - half d; - uint32_t qh; - uint8_t qs[QK5_0 / 2]; -}; - -struct __attribute__ ((packed)) block_q5_1 -{ - half d; - half m; - uint32_t qh; - uint8_t qs[QK5_1 / 2]; -}; - -struct __attribute__ ((packed)) block_q8_0 -{ - half d; - int8_t qs[QK8_0]; -}; - -struct __attribute__((packed)) block_q2_K -{ - uint8_t scales[16]; - uint8_t qs[64]; - half d; - half dmin; -}; - -struct __attribute__((packed)) block_q3_K -{ - uint8_t hmask[32]; - uint8_t qs[64]; - uint8_t scales[12]; - half d; -}; - -struct __attribute__((packed)) block_q4_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q5_K -{ - half d; - half dmin; - uint8_t scales[12]; - uint8_t qh[32]; - uint8_t qs[128]; -}; - -struct __attribute__((packed)) block_q6_K -{ - uint8_t ql[128]; - uint8_t qh[64]; - int8_t scales[16]; - half d; -}; - -__kernel void convert_fp16_to_fp32(__global half* x, __global float* y) { - const uint i = get_global_id(0); - - y[i] = vload_half(0, &x[i]); -} - -void dequantize_q4_0(__global const struct block_q4_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = (vi0 - 8)*d; - *v1 = (vi1 - 8)*d; -} -void dequantize_q4_1(__global const struct block_q4_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - const uint8_t vui = x[ib].qs[iqs]; - - const int8_t vi0 = vui & 0xF; - const int8_t vi1 = vui >> 4; - - *v0 = vi0*d + m; - *v1 = vi1*d + m; -} -void dequantize_q5_0(__global const struct block_q5_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0) - 16; - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1) - 16; - - *v0 = x0*d; - *v1 = x1*d; -} -void dequantize_q5_1(__global const struct block_q5_1* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - const float m = vload_half(0, &x[ib].m); - - uint32_t qh = x[ib].qh; - - const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; - const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; - - const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0); - const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1); - - *v0 = x0*d + m; - *v1 = x1*d + m; -} -void dequantize_q8_0(__global const struct block_q8_0* x, const int ib, const int iqs, float* v0, float* v1) { - const float d = vload_half(0, &x[ib].d); - - const int8_t vi0 = x[ib].qs[iqs + 0]; - const int8_t vi1 = x[ib].qs[iqs + 1]; - - *v0 = vi0*d; - *v1 = vi1*d; -} -void convert_f16(__global half* x, const int ib, const int iqs, float* v0, float* v1){ - *v0 = vload_half(0, &x[ib + 0]); - *v1 = vload_half(0, &x[ib + 1]); -} -); - -static std::string k_quants_source = MULTILINE_QUOTE( -inline void get_scale_min_k4(int j, const __global uint8_t *q, uint8_t *d, uint8_t *m) -{ - if (j < 4) - { - *d = q[j] & 63; - *m = q[j + 4] & 63; - } - else - { - *d = (q[j + 4] & 0xF) | ((q[j - 4] >> 6) << 4); - *m = (q[j + 4] >> 4) | ((q[j - 0] >> 6) << 4); - } -} - -__kernel void dequantize_block_q2_K(__global const struct block_q2_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int n = tid / 32; - const int l = tid - 32 * n; - const int is = 8 * n + l / 16; - - const uint8_t q = x[i].qs[32 * n + l]; - __global float *y = yy + get_group_id(0) * QK_K + 128 * n; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - y[l + 0] = dall * (x[i].scales[is + 0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is + 0] >> 4); - y[l + 32] = dall * (x[i].scales[is + 2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is + 2] >> 4); - y[l + 64] = dall * (x[i].scales[is + 4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is + 4] >> 4); - y[l + 96] = dall * (x[i].scales[is + 6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is + 6] >> 4); -} - -__kernel void dequantize_block_q3_K(__global const struct block_q3_K *x, __global float *yy) -{ - int r = get_local_id(0) / 4; - int i = get_group_id(0) + get_global_offset(0); - int tid = r / 2; - int is0 = r % 2; - int l0 = 16 * is0 + 4 * (get_local_id(0) % 4); - int n = tid / 4; - int j = tid - 4 * n; - - uint8_t m = 1 << (4 * n + j); - int is = 8 * n + 2 * j + is0; - int shift = 2 * j; - - int8_t us = is < 4 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 8] >> 0) & 3) << 4) - : is < 8 ? (x[i].scales[is - 0] & 0xF) | (((x[i].scales[is + 4] >> 2) & 3) << 4) - : is < 12 ? (x[i].scales[is - 8] >> 4) | (((x[i].scales[is + 0] >> 4) & 3) << 4) - : (x[i].scales[is - 8] >> 4) | (((x[i].scales[is - 4] >> 6) & 3) << 4); - float d_all = vload_half(0, &x[i].d); - float dl = d_all * (us - 32); - - __global float *y = yy + get_group_id(0) * QK_K + 128 * n + 32 * j; - const __global uint8_t *q = x[i].qs + 32 * n; - const __global uint8_t *hm = x[i].hmask; - - for (int l = l0; l < l0 + 4; ++l) - y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4)); -} - -__kernel void dequantize_block_q4_K(__global const struct block_q4_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 8; - const int ir = tid % 8; - const int is = 2 * il; - const int n = 4; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + n * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *q = x[i].qs + 32 * il + n * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - float d1 = dall * sc; - float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - float d2 = dall * sc; - float m2 = dmin * m; - for (int l = 0; l < n; ++l) - { - y[l + 0] = d1 * (q[l] & 0xF) - m1; - y[l + 32] = d2 * (q[l] >> 4) - m2; - } -} - -__kernel void dequantize_block_q5_K(__global const struct block_q5_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int il = tid / 16; - const int ir = tid % 16; - const int is = 2 * il; - - __global float *y = yy + get_group_id(0) * QK_K + 64 * il + 2 * ir; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint8_t *ql = x[i].qs + 32 * il + 2 * ir; - __global const uint8_t *qh = x[i].qh + 2 * ir; - - uint8_t sc, m; - get_scale_min_k4(is + 0, x[i].scales, &sc, &m); - const float d1 = dall * sc; - const float m1 = dmin * m; - get_scale_min_k4(is + 1, x[i].scales, &sc, &m); - const float d2 = dall * sc; - const float m2 = dmin * m; - - uint8_t hm = 1 << (2 * il); - y[0] = d1 * ((ql[0] & 0xF) + (qh[0] & hm ? 16 : 0)) - m1; - y[1] = d1 * ((ql[1] & 0xF) + (qh[1] & hm ? 16 : 0)) - m1; - hm <<= 1; - y[32] = d2 * ((ql[0] >> 4) + (qh[0] & hm ? 16 : 0)) - m2; - y[33] = d2 * ((ql[1] >> 4) + (qh[1] & hm ? 16 : 0)) - m2; -} - -__kernel void dequantize_block_q6_K(__global const struct block_q6_K *x, __global float *yy) -{ - const int i = get_group_id(0) + get_global_offset(0); - const int tid = get_local_id(0); - const int ip = tid / 32; - const int il = tid - 32 * ip; - const int is = 8 * ip + il / 16; - - __global float *y = yy + get_group_id(0) * QK_K + 128 * ip + il; - - const float d = vload_half(0, &x[i].d); - - __global const uint8_t *ql = x[i].ql + 64 * ip + il; - const uint8_t qh = x[i].qh[32 * ip + il]; - __global const int8_t *sc = x[i].scales + is; - - y[0] = d * sc[0] * ((int8_t)((ql[0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32); - y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32); - y[64] = d * sc[4] * ((int8_t)((ql[0] >> 4) | (((qh >> 4) & 3) << 4)) - 32); - y[96] = d * sc[6] * ((int8_t)((ql[32] >> 4) | (((qh >> 6) & 3) << 4)) - 32); -} - -__kernel void dequantize_mul_mat_vec_q2_K(__global const struct block_q2_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q2_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int step = 16/K_QUANTS_PER_ITERATION; - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int s_offset = 8*im; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; - - uint32_t aux[4]; - const uint8_t * d = (const uint8_t *)aux; - const uint8_t * m = (const uint8_t *)(aux + 2); - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint32_t * a = (__global const uint32_t *)(x[i].scales + s_offset); - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = a[1] & 0x0f0f0f0f; - aux[2] = (a[0] >> 4) & 0x0f0f0f0f; - aux[3] = (a[1] >> 4) & 0x0f0f0f0f; - - float sum1 = 0, sum2 = 0; - for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { - sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3) - + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3) - + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3) - + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3) - + y[l+16] * d[1] * ((q[l+16] >> 0) & 3) - + y[l+48] * d[3] * ((q[l+16] >> 2) & 3) - + y[l+80] * d[5] * ((q[l+16] >> 4) & 3) - +y[l+112] * d[7] * ((q[l+16] >> 6) & 3); - sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6] - + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7]; - - } - tmp[16 * ix + tid] += dall * sum1 - dmin * sum2; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q3_K(__global const struct block_q3_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q3_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0,1 - - const int n = K_QUANTS_PER_ITERATION; // iterations in the inner loop - const int step = 16/K_QUANTS_PER_ITERATION; - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0....15 or 0...7 - - const uint8_t m = 1 << (4*im); - - const int l0 = n*in; // 0...15 or 0...14 in steps of 2 - const int q_offset = 32*im + l0; - const int y_offset = 128*im + l0; - - uint16_t utmp[4]; - const int8_t * s = (const int8_t *)utmp; - - const uint16_t s_shift = 4*im; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * q = x[i].qs + q_offset; - __global const uint8_t * h = x[i].hmask + l0; - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4); - utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4); - utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4); - utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4); - - const float d = vload_half(0, &x[i].d); - - float sum = 0; - for (int l = 0; l < n; ++l) { - sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4)) - + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4)) - + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4)) - + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4)); - sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4)) - + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4)) - + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4)) - + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4)); - } - tmp[16 * ix + tid] += d * sum; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q4_K(__global const struct block_q4_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - //to rename it later, just to test now - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...15 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; - - const int step = 8/K_QUANTS_PER_ITERATION; - - const int il = tid/step; // 0...3 - const int ir = tid - step*il;// 0...3 - const int n = 2*K_QUANTS_PER_ITERATION; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q4_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const uint8_t * q1 = x[i].qs + q_offset; - __global const uint8_t * q2 = q1 + 64; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 s = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - s.x += y1[l] * (q1[l] & 0xF); s.y += y1[l+32] * (q1[l] >> 4); - s.z += y2[l] * (q2[l] & 0xF); s.w += y2[l+32] * (q2[l] >> 4); - smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; - } - tmp[16 * ix + tid] += dall * (s.x * sc[0] + s.y * sc[1] + s.z * sc[4] + s.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q5_K(__global const struct block_q5_K * xx, __local float* tmp, __global float* yy, __global float* dst, const int ncols) { - - const uint16_t kmask1 = 0x3f3f; - const uint16_t kmask2 = 0x0f0f; - const uint16_t kmask3 = 0xc0c0; - - const int row = get_group_id(0); - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - const int tid = get_local_id(0)/2; // 0...15 - const int ix = get_local_id(0)%2; - - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 2; - - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; - - const uint8_t hm1 = 1 << (2*im); - const uint8_t hm2 = hm1 << 4; - - uint16_t aux[4]; - const uint8_t * sc = (const uint8_t *)aux; - - __global const struct block_q5_K * x = xx + ib0; - - tmp[16 * ix + tid] = 0; - - for (int i = ix; i < num_blocks_per_row; i += 2) { - - __global const uint8_t * ql1 = x[i].qs + q_offset; - __global const uint8_t * ql2 = ql1 + 64; - __global const uint8_t * qh = x[i].qh + l0; - __global const float * y1 = yy + i*QK_K + y_offset; - __global const float * y2 = y1 + 128; - - const float dall = vload_half(0, &x[i].d); - const float dmin = vload_half(0, &x[i].dmin); - - __global const uint16_t * a = (__global const uint16_t *)x[i].scales; - aux[0] = a[im+0] & kmask1; - aux[1] = a[im+2] & kmask1; - aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); - aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); - - float4 sum = (float4)(0.f); - float smin = 0; - for (int l = 0; l < n; ++l) { - sum.x += y1[l+ 0] * ((ql1[l+ 0] & 0xF) + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) - + y1[l+16] * ((ql1[l+16] & 0xF) + (qh[l+16] & (hm1 << 0) ? 16 : 0)); - sum.y += y1[l+32] * ((ql1[l+ 0] >> 4) + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) - + y1[l+48] * ((ql1[l+16] >> 4) + (qh[l+16] & (hm1 << 1) ? 16 : 0)); - sum.z += y2[l+ 0] * ((ql2[l+ 0] & 0xF) + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) - + y2[l+16] * ((ql2[l+16] & 0xF) + (qh[l+16] & (hm2 << 0) ? 16 : 0)); - sum.w += y2[l+32] * ((ql2[l+ 0] >> 4) + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) - + y2[l+48] * ((ql2[l+16] >> 4) + (qh[l+16] & (hm2 << 1) ? 16 : 0)); - smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] - + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; - } - tmp[16 * ix + tid] += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin; - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -__kernel void dequantize_mul_mat_vec_q6_K(__global const struct block_q6_K * xx, __local float* tmp, __global const float * yy, __global float * dst, const int ncols) { - - const int row = get_group_id(0); - - const int num_blocks_per_row = ncols / QK_K; - const int ib0 = row*num_blocks_per_row + get_global_offset(0); - - __global const struct block_q6_K * x = xx + ib0; - - const int tid = get_local_id(0)/K_QUANTS_PER_ITERATION; // 0...31 or 0...16 - const int ix = get_local_id(0)%K_QUANTS_PER_ITERATION; // 0 or 0, 1 - - const int step = 16/K_QUANTS_PER_ITERATION; // 16 or 8 - - const int im = tid/step; // 0 or 1. 0 computes 0..., 1 computes 128... - const int in = tid - step*im; // 0...15 or 0...7 - -\n#if K_QUANTS_PER_ITERATION == 1\n - const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 - const int is = 0; - -\n#else\n - - const int l0 = 4 * in; // 0, 4, 8, ..., 28 - const int is = in / 4; - -\n#endif\n - - const int ql_offset = 64*im + l0; - const int qh_offset = 32*im + l0; - const int s_offset = 8*im + is; - const int y_offset = 128*im + l0; - - tmp[16 * ix + tid] = 0; // partial sum for thread in warp - - for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - - __global const float * y = yy + i * QK_K + y_offset; - __global const uint8_t * ql = x[i].ql + ql_offset; - __global const uint8_t * qh = x[i].qh + qh_offset; - __global const int8_t * s = x[i].scales + s_offset; - - const float d = vload_half(0, &x[i].d); - -\n#if K_QUANTS_PER_ITERATION == 1\n - float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32) - + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32) - + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32) - + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32) - + y[64] * s[4] * d * ((int8_t)((ql[ 0] >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32) - + y[80] * s[5] * d * ((int8_t)((ql[16] >> 4) | ((qh[16] & 0x30) >> 0)) - 32) - + y[96] * s[6] * d * ((int8_t)((ql[32] >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32) - +y[112] * s[7] * d * ((int8_t)((ql[48] >> 4) | ((qh[16] & 0xc0) >> 2)) - 32); - tmp[16 * ix + tid] += sum; -\n#else\n - float sum = 0; - for (int l = 0; l < 4; ++l) { - sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32) - + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32) - + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32) - + y[l+96] * s[6] * d * ((int8_t)((ql[l+32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32); - } - tmp[16 * ix + tid] += sum; -\n#endif\n - - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=16; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} -); - - -std::string dequant_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __global float* y) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0)*2; - - if (i >= get_global_size(0)) { - return; - } - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int ib = i/qk + get_global_offset(0); // block index - const int iqs = (i%qk)/qr; // quant index - const int iybs = i - i%qk; // y block start index - const int y_offset = qr == 1 ? 1 : qk/2; - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - y[iybs + iqs + 0] = v0; - y[iybs + iqs + y_offset] = v1; -} -); - -std::string dequant_mul_mat_vec_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global X_TYPE* x, __local float* tmp, __global float* y, __global float* dst, const int ncols) { - const int local_size = get_local_size(0); - const int row = get_group_id(0); - const int tid = get_local_id(0); - - const uint qk = QUANT_K; - const uint qr = QUANT_R; - - const int col_step = local_size * 2; - const int y_offset = qr == 1 ? 1 : qk/2; - - x += get_global_offset(0); - - tmp[tid] = 0; - - for (int col = tid*2; col < ncols; col += col_step) { - const int ib = (row*ncols + col)/qk; // block index - const int iqs = (col%qk)/qr; // quant index - const int iybs = col - col%qk; // y block start index - - // dequantize - float v0, v1; - DEQUANT_FUNC(x, ib, iqs, &v0, &v1); - - // matrix multiplication - tmp[tid] += v0 * y[iybs + iqs + 0]; - tmp[tid] += v1 * y[iybs + iqs + y_offset]; - } - - // sum up partial sums and write back result - barrier(CLK_LOCAL_MEM_FENCE); - for (int s=local_size/2; s>0; s>>=1) { - if (tid < s) { - tmp[tid] += tmp[tid + s]; - } - barrier(CLK_LOCAL_MEM_FENCE); - } - if (tid == 0) { - dst[row] = tmp[0]; - } -} - -); - - -std::string mul_template = MULTILINE_QUOTE( -__kernel void KERNEL_NAME(__global TYPE* x, const int x_offset, __global TYPE* y, const int y_offset, __global TYPE* dst, const int dst_offset, const int ky) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0); - - if (i >= get_global_size(0)) { - return; - } - - dst[dst_offset + i] = x[x_offset + i] * y[y_offset + i%ky]; -} -); - -std::string add_template = MULTILINE_QUOTE( -__kernel void add_f32(__global float * x, const int x_offset, __global float * y, const int y_offset, __global float * dst, const int dst_offset, const int ky) { - const int i = get_group_id(0)*get_local_size(0) + get_local_id(0); - - if (i >= get_global_size(0)) { - return; - } - - dst[dst_offset + i] = x[x_offset + i] + y[y_offset + i%ky]; -} -); - -#define CL_CHECK(err) \ - do { \ - cl_int err_ = (err); \ - if (err_ != CL_SUCCESS) { \ - fprintf(stderr, "ggml_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n");\ - exit(1); \ - } \ - } while (0) - -#define CLBLAST_CHECK(err) \ - do { \ - CLBlastStatusCode err_ = (err); \ - if (err_ != CLBlastSuccess) { \ - fprintf(stderr, "ggml_opencl: %s error %d at %s:%d\n", \ - #err, err_, __FILE__, __LINE__); \ - fprintf(stderr, "You may be out of VRAM. Please check if you have enough.\n");\ - exit(1); \ - } \ - } while (0) - -std::array dequant_str_keys = { - "KERNEL_NAME", "X_TYPE", "QUANT_K", "QUANT_R", "DEQUANT_FUNC" -}; - -std::array dequant_str_values = { - "dequantize_row_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_row_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_row_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_row_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_row_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_row_f16", "half", "1", "1", "convert_f16" -}; - -std::array dequant_mul_mat_vec_str_values = { - "dequantize_mul_mat_vec_q4_0", "struct block_q4_0", "QK4_0", "QR4_0", "dequantize_q4_0", - "dequantize_mul_mat_vec_q4_1", "struct block_q4_1", "QK4_1", "QR4_1", "dequantize_q4_1", - "dequantize_mul_mat_vec_q5_0", "struct block_q5_0", "QK5_0", "QR5_0", "dequantize_q5_0", - "dequantize_mul_mat_vec_q5_1", "struct block_q5_1", "QK5_1", "QR5_1", "dequantize_q5_1", - "dequantize_mul_mat_vec_q8_0", "struct block_q8_0", "QK8_0", "QR8_0", "dequantize_q8_0", - "convert_mul_mat_vec_f16", "half", "1", "1", "convert_f16" -}; - -std::array mul_str_keys = { - "KERNEL_NAME", "TYPE" -}; -std::array mul_str_values = { - "mul_f32", "float" -}; - -static std::string& replace(std::string& s, const std::string& from, const std::string& to) { - size_t pos = 0; - while ((pos = s.find(from, pos)) != std::string::npos) { - s.replace(pos, from.length(), to); - pos += to.length(); - } - return s; -} - -static std::string generate_kernels() { - std::stringstream src; - src << program_source << '\n'; - src << k_quants_source << '\n'; - for (size_t i = 0; i < dequant_str_values.size(); i += dequant_str_keys.size()) { - std::string dequant_kernel = dequant_template; - std::string dmmv_kernel = dequant_mul_mat_vec_template; - for (size_t j = 0; j < dequant_str_keys.size(); j++) { - replace(dequant_kernel, dequant_str_keys[j], dequant_str_values[i + j]); - replace(dmmv_kernel, dequant_str_keys[j], dequant_mul_mat_vec_str_values[i + j]); - } - src << dequant_kernel << '\n'; - src << dmmv_kernel << '\n'; - } - for (size_t i = 0; i < mul_str_values.size(); i += mul_str_keys.size()) { - std::string mul_kernel = mul_template; - for (size_t j = 0; j < mul_str_keys.size(); j++) { - replace(mul_kernel, mul_str_keys[j], mul_str_values[i + j]); - } - src << mul_kernel << '\n'; - } - src << add_template << '\n'; - - return src.str(); -} - -static cl_platform_id platform; -static cl_device_id device; -static cl_context context; -static cl_command_queue queue; -static cl_program program; -static cl_kernel convert_row_f16_cl; -static cl_kernel dequantize_row_q4_0_cl, dequantize_row_q4_1_cl, dequantize_row_q5_0_cl, dequantize_row_q5_1_cl, dequantize_row_q8_0_cl; -static cl_kernel dequantize_mul_mat_vec_q4_0_cl, dequantize_mul_mat_vec_q4_1_cl, dequantize_mul_mat_vec_q5_0_cl, dequantize_mul_mat_vec_q5_1_cl, dequantize_mul_mat_vec_q8_0_cl, convert_mul_mat_vec_f16_cl; -static cl_kernel dequantize_block_q2_k_cl, dequantize_block_q3_k_cl, dequantize_block_q4_k_cl, dequantize_block_q5_k_cl, dequantize_block_q6_k_cl; -static cl_kernel dequantize_mul_mat_vec_q2_K_cl, dequantize_mul_mat_vec_q3_K_cl, dequantize_mul_mat_vec_q4_K_cl, dequantize_mul_mat_vec_q5_K_cl, dequantize_mul_mat_vec_q6_K_cl; -static cl_kernel mul_f32_cl; -static cl_kernel add_f32_cl; -static bool fp16_support; - -static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { - cl_program p; - char *program_log; - size_t program_size; - size_t log_size; - int err; - - program_size = strlen(program_buffer); - - p = clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); - if(err < 0) { - fprintf(stderr, "OpenCL error creating program"); - exit(1); - } - - std::string compile_opts = "-cl-mad-enable -cl-unsafe-math-optimizations -cl-finite-math-only -cl-fast-relaxed-math " - "-DQK4_0=32 -DQR4_0=2 -DQK4_1=32 -DQR4_1=2 -DQK5_0=32 -DQR5_0=2 -DQK5_1=32 -DQR5_1=2 -DQK8_0=32 -DQR8_0=1 " - "-DQK_K=256 -DK_QUANTS_PER_ITERATION=" + std::to_string(K_QUANTS_PER_ITERATION); - - err = clBuildProgram(p, 0, NULL, compile_opts.c_str(), NULL, NULL); - if(err < 0) { - - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); - program_log = (char*) malloc(log_size + 1); - program_log[log_size] = '\0'; - clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); - fprintf(stderr, "ggml_opencl: kernel compile error:\n\n%s\n", program_log); - free(program_log); - exit(1); - } - - return p; -} - -void ggml_cl_init(void) { - static bool initialized = false; - if (initialized) { - return; - } - initialized = true; - - cl_int err; - - struct cl_device; - struct cl_platform { - cl_platform_id id; - unsigned number; - char name[128]; - char vendor[128]; - struct cl_device * devices; - unsigned n_devices; - struct cl_device * default_device; - }; - - struct cl_device { - struct cl_platform * platform; - cl_device_id id; - unsigned number; - cl_device_type type; - char name[128]; - }; - - enum { NPLAT = 16, NDEV = 16 }; - - struct cl_platform platforms[NPLAT]; - unsigned n_platforms = 0; - struct cl_device devices[NDEV]; - unsigned n_devices = 0; - struct cl_device * default_device = NULL; - - platform = NULL; - device = NULL; - - cl_platform_id platform_ids[NPLAT]; - CL_CHECK(clGetPlatformIDs(NPLAT, platform_ids, &n_platforms)); - - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - p->number = i; - p->id = platform_ids[i]; - CL_CHECK(clGetPlatformInfo(p->id, CL_PLATFORM_NAME, sizeof(p->name), &p->name, NULL)); - CL_CHECK(clGetPlatformInfo(p->id, CL_PLATFORM_VENDOR, sizeof(p->vendor), &p->vendor, NULL)); - - cl_device_id device_ids[NDEV]; - cl_int clGetDeviceIDsError = clGetDeviceIDs(p->id, CL_DEVICE_TYPE_ALL, NDEV, device_ids, &p->n_devices); - if (clGetDeviceIDsError == CL_DEVICE_NOT_FOUND) { - p->n_devices = 0; - } else { - CL_CHECK(clGetDeviceIDsError); - } - p->devices = p->n_devices > 0 ? &devices[n_devices] : NULL; - p->default_device = NULL; - - for (unsigned j = 0; j < p->n_devices; j++) { - struct cl_device * d = &devices[n_devices]; - d->number = n_devices++; - d->id = device_ids[j]; - d->platform = p; - CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_NAME, sizeof(d->name), &d->name, NULL)); - CL_CHECK(clGetDeviceInfo(d->id, CL_DEVICE_TYPE, sizeof(d->type), &d->type, NULL)); - printf("\nPlatform:%d Device:%d - %s with %s",i,j,p->name,d->name); - - if (p->default_device == NULL && d->type == CL_DEVICE_TYPE_GPU) { - p->default_device = d; - } - } - - if (default_device == NULL && p->default_device != NULL) { - default_device = p->default_device; - } - } - - printf("\n\n"); - - if (n_devices == 0) { - fprintf(stderr, "ggml_opencl: could find any OpenCL devices.\n"); - exit(1); - } - - char * user_platform_string = getenv("GGML_OPENCL_PLATFORM"); - char * user_device_string = getenv("GGML_OPENCL_DEVICE"); - int user_platform_number = -1; - int user_device_number = -1; - - unsigned n; - if (user_platform_string != NULL && sscanf(user_platform_string, " %u", &n) == 1 && n < n_platforms) { - user_platform_number = (int)n; - } - if (user_device_string != NULL && sscanf(user_device_string, " %u", &n) == 1 && n < n_devices) { - user_device_number = (int)n; - } - if (user_platform_number != -1 && user_device_number != -1) { - cl_platform* platform = &platforms[user_platform_number]; - if ((unsigned)user_device_number >= platform->n_devices) { - fprintf(stderr, "ggml_opencl: invalid device number %d\n", user_device_number); - exit(1); - } - default_device = &platform->devices[user_device_number]; - } else { - - struct cl_device * selected_devices = devices; - unsigned n_selected_devices = n_devices; - - if (user_platform_number == -1 && user_platform_string != NULL && user_platform_string[0] != 0) { - for (unsigned i = 0; i < n_platforms; i++) { - struct cl_platform * p = &platforms[i]; - if (strstr(p->name, user_platform_string) != NULL || - strstr(p->vendor, user_platform_string) != NULL) { - user_platform_number = (int)i; - break; - } - } - if (user_platform_number == -1) { - fprintf(stderr, "ggml_opencl: no platform matching '%s' was found.\n", user_platform_string); - exit(1); - } - } - if (user_platform_number != -1) { - struct cl_platform * p = &platforms[user_platform_number]; - selected_devices = p->devices; - n_selected_devices = p->n_devices; - default_device = p->default_device; - if (n_selected_devices == 0) { - fprintf(stderr, "ggml_opencl: selected platform '%s' does not have any devices.\n", p->name); - exit(1); - } - } - - if (user_device_number == -1 && user_device_string != NULL && user_device_string[0] != 0) { - for (unsigned i = 0; i < n_selected_devices; i++) { - struct cl_device * d = &selected_devices[i]; - if (strstr(d->name, user_device_string) != NULL) { - user_device_number = d->number; - break; - } - } - if (user_device_number == -1) { - fprintf(stderr, "ggml_opencl: no device matching '%s' was found.\n", user_device_string); - exit(1); - } - } - if (user_device_number != -1) { - selected_devices = &devices[user_device_number]; - n_selected_devices = 1; - default_device = &selected_devices[0]; - } - - GGML_ASSERT(n_selected_devices > 0); - - if (default_device == NULL) { - default_device = &selected_devices[0]; - } - } - - fprintf(stderr, "ggml_opencl: selecting platform: '%s'\n", default_device->platform->name); - fprintf(stderr, "ggml_opencl: selecting device: '%s'\n", default_device->name); - if (default_device->type != CL_DEVICE_TYPE_GPU) { - fprintf(stderr, "ggml_opencl: warning, not a GPU: '%s'.\n", default_device->name); - } - - platform = default_device->platform->id; - device = default_device->id; - - size_t ext_str_size; - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, 0, NULL, &ext_str_size); - char *ext_buffer = (char *)alloca(ext_str_size + 1); - clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, ext_str_size, ext_buffer, NULL); - ext_buffer[ext_str_size] = '\0'; // ensure it is null terminated - // Disabled due to faulty outputs - // Check if ext_buffer contains cl_khr_fp16 - fp16_support = false; // strstr(ext_buffer, "cl_khr_fp16") != NULL; - // fprintf(stderr, "ggml_opencl: device FP16 support: %s\n", fp16_support ? "true" : "false"); - - cl_context_properties properties[] = { - (intptr_t)CL_CONTEXT_PLATFORM, (intptr_t)platform, 0 - }; - - CL_CHECK((context = clCreateContext(properties, 1, &device, NULL, NULL, &err), err)); - - CL_CHECK((queue = clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err), - (err != CL_INVALID_QUEUE_PROPERTIES && err != CL_INVALID_VALUE ? err : - (queue = clCreateCommandQueue(context, device, 0, &err), err) - ))); - - const std::string kernel_src = generate_kernels(); - - program = build_program_from_source(context, device, kernel_src.c_str()); - - // FP16 to FP32 kernel - CL_CHECK((convert_row_f16_cl = clCreateKernel(program, "convert_row_f16", &err), err)); - - // Dequantize kernels - CL_CHECK((dequantize_row_q4_0_cl = clCreateKernel(program, "dequantize_row_q4_0", &err), err)); - CL_CHECK((dequantize_row_q4_1_cl = clCreateKernel(program, "dequantize_row_q4_1", &err), err)); - CL_CHECK((dequantize_row_q5_0_cl = clCreateKernel(program, "dequantize_row_q5_0", &err), err)); - CL_CHECK((dequantize_row_q5_1_cl = clCreateKernel(program, "dequantize_row_q5_1", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_row_q8_0_cl = clCreateKernel(program, "dequantize_row_q8_0", &err), err)); - CL_CHECK((dequantize_block_q2_k_cl = clCreateKernel(program, "dequantize_block_q2_K", &err), err)); - CL_CHECK((dequantize_block_q3_k_cl = clCreateKernel(program, "dequantize_block_q3_K", &err), err)); - CL_CHECK((dequantize_block_q4_k_cl = clCreateKernel(program, "dequantize_block_q4_K", &err), err)); - CL_CHECK((dequantize_block_q5_k_cl = clCreateKernel(program, "dequantize_block_q5_K", &err), err)); - CL_CHECK((dequantize_block_q6_k_cl = clCreateKernel(program, "dequantize_block_q6_K", &err), err)); - - // dequant mul mat kernel - CL_CHECK((dequantize_mul_mat_vec_q4_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_0", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_1_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_1", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q8_0_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q8_0", &err), err)); - CL_CHECK((convert_mul_mat_vec_f16_cl = clCreateKernel(program, "convert_mul_mat_vec_f16", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q2_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q2_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q3_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q3_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q4_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q4_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q5_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q5_K", &err), err)); - CL_CHECK((dequantize_mul_mat_vec_q6_K_cl = clCreateKernel(program, "dequantize_mul_mat_vec_q6_K", &err), err)); - - // mul kernel - CL_CHECK((mul_f32_cl = clCreateKernel(program, "mul_f32", &err), err)); - - CL_CHECK((add_f32_cl = clCreateKernel(program, "add_f32", &err), err)); -} - -static cl_kernel* ggml_get_to_fp32_cl(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return &dequantize_row_q4_0_cl; - case GGML_TYPE_Q4_1: - return &dequantize_row_q4_1_cl; - case GGML_TYPE_Q5_0: - return &dequantize_row_q5_0_cl; - case GGML_TYPE_Q5_1: - return &dequantize_row_q5_1_cl; - case GGML_TYPE_Q8_0: - return &dequantize_row_q8_0_cl; - case GGML_TYPE_Q2_K: - return &dequantize_block_q2_k_cl; - case GGML_TYPE_Q3_K: - return &dequantize_block_q3_k_cl; - case GGML_TYPE_Q4_K: - return &dequantize_block_q4_k_cl; - case GGML_TYPE_Q5_K: - return &dequantize_block_q5_k_cl; - case GGML_TYPE_Q6_K: - return &dequantize_block_q6_k_cl; - case GGML_TYPE_F16: - return &convert_row_f16_cl; - default: - return nullptr; - } -} - -static size_t ggml_cl_global_denom(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 1; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - return 4; - case GGML_TYPE_Q4_K: - return 8; - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return 4; - case GGML_TYPE_F16: - default: - return 1; - } -} - -static size_t ggml_cl_local_size(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - return 0; - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - return 64; - case GGML_TYPE_Q4_K: - return 32; - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - return 64; - case GGML_TYPE_F16: - default: - return 0; - } -} - -static cl_kernel* ggml_get_dequantize_mul_mat_vec_cl(ggml_type type) { - switch (type) { - case GGML_TYPE_Q4_0: - return &dequantize_mul_mat_vec_q4_0_cl; - case GGML_TYPE_Q4_1: - return &dequantize_mul_mat_vec_q4_1_cl; - case GGML_TYPE_Q5_0: - return &dequantize_mul_mat_vec_q5_0_cl; - case GGML_TYPE_Q5_1: - return &dequantize_mul_mat_vec_q5_1_cl; - case GGML_TYPE_Q8_0: - return &dequantize_mul_mat_vec_q8_0_cl; - case GGML_TYPE_F16: - return &convert_mul_mat_vec_f16_cl; - case GGML_TYPE_Q2_K: - return &dequantize_mul_mat_vec_q2_K_cl; - case GGML_TYPE_Q3_K: - return &dequantize_mul_mat_vec_q3_K_cl; - case GGML_TYPE_Q4_K: - return &dequantize_mul_mat_vec_q4_K_cl; - case GGML_TYPE_Q5_K: - return &dequantize_mul_mat_vec_q5_K_cl; - case GGML_TYPE_Q6_K: - return &dequantize_mul_mat_vec_q6_K_cl; - default: - return nullptr; - } -} - -// buffer pool for cl -#define MAX_CL_BUFFERS 400 - -struct scoped_spin_lock { - std::atomic_flag& lock; - scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { - while (lock.test_and_set(std::memory_order_acquire)) { - ; // spin - } - } - ~scoped_spin_lock() { - lock.clear(std::memory_order_release); - } - scoped_spin_lock(const scoped_spin_lock&) = delete; - scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; -}; - -struct cl_buffer { - cl_mem mem; - size_t size = 0; -}; - -static cl_buffer g_cl_buffer_pool[MAX_CL_BUFFERS]; -static std::atomic_flag g_cl_pool_lock = ATOMIC_FLAG_INIT; - -static cl_mem ggml_cl_pool_malloc(size_t size, size_t * actual_size) { - scoped_spin_lock lock(g_cl_pool_lock); - cl_int err; - - int best_i = -1; - size_t best_size = std::numeric_limits::max(); //smallest unused buffer that fits our needs - int worst_i = -1; - size_t worst_size = 0; //largest unused buffer seen so far - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer &b = g_cl_buffer_pool[i]; - if (b.size > 0 && b.size >= size && b.size < best_size) - { - best_i = i; - best_size = b.size; - } - if (b.size > 0 && b.size > worst_size) - { - worst_i = i; - worst_size = b.size; - } - } - if(best_i!=-1) //found the smallest buffer that fits our needs - { - cl_buffer& b = g_cl_buffer_pool[best_i]; - cl_mem mem = b.mem; - *actual_size = b.size; - b.size = 0; - return mem; - } - if(worst_i!=-1) //no buffer that fits our needs, resize largest one to save memory - { - cl_buffer& b = g_cl_buffer_pool[worst_i]; - cl_mem mem = b.mem; - b.size = 0; - clReleaseMemObject(mem); - } - cl_mem mem; - CL_CHECK((mem = clCreateBuffer(context, CL_MEM_READ_WRITE, size, NULL, &err), err)); - *actual_size = size; - return mem; -} - -static void ggml_cl_pool_free(cl_mem mem, size_t size) { - scoped_spin_lock lock(g_cl_pool_lock); - - for (int i = 0; i < MAX_CL_BUFFERS; ++i) { - cl_buffer& b = g_cl_buffer_pool[i]; - if (b.size == 0) { - b.mem = mem; - b.size = size; - return; - } - } - fprintf(stderr, "WARNING: cl buffer pool full, increase MAX_CL_BUFFERS\n"); - clReleaseMemObject(mem); -} - -void ggml_cl_free_data(const struct ggml_tensor* tensor) { - if (!tensor->clblast_offload_gpu) { - return; - } - - cl_mem mem = (cl_mem)tensor->extra; - clReleaseMemObject(mem); -} - -static cl_int ggml_cl_h2d_tensor_2d(cl_command_queue queue, cl_mem dst, size_t offset, const struct ggml_tensor * src, uint64_t i3, uint64_t i2, cl_event* ev) { - cl_int err; - const uint64_t ne0 = src->ne[0]; - const uint64_t ne1 = src->ne[1]; - const uint64_t nb0 = src->nb[0]; - const uint64_t nb1 = src->nb[1]; - const uint64_t nb2 = src->nb[2]; - const uint64_t nb3 = src->nb[3]; - const enum ggml_type type = src->type; - const size_t ts = ggml_type_size(type); - const size_t bs = ggml_blck_size(type); - const uint64_t row_size = ts*ne0/bs; - - const char * x = (const char *) src->data + i2*nb2 + i3*nb3; - if (nb0 == ts && nb1 == row_size) { - return clEnqueueWriteBuffer(queue, dst, CL_FALSE, offset, ne1*row_size, x, 0, NULL, ev); - } - if (nb0 == ts) { - const size_t buffer_origin[3] = { offset, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { row_size, ne1, 1 }; - return clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, row_size, 0, nb1, 0, x, 0, NULL, ev); - } - std::vector events; - if (ev && ne1>1) events.reserve(ne1-1); - for (uint64_t i1 = 0; i1 < ne1; i1++) { - // pretend the row is a matrix with cols=1 - const size_t buffer_origin[3] = { offset + i1*row_size, 0, 0 }; - const size_t host_origin[3] = { 0, 0, 0 }; - const size_t region[3] = { ts, ne0/bs, 1 }; - // if an event is requested, make the last write wait for all previous writes to complete - if (ev && i1) { - events.push_back(*ev); - } - cl_uint nevents = i1 == ne1-1 ? events.size() : 0U; - err = clEnqueueWriteBufferRect(queue, dst, CL_FALSE, buffer_origin, host_origin, region, ts, 0, nb0, 0, x + i1*nb1, nevents, nevents ? events.data() : nullptr, ev); - if (err != CL_SUCCESS) { - for (auto event : events) { - clReleaseEvent(event); - } - return err; - } - } - for (auto event : events) { - CL_CHECK(clReleaseEvent(event)); - } - return CL_SUCCESS; -} - -static void ggml_cl_mul_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(src1->clblast_offload_gpu); - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - size_t x_size; - size_t d_size; - - cl_mem d_X = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. - cl_mem d_D = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &d_size); // dst - - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev; - - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, &ev)); - - const int64_t i13 = i03%ne13; - const int64_t i12 = i02%ne12; - const int i1 = i13*ne12*ne11 + i12*ne11; - - cl_int x_offset = 0; - cl_int y_offset = i1*ne10; - cl_int d_offset = 0; - - size_t global = ne00 * ne01; - cl_int ky = ne10 * ne11; - - CL_CHECK(clSetKernelArg(mul_f32_cl, 0, sizeof(cl_mem), &d_X)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 1, sizeof(cl_int), &x_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 3, sizeof(cl_int), &y_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 4, sizeof(cl_mem), &d_D)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 5, sizeof(cl_int), &d_offset)); - CL_CHECK(clSetKernelArg(mul_f32_cl, 6, sizeof(cl_int), &ky)); - CL_CHECK(clEnqueueNDRangeKernel(queue, mul_f32_cl, 1, NULL, &global, NULL, 1, &ev, NULL)); - - CL_CHECK(clReleaseEvent(ev)); - CL_CHECK(clFinish(queue)); - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * ne00*ne01, d, 0, NULL, NULL)); - } - } - ggml_cl_pool_free(d_X, x_size); - ggml_cl_pool_free(d_D, d_size); -} - -void ggml_cl_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); - ggml_cl_mul_f32(src0, src1, dst); -} - -static void ggml_cl_add_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - GGML_ASSERT(src1->clblast_offload_gpu); - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - size_t x_size; - size_t d_size; - - cl_mem d_X = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. - cl_mem d_D = ggml_cl_pool_malloc(ne00 * ne01 * sizeof(float), &d_size); // dst - - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - cl_event ev; - - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, &ev)); - - const int64_t i13 = i03%ne13; - const int64_t i12 = i02%ne12; - const int i1 = i13*ne12*ne11 + i12*ne11; - - cl_int x_offset = 0; - cl_int y_offset = i1*ne10; - cl_int d_offset = 0; - - size_t global = ne00 * ne01; - cl_int ky = ne10 * ne11; - - CL_CHECK(clSetKernelArg(add_f32_cl, 0, sizeof(cl_mem), &d_X)); - CL_CHECK(clSetKernelArg(add_f32_cl, 1, sizeof(cl_int), &x_offset)); - CL_CHECK(clSetKernelArg(add_f32_cl, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clSetKernelArg(add_f32_cl, 3, sizeof(cl_int), &y_offset)); - CL_CHECK(clSetKernelArg(add_f32_cl, 4, sizeof(cl_mem), &d_D)); - CL_CHECK(clSetKernelArg(add_f32_cl, 5, sizeof(cl_int), &d_offset)); - CL_CHECK(clSetKernelArg(add_f32_cl, 6, sizeof(cl_int), &ky)); - CL_CHECK(clEnqueueNDRangeKernel(queue, add_f32_cl, 1, NULL, &global, NULL, 1, &ev, NULL)); - - CL_CHECK(clReleaseEvent(ev)); - CL_CHECK(clFinish(queue)); - - // copy dst to host - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * ne00*ne01, d, 0, NULL, NULL)); - } - } - ggml_cl_pool_free(d_X, x_size); - ggml_cl_pool_free(d_D, d_size); -} - -void ggml_cl_add(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); - ggml_cl_add_f32(src0, src1, dst); -} - -static void ggml_cl_mul_mat_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->clblast_offload_gpu) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = src1->clblast_offload_gpu ? (cl_mem) src1->extra : ggml_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = dst->clblast_offload_gpu ? (cl_mem) dst->extra : ggml_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->clblast_offload_gpu) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // copy src1 to device - if (!src1->clblast_offload_gpu) { - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - } - - CL_CHECK(clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_ASSERT(false); - } - - // copy dst to host - if (!dst->clblast_offload_gpu) { - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &ev_sgemm, NULL)); - } - } - } - } - } - - if (!src0->clblast_offload_gpu) { - ggml_cl_pool_free(d_X, x_size); - } - if (!src1->clblast_offload_gpu) { - ggml_cl_pool_free(d_Y, y_size); - } - if (!dst->clblast_offload_gpu) { - ggml_cl_pool_free(d_D, d_size); - } -} - -static void ggml_cl_mul_mat_f16(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, void * wdata, size_t wsize) { - GGML_ASSERT(fp16_support); - - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb10 = src1->nb[0]; - const int nb11 = src1->nb[1]; - const int nb12 = src1->nb[2]; - const int nb13 = src1->nb[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const ggml_fp16_t alpha = ggml_fp32_to_fp16(1.0f); - const ggml_fp16_t beta = ggml_fp32_to_fp16(0.0f); - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - - GGML_ASSERT(wsize >= sizeof(ggml_fp16_t) * y_ne); - GGML_ASSERT(wsize >= sizeof(ggml_fp16_t) * d_ne); - ggml_fp16_t * const tmp = (ggml_fp16_t *) wdata; - - size_t x_size; - size_t y_size; - size_t d_size; - cl_mem d_X; - if (src0->clblast_offload_gpu) { // NOLINT - d_X = (cl_mem) src0->extra; - } else { - d_X = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * x_ne, &x_size); - } - cl_mem d_Y = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * y_ne, &y_size); - cl_mem d_D = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * d_ne, &d_size); - - bool src1_cont_rows = nb10 == sizeof(float); - bool src1_cont_cols = (size_t)nb11 == ne11*sizeof(float); - - size_t x_offset = 0; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - if (src0->clblast_offload_gpu) { - x_offset = (i03 * ne02 + i02) * x_ne; - } else { - // copy src0 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_X, 0, src0, i03, i02, NULL)); - } - - // FIXME: convert on device - - for (int64_t i12 = i02 * r2, e12 = i12 + r2; i12 < e12; i12++) { - // convert src1 to fp16 - // TODO: use multiple threads - char * src1i = (char *) src1->data + i13*nb13 + i12*nb12; - if (src1_cont_rows) { - if (src1_cont_cols) { - ggml_fp32_to_fp16_row((float *) src1i, tmp, ne10*ne11); - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - ggml_fp32_to_fp16_row((float *) (src1i + i11*nb11), tmp + i11*ne10, ne10); - } - } - } - else { - for (int64_t i11 = 0; i11 < ne11; i11++) { - for (int64_t i10 = 0; i10 < ne10; i10++) { - // very slow due to no inlining - tmp[i11*ne10 + i10] = ggml_fp32_to_fp16(*(float *) (src1i + i11*nb11 + i10*nb10)); - } - } - } - - // copy src1 to device - CL_CHECK(clEnqueueWriteBuffer(queue, d_Y, false, 0, sizeof(ggml_fp16_t) * y_ne, tmp, 0, NULL, NULL)); - - CL_CHECK(clFinish(queue)); - - // compute - cl_event ev_sgemm; - clblast::StatusCode status = (clblast::StatusCode)CLBlastHgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, x_offset, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, &ev_sgemm); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nF16 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_ASSERT(false); - } - - // copy dst to host, then convert to float - if (!dst->clblast_offload_gpu) { - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(ggml_fp16_t) * d_ne, tmp, 1, &ev_sgemm, NULL)); - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - ggml_fp16_to_fp32_row(tmp, d, d_ne); - } else { - // FIXME: convert dst to fp32 on device - } - } - } - } - } - - if (!src0->clblast_offload_gpu) { - ggml_cl_pool_free(d_X, x_size); - } - ggml_cl_pool_free(d_Y, y_size); - ggml_cl_pool_free(d_D, d_size); -} - -static void ggml_cl_mul_mat_q_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { - const int64_t ne00 = src0->ne[0]; - const int64_t ne01 = src0->ne[1]; - const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[3]; - - const int64_t ne10 = src1->ne[0]; - const int64_t ne11 = src1->ne[1]; - const int64_t ne12 = src1->ne[2]; - const int64_t ne13 = src1->ne[3]; - - const int nb2 = dst->nb[2]; - const int nb3 = dst->nb[3]; - const ggml_type type = src0->type; - const bool mul_mat_vec = ne11 == 1 && ne00%2 == 0; - - const int64_t r2 = ne12 / ne02; - const int64_t r3 = ne13 / ne03; - - const float alpha = 1.0f; - const float beta = 0.0f; - const int x_ne = ne01 * ne00; - const int y_ne = ne11 * ne10; - const int d_ne = ne11 * ne01; - const int x_bps = x_ne / ggml_blck_size(type); // blocks per 2D slice - const size_t q_sz = ggml_type_size(type) * x_bps; - - size_t x_size; - size_t y_size; - size_t d_size; - size_t q_size; - cl_mem d_X; - if (!mul_mat_vec) { - d_X = ggml_cl_pool_malloc(sizeof(float) * x_ne, &x_size); - } - cl_mem d_Y = ggml_cl_pool_malloc(sizeof(float) * y_ne, &y_size); - cl_mem d_D = ggml_cl_pool_malloc(sizeof(float) * d_ne, &d_size); - cl_mem d_Q; - if (!src0->clblast_offload_gpu) { - d_Q = ggml_cl_pool_malloc(q_sz, &q_size); - } - - cl_kernel* to_fp32_cl = ggml_get_to_fp32_cl(type); - cl_kernel* dmmv = ggml_get_dequantize_mul_mat_vec_cl(type); - if(to_fp32_cl==nullptr) - { - printf("\nOpenCL: Unsupported Tensor Type Detected: %d\n",type); - printf("Note that CLBlast only works on classic quants and K-quants!\n"); - } - GGML_ASSERT(to_fp32_cl != nullptr); - - const size_t global_denom = ggml_cl_global_denom(type); - const size_t local = mul_mat_vec ? CL_DMMV_LOCAL_SIZE : ggml_cl_local_size(type); - - size_t ev_idx = 0; - std::vector events; - - for (int64_t i03 = 0; i03 < ne03; i03++) { - // TODO: copy and dequantize src0 here when r3>1 - for (int64_t i13 = i03 * r3, e13 = i13 + r3; i13 < e13; i13++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - // copy src0 to device if necessary - if (!src0->clblast_offload_gpu) { - events.emplace_back(); - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Q, 0, src0, i03, i02, events.data() + ev_idx++)); - } else if (src0->clblast_offload_gpu) { - d_Q = (cl_mem) src0->extra; - } else { - GGML_ASSERT(false); - } - - if (!mul_mat_vec) { - // convert src0 to fp32 on device - const size_t global = x_ne / global_denom; - const size_t offset = src0->clblast_offload_gpu ? (i03 * ne02 + i02) * x_bps : 0; - CL_CHECK(clSetKernelArg(*to_fp32_cl, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clSetKernelArg(*to_fp32_cl, 1, sizeof(cl_mem), &d_X)); - CL_CHECK(clEnqueueNDRangeKernel(queue, *to_fp32_cl, 1, &offset, &global, local > 0 ? &local : NULL, events.size(), !events.empty() ? events.data() : NULL, NULL)); - } - - int64_t i12 = i02 * r2; - int64_t e12 = i12 + r2; - events.reserve(e12 - i12); - for (; i12 < e12; i12++) { - if (mul_mat_vec) { // specialized dequantize_mul_mat_vec kernel - // copy src1 to device - events.emplace_back(); - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, events.data() + ev_idx++)); - - // compute - const size_t global = ne01 * local; - const size_t offset = src0->clblast_offload_gpu ? (i03 * ne02 + i02) * x_bps : 0; - const cl_int ncols = ne00; - events.emplace_back(); - CL_CHECK(clSetKernelArg(*dmmv, 0, sizeof(cl_mem), &d_Q)); - CL_CHECK(clSetKernelArg(*dmmv, 1, sizeof(float) * local, NULL)); - CL_CHECK(clSetKernelArg(*dmmv, 2, sizeof(cl_mem), &d_Y)); - CL_CHECK(clSetKernelArg(*dmmv, 3, sizeof(cl_mem), &d_D)); - CL_CHECK(clSetKernelArg(*dmmv, 4, sizeof(cl_int), &ncols)); - CL_CHECK(clEnqueueNDRangeKernel(queue, *dmmv, 1, &offset, &global, &local, events.size() - 1, events.data(), events.data() + ev_idx++)); - } else { // CLBlast matrix matrix multiplication - // copy src1 to device - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Y, 0, src1, i13, i12, NULL)); - - // wait for conversion - CL_CHECK(clFinish(queue)); - - // compute - events.emplace_back(); - clblast::StatusCode status = (clblast::StatusCode)CLBlastSgemm((CLBlastLayout)clblast::Layout::kColMajor, - (CLBlastTranspose)clblast::Transpose::kYes, (CLBlastTranspose)clblast::Transpose::kNo, - ne01, ne11, ne10, - alpha, - d_X, 0, ne00, - d_Y, 0, ne10, - beta, - d_D, 0, ne01, - &queue, events.data() + ev_idx++); - - if (status != clblast::StatusCode::kSuccess) { - printf("\nQF32 Matmul Failed (%d): [dims: %ld,%ld,%ld,%ld] You may be out of VRAM. Please check if you have enough.\n",static_cast(status),ne00,ne01,ne10,ne11); - GGML_ASSERT(false); - } - } - - // copy dst to host - float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); - CL_CHECK(clEnqueueReadBuffer(queue, d_D, true, 0, sizeof(float) * d_ne, d, 1, &events[events.size() - 1], NULL)); - for (auto *event : events) { - clReleaseEvent(event); - } - - ev_idx = 0; - events.clear(); - } - } - } - } - - if (!mul_mat_vec) { - ggml_cl_pool_free(d_X, x_size); - } - ggml_cl_pool_free(d_Y, y_size); - ggml_cl_pool_free(d_D, d_size); - if (!src0->clblast_offload_gpu) { - ggml_cl_pool_free(d_Q, q_size); - } -} - - -bool ggml_cl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst) { - const int64_t ne10 = src1->ne[0]; - - const int64_t ne0 = dst->ne[0]; - const int64_t ne1 = dst->ne[1]; - - // TODO: find the optimal values for these - if ((src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && - src1->type == GGML_TYPE_F32 && - dst->type == GGML_TYPE_F32 && - ((ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->clblast_offload_gpu)) { - return true; - } - - return false; -} - -static bool ggml_cl_mul_mat_use_f16(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * /* dst */) { - // If device doesn't support FP16 - if (!fp16_support) { - return false; - } - - size_t src0_sz = ggml_nbytes(src0); - size_t src1_sz = ggml_nbytes(src1); - - // mul_mat_q: src0 is converted to fp32 on device - size_t mul_mat_q_transfer = src0_sz + src1_sz; - - // mul_mat_f16: src1 is converted to fp16 on cpu - size_t mul_mat_f16_transfer = src0_sz + sizeof(ggml_fp16_t) * ggml_nelements(src1); - - // choose the smaller one to transfer to the device - // TODO: this is not always the best choice due to the overhead of converting to fp16 - return mul_mat_f16_transfer < mul_mat_q_transfer; -} - -void ggml_cl_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize) { - GGML_ASSERT(ggml_cl_can_mul_mat(src0, src1, dst)); - - if (src0->type == GGML_TYPE_F32) { - ggml_cl_mul_mat_f32(src0, src1, dst); - } - else if (src0->type == GGML_TYPE_F16) { - if (ggml_cl_mul_mat_use_f16(src0, src1, dst)) { - ggml_cl_mul_mat_f16(src0, src1, dst, wdata, wsize); - } - else { - ggml_cl_mul_mat_q_f32(src0, src1, dst); - } - } - else if (ggml_is_quantized(src0->type)) { - ggml_cl_mul_mat_q_f32(src0, src1, dst); - } - else { - GGML_ASSERT(false); - } -} - -size_t ggml_cl_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - if (src0->type == GGML_TYPE_F16 && ggml_cl_mul_mat_use_f16(src0, src1, dst)) { - return sizeof(ggml_fp16_t) * std::max(src1->ne[0] * src1->ne[1], dst->ne[0] * dst->ne[1]); - } - return 0; -} - -void ggml_cl_transform_tensor(void * data, ggml_tensor * tensor) { - const int64_t ne0 = tensor->ne[0]; - const int64_t ne1 = tensor->ne[1]; - const int64_t ne2 = tensor->ne[2]; - const int64_t ne3 = tensor->ne[3]; - - const ggml_type type = tensor->type; - const size_t s_sz = ggml_type_size(type) * (size_t) (ne0 * ne1 / ggml_blck_size(type)); - const size_t q_sz = s_sz * (size_t) (ne2 * ne3); - - size_t q_size; - cl_mem dst = ggml_cl_pool_malloc(q_sz, &q_size); - - tensor->data = data; - // copy tensor to device - size_t offset = 0; - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - CL_CHECK(ggml_cl_h2d_tensor_2d(queue, dst, offset, tensor, i3, i2, NULL)); - offset += s_sz; - } - } - - CL_CHECK(clFinish(queue)); - - tensor->extra = dst; - GGML_ASSERT(tensor->clblast_offload_gpu); -} diff --git a/otherarch/ggml_v3b-opencl.h b/otherarch/ggml_v3b-opencl.h deleted file mode 100644 index f63e5ad4f..000000000 --- a/otherarch/ggml_v3b-opencl.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include "ggml.h" -#include "ggml-cpu.h" -#include "ggml-backend.h" - -#ifdef __cplusplus -extern "C" { -#endif - -GGML_API void ggml_cl_init(void); - -GGML_API void ggml_cl_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API void ggml_cl_add(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API bool ggml_cl_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, const struct ggml_tensor * dst); -GGML_API size_t ggml_cl_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -GGML_API void ggml_cl_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize); - -GGML_API void ggml_cl_free_data(const struct ggml_tensor* tensor); -GGML_API void ggml_cl_transform_tensor(void * data, struct ggml_tensor * tensor); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/src/llama-model-loader.cpp b/src/llama-model-loader.cpp index f220595d3..5875b7f14 100644 --- a/src/llama-model-loader.cpp +++ b/src/llama-model-loader.cpp @@ -8,10 +8,6 @@ #include #include -#if defined(GGML_USE_CLBLAST) -# include "ggml_v3b-opencl.h" -#endif - static const size_t kiB = 1024; static const size_t MiB = 1024*kiB; static const size_t GiB = 1024*MiB; @@ -973,7 +969,6 @@ void llama_model_loader::load_data_for(struct ggml_tensor * cur) const { } } -static int clblast_offload_fallback_layers = 0; static int layer_name_to_number(std::string inputString) { size_t firstDotPosition = inputString.find('.'); @@ -1220,18 +1215,6 @@ bool llama_model_loader::load_all_data( } } - #if defined(GGML_USE_CLBLAST) - int layernum = layer_name_to_number(cur->name); - bool shouldoffload = (layernum>=0 && clblast_offload_fallback_layers>layernum); - if(shouldoffload) - { - cur->clblast_offload_gpu = true; - ggml_cl_transform_tensor(cur->data, cur); - }else{ - cur->clblast_offload_gpu = false; - } - #endif - size_done += n_size; } diff --git a/src/llama-model.cpp b/src/llama-model.cpp index c7b70c978..8f575dcb0 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -131,10 +131,6 @@ #include "models/mistral3.cpp" #include "models/graph-context-mamba.cpp" -#if defined(GGML_USE_CLBLAST) -# include "ggml_v3b-opencl.h" -#endif - const char * llm_type_name(llm_type type) { switch (type) { case LLM_TYPE_14M: return "14M"; @@ -2639,12 +2635,6 @@ bool llama_model::load_tensors(llama_model_loader & ml) { int i_gpu_start = std::max(int(hparams.n_layer) + 1 - n_gpu_layers, 0); - #if defined(GGML_USE_CLBLAST) - printf("\nOpenCL GPU Offload Fallback...\n"); - clblast_offload_fallback_layers = n_gpu_layers; - i_gpu_start = std::max((int64_t) hparams.n_layer, (int64_t) 0); - #endif - const int act_gpu_layers = devices.empty() ? 0 : std::min(n_gpu_layers, int(n_layer) + 1); auto get_layer_buft_list = [&](int il) -> llama_model::impl::layer_dev { const bool is_swa = il < int(hparams.n_layer) && hparams.is_swa(il); @@ -7563,9 +7553,6 @@ static bool buft_supported(ggml_backend_buffer_type_t buft, ggml_backend_dev_t d throw std::runtime_error(format("failed to create ggml context")); } - #if defined(GGML_USE_CLBLAST) - ggml_cl_init(); - #endif ggml_backend_buffer_ptr buf { ggml_backend_buft_alloc_buffer(buft, 0) }; ggml_tensor * op_tensor = fn(ctx.get()); for (int i = 0; i < GGML_MAX_SRC; i++) { diff --git a/src/llama.cpp b/src/llama.cpp index 2e184f7a1..f4b8bc90d 100644 --- a/src/llama.cpp +++ b/src/llama.cpp @@ -43,8 +43,6 @@ static bool old_mixtral_warning_showed = false; #ifdef GGML_USE_CUDA # include "ggml-cuda.h" -#elif defined(GGML_USE_CLBLAST) -# include "ggml_v3b-opencl.h" #endif #if defined(_MSC_VER) @@ -804,13 +802,9 @@ bool llama_supports_mlock(void) { } bool llama_supports_gpu_offload(void) { - #if defined(GGML_USE_CLBLAST) - return true; - #else return ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_GPU) != nullptr || ggml_backend_dev_by_type(GGML_BACKEND_DEVICE_TYPE_IGPU) != nullptr || llama_supports_rpc(); - #endif } bool llama_supports_rpc(void) {