From 0747f2d8633f20ed156ed1c5f57f82204a2dd840 Mon Sep 17 00:00:00 2001 From: Anatoly Baksheev Date: Fri, 4 Feb 2011 15:15:25 +0000 Subject: [PATCH] 1) NPP_staging as sources. Binaries removed. 2) NVidia tests for GPU 3) FD sample that uses NVidia's interface. --- .../NPP_staging_static_Windows_32_v1.lib | Bin 607300 -> 0 bytes .../NPP_staging_static_Windows_64_v1.lib | Bin 746672 -> 0 bytes .../libNPP_staging_static_Darwin_64_v1.a | Bin 461344 -> 0 bytes .../libNPP_staging_static_Linux_32_v1.a | Bin 692180 -> 0 bytes .../libNPP_staging_static_Linux_64_v1.a | Bin 505576 -> 0 bytes 3rdparty/NPP_staging/npp_staging.h | 784 -------- modules/gpu/CMakeLists.txt | 21 +- modules/gpu/FindNPP_staging.cmake | 24 - modules/gpu/src/arithm.cpp | 14 +- modules/gpu/src/cascadeclassifier.cpp | 8 +- modules/gpu/src/imgproc_gpu.cpp | 28 +- .../gpu/src/nvidia/NCVHaarObjectDetection.cu | 82 +- .../gpu/src/nvidia/NCVHaarObjectDetection.hpp | 51 +- .../gpu/src/nvidia/NPP_staging/NPP_staging.cu | 1704 +++++++++++++++++ .../src/nvidia/NPP_staging/NPP_staging.hpp | 637 ++++++ modules/gpu/src/nvidia/{ => core}/NCV.cpp | 77 +- modules/gpu/src/nvidia/{ => core}/NCV.hpp | 171 +- .../nvidia/{ => core}/NCVRuntimeTemplates.hpp | 55 +- .../gpu/src/opencv2/gpu/device/transform.hpp | 270 +-- modules/gpu/src/precomp.hpp | 6 +- modules/gtest/src/gtestcv.cpp | 2 +- samples/CMakeLists.txt | 4 +- samples/gpu/CMakeLists.txt | 4 +- .../gpu/cascadeclassifier_nvidia_api.cpp | 176 +- tests/gpu/CMakeLists.txt | 19 +- tests/gpu/src/nvidia/NCVAutoTestLister.hpp | 127 ++ tests/gpu/src/nvidia/NCVTest.hpp | 211 ++ .../gpu/src/nvidia/NCVTestSourceProvider.hpp | 161 ++ tests/gpu/src/nvidia/TestCompact.cpp | 129 ++ tests/gpu/src/nvidia/TestCompact.h | 41 + tests/gpu/src/nvidia/TestDrawRects.cpp | 163 ++ tests/gpu/src/nvidia/TestDrawRects.h | 44 + .../src/nvidia/TestHaarCascadeApplication.cpp | 267 +++ .../src/nvidia/TestHaarCascadeApplication.h | 41 + .../gpu/src/nvidia/TestHaarCascadeLoader.cpp | 123 ++ tests/gpu/src/nvidia/TestHaarCascadeLoader.h | 34 + tests/gpu/src/nvidia/TestHypothesesFilter.cpp | 176 ++ tests/gpu/src/nvidia/TestHypothesesFilter.h | 44 + tests/gpu/src/nvidia/TestHypothesesGrow.cpp | 134 ++ tests/gpu/src/nvidia/TestHypothesesGrow.h | 46 + tests/gpu/src/nvidia/TestIntegralImage.cpp | 185 ++ tests/gpu/src/nvidia/TestIntegralImage.h | 40 + .../src/nvidia/TestIntegralImageSquared.cpp | 117 ++ .../gpu/src/nvidia/TestIntegralImageSquared.h | 39 + tests/gpu/src/nvidia/TestRectStdDev.cpp | 180 ++ tests/gpu/src/nvidia/TestRectStdDev.h | 44 + tests/gpu/src/nvidia/TestResize.cpp | 161 ++ tests/gpu/src/nvidia/TestResize.h | 42 + tests/gpu/src/nvidia/TestTranspose.cpp | 148 ++ tests/gpu/src/nvidia/TestTranspose.h | 41 + tests/gpu/src/nvidia/main_nvidia.cpp | 346 ++++ tests/gpu/src/nvidia_tests.cpp | 63 + 52 files changed, 6043 insertions(+), 1241 deletions(-) delete mode 100644 3rdparty/NPP_staging/NPP_staging_static_Windows_32_v1.lib delete mode 100644 3rdparty/NPP_staging/NPP_staging_static_Windows_64_v1.lib delete mode 100644 3rdparty/NPP_staging/libNPP_staging_static_Darwin_64_v1.a delete mode 100644 3rdparty/NPP_staging/libNPP_staging_static_Linux_32_v1.a delete mode 100644 3rdparty/NPP_staging/libNPP_staging_static_Linux_64_v1.a delete mode 100644 3rdparty/NPP_staging/npp_staging.h delete mode 100644 modules/gpu/FindNPP_staging.cmake create mode 100644 modules/gpu/src/nvidia/NPP_staging/NPP_staging.cu create mode 100644 modules/gpu/src/nvidia/NPP_staging/NPP_staging.hpp rename modules/gpu/src/nvidia/{ => core}/NCV.cpp (88%) rename modules/gpu/src/nvidia/{ => core}/NCV.hpp (76%) rename modules/gpu/src/nvidia/{ => core}/NCVRuntimeTemplates.hpp (73%) rename modules/gpu/src/nvidia/FaceDetectionFeed.cpp_NvidiaAPI_sample => samples/gpu/cascadeclassifier_nvidia_api.cpp (74%) create mode 100644 tests/gpu/src/nvidia/NCVAutoTestLister.hpp create mode 100644 tests/gpu/src/nvidia/NCVTest.hpp create mode 100644 tests/gpu/src/nvidia/NCVTestSourceProvider.hpp create mode 100644 tests/gpu/src/nvidia/TestCompact.cpp create mode 100644 tests/gpu/src/nvidia/TestCompact.h create mode 100644 tests/gpu/src/nvidia/TestDrawRects.cpp create mode 100644 tests/gpu/src/nvidia/TestDrawRects.h create mode 100644 tests/gpu/src/nvidia/TestHaarCascadeApplication.cpp create mode 100644 tests/gpu/src/nvidia/TestHaarCascadeApplication.h create mode 100644 tests/gpu/src/nvidia/TestHaarCascadeLoader.cpp create mode 100644 tests/gpu/src/nvidia/TestHaarCascadeLoader.h create mode 100644 tests/gpu/src/nvidia/TestHypothesesFilter.cpp create mode 100644 tests/gpu/src/nvidia/TestHypothesesFilter.h create mode 100644 tests/gpu/src/nvidia/TestHypothesesGrow.cpp create mode 100644 tests/gpu/src/nvidia/TestHypothesesGrow.h create mode 100644 tests/gpu/src/nvidia/TestIntegralImage.cpp create mode 100644 tests/gpu/src/nvidia/TestIntegralImage.h create mode 100644 tests/gpu/src/nvidia/TestIntegralImageSquared.cpp create mode 100644 tests/gpu/src/nvidia/TestIntegralImageSquared.h create mode 100644 tests/gpu/src/nvidia/TestRectStdDev.cpp create mode 100644 tests/gpu/src/nvidia/TestRectStdDev.h create mode 100644 tests/gpu/src/nvidia/TestResize.cpp create mode 100644 tests/gpu/src/nvidia/TestResize.h create mode 100644 tests/gpu/src/nvidia/TestTranspose.cpp create mode 100644 tests/gpu/src/nvidia/TestTranspose.h create mode 100644 tests/gpu/src/nvidia/main_nvidia.cpp create mode 100644 tests/gpu/src/nvidia_tests.cpp diff --git a/3rdparty/NPP_staging/NPP_staging_static_Windows_32_v1.lib b/3rdparty/NPP_staging/NPP_staging_static_Windows_32_v1.lib deleted file mode 100644 index 98d5c227a1a540dd1ccd14a34215268b7a5ba011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607300 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%0Da?q!{aZS;=buv|N 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 S9LQy`$V)VV9mzZUS}^>TE{Mw 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
L-~7Mk)m4e=s`-f(r_SecE?YDo`4w49 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 diff --git a/3rdparty/NPP_staging/libNPP_staging_static_Linux_32_v1.a b/3rdparty/NPP_staging/libNPP_staging_static_Linux_32_v1.a deleted file mode 100644 index 6c16959f3e22421aadf6ab5ca0de6f84b4afc141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692180 zcmeEv3t&{$ng6{rlgR)f4-zCQ=?@=%J!A<0b0U|!Blcvw+1 zpr(;-v3A?-!@9fHwOeiN*0yfzZqc$8yS7W!t=LLSTiQb5-%`a&D_#D--#O>b+8j-(tw5I8CP4mzF+xva&gPQhN@N+CYsGa?tSsUcd_^9@${<(KOqWwAk@?SZi zo&Eh;*`TYZXLDmoVi&_I(aP_R_j>x*Ml|Ad%BeAr8 z>4F=Uggcw!(V49s;pS*y19N@VGJAP=U1zu}oYKY00OQiFH*hNGLMR_WCA)qy6^6%u5uKy*p0 zsotnflx$KcR@y15!DD&6IT{xXIBtAZt-YbAS$JP*~I;u*~KLvXq&b zzJ#cA1~Cn?dMj?ofX^bWLDoN01q_p>_b}P3m)0p|tzFs@$;zcgi@K%7B&wDkt2#^i znl11Jj27#TZl<$azrIQM^9=O*Xx& z^Dku>!MUi~-;4YWT4$t7>*b%04sj|0942z{2T7hvz!|?b9^Mr1jfR(n+rrUsS8G_! z-+mvR%mRcY@$iE7=B}=AM?*N)3b(5;GVj{%XlHYr7<9OdQNk=Gq;dV?h%d0%Cp_c| zLvV9wNp~n*6$qdL5y@TQu8nlW;iG}|`>Bq~o)-#5!?76iVU$do&g_kJ#r;{-UA;7+ zm!utW>WAR{ZOhAs0s#Ft?&f{0l11~i!yXH z;cZd`XYW}fA=B>*r8FcOv2pX_7GEH+fm8i*UvRy3Oj6k_1<~nGqu~0}m574bCCW%< zadU51YkOm>Ig(is%+gUs_sW77Ju3@dbgGPa)qS(zv-4M-R*S}NjmG8QHZ2@&i*#*J zKqOmLny^iaMY?(-@^70KZEaym{%vD}&O`_v=m>WPQ-(Hs15Av*(4=DA?6l}PgQJyA zH)vWD-(gNEVy5xcp~g+kp-?!~fUvnM7U}Nd95hn1&C*4_8eT*-$D@%=;tC2AjjtvW z!_}KeViqzk3R5UI4~3G~IqLFOUA~$4EerR?!j$Y2l0`C&SV;!4sbu21TGRq;lGo4b zg4;mIIX2UDx#9*37tZ^pjLn(YZVsra+fsfrul+Mkk?n(<9ot8IVhpaXi?ud)E$iMG zYh1s1y>x=>n=k>;VJ30y>o;e_q5oyXwWr{+dbSbr400x4ervR`D;{1KZSDxx_14yy zW=u(7!rJCjb33mOsEY|(rn&|)^$1WJ7n7-j2r<>N)HqYdk65EgEx_(($~J}s`7AOb zX*GbrWqk|iEqsguHa^CnPE)DP>1vA1)S4nQQ%%wPhgMTDFj8wO`3#|^DSTv2la)$i zOv4B%s4S(D21zM}4xnshLM7D5gi4h1`;4)8W3;&k7aa}Z4Uty(K@2{hZ>hM#h&RW3 zV`6+ZAwaVQIcVz4Jm^ga$0IeG%0mNVg<#=C90CCyqbLGK6$$six4*)JRT$ z!64OG5pC{@_23>&y2T|kGG&#=j7*7DlgKoSNM>XfwzeR*K5nSmsDk^{WfKet6Pb$h z(~|u$;(CNP{)E!j7%3$}!Xl7AB|gf~L~2$~nz6RVypmzgmn$S$6iEqJ2BnB~X(cI8 zEe572Xw2tB=;6WDT^o5jVu*8=ToAYcex^HWTsve~5Lh0s-5}^1*Dr6zWp|(^mbf{a zf{SdDH#3&Ueg2?iA8cvnRlh9js}C*-VvQiUq9@pF+|!mT1@%~!@9GVA zq9L;$w?=VKqqj94Xu_%{u42;6$*PjhR$2?W9AaJ%Ahgjq=f|Gd!p-k8Kw?QBt6aCJ>>P+d3T?r3jI zP=u{&nQkruCZp$<+T3#JoUK?Cq zBmJb`Z=q5$g3Uq-ydc~q);Qob`EZHyt$r)#L>Yg!LcVHIl|(HR@2a4DZbh(0oqax& zK7*}lolz!3C9S5&S~on;W3qX3)+*JoMw}{WBzr~Jc)eYb-V*ExcLmntAsZ5An*i!mToER9R)3D3vBU^7K%I-RuSz|_gS#aN zLj-+BXI>4~>B#N%BVD8`7LLY)&Apof=9;AsB6$B+L_n)kr|$Zm-dMXB)=84|aaeN3 zwkc#x&Rm>H#6`w}sx{NJfSjZ>FCfcYBfL~h)M~aBN7IYNA8WRuOd3>%-QmquKDI~+{pv9T?GB~&7w58<4tU1QI8ys{dgpEhCL=1|nbvmmFm@n7qQuD={ zn#_iq5|ow}%6g?-X@6xxybY20kH5;VkZVWtu>?4u&Ynm|7}0zeL)>u4e7kmOMQd+G zcV#9@V+~WR<7OvKE&ybwOI%%LCsVViA{vcej-1Z!u8P*49w=zlbOBB3R!OIn#pp*JYF8tBf zd;__CM~hPs{ehDM0Z+dm8VHUB0~^*NZ7aAb<-NbrSGT**#k}D z?_3WgPu{zISMNE@)cSUn4HV-H3{JhYZCCGT=FTnHzANtjX5f^5#D%|F(U$|K5*iK6 zb#32O^x!U`iJ*2#IpW-7I-h7d_n^#&WtpcF^~hSfSO~D1aX@SOfos~1&@|WnyR<@0 z`{4_cg^~NiXHyFmBny!^!QqF8lROGgsU!~@&%;CG=@EK~GH9nVYdiJr@(ir>^fyd% z^_R&O>)Tz1c0yx=SmxYiG-}_jVpF>!Wh=UW%`vEIkn9f}>)So;jPNp7;(6CJFB(u( zi#-=THqrM^m@8v01j2sN#Zhx~!{ao7sbsR)T}P*(o11L*eBgwJoaa$aK`{(=Y(M_a zsZ)mJ9f1Nln83GyCIK}{xK24W%}P1&A$Gn*-l>=F+D(CKq}+fus4@u`{e^Zkt;d~5K4Eup5)EfiLRsS5hY#kz( zXW_2MMZ@?-@qI%qezz#@8R(&rghN2b_w=toZ&d2mf3xU;U9yH%ARbB$FUrZh|BXwZ zW9u{t@pE1MfrEWp4m#p-{B_2Q@K-O|_I1?hFuk6rr=eGW;E?KZNBg!M(t1btZ8@qH zZTl4IRvsD%93A!Cj=uYp#;A~IN8bUNN^OtdpgoS3B_pLJt2X!Gq(spdWvwq2_y18Wpbm zMmFk1vm;sQ84xaG2c$cwiz~^IxgA54 zoBw>^ID0R=e4mJ&75SCZnW$&!KsWc5FCs9zkBJk{d+{vR(xgP1PwOPoouML;5svhF^7mg zQb$grQKU;vafeD$Ligh51BaxA4<#)ue9)Yn{;_CVr7>-lVi6Sq9KysX0*pflFdiY{%7X)e zLyQ9EJPj=5P01fHvPS?aGrR@NT(3=Z8@MB6V4c76SK%1%PexX1^=vD zki7v;;A{&b*fP2>f~UWrF*wu~Ob%776qo}}q%dvHN7Raw;{N%Zx0SyTXIz29B#69; z@~jxEL{kIBVxi~0z)uk={8V20!U-RhZYtFYD~^3z%C(~H`OLVsXy-|3KE^UrWg%@Gi4nc%=2nygp2N$V z&wOw&V)_+h(}f4Gb&qfohZ*#Nm7K_t)3>Dz6O1r-0ev-d4Hqlc7v>{pKwOFR%c~B| z-I!6!MDemCQ~Lui(zU;6D%juqBAxn+2}ZlK`0Av*v;749N7?>tKSAU>!yJ`m>?euk zXyH)cS?ms_SdKC{loZ#(rSGW$tT1B@`M$uLa4m02*K!pCtWjb(+guAf`~i0O1C|bd zfF1sT(RzKmXNcg05xj^m|Ke*RFGWI@27x1eyl>0ndeQw4VBr8~jyte!_PDcX+bVdH z!&{I^-xheXZ_AS)nuSc9Iqn#Pzs~q&hc8CPK%g8hQ%nS6Atd2^o)7F{vmL%#u%4*J zw+sX(g0vWJvj8hRnM=YUsc98%{zVZz??v=17m47e_A`vKhcS=VC?o7!2?kmPuR@%^5TJ2K)d@(f~Q6 z9#>{R!6jZ^gPqXgv&8+k6XF_d@Dh()sA_)%7rA@bS&m>mL7WT(aGCwoK;Wsq-63^H z=B}e<=s7~Tyuq_0aLDjo>7!C~WaG;4=wP(ke&P?%foi-D*Q@CFt{vM?A}c8+UELw& zIBvzT?hUwr%sE_=QpOK_cn+k|Cl^02ve5$CfH=ErH)|`ap1R_gab8Kpsn+mR%qD$X z3bft}cJzHhYH6Dzz8QE!MEM*XpbfZ{90rki5E8F*6^f0M=K ze8gENxzg&ICi{(Tjn!CKP0Tu$Ro}n9ddfM;d~1)*&#u<@I~rD*DRDzj_IG&?9Wm`r z_K+RR&|$<{G;U*~IG5LPORN6580I8Qa3_z5^?2S>m$%XpmRKapUIL-kd#Jo;4^o$D zj9J6mrzt(_bC#r6J-w3IWb)4Z65J3jkoPP4_Z+H&_j=(QEQ4c)w++veTvgeQ zU9l?T-LdxO%I4NcsHHdB73`_0jBTu3*R!stw{mGy6Q12{UWfh3D)Ep`WovgdTxofb zV}`dQ(iOg{W@Z)ng5EnX#z(C1TD|w$W(Wz*_C~|;R_t(cl{WgK*hQg>Vx!N5d_ID4 zCiwc#5MS}A%E-4vt!#${H+Z=dUz*0?14Uv>uVDPDGhnY;J_2(F`1;Qj-?}rSZ?)); z>Bj^2hX{AtHrexr@an?s+1^k%j#og!Auo2J!X{W=>}hz*$afQ8Ee9h)vNO@zS+hCb|Exvp=k_-uI{)OPZ)c< zTh?Pp#Jn4^uNTIL@z8O|+Y{}^Oa2|3VT$f3cDq>ztbBI~)6dA;r|Jy#zp69igQ|Tw zeUQ!Wd_@f|2>Z0j{X@NMfu3&I-P_&f^^dqk{WDSXk>^@_X6)&o^=EI-nwe+7p1xUU z#-6^qGvjxC^=HP9`Onb!_n)Eh@AsV{`})pI?CSHO_hz3b>@kyaSgmRgW$CZNQM~BL z2nv&eH{KqJaT1YRI(y^TQ*^`~PEA$)Y3tn)>bfNE#cR5ly0}+O()o_On!YOSq8Lpq zj;-4&=82QJe>eBkDSgy6d26+8IvzI3ni#X>H~JxmcE3{+W=|H}um88>4^HjlE=g@q zkNJq6_mHkVqomrBqgxxE(Y5a@q$#B;@FxP9c1{(y|CCM{HeS`tG{$-Ao>s%F*n|r; zP26h*8~wJX#mhAPc2EAt$@Kj53tTQf%S!w-=HNI7KRl$RY4Zv_+a2@AqNxPF0g$-q z_@%>#kk9uT&dq?|hWs1xyDS6#5#-;EUwH=nZsdOqzbowchCV0tKZxHR{1(~qNE7cu zJ{hmES-M4fos7p zll+6gb!EZ3uuOVe7W_2ew*yb7n@)ZM@LvUfMFxBb_(J?R8Kf(}4Y>LEWoo}ifa}I@ zvAw)%-`&7{Eerl2aQRr&O3`1HcX7EMM@s)w_-Vk;!H>a$MSq2FQ04i~kOhx4`&S6~ z7=Cxy@z?b^y~x`J+#95Uo|f`~KG!|SC(UDkZFutR71%iw&5NL!4QKHQ&|7G(?aRBz zb+3?h3^d;}Xs}wE=<6n$G8B&DMw#Hl7ov>uu4q`NI?xoNLmsy4qinJY_!H=m&1vvn zl-~sWYRG?%_)Ah{kmeJhnOLM~cx7nQgEYH9^Fs_A!6%TO<{)Su9tZzK`?8a!;p2fb z+f$}!Lg{H{faVw+-3vgw;^}FcK=aiJil#4>hPI1?rVq~STWAZYmefbt?m^&}fbbol zEO^ylo&tU$UQGK1@ei2Fo7!+6XsRwyG!LiJP>++K;T(`|+ySj=*DY8u+dF;v%H;v? z;z(ETrc1pw71b4f?@jAkTd$}IR$tMA7t>qYv242`!tGJLz8bu%=Ubz7$9gud8z`9e zje&{NzM)mbHh0FGTL9xx3EPdcXt<*yj!m((icoXBS*vJ?#Wd^&E;B3m0&2<^HN=Jw zq7d-uK8#>4FE<{@_?ZGTX&O=Dh1^^;+}l4F4d2Q&(+uWw1{Kk6X%iSb7~a$x?up}t z|CWxh@fRDrj0`ArecIH}-}s<^&s1v)!> zKlZ*)`vIKHNPLN=0!uF8itCoHyaM-KT5r)R)krcKhbd3IbB%CH953Q;12fe@8Xk=25C$cV z_o8!p3gq}GLoVsq-WTDAFa~d$%cIzc!dY~VJc4? zDqE{Uj#tE~qaGhe%FORU@be;%_2B#WvQP&%={{Vq&LW+`tiv* zmND$qG#PyXZ+068%ka3yMz^+7(>^Cr;xBpdSgGioilG-BXof_Izg~6zZqS+aI|==o zfTMowH->(Em6yB?erq%EyTitBaX88EQWL*_Rs0-Ezx%Q9;~-fk9TZxp9DXI@QK5aI|X|2+>pB`gWL;1XSUx{Cb?*ugxsYz zey@O^(WVq`)Z<+?elLPwG4S*8pw81?wDO)ijyh+a$h&K z8-0`^_dg7NO3)1OGjwN`asKZ%elyyV{hpV12EXqregNX&YI?chtQ8#*-?s6q0l$5y zECCe`cKjMwUz>QXPXa;fI z1G+qe2#|FAO;U7*pB%91XYiYCqx-uIbT``c`w-~NhrzD|nIKIZr0X(e7<7a%P2zYY zplMISunUl5v>W>)`@E^RwgSOn9v7|DVem831~lipwBMXE@(G<PU0W;33o0FnKsF9)z$h7LQH5!A;UQMf6~%pDfmujP)T$ioR2m#5i+` zXd#*9)GpQ-LmSuOspZWxHOtduCJ(2^s3LhdEhCxq6-gw{oEkk)@^A_dVor-k5fT|r zv1*q{qP*Rn9BIkJX&DKWcU2OJGpASyPG&j9m4-PzH<`ehQ=4N;n|llK=AOy4xd$?B z9_dV*M?JBnThmVbW0viZXshjoQd8nGo8ZI zCkdRED>m}O!j|c9!sD+~X^xa}=#N`X_;HS_wU3z69Jf#4N80K5k^Y;2jF-7y&-78i z8}YkLrGE!_H-4N;i7!Hvd<^GYM`HRiQxlDIT%*lXX~wWqQ0gX?=A1Jb{VR&}9-J>y z<#D4Yu^vx;&m%nzKU$XQV>ma~+nGKeUBFmhXSxAtV?CYeTah-_&zb%>(#Co@)BlCE zu|Cf9Z;&?D!Vh1(Q{Z3z8|nGrY1oHru*O0A zVBq+gA+u|Cf9W~7a^aHbze z+F1K$`iDpxYu!wrM4E?`cd0f3F2`8sCVnQ;#+o+M%aMLqtzR?UhqSR)&GZ+MHrAz? z{w~tS8Z^_tM%q|!X8JOdOJn_fw)8w(dNI<*dNj+2Z1|`x{eGm4^=Z<71!-d~nrXht zXdIM(M5POGJ{eZYS1wkjE43*qO@A{P^WD`Z7tHeORGMriV?Mh>r6-7Vh4v3N`md`r zW8=wMwe~$5{;*23TTgailvti)#+H7I>+y*5a`o-%)r);~p_GqMlghrz+tjo{Y*4w_ zR~w6mBHh;S)N*^mA$=Y@c-`Xb=g(Uly#Cs2m*b0SE9T8#91vfu!`Cs-el!~osQJ=- zU^?w0v`>5q`s_!uEuR8U|HWi!D$}>X{|Y~vjc07)_~Ku8Tc~+6#&PQRv8`XwZi|M) zX~}YaMjLz4mas6&1NIrWx@u~%#w3~x=5KfkIy&roML zU)#ph=&^8I+YsyOiAK7_$0IX+y*l&vsj1Pmv@1`rBkSVkSX{h|ATo%dzO+V$hio!_ z$2w_C$zf&JMtsXPxGWs&#SNXz3==!$W)O(4AEf_&aRz#08{JIkte?NmY&cdRt&huS zkc=ggHBQS=*eWe1QML5gtTn?H!p0Z({sKSjjlSR7vsv^}ytjeVd9lr1t)?`Lmj2V< zs-HKANBfLkFH=q8+4XoN%>9Tn_4ib}Wg|}gKzL%To{8^-->}rjJ?=McYHo>a@NvuZ zSR~lmfsY*o`Isg4+HUI>TO~K9Iw({FH>1<`B%-XWeb}Bm9pB~Y_(GxPU=O|n9^4R# z#(QydH``5I#Da_m9atmd75``~docDKg-osxF@LJczf|S(c_ZTIEBr!*e>d}SvGh;O z$A$J|D*uasE-ZKSTK{ABSs8(w74=e>NcLxo%AU zO)5VO=xWlmjVgbO${%3<^|;0$T!MQCgv)Th1(4-m03_d6nGd?7go`!p_k^G;!u2cZ z#siXWGN5avrd1Mxp3g@S|1O1(F#o-pc8AL6^G_`I8RiEy?PbEXn)VtX?eq>H%j>Wu z>AZlfpI^Z_3N`?`ZpO8sO7j^b(%r4#`xXAvD*Y7&pH=V$g@2RqO31`@BFl3pIl>DR zycm#j_^c1<1_)a;?L&mEn#SjINdKIIFDm#7@hJC8!Vs=`2|-_k>p{{_Qt%Q5D*;I# zAcUQp2(g^j4M={$>$3Seoet|5Dz|ixDIsPsA*#fA-4jM^xRU6@LC0z z5)b+g!ZzF&Bn16Vh5wX-pHc7&#Do672+{7pAcS2!xFB<3akBwXv_ByAT@L7sXj(fU zxAp@ycFSkH0=N&`TZP_{C*8celA?Mkx!w5=Kzx5C4}I& zNWq&3!LN-F{B8#%zqYtFKL;EG`JDqueiH%7 z?@B=OS)$;L3I+km?=F@8kb<97@Y4$aE0yK~82OA=a2z1ZU#-$j3a(bLMd2SNM8Em6 z%HN~lOA3CUc<|v;CG~a#QtuK#ma77!-1!PFR&WLJDA!Af_WnmgwD&I*{&xyG$I9|! z07)MLq@4ADloJDV_GsGQ15(bz3O)u%`lEyxU&jg2565H4lyp-Syh6d5fTX{k5aa7c zLeR$*{%!^DSMWjNLH}7ojIUP-*{+0W&l4(L3|VZ~ivg+k3_$8V6OekZ0;E1I3a$qv z-_H?3?=KTVk5?7`XA1sW!MBMAeF-KM>U}OD=xYJVw?Vp0uJ@RNWm)r$^Q<*8#L`6Lg@1^3jZYqzpmi(#Do4Y;Tlc*4I$_Yam$H(Cn|Wc zf)#+IznTz!E=D+C(;g>8J)R*%JzfH&-unQl_fMG*y^jJ??*-!}|0N2p1SH=_38DAr z2%*RSDExi}f1%*7i3fcN7VW9`xrCsv1r+^7!KDh`Ks@N%2v=&_#|feLD}>PdAR+Yr zJs|bw&2Q>G29SD}0aEV`faJeb!TX2@-%k>P&l7~;vm20nz6D4=|I2*v`5_?r%q^FE z-lgC&K=N5fxC-$JA@~dclFv>+@;S!*O}GznF5qU&|AeUbazN_Utl%vQ#)t>shY4>( zoJ9!w|5Esu72L1jξ8d(Q*h3_nE(`t5+^{~-lGso( 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

%q(bU<_AibaV6b4tlv8dwur z?UYnan+$uUNQPTZJi~l*d;1w)*U1d;bTYgHP=?nz87^p(VXqX)aPRyRuG;6#oXoUj zPsg(=^oP{vLw_)iQ&;dch0SZiNFQBBb761h5SLppQDWmu##I+IKwbypRbIFCHH9$1 z?PIrhzq$yPSZS$s*OJA2@KP$r@9G`z>_8CiIBw9yPlrd8IiL zp35{j+q!0qBd=smn^syT^pWPm#}U=!*L!)W+2~zwZf08>Z*Dc2Jrc=mYy8Z%DzjA_ z;tP8_84aLxkl78c`{p%snHgntLv!IqH%pixVN*rOwi>yj>SpOs2N~drfFlBuk<0Ym$Fq$}hBYO^&nmg2`rRQ*+^Fm`BQtlU<~U zD{H={G0w5(=I(Ig&4;aU4*K{=?heP#-C-wp2XnWXT4oLo<}|HrMSs_H-y!^Me!={G zjv;GSdfR!E32QR?gT348;`#6%+_65qx_CakJzA^}ukK)O$NS>#oV`ApoxRuDQrm93 z*_6_nvLjdODkdgIjfbvkJ1b&kHHR{QWKNcOTNUU-UxaJH+ubVnY&ty#PLu-pX>T`L z+`%B!VkS)w%O(2R*uJ1U{ivz5*Bu;U!woqNCTmS&sZz#y1tP|2&bR}o<=~)gp%x@< z9qiwPuHfzF`YoQlX{z7S^go_K-=jjqZ`^uShh^uU$+mckA?^$+)MBPjl|0%*0q0aB z**TN#Ju_OAai>qA7BhDm03WO+)|My7p3O)tHF#Wirj~w&l0x=y^6DPr^#S@dwT3%d z*jGo6Zqs5AfrmHlGhr#4*5%w7<*Bh<%0=gDY^-NTntsl95&WX+@U}xd8ESh7@Wi0A z)A-BL8JlT5H#n6hovC!@tY{_1pT@JRG}HKR;x1|p`R$#VtoC?}TX!qzkroH|_)6zb z46a5Lvp3w}-jL4Tw0hEx+pJC6re*I);@-49G03|#S}1W_wsB(`_e#f2n-hbW^JttH ztoJyMe`3J0F((FtjN_P7=^gHg0VdiVP0F1UgB@;XXy)7TZFfd(J=5;?X1|zIs`FO* zo~aZLVsjkVpT()C%p!p}vAf2tKW?!8NT>cj@sv*|+YVpjfFoK{bzLogHl}oy{`m%!Lm$ht@T{p8E9m=KIV{b0tUS z)Te(w>P4R4Z#r?ePnhXr{F&_}+Du;?JCvDX>*TaHh?kH%rF{HpEnD${G?On)YdOtt zJ1yHCnbuao8VhRfv^KQ1Y2|zq6gxk2Z+U7qdbeubDOzMsyC{;=;c>I$3GMbsevUt(HTmHp5l@>N3;|1I%sy1bf=I}qh^z@+qQDV>~I={UVtU^`KFM| zRaTrw#69A_@G0b;&ezhHKZP7w814Atj7koS6g#2si)d`R$K+NatBQo40XOgYt_Z5R6asBuDu)uqeWE{RyMmyb!#!QV#reP08#iMo6@H=x;rgo#(UgsFq8K=qT zndhJr={?GJ{4sK$0N%}iQJ0?BJnI+-G&md9CeswsjR^~+i_&0d-(x~8t6$U^vqH1} zxR>3^h=gNzobUmW=qN@f=$ye8i^eHr4K5K9i9ccKj0IU^}bZsdk#3>t|+ildP<6321)fY0m~g zKNDh7jM`6>FPJe_UNjcPP)@`N#Yx7El8*YA9L*1{rbH4$4MnY{a$lGsXMZlC7}ZW= z!aTC*As@+_#_MEi`e3wxoaCtSjKMH=1Ms7w6zSQqz*Dl(9GJq7#=KPfhnz8?+4LNZ z$pW0y#iBVLMT|J%F%)%CsLaX5Wj!LzlhH3%Cjc#;VjN};>npmTD@?Pgp66_0hMN32pYMYn+nFMut2KrY2UgYEqKYvQ@O#ft)n}GJ4T-IN6@{@8 zdGaN{VQ*kTKF1SE|Nb5<$Uf^Q>s5?|WN3NW5&HBA7r{ZB}{}QC@vjcn$hc6+i8=8YJ z;iUPfqtqSnk!=5T5L()44VL{gHf-eWw55@4-)T2SwgYJNN%=Uc(DsYiqxw0kgC^p7Q*cWs+*43f=d*ue(pZKuXDIwC>=&Xagy3ot=gszqV4!oEr4GhS!xu3>UE^S%AiH zu_MVam~zAFh+)Hcui;Wh3RuZq5uEa1!a5js^*xBcXE3p6u+by(2b#?YIJ0+MxYRn$ z{xd41PwI#ZQOSK$NAg`YeS+7W3WGkuMcjox!J45a@cP*XwUq{S%MHT!8!UOrU@2b} z(N_!KyCoS%OV`4@#e4 zbDqKK>kVFGVf6{V@!!mK@J-H#`vl)IT~ToNlg8v7AC9j+!FPXdq~HF*U{5*%&$9WG zSf`%J0}KZ*s+H@9J-B85px&3Db)Q;h-w8Wo;3)ZK5p-|`=yOiLge8@37cZ!@f=`dc zHVfZoMtX3|>T8!)F0q2o{RZhWv$hF#bXFH%61t3jHh;n(C5bQhv+QY%%0H->OM(6w z_SXxoK z7R(<+O2^@s(k;u7oTWTyS}YF_C-n^bb;fza1oLo-&31# z*$LNRXA^rNm4vz66VBT`A7#9lt(do$3^gG(@eB|P~aqH|=f zO$RqPlJ7j5h6zvE{PpxSTHDB=347Xh+qa}b zi{C;Ne-5*U$;Tj@zd+|7_8#USb{ef=)zwGescCSL>>o1^fx)5Zko;pAOc!I39sf8s zZp>KZBKL0O*G{9ganT1G&TyJm+(Z}2$Yk0A9vgJQAG%5_aU^#*O}qY?h+(Y^k@*HI ztuA8t3Nji@yP3Z$?|8h$^;nCNO1o8t!GB_Anzo!~oK!KxX}7T%B=k?l{xO}zY?Nc# z?c7Y|gesV}Vmivg@w(DYzHCvsm3BuPuXoZc;&oNjYXISiccTi^nz(89-j}v+DZQ@e z-hV@0t<!OTG%$EMW}j)#G#JZ4!8}UOI#OnkZ>me%bc@mD1kXh7)1GtUjXcd1+Vd-nZVZZ> z_21Pu-~9d5{JjQc($&Y3>FVQe940=2#+LR&2BbcLw$}6H#D5}s@EKH@v&pjgk&$$C z23tH*z}y3Ua^fc@&E(*#9$he4nochR5QaH5Qapsc?CPVR)W0D@&y#&6Y*r>QpW{M_ z86!^8Tj)@d5|gD8lTL~G+{98pG6^JYjUEb(@i+eo$U2d&A*|EPU}5e?9Vaj>w&}A z|EWC_X7q2rz^ErUb{ydXeYO;=^P0h!b89v$c zhg0ktBm1&B0{ExePB{g#IRyAGk(iv_jHA;(O=2+H^q%>)(|vXyVwYmfwe2h5B5eu$ z**%uwFZPw;{+YI2713Bj?bp%i`3r25E&HyBM%m7B`r^y&pP-MlzZ+4b7ye3W=Sp#*CZs?7iIT9K?i)xsUKLy##+2pT5_F_lf z)r4Mn4H_xycniY$9mqfN>iAOV(_TkkX7_j-e?4`)BC6?R9hYKSXX^N2Mtz@7-8xQ1 z2iA-$k@g7u**&<>;;Cc)7^S1})G@PV*G4q4 zbzGVRb#p`=t>evTIHrytr}8!UaO%{tlaZf5-L{TdRKt9G5w{mNyPC}l*W+Ax zpufp9ytmPaq6cq39M=9FHph1!yo2w;5byuB%|?;Xzc&u%pP*W7do&`Yjb(%Dk%zz7 zd4~Jf*mg-&GmKtLejspV+K4aMzM6}B1Nc&S1r$7H7O48IoLNLKtUJpD}!lhP#YIpIP%6l zfuDe5kDuF--)JACrpmy0P4xq~O}i6Dc8@jq>uIVf5T%LV zRPTWcdvL@$wyCBd&!!@#(PSO|c$#VjX5prEE27FsQym4zPE&PaImOx4#{`G@?m>)R z+(ZC2yZU%6b@j0%hWR#9$<3~2bC?P4YARxw@7Gkao`(6H?wkQ*zK+69=#KKd_)au= zZrEd&U=8javj#VI30C0TO{~8;n^rHbw~hN9;`4)sXFf9#Iky#o33pq$e>e2y^2bCI z?hfPzpiH=ia^h z(2GEuYp-_iotZOd&YW}R%sF>v@Q1bZ%Xc(ABHuA*Q|LihI+1T4gcqIQcx}SxI(#n1 zvr96A!$@Wlif>LpE10|JX6}z{?qWTcLO3JeQaLj{5F97+ZFM)$!;|MD-%)o%JskZb z$JO0f&s)Ick?*RzoO5YtcyPptUQ;BJpY@!;=P7)67%A&hDdEFotk2vGpxp1WzW#a& zAIsp4b0>z+OVM(cQz^Qfxfx*l`fhTf1JXX08OEm-pKEnFm7?)9H^ei=`i7-_EOQS& zyZEiksT5t#+_2nJ;Na-Ew2x(eg3n#}d|sDRDH>06!}fgz3>3Xl+Q%~2LWObl8E18D zpGwi?%*_A2wxR6bf7 z8)*E5dAO>OND`gy3vkaXfzNXA*7dkgr|?IpL;IE&L32Nc+mIlj`9p!G#k_&GbNGMZ znSho=r~3fzc@Z?vAb1e>>3i^ppf`nnipLAz^%DrS@(3ZYh$lRJ;5hPJo^=+!n?e~r zJmhQ`r9wCxk|Xf>Bed~d=-k*wX4&{!SPrp`^gwO=N7&u5jpBz|LGM&If$^Hc=TQLP zj>735DJ;^@%6Bv!!9!}n#qwS2yruyJ3y}vI5#xac??lSxccVwDd3+z6uz5XHnYoKP zS3HcIA!h$9K5?M&+JDC|QoWqF58{@`5^M{NKyB50Ao4W679xSydHC=Qf^VRTD|B##WV)&jZKz(x@_zva{s6u+fV%nPC{w*mCW*l0({iVDT6FVK>n^tWnA~w@3H84D z%T`)l5B&hu%LovHb@gwff{);Hd2jC?r~0ht+aNQMAryd=aq4^3P2j}pmk^Ji;=^MN z9wjagp}d4YNfo@sg1fKDU3BwOx%-CP#WtTKci)k_+Rdxw?niQ0=dAcU{AiQ;_zIpJ z+a{B7`MKhR+_MdGe@$pD`aaTkE3n|zj1Lb@xE6|j^Sf~q>61AFu;JPCkv>Bi?r?4H zVw<<4c%)Bekf2Prm9x&diih=9FJ(J_3=ZWH3r`Wc(0!@Q{texi8t6w+bG5$HbYH4^ zNYh=X)%CoYEniB2r2AJ;!N1_6=w7erJ_cZ*JAE2gje`HG8;A#uU>@I)hH_SPZ{W{7 z-5Y*G?lj#Sw#l8Qd&73Q({yjxA$OpA4}P>o*(6155??w))A~0sGDZ6Cfep%ww4MS6 z52KW(HGdL=^0ZdH;-~eZC>^?2eHolzeI{FYA%^`AqmC=$hT>;>IQ>iy#r2)0xX!65 zuG8vzE`x%qK9c}RaRv|8;G-yBrzoC7%RuokDgH3pT)l*Nya}Htfy>8)Q+ z$%AsIDZb<(xziM1@;7p)DZb?Ma;G^xnAVqpiz9vVnu4Qf9YwDo0 zQC-Vc?S*DxxbYK&E__|<;pO7sGtuYMdd|`$~U21 zpz`m4-L6_keX^K%d=MWVyRm$gq4Hw>%u{*sxpJqeym*z|X(}&%h1_W>FJ3Emny-VY z{4K~+r07|78)!s9(CI7b`}D-S{x{f(szX0dJmgb$DX_$=z6HKS6(hiUkH8x}*f zt)8(PW{W^aF$DMnomHiP63EJvxubUoRAzfWShW`Na?5!Ns!lolsoS=XIne`>FMN30 z_BXpX*KNH+^}>Fa?{GWEOZ=LN4up8mN|_N4>$RlE~ipd6=N6yquZnk zW@7-B=bEesFw$J5u!;#MdX;YcE)vz;ko9hXyhhhceFWe@1M{#Gz9B&%DuwmEmb1Jw z-p>p#$A_`d%R;{eGc@wW5Pc(j_zq;@Q6>{FhZ(aD@{KgDP_FzOr(j=H4%oxdD<4;> z$|#9l`5j1NKDGABl>mZU2I9hp>vmp?E{Z&^%cggRIUM~zeY<(bYhb8NqUP;`PUK1b z^s*fjc$($Y8=S~L>!+9RxD8LY^J#8$%!zzGM4ve1W9Q4D-y`49x7Y3b-(bwhH}&nV zoxjOuKCN#DKqWMtN5)4!Bu!_t85nv5SdYBIH2p)~rhiD|pqu`okkX&J=_XY-{X^cS ze?phNMm7DD`u4gV9|k381heU%(oe77@kKnH;!`yJGy3VS9Z%pXSw=Peuk`bbYWiR6 z+X2<|&+6MD)%2tKRxFYY^pl3~Mmya}#6{P@0FXnyoNiKp*Lr+-?#zd9pS}ry$VHyi zl_37#7ER@uGT*mTH_#;%UVFZ-m_I_-i#O@+Py#pC(?8f&8 z&_%w2uJ~@E%j<){;t0~VUjX#qi-(|d`VZwhn*OMK$I|~tzH8H;m+!jtSLM4Q%>$^R zB6g$z=zwaDX$IYF;T(WUGlbf9H?ulkkK)7Qc8;+6Ui?AzJ1}s`StgnyjGlx)i!=cx zb3+>xi}E7J@FbqE<39ao_#+%+r>=&g`Ol)MJY{FaE3L8{=XDoKW-}H zn2W)7iem_z7deJU^c=-~`aJw0$=AtuG~FfNv2>4o*QT$O?~)wD7+d(<3pJYj5i%UJ z3OBRk7zWN1#}Hj!Br?entocoW9gIfU7LPZzU$IaWDXy0NY}}C zAjdF<5dLGNyVSP3nbq+k$2?x+IA6tm`mliWbIcnVJVFF3{EUGnVq`;OX3Yzmq1{hhs6;A~lA*x-T`FXMYT9m(vjTwdp+C;5)T9qWwYdcT<-$VB&k zDw*)%=;l`-W8{7{(T#21!O>2q)m}0_iqYeKJ=XTD1-C~&NPkS^@F#BD@d#>p32u5G zUWg}uL5BsjT+bi|5_301SI#aD;P-P|G#fX*=Ks>Bif~hS&jW7TLUkDVYC_?Egbp?i zmu@s`7mzyyjn3ba%ihG>!*UzF@*Ff3w|sdM1HqMNC}8(VYVDO5LrWrc zE#SdY!L)|IR{Snf+oJEo-xYkvX~iGQ{fBu^%5Dn148DcP{hvfX7;-VhdlxWzS96|R zW-b=gmD4BJ>w&5BU-%57hMsR@ei8W)k&PUF;If#V%_>se3dfU!F0%t`wibWYde9g}Hl17_Ce1jr< zc<1Z)!ovD9d_rjG&ItM-vQ=lj-g$iks(KwhFU=>uMknraUjIQP`~aU<xlx`I|4*-hpC8kY!)$}hG;Y**I9F!bCpQ|~eCM_7vRk|r-c>itd|ur?rDZOndrr$-G%s@(ztVAT$7d2a zs7^jZXNAn2K*EI=V)ma;JX0q^=59j5XYl!0KCwY3Lgwm0tE=%*AeZX|SLSYom`CoC z$0TbfhK=`tw0E@`nY+s?b9Z@V?k>Z=YF2Ghwane+l{o`S%bdxqW$qp?>mN34*zxIg zj`Q#Ms3!cj+l0$Pb<}@Zc|y#e!)S99*wgo?q%G@}wyZ%{N!tzHDu?q`z6pT-1Rqu9 zm|NwdXjMDo$IywpJ{ZG#nhVateS8Ibe%BZjOZ_YPpsH^_?5Fw*`P&Ki{9j7wOF24M zMexAs`wDrwQBp&@IH8KH;!UjQ7!>vy?;9nE2s#O4JYTbvFy%Y&a5q=&^hccjcmo_T z$A24-LZKCt_>wGtYO-V&JDJ-+h=$*cKB)4%*W~#-ljq8alQ{)zq~T3f|E%&nWb*u* z$x~nNWFBOm4K>fJJWn$Z-<50Vz(*}2+PNB(Xh_%ayRboNdmHP7L%l_w^5Ec2ACv^p3SQPu$qNcWm$2Wb+l}?(y8*6Twev!f9zP&T3seg1FrE_wU?mHO#@@_ zm4fL9`bI{wL%o^oMF05U7%Em(vKxB?ii1)&?aB4F;A(5xlaL?0S=ZU?Luzz*Y%-Va zO|}5POy8btqG=*Gxx1;~sY0!UK0Y~;8yp5EY~sM^M9z8wi!L)hxG(D=16EpPvU`vp zQjXt4gS+t?BGRuCX!r3ap36@Xgg<(FS>2_5xl2dK@l4exWEdVE9l-pPewu;!Yd(Q(Xe@hxAr!K z>-h-l996DwghB&{_uu=(6Bk9Jk$+v?G!Wb0!cXiA;m!5>Z@{x?b>#i8Z;HjEkssja zTf#37?b#E%F4h$OZsg2Zd@}r?6pzO6PnE zwGV`^st?~DY6#y_AKp?Qem$Tc4zI0u|F5YJuW1NhSRcNkUj8RQY z@Ffl58yfg`oBZC{5Kf;J{&2WH@;A;Mv5Se}WewrZhVVrV;q~>AEBR~#8q*MKX2RxW zNQgBu>3eUx0~iqxV65br;i|S?4s}j4}j+)p^GPd#e<&xLpXHt zy}W#RzZ?$58lU)x4{AlZ7n(-=RwxwPu`isg51&EYV&?f#ClqV`$o|8)!p-&Jg-on5 ziGQ>(6gyAXn^!eYJE6Uij_@l&3d^~Ao+tO$(As$Td=CXHeRfwQ6x$G9wfrMb9uBW= z7zl4)Hh6^Ml4^K@4a61{(%bpEpj=~zWBVsRdN_9Zk&lKiTORIe7!0SEA@kopL~-zD z{|K^g{%UwlJ=E$>e`2LL2IYGp@qQeQiicAkde7!rNg@R$<~isCp-`j-gU_Fb&WbdK zuMXX-*s)xCo?WM~r2f3{E9#Y?*u`RR2(N7j-&Rj$R04YOY#fU9rO%g6$-s+eVdt-D zw8-@=9AmBcRTHYgcN`YS`3SI@RGq2B7jw$&Md!H%H}{%~@C??8TrlW8`ObljbgNF| zm#Goc3Yv)d>%GW#6p4KH5`35slPKp5{NV2ea)-$mEU5=jH*vvKVX>+A4xP`yq_4UG zd3Z68$;XW^2+!nOiF^l`2^aG)jn_{6Kvns+96`SG`2d#A^Cn9tzHxvP!eapYs4@Ur1yb4L$6<}-9*UIWi* zni!bKjpzDy%j<@0S{BK0@n?Fd}VT5sd74orLF0>*^c?kMh^jx>~0zf5-Hg zv)ywab>3{jj%j=}oOO?@@+ep9YftUeu~o+x>3qQZDdL~d?Q7F`FIleOnRX@g^TgStYs793 z;GgHVXIoVI$-oDF1pXRLmo-a4$7ARh(s|3O<3Rls*zRf5&NYua4Q%(CrHXFS|6Agj z3%=^aoyk?v#=39|wkv!j)R2xlZBDeY7SG!NuWs>UPTSEV%W9lPr){H4H@oy-+__5m;9z6nCd>)>12UTL*G+clk zJwsV7)LztZ)PiE?U?QpCO~&RYV2GF0IxHV$Dgp%NKEe{#eV9mK0M{h}C_ zjx~ay&;zKFa_QG6)mooaN0mNVWazk1>ys$;2jpv;(kIKbK8c-zeR$GY(x~;v@|v3T z%7#d~3Tvy7|LBTZtzQo2D2t(dO&gmsuzmT6G=SHtoMHRhQ zXu2CcQ?2z(!;eCZ%TFw56g>mEH~J-H_)7T6f!+{)nj#&XpGDx>0X=>a$;-d+uU}7W znMXZAeFgrUww{Pr9YJ?Gk$7c#BH`-2Kt0h$Jwf?Ds`T5Ev%Px4=ns+KEsL z3}3l=B0Muaq4{<$^u&DY2ER_I*v5G5f3}UW#tEfiV>oNV93#Tcnx#tD8JULam*;`H zWj<|?Q!~^pN2-oMwP4JwOt)AzRiJK}GaKYxzZ~5%Z#Kx&FWMk+@Kxw6HJ5=rz(y!O zr&(m?G};Dfq>WD-oF#RTQ`jP>&r~+ZI2@W zum#UQ5o*M)+cK7({^BB;-`DBy<#+t}lCv;&V=lHRrpi}qI7@bg#YSJWD=c%FWoB%DSdHXDtP&JYq%Hbc6aG^n{+&nKZ7|**Td>>mLmlbQSuZ>nwbXbDtGQ(`!%N*%&>S^!#~a6nJA!2s*GokKr5ExIHI|oLV6C zSn{N^`qaY4=(2xGw@%&I2-_8WgSipX#WpFsCXupPFwwDY~#u=4+gz znQH;)%lMAD;vhCZ^fYO2)h@)q4d+M65g-IGezR5v%r`9jR#P&O04aWFR!_rH2I zI+h)2Z*9hlJk8C!vr=GWA0PJj$5Tzo`0mNUpk^4|EvXvjS~v4cD!D|k z!b@mzz7fVx@VidQM3MJ<5{ah%v9VOsVElZ6(BHpl>v>IAjKAqMm+rn`wiwQ~Jn8=0 zF?l;|{anC`Un9M|9@~Phjc>hr<9glQJtLXHzLE7qgSp&Lc5QsyDE92nj>oSad`ot{ z?*90?*QTn^Co;o>Z|NgS@uBR#?2ynX9$&Y&rTYBM+1-!yBFhy<>gjeZyIZmEA#!JX@9Ij0wEtiPuJZ z`-l1_JjD%Tnb%VJI%;zPeGLDYToFGF@7oNOX-0XY1)s^K$d0wMd86B}-&ds+lS)SeeFZQ}+%k!I*HGxdK zvy&Bbob^hvTXT6%lfj_3FE=_o*dN?-!)`_28*e6zWJwr?8B4=R^=3vVcMoNQ@hGp? zfJd^WBp&58oPvR&aC~rNVzA%S7vf3)^@w+*_hpZ*T9uKA=EN znCYDu?_WDJFev%D!Ax#o=Ebi@pJuW%EbnQ>)~z#yvUMw7jR6uchTaOAk7xISl!^BE zn(=`Rsf%Bge}w*7Grpm#!+kV{w?E=*#x^99@=U!OVfRC?$QEcl-kWUi=t}ga+ImNz z%|xs8_VAnF;%4N_r>ZdYio|Tf>h!4p;JUN8^Gn7k!%II-vV}gC_OO~EsrdFgC zpa7Crih@rM_&PixJ(!U0O{9p1+lvY5M%EA9lC3uK>`3+|I{?#~rroOF6X;2Ko-z!f zdpLov=|EoT;i0VQVWEM*N^~*R<+mjJfHjbdELlr}V469-%p&v>P)T7Wmq(L|(yAJA zk_`^U1XmyHDSAk2l0p?90g{q|NNVy}#7PQCSu4{l;YtcURZ%wAPEwdlNhaAS0t?{} zw_}o^CU~d)RZw0c3dv+w%levlbMuCw(b2Js) zZeV>JbmRlraZuBPF!*J*Jh47LIr65F(HloR=%q|=Ksks8Anmb0O!e-Vpsn(dAt0%3 z9!X7hw&1yo-nKqWv`6>EiL4*ZfoxwUKGe56ODB%iyh0&JO+yZ$?$lsfD2ORx4*~;8 zNocEEQo>cLWhtMsNeK(2d@_>)Elh7|-cL!lrwk)&6`4Yh`!fo^r6?zs6sFMGzKpHX z9Vs#jjH0GQrfFX*`$E+3TcMB>Yw;(^KPmocy>;zQ%X(UiEWjRr+WDuGSz2xdWoFw$ z`Qa(qZiYzR+E!taR!XKQ+fJhfTa}K`sHTt_0Jf$Q)HwS}6nQ$TldXn2nnPMOFTjG>H#!7Cgof1bl1h%95W9{G zTf|0aC41x{37tz9OC&p0L6XwaE3M!*w}q*;j#3(gs>`Q9AU0(bh`|z50A;KMHV)(l zhpQ$MS72!y7{cmGg|~|G_Kc!!!X<554_lJkCQ>bWvW;Aa5wu9{ZIE%)-j=*j*KR`* z87F?oKuNER)NNG!ruE5Awtiw@$PAJsJQ}UYZ}&(Wgv1?;+)+}Ah?Eku4EnX*qhHy1 zb0xhU)hRJNOArkBc)H89v`zThYq6#q*NnA#kZo=0oP)t2UnfoYlHJm-1*gr`8AM_3 z#JN2|6bhS-aDrv6wzhSFE9OSSc2u`31?#g)+Qf>$AD`jTrg%qEIcSvVTP2EZogkXc z!+wp`4vFKSR9YUC#%gCq(_d<2C|%5GtTvw|kvIVs#rVGW_Oc6AK0Wg{XmQ~RqveqFv#KiPY zzB|NPB?){o+9A@V=FA;hy7W3RW2kkQ@uq`iRd2DCGEP~&kQ6fWZ_*l>NZYyMAJp1f zWN1oxJG8xZ&PHTbDuYE~he9dLu0w@l9im%QhtAsJ)&V7?CAS?!m`lnFR|knMD3lQI zoyCtzX}fMTJum2hHgX+fBl-EZQc}X$)KSo`U7il5I{?r9^QJ_H)n0nf;MKGy1mr~& z)AV3wZ+fR0^Rqeaq%)JaPNh+ZP$w%M$?i3tz)q3BPLaRDaw33|L);2>Ig!v#4uqC} zsZ#_~!=!v!=y!sMtlW5V)XZ~CoO$EAAhjK+m1yyhtD{xs{drk!6RB|-SkGZQXT-n& z17~dCaGqA6@+@3;1>nF7m4dUKk@*QPeEFF1c5yUtU7lWb*d^WDDO@Lv1tx{I|k9FBMPdfw=k0*1)t#iy1XFF}I6_4wrlG>1MB{SwBm5b}3nDLSd9WBO2@Xy3` zfMF_?D8<6_>Lo=4QaB(VS+Qok2uxCY2p36M&^v6kiYPLZPuNu;Q5dL|NnpDoaUBNn zz<;f60bWuD+>j*NLHs`@+0;R+Dkvu!OT6vHH5S8k z?4*tWjn$?Ah+1r;vZzdBNeC_9M-^)fBG^(rhT>{o((A|%p8G({T>`gf%QzrN zS16+@?58HF?OM8QYZe4=@6zLq1T+<+v6cR~j(%kfy_ApZXxh#d|1iW-KCXjG+f$u$ zHX^gqB5@t)irK|=!~#qpe$MkrjZW!KTzC!bjfqDt=#-?fvul7(3CoMdLc1Vom61ns{(L+ET~N zkcmuZX<$a$5a|=K?G#6nx14k_xz1lsdRdniw^c!0r;{%p33PP1;b?TD?HVr^*YS}D zMGN9OzAV9U9pAp1mBw{^#bz4U@q;nG^a>*?0mY{k*YTJ4vFr@7Fr4a%>l9y2)cLC$ z>S;~1wNEG1&x4 zpDrLK*62_W>aiTKFRm!!*!C;Gq6ot9tGuF!=*?zDk#1h0(N%gyk!J&OD!dn06kV^jQbF zd1Zd5S3R-6y@4s+c{6qu=0(IHT+Yo)54xwjOu-5QQ>biK3yunqEgP7UH}0kX^s9*) zg}IaV3IbECb2bZ(3YuLcFs1x9g~FiZKvGKwrWk2J-?q`a3QjXUTcFVBx-S!$$}f>@ zC!6OXl?$a?8cSjtmV9WDp&tSSc|jK((H&GoV=0e+QH|w>1$-JyxzMGj#O+#KW6`0G z+S`Ld>DuKk&OUint}=~fdC{>TwqlJ%4}Orw5|@+GSmM9;2Bvi9{qi&x;|ZSbGTc}Y zn9^=<)eB`9T!e(0g{wU^Q_gC^QGt}tCNRZiMQn4xf+JxLwd|-Z|GHX*3yy%}tQH*k z+Q^ViaA1mV@Y%&N#GR@Z6?M>mZ&?+_UC!PMSjMc@6$LFg62{gGj>WWu9LcLgu&>@v$b`6j=X;OQ?o^0<(K0#m*Y z2@Xv8j-IPDFy$*Y)4-G;%rpa20mY{knDUqRIio8KO!=W0PW1$))Pke-E;kA_+1`o) zJhLI$>OL#B&mFQ(>oph7S-kt)b#vDN!;2Q?Lw4v^`SgMIhHRB<3B`j1xt# z8W5#IMdZ_P)F}ab-C@vhM_6}d1l1uo(t~jiP#iMcC8{Zm7zN9aFg9rR3goh&9T3SG zg?Q4)aaVr&)jcCumD1S=Q9x))nx~fH7W&lOz!fQ8fPrh57rqJMJ$luv($tF;c4SKE zn~?5J&_F1t3Vm5=V@vq|_3|TOjDXfElOF8B&L}{^9rLHxTHxak#EJQ;w&Y8YtE@nr zTA!qcNbedX=_+7H0$H!;$(MmqfuQW)43cXLTvvfBX;Qmhwj@;XuR%f&04B1L8@=9NwaAFIGRcrhk+_h!lJi}? zqBdAm+C{cm^r`_aSioqFq0uMnYDJN-mMm%lLl&$~(zS!BQG09B)Go?Ir-@d}h+t;) zbR-ari$3wm&_9&#J-NUTJ?ScNK|+;kWhX-Pt<_0jTz1}!U8;G} zFbEe90%@XXQORh%wAQo7G7LC{z#xLYY~u zPAaTZR03qdV=<_;dWB=6-t$w~m~v7=7$7ke25#zM^RT&H(!kLVk%4IwYbWXVTUn%zsgcJizqajLnV4iHoitT zbq47yWyEKcjh{)-Sg3G>5K}zgQvL`D%ueVMmo9p-7A9eX3!tV`jBZsi18$3kR9Ts1Z&yAzEUOZ)$>+ zQDF^g$l#?)LJe(oT1%DKg|k_zTZ7DL`v0IrL zrUGHpjGChQ=oQx{+YPaPR(fjJEri(AZo#=4E zt_Y?+rogjoNf*?^lf4}sNl|XulHpTde>b$XBTg z&Gr}iou_D<<(2eKzw{Qm(otM)>~qq%FTD7ard~4&;Rkonm*4{{-A`@kFDIR^OZ$TG zTG_UnAbiFw#nT;WyVJ`qT=IG|gW^Lz*LF>feSl`b@7sDVzcdsIrErd{Tw&+0d9JHm z12})P6~7jR7U4VYR6FN8%krr@Q;9FaiCF2k;O1Ua5uWRFKAkgs`Od-Nr?*<=3_d(_ z)++A27x|7NkyCf{-7y9v*DF`vQj3S_YHyB_2*_}TDCdmBIIJEHMJzC3ih zemr{C;CHWvXYi{-rUQ7!i}?(GAI1+GzxN=Y!Ow=*uFDwuF<&PtBi+FgOH941QK60B zmvHv1;t2I^@?EFl8T_6?K0`m|H~5|Q;dc$>gJ;t6;+KJU74q5jGM}Lf^BQ;#!g&+9 z@m$|-{4(D+56k_?KI5qz92v|xP5FC==bh!6?BmINGB242NA`@C&Qt)#7g`PmQ;?|u zjBn{=Fqnc&1z-klxS?m?wrhHCxMABhExk7cgDI9ta_jA)ZAt~@H)j+kJmd<>83@o5 zv6p&_0W8cJ05GU8g8>HR3<4NH$07iIIUSpF{@Uy`KTp_c{*JcO{4@p+nDrtQlcHC| zl_1Fz$!kbeBqEx?EpGI&d1Buyy;2AcS`i8 z(F`h2gj&kFA|CBPJ%&Tjtt%p@e!CAM4ivm~MVv*}9m{j1bgziB#J$0W=IqX#A_9 zWolvF@#;Ie<2dX5%+pmSuU6r;$cYGEi^Abuz|&c@K;b8N;2v}ZyfEr@etH1-V<5&7n}w7Xs^%>^#R3GV56r^dw^d9>9VE)@VA7c z(w|%6nG3$^#GT1i(Z;%Pi_=#3NT?wlciNn2<6=B-1H8J$k2!5ek1VTk8lAR{Q3Ef8 za#Po?iVB~f70=VD`hd&V&u-b6iGU8|mq;3XjegdA7Cl{k3;5p2oc>}}%cFOIuV6}$ zu7=;ME)RjP;*b~3PnSEprnbb9Me%P{jrw+e-byz;i)Km5O`v^-|_hCY@?nAVI zta|~-`$aJ)7HR}RA=ju9a;E5J>4$2qAF88DKP)nIT&VR!l==Yja;i%7!!oTOVy9s5 zophEoYJIT0rY60zA(F1DQ~b4}R_lw!>bp_vi#1wbtcca@f?jZzHH0C*A?NfGr7xs#WwpSJU0EH)VT7*!bYPvjJ^mNz7l?Npa+DXrbq|pXOXDT<0p{? z)lr47@ULI)w?OWrzz2M5^37Q8sc*oK22NSIKN>y4evBNAdgWf@TUPFg_c6%5&Oc+h ze>$S%Uc;Gdxv!$!PeSf%!KRS=sv>e2-#sL?h+jUF=`$nwGpY=ASg4RD6C0hah}fEoun z;FoU$tZ_nV*Z|I&Fm-;|S+i8N*NoL6M?DYJ6?17LoSLSMkghrcRpC(kIzY0z<^{45 zcD*n*!jjl5ZGNTQPoH6Igy_s{gxIgAjSxCZ%^kqsPN_M>xn>S=rm_(ljs7^Y zP;7*1Z6icsBRH@TmenbJQM(|Tu8W1zRW%X7hYhW5cB5C8)hT_lrcUXTs%R9p0c~E$ z9rViSGn9?6jy3}32&b1QJrW8>WNuLvRdheSMCp};)+?)FtDS!$)Yw%=y%K>9x>)8E zp_Rt=+_$jnMzGzqYN%@9N0vmjDby$5bI_j)Fbu1pOemK2h>cMz)iJ4;& z?y>ms5bL=!e*AQ`w#|=deWCHJ)^KA_J1c6x?X1Y#&SyK(sqdlua(w@>JBGrxJL2G? zjVJm8t&#rG@amp*Ry6#Fv!WH>8}JP}$Xo+()c1Swz2!XORXcU;yyF`+J=&!G(deSH z6})`AHQbAIyW4cTP5MPgo%l1y&WpA^oNhUA<9X2#;RCL~M?D+kia$;_n)YkGqv3+C zLf>Uh)nl}QmK;s5J+-hgx{UO^u`vp~(LasHr9Zde8`iTuXNjCzAoQqy(pi1#&Ukdu zKc!ozejZnRgSiXR#U_GJUf{Q_)cp6j6KDP<|B!BB{!lm_KZS9%Du(+TL(wHm!GBx8 zSFy#9O)Z={l6bEZr^mowe~55?Hy*7ra446sc|F2*U$wHy!mse&`bq%%%nU-XSHD3X2>ih!Rg)M?7ok8fX6zDPR# zV*FIW7jDYa&u(8*zDW8}6ym1}ff-YtesKGu?|gxqZYSk`S2yj;j!z7Zj>MBqNxZL> z>l@#j&BZ5%dy_a*6{j)vj}DLFIOI(H#=+b`ym@kBym@G}zi+6ye=^h8JUW&gX>V;F z8rsnG=QnhbzVsQ6RHr}*na-=_g zz6yxOWjksW2_4Vo_Ta3jMCWc)_NJ@*`$o2o^bbu=4DQQrz2Wj3@Sa3Z&o#YQxAbni z7Jn|lnNbyH4XTXq`R_?oUftSwA;JP9SviagrbUL18~et`d{pqazf7Le4KGu;bc@Rr zF4oCI zZEjvS^Gg)TC8Bu-NA|{>bHii&+_Wdx+k&gD1>(vdyw)XBy<10e*}da^LtBUY_GX)? zvLv>JXlfyS|dM(x&&JM%bmZxrg?N|<)cLMJj%nldA zieDp|d;M7MrnT{{S8rS|Dtv9cXCyP&H?n?cFqa$3u8nUS9R#h$<5v&9CA&TajnAU% zUYn{upU4akzNL>S#fP%{vO_{6r0#90K7Vs|_vBvh<_==flE zVh-rqv<)^%2S=Kl zn({^Z$8*h@?7qSNZ14Ew2#B1uino<5J}^3w>qVWQ!Gu+?y=*}ldk05)b2pE9N_Lbj zsj>AJ>?~h!90T-tL5*Ey3rxuDx)L4G(AQA zS}jbLXSdxInDSa~cMNM54DZH#$7nAB??WH_N#9Nef{l zOTsYBSQpvKe@_J1Mwvu?1*Ki63hQjf|k%_^6PhXT*b4FVQc1C#yG#YD9 zHV5Sq1SBy#6S$*7>azJPRb$OWp;G)z#bDW_^&mu2WWHNEvxs+XG6L zVjzQWk+I&ifK-rIhTS*3xg5&B8cj~L!s3gBS^p;sq4EurxA5&XJyw3RZK}M`Y}JAe z(8~f^dfOANp2JMapN$0^vlAGV`*QH148leb1AAh9d~)PXBcnHtxKxMG!{vfr&M!69 z$8+fgOlT5OL_b*zWz`B4A*(Fo^1e~+ZUycqs`Ppcx* zEwb!vP==&(0&Bh#{431#_7jTE_Id}dEDu^?CNG}rQsxzYcef7JOBOp9t`O6Nm1QWx zE1Iwd#h@jv_67=q0E9v|Q1CFZ-q!#bd=ytl$m&fZftPb~%SEk8{C+eTKJ_DZLif>}sIO=HHC(s191oY9olI1}qYj?w7R} zNfHA1rEL5<65J*+uT=6Im;zyQ@SIvL2@rl_sa7i{1&jdpND;kGpT4gC~wU>h0NPrrE-5@hoC576Cn4ZU7ww90+b5V|K<~F}BJCd1}!KBXw zs?cvgEt@vLJ$XX~&Qm*&!k z;8S3tmQ>#5gh~b`4gr3xU8W$^g;CdKa+cE5`S4q*u_hpJRxG+(nAOtS`O03HSYLtf zA*mb<${hjZxQk^X;C!_i_#+DG;8E|WOz#|Ny9GbRWQ%qz)G~n{uhL*3_qrBZ7XXVvYzZgmG~+ zc^wf+nO<2m4RS>2Jq!ytQ|&LJQVV9ly6b=wCth?oTD4dTOXmZZl+_Jo{1BRsO7hrV z*`vr}Q(HIulD!bRm3oV;AmyO;Y!UV=R1U7=%*U_VamLol4x=6?gsGGRk4%2G{CGAy z(&Lq=roxS}0u)5)4Y7)72(K5dU#Ptbz=Wt8->YnA`rhQjyS*a0F*o! z#Mc9P!wkDQ&iKgsQk0RPj_Y(`H7UN5u)A-(Y2s!q)TrkC#UP$YwCVR1JT4#@+m;Im z5uu{uRP0y~naBZ5!LcA>)*_V?1k2|j6H}y_8M{6fL`+SY7rXCr&}Wl(8o7@#gLAi4 zbPp;JMJdo(BW9J>)V`JDnE%8B40DYGMR= zUQ*D0X=z`Aed_bmsHrr%fbr1+A0LO(3Q_Rs3}RvhCS4Z=ChlgNdfj`TgX+O@=8XZh zkt_O<7KXJGqr(*~xZXarM zrkc|#l*Kb);l*jK>uYhDPMBP^#vD^`HJ_7A`WjT%c)KkrtjapsZ5Ex?TNbJ)C*F3F z!dptpoZJ-(zF;A|fk(Pi)ae`CM3--%Km>l352+`5vpJ+*H?L3tN*_}1*;VbuL+W>0 zR@Ph}QlIak{E#${ht#vO{2}$4w`ROOa~|{juB!ou)ax2&Ux^|QPWkn});Y^V>g~5% z^v-zZO)2Y4=T)b7ZWH)UvH|zPJ6aS(5NPJixV- z^s7VMli3}L+%ZxtC{;?%w}%B}9Y6y1WarKJ0Ft~67=#OFnm&R7A5V9gfrZ9O537@C@4W}V~7+PO}`fCD{hrdlccmXs1TDJC7*{>5N5Sm%VjDNTb~`|)mJa* z8T2&%i|DI%F=&hGE4^cPp>3%4>K1*~PDN9^leqmhYHx21&{sU49!WBxXs6v=x`+6J zsubYRknf|4^%YON57Jk{he}_`>Gsf9*1;p-Wp>^#PhYiz|2^GhT53gXl6Ph4eQZI(*_n_~w%LyTs5Yw8=b4V7kNvLBxy$K^-Iz39 zpW=s9^qqC$2>NbTXVClf7!TnPjR0=<;SUMXlUuJZr>Hy0H>WkH&$F2wzUg3xOx{!u zWfgg5XQCC%f?koyTBamfHrd7VeVTXN=XT0Q%6BUty4xcE_m)aWdx7iGw5+s@(g;N8GcS{ zy3lFH{DRX$csf0VjDI?56dw>o8Os#*u=P>7kspQ4(mI1P3!a z#mVLB=UD`z`~)_#^-Byy`BCsG37^qk5Qy@RcZ^0A8}Iy8K^-c67SLQVR`lugg~OU& zRgFv>)(UVaG3NSl@H7_)`Pys0)tZk>nHY}@y<+8f#!ls00B*j(n|eJH&t*n#Sw@UE zl?=Se>yUQfO$K2=@(12P{BnUenNYg#^z-O>%tDooXCjN*+sWbI^&a>FZ~A3Zkp*w_ z#rkE4t&lW&)`~iP=7?H$tD4ma?o&VM(j6GG_c{ZM+- z7hKv4^a2m1mpo(#7`N7;^h9qqhtlijS<~3SL+NGq!X?IjqN~0a%F4Q52$DTpMvG_+ z2>>NJYmkak9}?`7L%1Hozt|`)y=*J<8dnRq;gHL zOj`mDa@H<|R8kwfvdlLRshlSj#f*DT=x8xEPi@zcAGGj=IeK1s1$az6IUpZkzB*fuly_)eX+Eo!2bNnpGDA{MWciHAU=cAOuqSL$1Ofgw30iRKa? zQ3+R|Me0^++I$}scv6*4SLC-<4V|T~F7!u!R4EDr1l)@J=+2w5Cp9ks2H|p%A04Q3 zyUP@;Ao4?GXLIy?0kUNyKPhtpI#0jW;!G6gPMj-<`~dA)9X(&r?7+y6DA~es&y9|% zWnjfcf#Fh!f*h4>bFe>Boj+@~0(~V%&KeFWe(=1j=8V2-6OVyw0(ejMBSqLs!hg8X7cGP9hjrK5r2G%PEzA#TRu*1=_{VH3jpFblkI3K(^qY@dGdW! zvA$veFi2l%WldBh?gxEkMSj4`vpRCVKo-jBD+aU{YCBFstT2imAiiTqnH-`#f|e>sZRd;pkQC+4msf*6BVW_xF;s_P+#C7fSX3nPQ_^j;bu0CF0XQ0L z6@v5l{amxE6a8BBX!%YRfs;OxIGlI(r6X#{0W9-e>v$W zU0U2#1+n!`vvUKZjG9~7g|;KS?8)-pvwwpkKfcZgj{NwJ0e({zYq}=Mb8Psp zbug$ML(5#ONg^M4$GTYrgM19rYs5`FuO1yekE@creeBa4zUfLqFvxP#zPKt0o>7UX zczW(vX;l)0;8%H7649H@swCaKLc^@|swA%fln7C}d%iN``O0^r=!OAEC&iOzZ7B#7R1+4KyaT*`F`SFmzKw*_tYtQ^tAj}BpgDcym2 zuRB#io*4>U!Qx-m5itmta|P4O?&&U5u!7JP zDx1}!r2=HjhOXR2OHjL<>S`3`PTDI7U9ryDELtjPc3|jAIcN$+L2-_xQi6($0%H;A z**5xLZ4UN_uISw7&{kR+^r9uM7%&`CHgsj_D~Wp8W1>f2y`YPh=rAgxuhgofqWa1W z9QgE=a$K$rH)=mht589h0#z;?yMFq1rT8_LRSoyln!0V8X;&`D|DrC0mFMjS9t6$TEb1q zMN2v}9HG|m%Q%Fn#DdV3T16zXA1cMAVTSJ!6-X(0Qkfkt3O= z-8yT~g6SOVT^Cu4%lBhMafyrPd~OA(PLVQLB>lVy8mqT9c-#bz41@`IUX=qjN2 zv_e<@@;-L0Fm&aIVz|^3x`Oy)(Nep$C9Bz`HQ8EzArtm)oYqS)U_0M#dYv=cO|Lzf zY~9(~(j~i}&(nT-KJpcbUFi)&jRtoIPHS7sO4o+dxRHYrlobs#V+K3w(K;=n1$`|l z7QGV11TY0V>WSY6sq$)(yL>{%8l;I5gZ9(DS5ZV%Le@w}9Tc#m9tIe9GuGijOyndljx>f`rR^UU7~86pzDD2zf>+Ws_3}rd z=gkdmkgVrapW^Vxu7tK~<8Rr-yr3%dVWo{N5hc(|n1mq$TB}Td zum(G#00q}Jm|kmvkH5KM=9*JCLJLVU1N!%BwCrIrHS4sg`=GSkob9D z$7K3~i#>o#;5sJBLtO`jWUXT&db3%_q?>0PdQkp>>zG7{7(VlvcPdb(52herK#*+n z4lM!)U>cp$ehZt<(p3^W^UQ3BQhptiZr_aO(E0Y+6^rPblMQusv#-H8p{!Vu9;P*q z1vyt`yasv9a*PZaAP-3SlP+Wx|< zaMFYULy-3c^IFb5<*y3Yr}h zCQ_^Y3P(h>*iWTWN=k?V5M@5`igs09wmh=LC+P)jFpFi72bJ^s%4rC}Wt? ziWV6fij`IDP$C}*MOtKlHD?oPX`ed{GqZq^X^a}*Qu@p<53dN9dX6{>iW%89r?uRP zT{xTNPQET=G(`*@aK24qdL=mG1Wu~Uu6Hs-5a|*?geNf`8W|>8*fgVNXUb6W%tX|S zA~bw`W`)2TTes}tHHpnkjVBRpB)vBjL5?8R_ z9SY5A)l)#FGJq8JE9bql>sK{H&Zr5r?$_CS!OZ3rni6v*$msOeX~mCZx`jW+w`KM~ z28*~JE8nJfstl(OP`Fn7NcRe!`)671(kJ8zSo)-_DNpRsnB&A;8-gFM;oC+a2`*gOF7x5*Y!nu?HIjDuXGaE z`1;Ho_jMSb!qjU{A^3RHMSPzgMXQ&cf};L%(($^qFGQ~uZMzB4XXt*?{5tK$Pu|E+ zPz1^6=B%l4^kttP}?(y8*3gM?%SJf-a3-Y?j7$N z+RD48{>ioRp}~>tMXl`#HVtLs8z&~RE-roSHQgYcgvl zYUT@vBypIh_O;C)>}1#c!A`ZzBkUAm2lx3Emt6arzTEiWO&f=BfK|LdH#)w4eSC1F ze{_62+n;$wYamds3h46w4zsOS=WHw}!98D31J$Y~U|>EPBUi0%=dookGe z=!G)4T$P=i$o_Ka)Y(x%|GfZsb(PR1dA{=Cg@emRamwB9!I2EqRa|vqJTsY%=SJfb zgKx>khX*Hy`@nK@-LqYl&``-hM#(@XJD;4Enm;{-H->~?F1a>-$@a|~0~CG#WTvlY ze0+4gH+Rwe=;1`i{OR~ahv>7Ja!ASXG1)bLcqhAB*)Q{i_x$lwva5X_@t(giHIhWn|uD z9zN`Oggt*UpKPB;*d6o8gB|lo@6P#?%T(9=>66x$c^v24<`3^w`#jRSeI9Aj-s!aL z+0(wKrE5=OPojNKD$4EBArxAUX!E9$a~I{t1?_tcrq|MEL`{;>N^uX@G#Ut1nZFFpJF`*v-qPA|Uu7l*%g zZ*98sC%tdG_TaPKi+8ncT73CGbbohz;>l}o{80BBUO)M%_dWCG?$gKkokY)^NIJ`8D^v^3am>hHSRJP>v%AG+`SPHxM}`##jY^fhZX?R)mk-8=s9r@y}*@c!^Gc5gZicnaSW z-SQnj+5Mrvf9czP`}Qw(KlgwBX2)3{U6J1Y;hKMY|9uywAAiTDd*AZaE$M9^{lT*z z+q*G+$sJ#L4+t`_k_nd*CbGKY8d2PwW`o-`#loRjWVrrx&E( zb^5jMd&?&_r|a(@-Ff(*U!A`H&R^X3r>D~CZ!N#~C;RSudHUVI(fRTFe#1$pr=A@A zv#%cOzU8)D+dY5wR)vrA?e60Pe{$c`-|jg2v6FZI{JxuSNx$mZ&tLhrpWc`L`_Pv^ zzPjV%=`B5PT=DaB{yhD!yO-Vh)W`pK`jhYc$ZNiL(M0-N+rRnm6JNb1y}o*H#})s1 zSNe&IHvQfg2S1eV`0S5g`{OeoOuzNYXTE;HsgI|B{)yju*Et{i-|2TAy8i=D{MDOv z|2@#%QgzSqrsprbu;!B=_|3a^f3JJhUp{p4RqfAr|Lc!dcYf)%A9VlgK+CiL@0$;G z|KC^by!5Fr-qij6o8NQlbH8ZpzVQ3+{A%jxCof(y_InK{zM8uDH~(+{pYQy)-@fQ; zoqzkU>o)wN`@xq!d+7I0JL#hf|M9Pezx9Lemu7D|=lY*L)cxdmInI7c4+;oE=urElG)`t9lNFsj; zzt8IL?(GM^duV&?P*3f_uzc4Y+!U1`4F@;H-tajmDE$qe!&8;E|0K%B4y9MV{pjRM z`L+Czv;Szrp*nSQFuMBruO2v>Tk!dw=R-e?;;(b&U-mrzw}dd8vWH$1JG8y_(596K zLx(oS4{nSe+O+!M#@N9}-|%o$aPEnn`IqVCf+;Yue;-RnNfbOimafbHisgUR=6^Nt zmulzL`%gwsJoo(b&)@#JFdmXZ`UsL$rC^=o2QQ5u>N#=n($xxu&pFN? zfz+SH2blQj?;@foF6^}Y?w;jnP~F`<4fv|PyQdCcsJfP|yjvCdSe4^w?yDsG4;M@; z`zt`#X+ZC_iCB83l|MKpAgI6r6{WuOnluwRz6%51(i#-LeVYoR<;& z+<$bXVTVIKb$|18_+ZZo=pd?&l~f(IqBq!WWC<->2YXKLzje8j+j*#G`Kx+Pj)Q6Z zCH9{Po!7Jc?MHJjy?g)A=8z*DzdzK2UmD2gd%o>Z4}CiXJ@oDUr$Psgp80n08uY<( zRB)*0`}CaBz+;D~;O^dr%1)7+4qii?1i!yO*mHdUt;Zc!7Go9UGGArik;=Zq z%Dy9&P3{0V=*xo-lOo%cu7%QtIzvTJx=L(L9^51vbQ@#>*&2R$-a$yq6Ne_B;=Lir zQ3+qYM8e^ou&@&#G_yWS#TRHP1)??M&w{msBC;*(LRY z(wUv8{gRJ`_J^JO!cb4ZvaWl;aXu3Ia_CUR`O}Dc_R?4U2XxV&R~-rcV3G5!1s`4T z$BUfrEULoIA1+ooDggvJ3E#ZpGXp$WS~wPeLB9|g_enDDlNKcpPCiM-b%%sU6ys78 z7WR`zqXEjHwAdK6u4M8N1ry!zJfsqRamvXpzkC1KmLOtTi0~(Q;Azv5M%A|e@B&-l zJb4cK#Lj}ZUpJ(zUjA>d(IYQvbR#u$pwR>6qGu-h3;pt<{?dc&i~37UxEbg#tBBE< zg~n-FyLRrOV8jbHcc+C*NhmMy_@r^0{rL3Xr5&7#j9F6=`FZg3oa^ejZ%ltj9sIbv z=P@(Z!>ID-5)v_uUB`NZv5URJlFRBv7S$yhKu5d3-Lpt{E7XKjA1%YZ_A5xs*Fxxrv~W?+K-}H)UeiPHA|1kA&qIfL-gmI)=%Jn?2YVhl z)boLZJ&zvh`ICb^Ujk2J{z*207vmwtG%?l(4#0(9aAbVSfP;;txdt=i6T&qoo!t6E z+fQI_LasSb5!bxu1i0p3kQGe+Da=sX@818kE=X4qQ}5n?6B$irxL%f1h0j1?h06a> z$$O8Hy!R-{dyn>Fy~q;J|4&uM#aMz2QuGS#`0h*THGao~PSgF@hMZ5~zvC+Jjc&c6$1&+$`6NCqf0=U3SpfIuK)85X{we}j z-pLKZtYm)F7zXX)=Qz$H((q5+`j=~(o{vXNzX12U?r|K7@4L=+9Qc;tl7dsp3EdK_ zjYi*z;t~(gAYO*=jf-P%4{usjWj{Zw$n#AB&-tt|;CX+M=j{7TK>ia&o?i}}gWwMr zd43O`2f_bIk>{w^ffFx~4jZQVJYFO}0~SGaF7})+PMG|*Jn*Fl^L+FEh^H?rEwd6Z z%(VkQ47{HG(RV~}Z>LWMq#Jy$MNH#0R=SN3V;+QKU>lf>gFK6VFwae$1}2I)=UL?l z)1*BZb)4sXX$J0JpaauZTF*P8cd{)uPd8iX2Ifyut{BW8!wozWn9U1|!@LlJJ`a68OpV&G;~_5uc#+44(IwNI!ryewZ(cPri}(N%$YY=L9~*(jP&Zv3-Kd zA4j^efr8Sb=oe!P1*NY>y0M9Z(h+!;YXklUrDsZ{$5G~hPN$9GDX$rvdHzJ_nJSWp zbovtV7+b>w2g)^$^pi+8c7-Qh*FzX}Vf?`bcJ<-{7))Q=NY@MR|V%;4x65r)b(oo2*789o#(pXJiF{XdxG;E(0Mp^d+1~9 zzcP8q>tE7&IL3S6=zch<(>cz1()C~;N4YwTv1Y7~{(tt~K0b=-eE*-#E+ImMD4?jR z28e=+m_R^8N`bIIBs>%nMTIUQ*^od;VzR+tQPF^cffkioth7Z-En2MD(w17PQBko{ zrPfxgplGoTik4QiRB8EM*O_Z}XD6FA^x^mEAHR7K-gBRGpZh${nRCv}o{7N0$+vF! z)X9U6bH5MV@6vJA)lBF(_x!+*6YDI24v%E%*}%BYweS6b=b@Y+Jv*S|-2VgbxpZ9V zX@!n61_=DKtqxrHxWr1aA_0=!4$jj^u6?9f4QW91Xit~xAsy8n>(Qm0Z`>jQGH9Qt zk)`H5mIlgYwts*ux6jkaW#&AlOL@8NA0ThD&(lbbE8OX&e9-m}kStD?1IaOlTbJ@= z;}!{!Q|Iz9&TOAU$y-Mi)Ova?IG#G%WS# zvVB}>+DIfoUS*%BkzAK@+oinG_79K`*ym{^$CPee$}P5kfPBh6Pa`>Ybn7BX?Y7B& zp7b*8HWNM)ARn{O(@2gv-F7K&HExjr`4js*jpW$Ut(z9w|k_Lv&G2tTtaz+s&7ffYM-Z(97nr# zDgV><50G3W=Dm>QnA)vNd5`TMAb)S4r;%JIbn8;~88?hIK)-#SMslp})}`Fv_79Nf z+vjN{$J}mR%C{M}NPt{vpQn)=)46q%wKJ|g{$J~IuF%mmaL&+C-JSmfc{`Ev{a+}D z;0cu3|AOv`)bWYva(>p)c6K7VoUe7%F6T;aU0&DsnQJ=|Airaur;(haxpgT&X51nH za=U$=Mslv^)}{Qhaf<}VqxN|k$@!RD7s+pT4C75N!#-xhBMsno`#g>09L{Z*@;{7Q zBtRaw&(lcG<=ncIFEwtF0C|~xo<<(SAjYkGmARiW)!(@UtJ>%t%PJQR88L$YTQ@JCG6S1k4H?`pVuV|=9)|b4aAX>`^bMDdt6UhauEz#_)+ns8FRZM#7J&^s`2kL< zs(AKCI@zaZqf!=@G+I}H4Ltb@PT+;JXX#|0W}S&8!f<1xp)Nc@_%wbf3ZK85q)b%tm`cq1sS3YXMbqmrpa!&`FT@izcRr zOUfo=BgkM?m<3(5xHgRXRv7DHgr`={48Y$E>2EV6VS~ ztzckQT$`{$SO#fpfX3rB+p{;ydLb*31(O7KRPp9US-I$*Iu^0p$|!3s!qwGZTNkmO zaL&rDcX1l7E3d3xWZjIe%swr*HrwZ=bf1@P+<9JZ-3g(-vbwg?`lWMLZheH)y3)C@ zJObU8IV-msaf;nNE75aYTjy-<85)l5t{X!6xzj@xHT4mz{yay?rGZ{1rm?zzlGc1< ztTlbVgL=<*P;b}(SG)KAj7;22(e7ix ztbHdO;?oljQE@?=e6*XiXc5>M>VKgts9k2C9n>zp2i!sJ`e`?4tU&B&kGR7otg2WD zJGMOBVxwvQjD&i_PX9N;*0v2BcTu}5+fM0M+#yb|Tpnv1w%yq5lKdk=IDOHTbtSd6 z;kt3*MU|ytPnYU8(|(6|%SHc+HMi|i*4Y@~u(KbF9XpHcQ9~>(cJG|zreQsb;E6Mo zxOEN8GQ*+a*seG}9cwVis>T*_*EW>Yh0C1Y&1`NQDl zNX+g?tvjHSIJxfBxYE}4{xr&}9b%H2FpV$fIcadb5wkjIYt>M%XDoHl;fT_zGLrfIb!Nq0%ap9PMT%B0+31-$h}r*1WMxjC3rO)hC< zM;KgWx_h%Za6$E=lB&uw`wlc7gMDrm-^P1JLtS}EY1k^`=U=T*2)%TuenDkzsI;cK z%z}Y=)n>L93gP1jIZyy{Z49+3lMn_S6lnvLuD%Bo1Xj*io6Dlz?KNi%A0SRN{va>ba!f^nhgQww4d>4rU}CNj3B z0hJM}W)o&caejVq#tiG?$iiCwHI_$0IXH&ql;@fg3KtCzIkzf(NYim)4l*X4tf>q_g>PX$n)K*oNVp4iVNnK^h+^X=Dl7(R_G@)?n*fE8n zP(i4@xI-O}8;L5Z3zb*n3gA7tq!dL}Ss$q^M-Trt;UIi+K! z-4TuY7iRSdqCwMg4RG2>qfFD8Qe0RVnl`myN>OlnC^&uk)alGkdE4<fHIbjO}_t zOCN7qdR4d_7f9mXZb)1~BVJQKyrRlN1qBv54Ex*ao`lYiCDi@p5ARn&uEQ4;7S1)Z zoA5$ho}~-S&>nfKOVXPxuIOlQQiqS^SoZqhm6c_Yih_b6gDrdpq@cRI<_h%u?9XiP ziQ&q56%pfa`lGQmY{)45P-tFtL#VW|aY)JB`e0+MK-J-2QBu`lSAnY|;&cRe8ngb# zE6g;5$-&8?F@=Rw^VtThvT$vc+Xji-$WSH95y+k5z1 zp+)H22YGLN_T9e-u?^+Ct(xq_Eq4_ytR0pY!u^Z4Vcdnw!_&f? zpTu>Q&cuXibCu-Snz}MHWAyO(C;^K%acfHP8qjGF<&xj77H$68Pt zyp)o;iA^gC#mX1AGJH_M)L2nXO<_shys%YQQ^{L7@2ZhT_QjPb^Dx%(*vHvEyfVB$ zUt1hB0|BkB;<|{=&`p;bi&M>H8ovw@Ybz#g`AB44q`11Ori34OuqK7B95a1dXhy-+ zLCf5bc}=>m{`tXSc3C63_@;@wcd)T-+te*B{t6hDhrHUeK)YW~c7aCA(H_^-7gv`o z!nZ_tU*dI?kNyMqj#zGs(F4`i*3@B*yRdR$rG2|a!yi9A7&OhE23^&gUsbZO)+(Gj zVQ{ETt(I4n%&TWc6OO_v>rLb+HW?nwipKw#&9fpZ>W#_4&b(J-Bl@ZqnHJG1Y?0oUabOfd@ z-8o0FqQOIH9H42tyJ2?}%8u?+o0}cWOx*0rjM&kuAPwGUdmO#nBdCh_$%@_e^RmRF zIukK7Sv1&A#E@7_#nlU{Yp%mI=IS9i$=ArHRm`8Z*fT$w-gZJ5Yt#u=bFGrt?8J&x zRMuN)9xF*J+~{>uHL6?SsG_d2)(qxCt4`DuZ z_241x3ESM6+FtA|4 zl*z#|zV|Lz6)Jc8fY2?i7((jaY<%;e4z> zU>U-4qEW@Jv$!`AVhze3Q|i{l`9xet8128}M;9^s`MAXJxS*uYT*tU# zo#*ut&szs^UpsWN(xKWeZSz>zbr%^^Td7WSY)O6Cx~{aIGcpdl+8vV2XH)OUT23je z$y_b2LF{7JAU0ZS>NlK8kE%BDePeJ=wiSEKrB^o0v*mKDMzf!|8xFTeACm35@eIjU zZ8&8eACcKk-K~!Z?aLFLtFuCa8q~bdn#-wT@>_{%E;AZR?Yp$ADYp3(rqjR2+J!Uh zsBLUDG{Wn_St5w|2}eA=nr$ZP4Ok z5jM1EyJ*v+Saa*~`bcR7O5Pq$B$&NmnbCb=+Y{N?%*@qjVWl3+ft97P8<80phS00P zzTFSta>k&^OllL4SEKX#>A@KVLSPUWeS9AO|I#X>*6xEGGoM9F`ZEqoTkpJxVjE)1Zxv@cK=lzsjPAq)$GJZ zOQ&GUjNhuAZ9`3@?Fv}z9Sw^s^QJ$o$2VEcj3Zi+rZhd1lZ0&s z(^30|=`8OcVYs(W;-1Hw@o{mV2HJAVn@Q(bwzYl>*Dko=Ex&7**{fb&n(7iG?fBK|L*h^r-R8SO}iJ?$%CZ5OygVQE0 znm(zWRl@l!g*?8US-NPbsSEV!&PCCo;Ygbnibe9c&+4{Y_3km8_gm0rA-cUf8fuz% zn;M$0w?Y#qzr7Z3T14A-F3jyOws2uj3b;-kKPjj;OVaJ%!n^~5_@aq5R*jfk!)oKF z3U{rr#e&FhJic39q4g{Kl{}31IG}eeL>E^tOt{`t<{<~Ed@6=J(Hare4-wRj#Lr@0?C zV#OL=qxnL#=}F>yi|C}CL5gr87Ecd`#uiK&r_7k;J+$xYxS?C@eHgprh~7P-g9}x< z8C=9h&8BAX3=NYPd%B8qXF1h=XWG0H9W|%cW@?;|Q?WS18GH!+W!w^*sV7Cr8!T7g z+DozXB6bbl+v0PLEW2lq#_4`w#brepk*dgJTz z9LBKj*W~jD@&sQ~cBW*7&?e)_M4cp3XS9+q#u6eHO z38*P*b8<$BQDUg*U^JG4{%s3P67z3;Rqd*&BsJvtmnK88TmSK3h(*>xVf zzy=TI6(eW&UC6|Pr@eJ(o30cmeQxJgbgkYjj=w|`YkBXZiM9A%ihIJCSj#)saBI1r zGtCc<%V9fn<2z!@J?0^@c!&_K;v(}9NI~{bM^kKxlWX=1clnRXxb=s z$Wo$WYGVmau1#6GlBb1`zwI%X4Jklj*`u&8cSBm-VJkG`~QC4K%b7YFN8Z=XNnH(Y5JgwCX&l&bH<4mNVns7fprILw z{W;EvkFmgYS2Jw~6FD?*I+;4M@+Z1}K27*mF7OGA;0hUx`_<~CY`s%s+QL3qXDBCOM5ResRCx|)Vs zd*I)(|G(eWvQBZS;%5(LZ|q&*7X0xIbpCnu_!9-bRZhJ}@z*#HIIC61`AjppZP6Jm)<{;=pAwC9Z#Zn%%#U4?FXdmz0SD_nv-8&61{Yn zUP=-@ewfv<=TD-S>C)?zL@(Q=*ExyaK$l)x61_Z^-bqRHxW}!Nk1k2{#<}$Pv5@x4 znLj^r?6EA{(<^f6ot#8(mP@Z&61_5)-l<9Ss$6g|wAZ%~qWkGS+MPNH|rrI(sSFMywT zIoD-Q61{YnUTzY-o-Vz?N%S&ZdQZE`g+FaXFblu-Ge$gZA$4#1$*o# zoP&Bip7huo4tp7Jr@d?N=h)jVd(QRo3hecRzjHYG-Q}@2(UsrXPu*aV- zJBMTMBagi~u;=vSAt*cc&Ot^Q#!26KuO_y47WCZZSK+c(;<6X?*eh_2 zm%RlZd&}CfH_v0Q(Pb~}vUi8a-d5OiepU^&==HYRV{a+!Wx=2II}d+O`EBvo`=A|r zn?3e6xa?KB?7if%H(*cV^u6G**W$9bz-8|PkG;9DcfZp}poeB+j(0uw_QPHye3;*b z_;d1`jS~iU!UcZsvp8;c4(D`)^qh8e+UvgP_6gK=!ViOajQeZC`Xd z1gJ&ZU$e*FVb~i0f3}yU_;bpSdk4GoyQ&>~TRir9<3{1wyTxViHIKcQ+p+gskG;_@ zd&^w*{^_yT`wxlp`-#V1h0ETpE_?kjz;@^NOR$&ddOHVt?)qH=drp0V- z)Z;PRV=oN@LdV`W;P2SGRrXSpzD(HbX)M_PIrZ_7C*B*Hw*DPJA z+llviPrSonuUphwtR4Kx6YoUmB`Uu^c;d}*<#&TC-Y%##=E<-8&TPkCD)ij-JJDtD zewV!=9(xtAm#982_Sl=_vbWJ?Z>H=y^$~%+MD?-66YmP>p$MXfQy-0JNEW?>}_z_+w8K}32O!J`fY)| zMD^i=9!y4$Z7zF1aM`;+_MH0I1$&9=V~Qu<{q5xAa!zzj?+@iw^qFN(xK;W&xc`e4gxa2E%M*qinS z<_oHir(E`OWiJPAJnq4Q$Kot=YW|}={*9KN)9?1YEXAbB(RA9uNKd@Ae~6XKGf;N& zF<17S@V#NrJ^yv`vA~nQ>Ci(qqKA{d8>Q#Wd#?1P&#`x}C*EtI=RO?0Q{d=~A?Q!N zA0n)CIC`Yp!svNuSJ;B>S8(5gKjxSHE9=&6ulD*B>p4cE!?EYc4&Ckn>o3P0chVm> zlA}Dv?G1UXN6z=i<2>?sk37+1aiZC}kKe1dkBQa|IN^7z9r@clc~GJ?(K#{nTLm8Z za*sU8BNuw)$sT!%N1p1D*`vh{zxBnKfHS{YiHte<(~{-1!~fq$m_5PoVexd zV*<|n))J4*m4w*gx0c2PocXO=Jn}M+e5*%Z;gN6m$g4bZ^ujjoert`#pEJ4G;WuBe zcguHMkD|VKaPH#6$l__p%q6PWv}dj_G1crN*}e}!rmih>BoaIPW+vs9zY!B~=C{^+ zWX@P(hu<>2Q`Et4ZHS)p#Bbg2kvDqe2Rt%I;IYFW>-dbL-+CzKi8H^o*&}nL8aw>v zj^UO$qKqAWizC9=;kSMq6L987`5s644Zyimey8GEUK^Fidi1w>e9$B5GT>a>g+=m}2avy%vi^W|0aU%()A03

=Y46mS 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 z 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 kFMW{kdm&jgFZ8NKt3Pn|zs|;1HgLA7 - struct CT_ASSERT_FAILURE; - - template <> - struct CT_ASSERT_FAILURE {}; - - template - struct assertTest{}; - } - - - #define NPPST_CT_PREP_PASTE_AUX(a,b) a##b ///< Concatenation indirection macro - #define NPPST_CT_PREP_PASTE(a,b) NPPST_CT_PREP_PASTE_AUX(a, b) ///< Concatenation macro - - - /** - * Performs compile-time assertion of a condition on the file scope - */ - #define NPPST_CT_ASSERT(X) \ - typedef NppStCTprep::assertTest)> \ - NPPST_CT_PREP_PASTE(__ct_assert_typedef_, __LINE__) - - -/*@}*/ - - -#endif - - -/** \defgroup typedefs NPP Integral and compound types of guaranteed size - * @{ - */ - - -typedef bool NppStBool; ///< Bool of size less than integer -typedef long long NppSt64s; ///< 64-bit signed integer -typedef unsigned long long NppSt64u; ///< 64-bit unsigned integer -typedef int NppSt32s; ///< 32-bit signed integer -typedef unsigned int NppSt32u; ///< 32-bit unsigned integer -typedef short NppSt16s; ///< 16-bit signed short -typedef unsigned short NppSt16u; ///< 16-bit unsigned short -typedef char NppSt8s; ///< 8-bit signed char -typedef unsigned char NppSt8u; ///< 8-bit unsigned char -typedef float NppSt32f; ///< 32-bit IEEE-754 (single precision) float -typedef double NppSt64f; ///< 64-bit IEEE-754 (double precision) float - - -/** - * 2D Rectangle, 8-bit unsigned fields - * This struct contains position and size information of a rectangle in two space - */ -struct NppStRect8u -{ - NppSt8u x; ///< x-coordinate of upper left corner - NppSt8u y; ///< y-coordinate of upper left corner - NppSt8u width; ///< Rectangle width - NppSt8u height; ///< Rectangle height -#ifdef __cplusplus - NppStRect8u() : x(0), y(0), width(0), height(0) {}; - NppStRect8u(NppSt8u x, NppSt8u y, NppSt8u width, NppSt8u height) : x(x), y(y), width(width), height(height) {} -#endif -}; - - -/** - * 2D Rectangle, 32-bit signed fields - * This struct contains position and size information of a rectangle in two space - */ -struct NppStRect32s -{ - NppSt32s x; ///< x-coordinate of upper left corner - NppSt32s y; ///< y-coordinate of upper left corner - NppSt32s width; ///< Rectangle width - NppSt32s height; ///< Rectangle height -#ifdef __cplusplus - NppStRect32s() : x(0), y(0), width(0), height(0) {}; - NppStRect32s(NppSt32s x, NppSt32s y, NppSt32s width, NppSt32s height) : x(x), y(y), width(width), height(height) {} -#endif -}; - - -/** - * 2D Rectangle, 32-bit unsigned fields - * This struct contains position and size information of a rectangle in two space - */ -struct NppStRect32u -{ - NppSt32u x; ///< x-coordinate of upper left corner - NppSt32u y; ///< y-coordinate of upper left corner - NppSt32u width; ///< Rectangle width - NppSt32u height; ///< Rectangle height -#ifdef __cplusplus - NppStRect32u() : x(0), y(0), width(0), height(0) {}; - NppStRect32u(NppSt32u x, NppSt32u y, NppSt32u width, NppSt32u height) : x(x), y(y), width(width), height(height) {} -#endif -}; - - -/** - * 2D Size, 32-bit signed fields - * This struct typically represents the size of a a rectangular region in two space - */ -struct NppStSize32s -{ - NppSt32s width; ///< Rectangle width - NppSt32s height; ///< Rectangle height -#ifdef __cplusplus - NppStSize32s() : width(0), height(0) {}; - NppStSize32s(NppSt32s width, NppSt32s height) : width(width), height(height) {} -#endif -}; - - -/** - * 2D Size, 32-bit unsigned fields - * This struct typically represents the size of a a rectangular region in two space - */ -struct NppStSize32u -{ - NppSt32u width; ///< Rectangle width - NppSt32u height; ///< Rectangle height -#ifdef __cplusplus - NppStSize32u() : width(0), height(0) {}; - NppStSize32u(NppSt32u width, NppSt32u height) : width(width), height(height) {} -#endif -}; - - -/** - * Error Status Codes - * - * Almost all NPP function return error-status information using - * these return codes. - * Negative return codes indicate errors, positive return codes indicate - * warnings, a return code of 0 indicates success. - */ -enum NppStStatus -{ - //already present in NPP - __NPP_SUCCESS = 0, ///< Successful operation (same as NPP_NO_ERROR) - __NPP_ERROR = -1, ///< Unknown error - __NPP_CUDA_KERNEL_EXECUTION_ERROR = -3, ///< CUDA kernel execution error - __NPP_NULL_POINTER_ERROR = -4, ///< NULL pointer argument error - __NPP_TEXTURE_BIND_ERROR = -24, ///< CUDA texture binding error or non-zero offset returned - __NPP_MEMCPY_ERROR = -13, ///< CUDA memory copy error - __NPP_MEM_ALLOC_ERR = -12, ///< CUDA memory allocation error - __NPP_MEMFREE_ERR = -15, ///< CUDA memory deallocation error - - //to be added - NPP_INVALID_ROI, ///< Invalid region of interest argument - NPP_INVALID_STEP, ///< Invalid image lines step argument (check sign, alignment, relation to image width) - NPP_INVALID_SCALE, ///< Invalid scale parameter passed - NPP_MEM_INSUFFICIENT_BUFFER, ///< Insufficient user-allocated buffer - NPP_MEM_RESIDENCE_ERROR, ///< Memory residence error detected (check if pointers should be device or pinned) - NPP_MEM_INTERNAL_ERROR, ///< Internal memory management error -}; - - -/*@}*/ - - -#ifdef __cplusplus - - -/** \defgroup ct_typesize_checks Client-side sizeof types compile-time check -* @{ -*/ - NPPST_CT_ASSERT(sizeof(NppStBool) <= 4); - NPPST_CT_ASSERT(sizeof(NppSt64s) == 8); - NPPST_CT_ASSERT(sizeof(NppSt64u) == 8); - NPPST_CT_ASSERT(sizeof(NppSt32s) == 4); - NPPST_CT_ASSERT(sizeof(NppSt32u) == 4); - NPPST_CT_ASSERT(sizeof(NppSt16s) == 2); - NPPST_CT_ASSERT(sizeof(NppSt16u) == 2); - NPPST_CT_ASSERT(sizeof(NppSt8s) == 1); - NPPST_CT_ASSERT(sizeof(NppSt8u) == 1); - NPPST_CT_ASSERT(sizeof(NppSt32f) == 4); - NPPST_CT_ASSERT(sizeof(NppSt64f) == 8); - NPPST_CT_ASSERT(sizeof(NppStRect8u) == sizeof(NppSt32u)); - NPPST_CT_ASSERT(sizeof(NppStRect32s) == 4 * sizeof(NppSt32s)); - NPPST_CT_ASSERT(sizeof(NppStRect32u) == 4 * sizeof(NppSt32u)); - NPPST_CT_ASSERT(sizeof(NppStSize32u) == 2 * sizeof(NppSt32u)); -/*@}*/ - - -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \defgroup core_npp NPP Core - * Basic functions for CUDA streams management. - * WARNING: These functions couldn't be exported into DLL, so they can be used only with static version of NPP_staging - * @{ - */ - - -/** - * Gets an active CUDA stream used by NPP (Not an API yet!) - * \return Current CUDA stream - */ -cudaStream_t nppStGetActiveCUDAstream(); - - -/** - * Sets an active CUDA stream used by NPP (Not an API yet!) - * \param cudaStream [IN] cudaStream CUDA stream to become current - * \return CUDA stream used before - */ -cudaStream_t nppStSetActiveCUDAstream(cudaStream_t cudaStream); - - -/*@}*/ - - -/** \defgroup nppi NPP Image Processing -* @{ -*/ - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit unsigned pixels, single channel. - * - * \param d_src [IN] Source image pointer (CUDA device memory) - * \param srcStep [IN] Source image line step - * \param d_dst [OUT] Destination image pointer (CUDA device memory) - * \param dstStep [IN] Destination image line step - * \param srcRoi [IN] Region of interest in the source image - * \param scale [IN] Downsampling scale factor (positive integer) - * \param readThruTexture [IN] Performance hint to cache source in texture (true) or read directly (false) - * - * \return NPP status code - */ -NppStStatus nppiStDownsampleNearest_32u_C1R(NppSt32u *d_src, NppSt32u srcStep, - NppSt32u *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit signed pixels, single channel. - * \see nppiStDownsampleNearest_32u_C1R - */ -NppStStatus nppiStDownsampleNearest_32s_C1R(NppSt32s *d_src, NppSt32u srcStep, - NppSt32s *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit float pixels, single channel. - * \see nppiStDownsampleNearest_32u_C1R - */ -NppStStatus nppiStDownsampleNearest_32f_C1R(NppSt32f *d_src, NppSt32u srcStep, - NppSt32f *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** -* Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit unsigned pixels, single channel. -* \see nppiStDownsampleNearest_32u_C1R -*/ -NppStStatus nppiStDownsampleNearest_64u_C1R(NppSt64u *d_src, NppSt32u srcStep, - NppSt64u *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit signed pixels, single channel. - * \see nppiStDownsampleNearest_32u_C1R - */ -NppStStatus nppiStDownsampleNearest_64s_C1R(NppSt64s *d_src, NppSt32u srcStep, - NppSt64s *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit float pixels, single channel. - * \see nppiStDownsampleNearest_32u_C1R - */ -NppStStatus nppiStDownsampleNearest_64f_C1R(NppSt64f *d_src, NppSt32u srcStep, - NppSt64f *d_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale, - NppStBool readThruTexture); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit unsigned pixels, single channel. Host implementation. - * - * \param h_src [IN] Source image pointer (Host or pinned memory) - * \param srcStep [IN] Source image line step - * \param h_dst [OUT] Destination image pointer (Host or pinned memory) - * \param dstStep [IN] Destination image line step - * \param srcRoi [IN] Region of interest in the source image - * \param scale [IN] Downsampling scale factor (positive integer) - * - * \return NPP status code - */ -NppStStatus nppiStDownsampleNearest_32u_C1R_host(NppSt32u *h_src, NppSt32u srcStep, - NppSt32u *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit signed pixels, single channel. Host implementation. - * \see nppiStDownsampleNearest_32u_C1R_host - */ -NppStStatus nppiStDownsampleNearest_32s_C1R_host(NppSt32s *h_src, NppSt32u srcStep, - NppSt32s *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 32-bit float pixels, single channel. Host implementation. - * \see nppiStDownsampleNearest_32u_C1R_host - */ -NppStStatus nppiStDownsampleNearest_32f_C1R_host(NppSt32f *h_src, NppSt32u srcStep, - NppSt32f *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit unsigned pixels, single channel. Host implementation. - * \see nppiStDownsampleNearest_32u_C1R_host - */ -NppStStatus nppiStDownsampleNearest_64u_C1R_host(NppSt64u *h_src, NppSt32u srcStep, - NppSt64u *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit signed pixels, single channel. Host implementation. - * \see nppiStDownsampleNearest_32u_C1R_host - */ -NppStStatus nppiStDownsampleNearest_64s_C1R_host(NppSt64s *h_src, NppSt32u srcStep, - NppSt64s *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Downsamples (decimates) an image using the nearest neighbor algorithm. 64-bit float pixels, single channel. Host implementation. - * \see nppiStDownsampleNearest_32u_C1R_host - */ -NppStStatus nppiStDownsampleNearest_64f_C1R_host(NppSt64f *h_src, NppSt32u srcStep, - NppSt64f *h_dst, NppSt32u dstStep, - NppStSize32u srcRoi, NppSt32u scale); - - -/** - * Computes standard deviation for each rectangular region of the input image using integral images. - * - * \param d_sum [IN] Integral image pointer (CUDA device memory) - * \param sumStep [IN] Integral image line step - * \param d_sqsum [IN] Squared integral image pointer (CUDA device memory) - * \param sqsumStep [IN] Squared integral image line step - * \param d_norm [OUT] Stddev image pointer (CUDA device memory). Each pixel contains stddev of a rect with top-left corner at the original location in the image - * \param normStep [IN] Stddev image line step - * \param roi [IN] Region of interest in the source image - * \param rect [IN] Rectangular region to calculate stddev over - * \param scaleArea [IN] Multiplication factor to account decimated scale - * \param readThruTexture [IN] Performance hint to cache source in texture (true) or read directly (false) - * - * \return NPP status code - */ -NppStStatus nppiStRectStdDev_32f_C1R(NppSt32u *d_sum, NppSt32u sumStep, - NppSt64u *d_sqsum, NppSt32u sqsumStep, - NppSt32f *d_norm, NppSt32u normStep, - NppStSize32u roi, NppStRect32u rect, - NppSt32f scaleArea, NppStBool readThruTexture); - - -/** - * Computes standard deviation for each rectangular region of the input image using integral images. Host implementation - * - * \param h_sum [IN] Integral image pointer (Host or pinned memory) - * \param sumStep [IN] Integral image line step - * \param h_sqsum [IN] Squared integral image pointer (Host or pinned memory) - * \param sqsumStep [IN] Squared integral image line step - * \param h_norm [OUT] Stddev image pointer (Host or pinned memory). Each pixel contains stddev of a rect with top-left corner at the original location in the image - * \param normStep [IN] Stddev image line step - * \param roi [IN] Region of interest in the source image - * \param rect [IN] Rectangular region to calculate stddev over - * \param scaleArea [IN] Multiplication factor to account decimated scale - * - * \return NPP status code - */ -NppStStatus nppiStRectStdDev_32f_C1R_host(NppSt32u *h_sum, NppSt32u sumStep, - NppSt64u *h_sqsum, NppSt32u sqsumStep, - NppSt32f *h_norm, NppSt32u normStep, - NppStSize32u roi, NppStRect32u rect, - NppSt32f scaleArea); - - -/** - * Transposes an image. 32-bit unsigned pixels, single channel - * - * \param d_src [IN] Source image pointer (CUDA device memory) - * \param srcStride [IN] Source image line step - * \param d_dst [OUT] Destination image pointer (CUDA device memory) - * \param dstStride [IN] Destination image line step - * \param srcRoi [IN] Region of interest of the source image - * - * \return NPP status code - */ -NppStStatus nppiStTranspose_32u_C1R(NppSt32u *d_src, NppSt32u srcStride, - NppSt32u *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 32-bit signed pixels, single channel - * \see nppiStTranspose_32u_C1R - */ -NppStStatus nppiStTranspose_32s_C1R(NppSt32s *d_src, NppSt32u srcStride, - NppSt32s *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 32-bit float pixels, single channel - * \see nppiStTranspose_32u_C1R - */ -NppStStatus nppiStTranspose_32f_C1R(NppSt32f *d_src, NppSt32u srcStride, - NppSt32f *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit unsigned pixels, single channel - * \see nppiStTranspose_32u_C1R - */ -NppStStatus nppiStTranspose_64u_C1R(NppSt64u *d_src, NppSt32u srcStride, - NppSt64u *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit signed pixels, single channel - * \see nppiStTranspose_32u_C1R - */ -NppStStatus nppiStTranspose_64s_C1R(NppSt64s *d_src, NppSt32u srcStride, - NppSt64s *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit float pixels, single channel - * \see nppiStTranspose_32u_C1R - */ -NppStStatus nppiStTranspose_64f_C1R(NppSt64f *d_src, NppSt32u srcStride, - NppSt64f *d_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 32-bit unsigned pixels, single channel. Host implementation - * - * \param h_src [IN] Source image pointer (Host or pinned memory) - * \param srcStride [IN] Source image line step - * \param h_dst [OUT] Destination image pointer (Host or pinned memory) - * \param dstStride [IN] Destination image line step - * \param srcRoi [IN] Region of interest of the source image - * - * \return NPP status code - */ -NppStStatus nppiStTranspose_32u_C1R_host(NppSt32u *h_src, NppSt32u srcStride, - NppSt32u *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 32-bit signed pixels, single channel. Host implementation - * \see nppiStTranspose_32u_C1R_host - */ -NppStStatus nppiStTranspose_32s_C1R_host(NppSt32s *h_src, NppSt32u srcStride, - NppSt32s *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 32-bit float pixels, single channel. Host implementation - * \see nppiStTranspose_32u_C1R_host - */ -NppStStatus nppiStTranspose_32f_C1R_host(NppSt32f *h_src, NppSt32u srcStride, - NppSt32f *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit unsigned pixels, single channel. Host implementation - * \see nppiStTranspose_32u_C1R_host - */ -NppStStatus nppiStTranspose_64u_C1R_host(NppSt64u *h_src, NppSt32u srcStride, - NppSt64u *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit signed pixels, single channel. Host implementation - * \see nppiStTranspose_32u_C1R_host - */ -NppStStatus nppiStTranspose_64s_C1R_host(NppSt64s *h_src, NppSt32u srcStride, - NppSt64s *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Transposes an image. 64-bit float pixels, single channel. Host implementation - * \see nppiStTranspose_32u_C1R_host - */ -NppStStatus nppiStTranspose_64f_C1R_host(NppSt64f *h_src, NppSt32u srcStride, - NppSt64f *h_dst, NppSt32u dstStride, NppStSize32u srcRoi); - - -/** - * Calculates the size of the temporary buffer for integral image creation - * - * \param roiSize [IN] Size of the input image - * \param pBufsize [OUT] Pointer to host variable that returns the size of the temporary buffer (in bytes) - * - * \return NPP status code - */ -NppStStatus nppiStIntegralGetSize_8u32u(NppStSize32u roiSize, NppSt32u *pBufsize); - - -/** - * Calculates the size of the temporary buffer for integral image creation - * \see nppiStIntegralGetSize_8u32u - */ -NppStStatus nppiStIntegralGetSize_32f32f(NppStSize32u roiSize, NppSt32u *pBufsize); - - -/** - * Creates an integral image representation for the input image - * - * \param d_src [IN] Source image pointer (CUDA device memory) - * \param srcStep [IN] Source image line step - * \param d_dst [OUT] Destination integral image pointer (CUDA device memory) - * \param dstStep [IN] Destination image line step - * \param roiSize [IN] Region of interest of the source image - * \param pBuffer [IN] Pointer to the pre-allocated temporary buffer (CUDA device memory) - * \param bufSize [IN] Size of the pBuffer in bytes - * - * \return NPP status code - */ -NppStStatus nppiStIntegral_8u32u_C1R(NppSt8u *d_src, NppSt32u srcStep, - NppSt32u *d_dst, NppSt32u dstStep, NppStSize32u roiSize, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Creates an integral image representation for the input image - * \see nppiStIntegral_8u32u_C1R - */ -NppStStatus nppiStIntegral_32f32f_C1R(NppSt32f *d_src, NppSt32u srcStep, - NppSt32f *d_dst, NppSt32u dstStep, NppStSize32u roiSize, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Creates an integral image representation for the input image. Host implementation - * - * \param h_src [IN] Source image pointer (Host or pinned memory) - * \param srcStep [IN] Source image line step - * \param h_dst [OUT] Destination integral image pointer (Host or pinned memory) - * \param dstStep [IN] Destination image line step - * \param roiSize [IN] Region of interest of the source image - * - * \return NPP status code - */ -NppStStatus nppiStIntegral_8u32u_C1R_host(NppSt8u *h_src, NppSt32u srcStep, - NppSt32u *h_dst, NppSt32u dstStep, NppStSize32u roiSize); - - -/** - * Creates an integral image representation for the input image. Host implementation - * \see nppiStIntegral_8u32u_C1R_host - */ -NppStStatus nppiStIntegral_32f32f_C1R_host(NppSt32f *h_src, NppSt32u srcStep, - NppSt32f *h_dst, NppSt32u dstStep, NppStSize32u roiSize); - - -/** - * Calculates the size of the temporary buffer for squared integral image creation - * - * \param roiSize [IN] Size of the input image - * \param pBufsize [OUT] Pointer to host variable that returns the size of the temporary buffer (in bytes) - * - * \return NPP status code - */ -NppStStatus nppiStSqrIntegralGetSize_8u64u(NppStSize32u roiSize, NppSt32u *pBufsize); - - -/** - * Creates a squared integral image representation for the input image - * - * \param d_src [IN] Source image pointer (CUDA device memory) - * \param srcStep [IN] Source image line step - * \param d_dst [OUT] Destination squared integral image pointer (CUDA device memory) - * \param dstStep [IN] Destination image line step - * \param roiSize [IN] Region of interest of the source image - * \param pBuffer [IN] Pointer to the pre-allocated temporary buffer (CUDA device memory) - * \param bufSize [IN] Size of the pBuffer in bytes - * - * \return NPP status code - */ -NppStStatus nppiStSqrIntegral_8u64u_C1R(NppSt8u *d_src, NppSt32u srcStep, - NppSt64u *d_dst, NppSt32u dstStep, NppStSize32u roiSize, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Creates a squared integral image representation for the input image. Host implementation - * - * \param h_src [IN] Source image pointer (Host or pinned memory) - * \param srcStep [IN] Source image line step - * \param h_dst [OUT] Destination squared integral image pointer (Host or pinned memory) - * \param dstStep [IN] Destination image line step - * \param roiSize [IN] Region of interest of the source image - * - * \return NPP status code - */ -NppStStatus nppiStSqrIntegral_8u64u_C1R_host(NppSt8u *h_src, NppSt32u srcStep, - NppSt64u *h_dst, NppSt32u dstStep, NppStSize32u roiSize); - - -/*@}*/ - - -/** \defgroup npps NPP Signal Processing -* @{ -*/ - - -/** - * Calculates the size of the temporary buffer for vector compaction. 32-bit unsigned values - * - * \param srcLen [IN] Length of the input vector in elements - * \param pBufsize [OUT] Pointer to host variable that returns the size of the temporary buffer (in bytes) - * - * \return NPP status code - */ -NppStStatus nppsStCompactGetSize_32u(NppSt32u srcLen, NppSt32u *pBufsize); - - -/** - * Calculates the size of the temporary buffer for vector compaction. 32-bit signed values - * \see nppsStCompactGetSize_32u - */ -NppStStatus nppsStCompactGetSize_32s(NppSt32u srcLen, NppSt32u *pBufsize); - - -/** - * Calculates the size of the temporary buffer for vector compaction. 32-bit float values - * \see nppsStCompactGetSize_32u - */ -NppStStatus nppsStCompactGetSize_32f(NppSt32u srcLen, NppSt32u *pBufsize); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit unsigned values - * - * \param d_src [IN] Source vector pointer (CUDA device memory) - * \param srcLen [IN] Source vector length - * \param d_dst [OUT] Destination vector pointer (CUDA device memory) - * \param p_dstLen [OUT] Pointer to the destination vector length (Pinned memory or NULL) - * \param elemRemove [IN] The value to be removed - * \param pBuffer [IN] Pointer to the pre-allocated temporary buffer (CUDA device memory) - * \param bufSize [IN] Size of the pBuffer in bytes - * - * \return NPP status code - */ -NppStStatus nppsStCompact_32u(NppSt32u *d_src, NppSt32u srcLen, - NppSt32u *d_dst, NppSt32u *p_dstLen, - NppSt32u elemRemove, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit signed values - * \see nppsStCompact_32u - */ -NppStStatus nppsStCompact_32s(NppSt32s *d_src, NppSt32u srcLen, - NppSt32s *d_dst, NppSt32u *p_dstLen, - NppSt32s elemRemove, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit float values - * \see nppsStCompact_32u - */ -NppStStatus nppsStCompact_32f(NppSt32f *d_src, NppSt32u srcLen, - NppSt32f *d_dst, NppSt32u *p_dstLen, - NppSt32f elemRemove, - NppSt8u *pBuffer, NppSt32u bufSize); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit unsigned values. Host implementation - * - * \param h_src [IN] Source vector pointer (CUDA device memory) - * \param srcLen [IN] Source vector length - * \param h_dst [OUT] Destination vector pointer (CUDA device memory) - * \param dstLen [OUT] Pointer to the destination vector length (can be NULL) - * \param elemRemove [IN] The value to be removed - * - * \return NPP status code - */ -NppStStatus nppsStCompact_32u_host(NppSt32u *h_src, NppSt32u srcLen, - NppSt32u *h_dst, NppSt32u *dstLen, NppSt32u elemRemove); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit signed values. Host implementation - * \see nppsStCompact_32u_host - */ -NppStStatus nppsStCompact_32s_host(NppSt32s *h_src, NppSt32u srcLen, - NppSt32s *h_dst, NppSt32u *dstLen, NppSt32s elemRemove); - - -/** - * Compacts the input vector by removing elements of specified value. 32-bit float values. Host implementation - * \see nppsStCompact_32u_host - */ -NppStStatus nppsStCompact_32f_host(NppSt32f *h_src, NppSt32u srcLen, - NppSt32f *h_dst, NppSt32u *dstLen, NppSt32f elemRemove); - - -/*@}*/ - - -#ifdef __cplusplus -} -#endif - - -#endif // _npp_staging_h_ diff --git a/modules/gpu/CMakeLists.txt b/modules/gpu/CMakeLists.txt index f25036ac24..e99cbc78fc 100644 --- a/modules/gpu/CMakeLists.txt +++ b/modules/gpu/CMakeLists.txt @@ -36,10 +36,12 @@ file(GLOB lib_device_hdrs "src/opencv2/gpu/device/*.h*") source_group("Device" FILES ${lib_device_hdrs}) if (HAVE_CUDA AND MSVC) - file(GLOB ncv_srcs "src/nvidia/*.cpp") - file(GLOB ncv_hdrs "src/nvidia/*.h*") - file(GLOB ncv_cuda "src/nvidia/*.cu") - source_group("Src\\NVidia" FILES ${ncv_srcs} ${ncv_hdrs} ${ncv_cuda}) + file(GLOB_RECURSE ncv_srcs "src/nvidia/*.cpp") + file(GLOB_RECURSE ncv_cuda "src/nvidia/*.cu") + file(GLOB_RECURSE ncv_hdr1 "src/nvidia/*.hpp") + file(GLOB_RECURSE ncv_hdr2 "src/nvidia/*.h") + source_group("Src\\NVidia" FILES ${ncv_srcs} ${ncv_hdr1} ${ncv_hdr2} ${ncv_cuda}) + include_directories("src/nvidia/core" "src/nvidia/NPP_staging") endif() if (HAVE_CUDA) @@ -74,17 +76,13 @@ if (HAVE_CUDA) string(REPLACE "/EHsc-" "/EHs" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "/EHsc-" "/EHs" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") string(REPLACE "/EHsc-" "/EHs" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") - endif() - - - include(FindNPP_staging.cmake) - include_directories(${NPPST_INC}) + endif() CUDA_COMPILE(cuda_objs ${lib_cuda} ${ncv_cuda}) #CUDA_BUILD_CLEAN_TARGET() endif() -add_library(${the_target} ${lib_srcs} ${lib_hdrs} ${lib_int_hdrs} ${lib_cuda} ${lib_cuda_hdrs} ${lib_device_hdrs} ${ncv_srcs} ${ncv_hdrs} ${ncv_cuda} ${cuda_objs}) +add_library(${the_target} ${lib_srcs} ${lib_hdrs} ${lib_int_hdrs} ${lib_cuda} ${lib_cuda_hdrs} ${lib_device_hdrs} ${ncv_srcs} ${ncv_hdr1} ${ncv_hdr2} ${ncv_cuda} ${cuda_objs}) if(PCHSupport_FOUND) set(pch_header ${CMAKE_CURRENT_SOURCE_DIR}/src/precomp.hpp) @@ -117,8 +115,7 @@ set_target_properties(${the_target} PROPERTIES target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} ${IPP_LIBS} ${DEPS} ) if (HAVE_CUDA) - target_link_libraries(${the_target} ${CUDA_LIBRARIES} ${CUDA_NPP_LIBRARIES}) - target_link_libraries(${the_target} ${NPPST_LIB}) + target_link_libraries(${the_target} ${CUDA_LIBRARIES} ${CUDA_NPP_LIBRARIES}) CUDA_ADD_CUFFT_TO_TARGET(${the_target}) endif() diff --git a/modules/gpu/FindNPP_staging.cmake b/modules/gpu/FindNPP_staging.cmake deleted file mode 100644 index e478695c69..0000000000 --- a/modules/gpu/FindNPP_staging.cmake +++ /dev/null @@ -1,24 +0,0 @@ -if(CMAKE_SIZEOF_VOID_P EQUAL 4) - set(BIT_SUFF 32) -else() - set(BIT_SUFF 64) -endif() - -if (APPLE) - set(PLATFORM_SUFF Darwin) -elseif (UNIX) - set(PLATFORM_SUFF Linux) -else() - set(PLATFORM_SUFF Windows) -endif() - -set(LIB_FILE NPP_staging_static_${PLATFORM_SUFF}_${BIT_SUFF}_v1) - -find_library(NPPST_LIB - NAMES "${LIB_FILE}" "lib${LIB_FILE}" - PATHS "${CMAKE_SOURCE_DIR}/3rdparty/NPP_staging" - DOC "NPP staging library" - ) - -SET(NPPST_INC "${CMAKE_SOURCE_DIR}//3rdparty/NPP_staging") - \ No newline at end of file diff --git a/modules/gpu/src/arithm.cpp b/modules/gpu/src/arithm.cpp index 5a54072a82..c6a23debaa 100644 --- a/modules/gpu/src/arithm.cpp +++ b/modules/gpu/src/arithm.cpp @@ -83,25 +83,25 @@ void cv::gpu::transpose(const GpuMat& src, GpuMat& dst) sz.width = src.cols; sz.height = src.rows; - nppSafeCall( nppiTranspose_8u_C1R(src.ptr(), src.step, dst.ptr(), dst.step, sz) ); + nppSafeCall( nppiTranspose_8u_C1R(src.ptr(), src.step, dst.ptr(), dst.step, sz) ); } else if (src.elemSize() == 4) { - NppStSize32u sz; + NcvSize32u sz; sz.width = src.cols; sz.height = src.rows; - nppSafeCall( nppiStTranspose_32u_C1R(const_cast(src.ptr()), src.step, - dst.ptr(), dst.step, sz) ); + nppSafeCall( nppiStTranspose_32u_C1R(const_cast(src.ptr()), src.step, + dst.ptr(), dst.step, sz) ); } else // if (src.elemSize() == 8) { - NppStSize32u sz; + NcvSize32u sz; sz.width = src.cols; sz.height = src.rows; - nppSafeCall( nppiStTranspose_64u_C1R(const_cast(src.ptr()), src.step, - dst.ptr(), dst.step, sz) ); + nppSafeCall( nppiStTranspose_64u_C1R(const_cast(src.ptr()), src.step, + dst.ptr(), dst.step, sz) ); } cudaSafeCall( cudaThreadSynchronize() ); diff --git a/modules/gpu/src/cascadeclassifier.cpp b/modules/gpu/src/cascadeclassifier.cpp index 15e5d7ffb8..37acc59bd1 100644 --- a/modules/gpu/src/cascadeclassifier.cpp +++ b/modules/gpu/src/cascadeclassifier.cpp @@ -126,7 +126,7 @@ struct cv::gpu::CascadeClassifier_GPU::CascadeClassifierImpl minNeighbors, scaleStep, 1, flags, - *gpuAllocator, *cpuAllocator, devProp.major, devProp.minor, 0); + *gpuAllocator, *cpuAllocator, devProp, 0); ncvAssertReturnNcvStat(ncvStat); ncvAssertCUDAReturn(cudaStreamSynchronize(0), NCV_CUDA_ERROR); @@ -146,8 +146,8 @@ private: ncvAssertCUDAReturn(cudaGetDeviceProperties(&devProp, devId), NCV_CUDA_ERROR); // Load the classifier from file (assuming its size is about 1 mb) using a simple allocator - gpuCascadeAllocator = new NCVMemNativeAllocator(NCVMemoryTypeDevice); - cpuCascadeAllocator = new NCVMemNativeAllocator(NCVMemoryTypeHostPinned); + gpuCascadeAllocator = new NCVMemNativeAllocator(NCVMemoryTypeDevice, devProp.textureAlignment); + cpuCascadeAllocator = new NCVMemNativeAllocator(NCVMemoryTypeHostPinned, devProp.textureAlignment); ncvAssertPrintReturn(gpuCascadeAllocator->isInitialized(), "Error creating cascade GPU allocator", NCV_CUDA_ERROR); ncvAssertPrintReturn(cpuCascadeAllocator->isInitialized(), "Error creating cascade CPU allocator", NCV_CUDA_ERROR); @@ -212,7 +212,7 @@ private: roi.height = d_src.height(); Ncv32u numDetections; ncvStat = ncvDetectObjectsMultiScale_device(d_src, roi, d_rects, numDetections, haar, *h_haarStages, - *d_haarStages, *d_haarNodes, *d_haarFeatures, haar.ClassifierSize, 4, 1.2f, 1, 0, gpuCounter, cpuCounter, devProp.major, devProp.minor, 0); + *d_haarStages, *d_haarNodes, *d_haarFeatures, haar.ClassifierSize, 4, 1.2f, 1, 0, gpuCounter, cpuCounter, devProp, 0); ncvAssertReturnNcvStat(ncvStat); ncvAssertCUDAReturn(cudaStreamSynchronize(0), NCV_CUDA_ERROR); diff --git a/modules/gpu/src/imgproc_gpu.cpp b/modules/gpu/src/imgproc_gpu.cpp index 1711c3c9ee..15a95a4479 100644 --- a/modules/gpu/src/imgproc_gpu.cpp +++ b/modules/gpu/src/imgproc_gpu.cpp @@ -560,16 +560,19 @@ void cv::gpu::integralBuffered(const GpuMat& src, GpuMat& sum, GpuMat& buffer) sum.create(src.rows + 1, src.cols + 1, CV_32S); - NppStSize32u roiSize; + NcvSize32u roiSize; roiSize.width = src.cols; roiSize.height = src.rows; - NppSt32u bufSize; - nppSafeCall( nppiStIntegralGetSize_8u32u(roiSize, &bufSize) ); + cudaDeviceProp prop; + cudaSafeCall( cudaGetDeviceProperties(&prop, cv::gpu::getDevice()) ); + + Ncv32u bufSize; + nppSafeCall( nppiStIntegralGetSize_8u32u(roiSize, &bufSize, prop) ); ensureSizeIsEnough(1, bufSize, CV_8UC1, buffer); - nppSafeCall( nppiStIntegral_8u32u_C1R(const_cast(src.ptr()), src.step, - sum.ptr(), sum.step, roiSize, buffer.ptr(), bufSize) ); + nppSafeCall( nppiStIntegral_8u32u_C1R(const_cast(src.ptr()), src.step, + sum.ptr(), sum.step, roiSize, buffer.ptr(), bufSize, prop) ); cudaSafeCall( cudaThreadSynchronize() ); } @@ -600,19 +603,20 @@ void cv::gpu::sqrIntegral(const GpuMat& src, GpuMat& sqsum) { CV_Assert(src.type() == CV_8U); - NppStSize32u roiSize; + NcvSize32u roiSize; roiSize.width = src.cols; roiSize.height = src.rows; - NppSt32u bufSize; - nppSafeCall(nppiStSqrIntegralGetSize_8u64u(roiSize, &bufSize)); + cudaDeviceProp prop; + cudaSafeCall( cudaGetDeviceProperties(&prop, cv::gpu::getDevice()) ); + + Ncv32u bufSize; + nppSafeCall(nppiStSqrIntegralGetSize_8u64u(roiSize, &bufSize, prop)); GpuMat buf(1, bufSize, CV_8U); sqsum.create(src.rows + 1, src.cols + 1, CV_64F); - nppSafeCall(nppiStSqrIntegral_8u64u_C1R( - const_cast(src.ptr(0)), src.step, - sqsum.ptr(0), sqsum.step, roiSize, - buf.ptr(0), bufSize)); + nppSafeCall(nppiStSqrIntegral_8u64u_C1R(const_cast(src.ptr(0)), src.step, + sqsum.ptr(0), sqsum.step, roiSize, buf.ptr(0), bufSize, prop)); cudaSafeCall( cudaThreadSynchronize() ); } diff --git a/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu b/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu index a501d6525e..dc4796989a 100644 --- a/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu +++ b/modules/gpu/src/nvidia/NCVHaarObjectDetection.cu @@ -57,8 +57,8 @@ #include -#include "npp.h" #include "NCV.hpp" +#include "NPP_staging/NPP_staging.hpp" #include "NCVRuntimeTemplates.hpp" #include "NCVHaarObjectDetection.hpp" @@ -970,8 +970,7 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag Ncv32f scaleArea, INCVMemAllocator &gpuAllocator, INCVMemAllocator &cpuAllocator, - Ncv32u devPropMajor, - Ncv32u devPropMinor, + cudaDeviceProp &devProp, cudaStream_t cuStream) { ncvAssertReturn(d_integralImage.memType() == d_weights.memType() && @@ -1077,15 +1076,15 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag Ncv32f scaleAreaPixels = scaleArea * ((haar.ClassifierSize.width - 2*HAAR_STDDEV_BORDER) * (haar.ClassifierSize.height - 2*HAAR_STDDEV_BORDER)); - NcvBool bTexCacheCascade = devPropMajor < 2; + NcvBool bTexCacheCascade = devProp.major < 2; NcvBool bTexCacheIImg = true; //this works better even on Fermi so far - NcvBool bDoAtomicCompaction = devPropMajor >= 2 || (devPropMajor == 1 && devPropMinor >= 3); + NcvBool bDoAtomicCompaction = devProp.major >= 2 || (devProp.major == 1 && devProp.minor >= 3); NCVVector *d_ptrNowData = &d_vecPixelMask; NCVVector *d_ptrNowTmp = &d_vecPixelMaskTmp; Ncv32u szNppCompactTmpBuf; - nppsStCompactGetSize_32u(d_vecPixelMask.length(), &szNppCompactTmpBuf); + nppsStCompactGetSize_32u(d_vecPixelMask.length(), &szNppCompactTmpBuf, devProp); if (bDoAtomicCompaction) { szNppCompactTmpBuf = 0; @@ -1185,11 +1184,11 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag } else { - NppStStatus nppSt; + NCVStatus nppSt; nppSt = nppsStCompact_32u(d_ptrNowTmp->ptr(), d_vecPixelMask.length(), d_ptrNowData->ptr(), hp_numDet, OBJDET_MASK_ELEMENT_INVALID_32U, - d_tmpBufCompact.ptr(), szNppCompactTmpBuf); - ncvAssertReturn(nppSt == NPP_SUCCESS, NCV_NPP_ERROR); + d_tmpBufCompact.ptr(), szNppCompactTmpBuf, devProp); + ncvAssertReturn(nppSt == NPPST_SUCCESS, NCV_NPP_ERROR); } numDetections = *hp_numDet; } @@ -1240,11 +1239,11 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag } else { - NppStStatus nppSt; + NCVStatus nppSt; nppSt = nppsStCompact_32u(d_ptrNowData->ptr(), d_vecPixelMask.length(), d_ptrNowTmp->ptr(), hp_numDet, OBJDET_MASK_ELEMENT_INVALID_32U, - d_tmpBufCompact.ptr(), szNppCompactTmpBuf); - ncvAssertReturn(nppSt == NPP_SUCCESS, NCV_NPP_ERROR); + d_tmpBufCompact.ptr(), szNppCompactTmpBuf, devProp); + ncvAssertReturnNcvStat(nppSt); } swap(d_ptrNowData, d_ptrNowTmp); @@ -1310,11 +1309,11 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag } else { - NppStStatus nppSt; + NCVStatus nppSt; nppSt = nppsStCompact_32u(d_ptrNowData->ptr(), numDetections, d_ptrNowTmp->ptr(), hp_numDet, OBJDET_MASK_ELEMENT_INVALID_32U, - d_tmpBufCompact.ptr(), szNppCompactTmpBuf); - ncvAssertReturn(nppSt == NPP_SUCCESS, NCV_NPP_ERROR); + d_tmpBufCompact.ptr(), szNppCompactTmpBuf, devProp); + ncvAssertReturnNcvStat(nppSt); } swap(d_ptrNowData, d_ptrNowTmp); @@ -1371,11 +1370,11 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag } else { - NppStStatus nppSt; + NCVStatus nppSt; nppSt = nppsStCompact_32u(d_ptrNowData->ptr(), numDetections, d_ptrNowTmp->ptr(), hp_numDet, OBJDET_MASK_ELEMENT_INVALID_32U, - d_tmpBufCompact.ptr(), szNppCompactTmpBuf); - ncvAssertReturn(nppSt == NPP_SUCCESS, NCV_NPP_ERROR); + d_tmpBufCompact.ptr(), szNppCompactTmpBuf, devProp); + ncvAssertReturnNcvStat(nppSt); } swap(d_ptrNowData, d_ptrNowTmp); @@ -1715,8 +1714,7 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, INCVMemAllocator &gpuAllocator, INCVMemAllocator &cpuAllocator, - Ncv32u devPropMajor, - Ncv32u devPropMinor, + cudaDeviceProp &devProp, cudaStream_t cuStream) { ncvAssertReturn(d_srcImg.memType() == d_dstRects.memType() && @@ -1773,12 +1771,12 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, NCVVectorAlloc h_hypothesesIntermediate(cpuAllocator, d_srcImg.width() * d_srcImg.height()); ncvAssertReturn(h_hypothesesIntermediate.isMemAllocated(), NCV_ALLOCATOR_BAD_ALLOC); - NppStStatus nppStat; + NCVStatus nppStat; Ncv32u szTmpBufIntegral, szTmpBufSqIntegral; - nppStat = nppiStIntegralGetSize_8u32u(NppStSize32u(d_srcImg.width(), d_srcImg.height()), &szTmpBufIntegral); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); - nppStat = nppiStSqrIntegralGetSize_8u64u(NppStSize32u(d_srcImg.width(), d_srcImg.height()), &szTmpBufSqIntegral); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + nppStat = nppiStIntegralGetSize_8u32u(NcvSize32u(d_srcImg.width(), d_srcImg.height()), &szTmpBufIntegral, devProp); + ncvAssertReturnNcvStat(nppStat); + nppStat = nppiStSqrIntegralGetSize_8u64u(NcvSize32u(d_srcImg.width(), d_srcImg.height()), &szTmpBufSqIntegral, devProp); + ncvAssertReturnNcvStat(nppStat); NCVVectorAlloc d_tmpIIbuf(gpuAllocator, std::max(szTmpBufIntegral, szTmpBufSqIntegral)); ncvAssertReturn(d_tmpIIbuf.isMemAllocated(), NCV_ALLOCATOR_BAD_ALLOC); @@ -1786,15 +1784,15 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, nppStat = nppiStIntegral_8u32u_C1R(d_srcImg.ptr(), d_srcImg.pitch(), d_integralImage.ptr(), d_integralImage.pitch(), - NppStSize32u(d_srcImg.width(), d_srcImg.height()), - d_tmpIIbuf.ptr(), szTmpBufIntegral); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + NcvSize32u(d_srcImg.width(), d_srcImg.height()), + d_tmpIIbuf.ptr(), szTmpBufIntegral, devProp); + ncvAssertReturnNcvStat(nppStat); nppStat = nppiStSqrIntegral_8u64u_C1R(d_srcImg.ptr(), d_srcImg.pitch(), d_sqIntegralImage.ptr(), d_sqIntegralImage.pitch(), - NppStSize32u(d_srcImg.width(), d_srcImg.height()), - d_tmpIIbuf.ptr(), szTmpBufSqIntegral); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + NcvSize32u(d_srcImg.width(), d_srcImg.height()), + d_tmpIIbuf.ptr(), szTmpBufSqIntegral, devProp); + ncvAssertReturnNcvStat(nppStat); NCV_SKIP_COND_END @@ -1859,7 +1857,7 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, Ncv32u scale = scalesVector[i]; NcvSize32u srcRoi, scaledIIRoi, searchRoi; - NppStSize32u srcIIRoi; + NcvSize32u srcIIRoi; srcRoi.width = d_srcImg.width(); srcRoi.height = d_srcImg.height(); srcIIRoi.width = srcRoi.width + 1; @@ -1875,15 +1873,15 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, d_integralImage.ptr(), d_integralImage.pitch(), d_scaledIntegralImage.ptr(), d_scaledIntegralImage.pitch(), srcIIRoi, scale, true); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + ncvAssertReturnNcvStat(nppStat); nppStat = nppiStDownsampleNearest_64u_C1R( d_sqIntegralImage.ptr(), d_sqIntegralImage.pitch(), d_scaledSqIntegralImage.ptr(), d_scaledSqIntegralImage.pitch(), srcIIRoi, scale, true); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + ncvAssertReturnNcvStat(nppStat); - const NppStRect32u rect( + const NcvRect32u rect( HAAR_STDDEV_BORDER, HAAR_STDDEV_BORDER, haar.ClassifierSize.width - 2*HAAR_STDDEV_BORDER, @@ -1892,9 +1890,9 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, d_scaledIntegralImage.ptr(), d_scaledIntegralImage.pitch(), d_scaledSqIntegralImage.ptr(), d_scaledSqIntegralImage.pitch(), d_rectStdDev.ptr(), d_rectStdDev.pitch(), - NppStSize32u(searchRoi.width, searchRoi.height), rect, + NcvSize32u(searchRoi.width, searchRoi.height), rect, (Ncv32f)scale*scale, true); - ncvAssertReturn(nppStat == NPP_SUCCESS, NCV_NPP_ERROR); + ncvAssertReturnNcvStat(nppStat); NCV_SKIP_COND_END @@ -1904,8 +1902,8 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, detectionsOnThisScale, haar, h_HaarStages, d_HaarStages, d_HaarNodes, d_HaarFeatures, false, searchRoi, pixelStep, (Ncv32f)scale*scale, - gpuAllocator, cpuAllocator, devPropMajor, devPropMinor, cuStream); - ncvAssertReturn(ncvStat == NCV_SUCCESS, ncvStat); + gpuAllocator, cpuAllocator, devProp, cuStream); + ncvAssertReturnNcvStat(nppStat); NCV_SKIP_COND_BEGIN @@ -2250,6 +2248,10 @@ NCVStatus ncvGrowDetectionsVector_host(NCVVector &pixelMask, return ncvStat; } + + + + NCVStatus ncvFilterHypotheses_host(NCVVector &hypotheses, Ncv32u &numHypotheses, Ncv32u minNeighbors, @@ -2539,7 +2541,7 @@ NCVStatus ncvHaarLoadFromFile_host(const std::string &filename, } -NCVStatus ncvHaarStoreNVBIN_host(std::string &filename, +NCVStatus ncvHaarStoreNVBIN_host(const std::string &filename, HaarClassifierCascadeDescriptor haar, NCVVector &h_HaarStages, NCVVector &h_HaarNodes, diff --git a/modules/gpu/src/nvidia/NCVHaarObjectDetection.hpp b/modules/gpu/src/nvidia/NCVHaarObjectDetection.hpp index d9f500d7a0..bb463d8f4c 100644 --- a/modules/gpu/src/nvidia/NCVHaarObjectDetection.hpp +++ b/modules/gpu/src/nvidia/NCVHaarObjectDetection.hpp @@ -75,13 +75,13 @@ struct HaarFeature64 #define HaarFeature64_CreateCheck_MaxRectField 0xFF - __host__ NCVStatus setRect(Ncv32u rectX, Ncv32u rectY, Ncv32u rectWidth, Ncv32u rectHeight, Ncv32u clsWidth, Ncv32u clsHeight) + __host__ NCVStatus setRect(Ncv32u rectX, Ncv32u rectY, Ncv32u rectWidth, Ncv32u rectHeight, Ncv32u /*clsWidth*/, Ncv32u /*clsHeight*/) { ncvAssertReturn(rectWidth <= HaarFeature64_CreateCheck_MaxRectField && rectHeight <= HaarFeature64_CreateCheck_MaxRectField, NCV_HAAR_TOO_LARGE_FEATURES); - ((NcvRect8u*)&(this->_ui2.x))->x = rectX; - ((NcvRect8u*)&(this->_ui2.x))->y = rectY; - ((NcvRect8u*)&(this->_ui2.x))->width = rectWidth; - ((NcvRect8u*)&(this->_ui2.x))->height = rectHeight; + ((NcvRect8u*)&(this->_ui2.x))->x = (Ncv8u)rectX; + ((NcvRect8u*)&(this->_ui2.x))->y = (Ncv8u)rectY; + ((NcvRect8u*)&(this->_ui2.x))->width = (Ncv8u)rectWidth; + ((NcvRect8u*)&(this->_ui2.x))->height = (Ncv8u)rectHeight; return NCV_SUCCESS; } @@ -306,11 +306,11 @@ struct HaarStage64 }; -NPPST_CT_ASSERT(sizeof(HaarFeature64) == 8); -NPPST_CT_ASSERT(sizeof(HaarFeatureDescriptor32) == 4); -NPPST_CT_ASSERT(sizeof(HaarClassifierNodeDescriptor32) == 4); -NPPST_CT_ASSERT(sizeof(HaarClassifierNode128) == 16); -NPPST_CT_ASSERT(sizeof(HaarStage64) == 8); +NCV_CT_ASSERT(sizeof(HaarFeature64) == 8); +NCV_CT_ASSERT(sizeof(HaarFeatureDescriptor32) == 4); +NCV_CT_ASSERT(sizeof(HaarClassifierNodeDescriptor32) == 4); +NCV_CT_ASSERT(sizeof(HaarClassifierNode128) == 16); +NCV_CT_ASSERT(sizeof(HaarStage64) == 8); //============================================================================== @@ -347,7 +347,7 @@ enum NCVPipeObjDet_VisualizeInPlace = 0x004, }; - +NCV_EXPORTS NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, NcvSize32u srcRoi, NCVVector &d_dstRects, @@ -367,15 +367,14 @@ NCVStatus ncvDetectObjectsMultiScale_device(NCVMatrix &d_srcImg, INCVMemAllocator &gpuAllocator, INCVMemAllocator &cpuAllocator, - Ncv32u devPropMajor, - Ncv32u devPropMinor, + cudaDeviceProp &devProp, cudaStream_t cuStream); #define OBJDET_MASK_ELEMENT_INVALID_32U 0xFFFFFFFF #define HAAR_STDDEV_BORDER 1 - +NCV_EXPORTS NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImage, NCVMatrix &d_weights, NCVMatrixAlloc &d_pixelMask, @@ -391,11 +390,10 @@ NCVStatus ncvApplyHaarClassifierCascade_device(NCVMatrix &d_integralImag Ncv32f scaleArea, INCVMemAllocator &gpuAllocator, INCVMemAllocator &cpuAllocator, - Ncv32u devPropMajor, - Ncv32u devPropMinor, + cudaDeviceProp &devProp, cudaStream_t cuStream); - +NCV_EXPORTS NCVStatus ncvApplyHaarClassifierCascade_host(NCVMatrix &h_integralImage, NCVMatrix &h_weights, NCVMatrixAlloc &h_pixelMask, @@ -409,7 +407,7 @@ NCVStatus ncvApplyHaarClassifierCascade_host(NCVMatrix &h_integralImage, Ncv32u pixelStep, Ncv32f scaleArea); - +NCV_EXPORTS NCVStatus ncvDrawRects_8u_device(Ncv8u *d_dst, Ncv32u dstStride, Ncv32u dstWidth, @@ -419,7 +417,7 @@ NCVStatus ncvDrawRects_8u_device(Ncv8u *d_dst, Ncv8u color, cudaStream_t cuStream); - +NCV_EXPORTS NCVStatus ncvDrawRects_32u_device(Ncv32u *d_dst, Ncv32u dstStride, Ncv32u dstWidth, @@ -429,7 +427,7 @@ NCVStatus ncvDrawRects_32u_device(Ncv32u *d_dst, Ncv32u color, cudaStream_t cuStream); - +NCV_EXPORTS NCVStatus ncvDrawRects_8u_host(Ncv8u *h_dst, Ncv32u dstStride, Ncv32u dstWidth, @@ -438,7 +436,7 @@ NCVStatus ncvDrawRects_8u_host(Ncv8u *h_dst, Ncv32u numRects, Ncv8u color); - +NCV_EXPORTS NCVStatus ncvDrawRects_32u_host(Ncv32u *h_dst, Ncv32u dstStride, Ncv32u dstWidth, @@ -450,7 +448,7 @@ NCVStatus ncvDrawRects_32u_host(Ncv32u *h_dst, #define RECT_SIMILARITY_PROPORTION 0.2f - +NCV_EXPORTS NCVStatus ncvGrowDetectionsVector_device(NCVVector &pixelMask, Ncv32u numPixelMaskDetections, NCVVector &hypotheses, @@ -461,7 +459,7 @@ NCVStatus ncvGrowDetectionsVector_device(NCVVector &pixelMask, Ncv32f curScale, cudaStream_t cuStream); - +NCV_EXPORTS NCVStatus ncvGrowDetectionsVector_host(NCVVector &pixelMask, Ncv32u numPixelMaskDetections, NCVVector &hypotheses, @@ -471,18 +469,18 @@ NCVStatus ncvGrowDetectionsVector_host(NCVVector &pixelMask, Ncv32u rectHeight, Ncv32f curScale); - +NCV_EXPORTS NCVStatus ncvFilterHypotheses_host(NCVVector &hypotheses, Ncv32u &numHypotheses, Ncv32u minNeighbors, Ncv32f intersectEps, NCVVector *hypothesesWeights); - +NCV_EXPORTS NCVStatus ncvHaarGetClassifierSize(const std::string &filename, Ncv32u &numStages, Ncv32u &numNodes, Ncv32u &numFeatures); - +NCV_EXPORTS NCVStatus ncvHaarLoadFromFile_host(const std::string &filename, HaarClassifierCascadeDescriptor &haar, NCVVector &h_HaarStages, @@ -490,6 +488,7 @@ NCVStatus ncvHaarLoadFromFile_host(const std::string &filename, NCVVector &h_HaarFeatures); +NCV_EXPORTS NCVStatus ncvHaarStoreNVBIN_host(const std::string &filename, HaarClassifierCascadeDescriptor haar, NCVVector &h_HaarStages, diff --git a/modules/gpu/src/nvidia/NPP_staging/NPP_staging.cu b/modules/gpu/src/nvidia/NPP_staging/NPP_staging.cu new file mode 100644 index 0000000000..66f9dcdbbd --- /dev/null +++ b/modules/gpu/src/nvidia/NPP_staging/NPP_staging.cu @@ -0,0 +1,1704 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2009-2010, NVIDIA Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + + +#include +#include +#include "NPP_staging.hpp" + +#if defined _SELF_TEST_ +#include +#endif + + +texture tex8u; +texture tex32u; +texture tex64u; + + +//============================================================================== +// +// CUDA streams handling +// +//============================================================================== + + +static cudaStream_t nppStream = 0; + + +cudaStream_t nppStGetActiveCUDAstream(void) +{ + return nppStream; +} + + + +cudaStream_t nppStSetActiveCUDAstream(cudaStream_t cudaStream) +{ + cudaStream_t tmp = nppStream; + nppStream = cudaStream; + return tmp; +} + + +//============================================================================== +// +// BlockScan.cuh +// +//============================================================================== + + +//Almost the same as naive scan1Inclusive, but doesn't need __syncthreads() +//assuming size <= WARP_SIZE and size is power of 2 +template +inline __device__ T warpScanInclusive(T idata, volatile T *s_Data) +{ + Ncv32u pos = 2 * threadIdx.x - (threadIdx.x & (K_WARP_SIZE - 1)); + s_Data[pos] = 0; + pos += K_WARP_SIZE; + s_Data[pos] = idata; + + for(Ncv32u offset = 1; offset < K_WARP_SIZE; offset <<= 1) + { + s_Data[pos] += s_Data[pos - offset]; + } + + return s_Data[pos]; +} + + +template +inline __device__ T warpScanExclusive(T idata, volatile T *s_Data) +{ + return warpScanInclusive(idata, s_Data) - idata; +} + + +template +inline __device__ T blockScanInclusive(T idata, volatile T *s_Data) +{ + if (tiNumScanThreads > K_WARP_SIZE) + { + //Bottom-level inclusive warp scan + T warpResult = warpScanInclusive(idata, s_Data); + + //Save top elements of each warp for exclusive warp scan + //sync to wait for warp scans to complete (because s_Data is being overwritten) + __syncthreads(); + if( (threadIdx.x & (K_WARP_SIZE - 1)) == (K_WARP_SIZE - 1) ) + { + s_Data[threadIdx.x >> K_LOG2_WARP_SIZE] = warpResult; + } + + //wait for warp scans to complete + __syncthreads(); + + if( threadIdx.x < (tiNumScanThreads / K_WARP_SIZE) ) + { + //grab top warp elements + T val = s_Data[threadIdx.x]; + //calculate exclusive scan and write back to shared memory + s_Data[threadIdx.x] = warpScanExclusive(val, s_Data); + } + + //return updated warp scans with exclusive scan results + __syncthreads(); + return warpResult + s_Data[threadIdx.x >> K_LOG2_WARP_SIZE]; + } + else + { + return warpScanInclusive(idata, s_Data); + } +} + + +//============================================================================== +// +// IntegralImage.cu +// +//============================================================================== + + +const Ncv32u NUM_SCAN_THREADS = 256; +const Ncv32u LOG2_NUM_SCAN_THREADS = 8; + + +template +struct _scanElemOp +{ + template + static inline __host__ __device__ T_out scanElemOp(T_in elem); + + template<> + static inline __host__ __device__ T_out scanElemOp(T_in elem) + { + return (T_out)elem; + } + + template<> + static inline __host__ __device__ T_out scanElemOp(T_in elem) + { + return (T_out)(elem*elem); + } +}; + + +template +inline __device__ T readElem(T *d_src, Ncv32u srcStride, Ncv32u curElemOffs); + + +template<> +inline __device__ Ncv8u readElem(Ncv8u *d_src, Ncv32u srcStride, Ncv32u curElemOffs) +{ + return tex1Dfetch(tex8u, srcStride * blockIdx.x + curElemOffs); +} + + +template<> +inline __device__ Ncv32u readElem(Ncv32u *d_src, Ncv32u srcStride, Ncv32u curElemOffs) +{ + return d_src[curElemOffs]; +} + + +template<> +inline __device__ Ncv32f readElem(Ncv32f *d_src, Ncv32u srcStride, Ncv32u curElemOffs) +{ + return d_src[curElemOffs]; +} + + +/** +* \brief Segmented scan kernel +* +* Calculates per-row prefix scans of the input image. +* Out-of-bounds safe: reads 'size' elements, writes 'size+1' elements +* +* \tparam T_in Type of input image elements +* \tparam T_out Type of output image elements +* \tparam T_op Defines an operation to be performed on the input image pixels +* +* \param d_src [IN] Source image pointer +* \param srcWidth [IN] Source image width +* \param srcStride [IN] Source image stride +* \param d_II [OUT] Output image pointer +* \param IIstride [IN] Output image stride +* +* \return None +*/ +template +__global__ void scanRows(T_in *d_src, Ncv32u srcWidth, Ncv32u srcStride, + T_out *d_II, Ncv32u IIstride) +{ + //advance pointers to the current line + if (sizeof(T_in) != 1) + { + d_src += srcStride * blockIdx.x; + } + //for initial image 8bit source we use texref tex8u + d_II += IIstride * blockIdx.x; + + Ncv32u numBuckets = (srcWidth + NUM_SCAN_THREADS - 1) >> LOG2_NUM_SCAN_THREADS; + Ncv32u offsetX = 0; + + __shared__ T_out shmem[NUM_SCAN_THREADS * 2]; + __shared__ T_out carryElem; + carryElem = 0; + __syncthreads(); + + while (numBuckets--) + { + Ncv32u curElemOffs = offsetX + threadIdx.x; + T_out curScanElem; + + T_in curElem; + T_out curElemMod; + + if (curElemOffs < srcWidth) + { + //load elements + curElem = readElem(d_src, srcStride, curElemOffs); + } + curElemMod = _scanElemOp::scanElemOp(curElem); + + //inclusive scan + curScanElem = blockScanInclusive(curElemMod, shmem); + + if (curElemOffs <= srcWidth) + { + //make scan exclusive and write the bucket to the output buffer + d_II[curElemOffs] = carryElem + curScanElem - curElemMod; + offsetX += NUM_SCAN_THREADS; + } + + //remember last element for subsequent buckets adjustment + __syncthreads(); + if (threadIdx.x == NUM_SCAN_THREADS-1) + { + carryElem += curScanElem; + } + __syncthreads(); + } + + if (offsetX == srcWidth && !threadIdx.x) + { + d_II[offsetX] = carryElem; + } +} + + +template +NCVStatus scanRowsWrapperDevice(T_in *d_src, Ncv32u srcStride, + T_out *d_dst, Ncv32u dstStride, NcvSize32u roi) +{ + cudaChannelFormatDesc cfdTex; + if (sizeof(T_in) == 1) + { + cfdTex = cudaCreateChannelDesc(); + size_t alignmentOffset; + ncvAssertCUDAReturn(cudaBindTexture(&alignmentOffset, tex8u, d_src, cfdTex, roi.height * srcStride), NPPST_TEXTURE_BIND_ERROR); + ncvAssertReturn(alignmentOffset==0, NPPST_TEXTURE_BIND_ERROR); + } + scanRows + + <<>> + (d_src, roi.width, srcStride, d_dst, dstStride); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + +#if defined _SELF_TEST_ + T_in *h_src; + T_out *h_dst; + ncvAssertCUDAReturn(cudaMallocHost(&h_src, srcStride * roi.height * sizeof(T_in)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMallocHost(&h_dst, dstStride * roi.height * sizeof(T_out)), NPPST_MEM_ALLOC_ERR); + memset(h_src, 0, srcStride * roi.height * sizeof(T_in)); + memset(h_dst, 0, dstStride * roi.height * sizeof(T_out)); + ncvAssertCUDAReturn(cudaMemcpy(h_src, d_src, srcStride * roi.height * sizeof(T_in), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + ncvAssertCUDAReturn(cudaMemcpy(h_dst, d_dst, dstStride * roi.height * sizeof(T_out), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + NcvBool bPass = true; + for (Ncv32u i=0; i(h_src[i*srcStride+j]); + } + } + } + ncvAssertCUDAReturn(cudaFreeHost(h_src), NPPST_MEMFREE_ERR); + ncvAssertCUDAReturn(cudaFreeHost(h_dst), NPPST_MEMFREE_ERR); + printf("CIntegralImage::scanRowsWrapperDevice %s\n", bPass?"PASSED":"FAILED"); +#endif + + return NPPST_SUCCESS; +} + + +Ncv32u getPaddedDimension(Ncv32u dim, Ncv32u elemTypeSize, Ncv32u allocatorAlignment) +{ + Ncv32u alignMask = allocatorAlignment-1; + Ncv32u inverseAlignMask = ~alignMask; + Ncv32u dimBytes = dim * elemTypeSize; + Ncv32u pitch = (dimBytes + alignMask) & inverseAlignMask; + Ncv32u PaddedDim = pitch / elemTypeSize; + return PaddedDim; +} + + +template +NCVStatus ncvIntegralImage_device(T_in *d_src, Ncv32u srcStep, + T_out *d_dst, Ncv32u dstStep, NcvSize32u roi, + INCVMemAllocator &gpuAllocator) +{ + ncvAssertReturn(sizeof(T_out) == sizeof(Ncv32u), NPPST_MEM_INTERNAL_ERROR); + ncvAssertReturn(gpuAllocator.memType() == NCVMemoryTypeDevice || + gpuAllocator.memType() == NCVMemoryTypeNone, NPPST_MEM_RESIDENCE_ERROR); + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + ncvAssertReturn((d_src != NULL && d_dst != NULL) || gpuAllocator.isCounting(), NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roi.width > 0 && roi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStep >= roi.width * sizeof(T_in) && + dstStep >= (roi.width + 1) * sizeof(T_out) && + srcStep % sizeof(T_in) == 0 && + dstStep % sizeof(T_out) == 0, NPPST_INVALID_STEP); + srcStep /= sizeof(T_in); + dstStep /= sizeof(T_out); + + Ncv32u WidthII = roi.width + 1; + Ncv32u HeightII = roi.height + 1; + Ncv32u PaddedWidthII32 = getPaddedDimension(WidthII, sizeof(Ncv32u), gpuAllocator.alignment()); + Ncv32u PaddedHeightII32 = getPaddedDimension(HeightII, sizeof(Ncv32u), gpuAllocator.alignment()); + + NCVMatrixAlloc Tmp32_1(gpuAllocator, PaddedWidthII32, PaddedHeightII32); + ncvAssertReturn(gpuAllocator.isCounting() || Tmp32_1.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + NCVMatrixAlloc Tmp32_2(gpuAllocator, PaddedHeightII32, PaddedWidthII32); + ncvAssertReturn(gpuAllocator.isCounting() || Tmp32_2.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + ncvAssertReturn(Tmp32_1.pitch() * Tmp32_1.height() == Tmp32_2.pitch() * Tmp32_2.height(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat; + NCV_SET_SKIP_COND(gpuAllocator.isCounting()); + + NCV_SKIP_COND_BEGIN + + ncvStat = scanRowsWrapperDevice + + (d_src, srcStep, Tmp32_1.ptr(), PaddedWidthII32, roi); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = nppiStTranspose_32u_C1R((Ncv32u *)Tmp32_1.ptr(), PaddedWidthII32*sizeof(Ncv32u), + (Ncv32u *)Tmp32_2.ptr(), PaddedHeightII32*sizeof(Ncv32u), NcvSize32u(WidthII, roi.height)); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = scanRowsWrapperDevice + + (Tmp32_2.ptr(), PaddedHeightII32, Tmp32_1.ptr(), PaddedHeightII32, NcvSize32u(roi.height, WidthII)); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = nppiStTranspose_32u_C1R((Ncv32u *)Tmp32_1.ptr(), PaddedHeightII32*sizeof(Ncv32u), + (Ncv32u *)d_dst, dstStep*sizeof(Ncv32u), NcvSize32u(HeightII, WidthII)); + ncvAssertReturnNcvStat(ncvStat); + + NCV_SKIP_COND_END + + return NPPST_SUCCESS; +} + + +NCVStatus ncvSquaredIntegralImage_device(Ncv8u *d_src, Ncv32u srcStep, + Ncv64u *d_dst, Ncv32u dstStep, NcvSize32u roi, + INCVMemAllocator &gpuAllocator) +{ + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + ncvAssertReturn(gpuAllocator.memType() == NCVMemoryTypeDevice || + gpuAllocator.memType() == NCVMemoryTypeNone, NPPST_MEM_RESIDENCE_ERROR); + ncvAssertReturn((d_src != NULL && d_dst != NULL) || gpuAllocator.isCounting(), NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roi.width > 0 && roi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStep >= roi.width && + dstStep >= (roi.width + 1) * sizeof(Ncv64u) && + dstStep % sizeof(Ncv64u) == 0, NPPST_INVALID_STEP); + dstStep /= sizeof(Ncv64u); + + Ncv32u WidthII = roi.width + 1; + Ncv32u HeightII = roi.height + 1; + Ncv32u PaddedWidthII32 = getPaddedDimension(WidthII, sizeof(Ncv32u), gpuAllocator.alignment()); + Ncv32u PaddedHeightII32 = getPaddedDimension(HeightII, sizeof(Ncv32u), gpuAllocator.alignment()); + Ncv32u PaddedWidthII64 = getPaddedDimension(WidthII, sizeof(Ncv64u), gpuAllocator.alignment()); + Ncv32u PaddedHeightII64 = getPaddedDimension(HeightII, sizeof(Ncv64u), gpuAllocator.alignment()); + Ncv32u PaddedWidthMax = PaddedWidthII32 > PaddedWidthII64 ? PaddedWidthII32 : PaddedWidthII64; + Ncv32u PaddedHeightMax = PaddedHeightII32 > PaddedHeightII64 ? PaddedHeightII32 : PaddedHeightII64; + + NCVMatrixAlloc Tmp32_1(gpuAllocator, PaddedWidthII32, PaddedHeightII32); + ncvAssertReturn(Tmp32_1.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + NCVMatrixAlloc Tmp64(gpuAllocator, PaddedWidthMax, PaddedHeightMax); + ncvAssertReturn(Tmp64.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + + NCVMatrixReuse Tmp32_2(Tmp64.getSegment(), gpuAllocator.alignment(), PaddedWidthII32, PaddedHeightII32); + ncvAssertReturn(Tmp32_2.isMemReused(), NPPST_MEM_INTERNAL_ERROR); + NCVMatrixReuse Tmp64_2(Tmp64.getSegment(), gpuAllocator.alignment(), PaddedWidthII64, PaddedHeightII64); + ncvAssertReturn(Tmp64_2.isMemReused(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat; + NCV_SET_SKIP_COND(gpuAllocator.isCounting()); + + NCV_SKIP_COND_BEGIN + + ncvStat = scanRowsWrapperDevice + + (d_src, srcStep, Tmp32_2.ptr(), PaddedWidthII32, roi); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = nppiStTranspose_32u_C1R(Tmp32_2.ptr(), PaddedWidthII32*sizeof(Ncv32u), + Tmp32_1.ptr(), PaddedHeightII32*sizeof(Ncv32u), NcvSize32u(WidthII, roi.height)); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = scanRowsWrapperDevice + + (Tmp32_1.ptr(), PaddedHeightII32, Tmp64_2.ptr(), PaddedHeightII64, NcvSize32u(roi.height, WidthII)); + ncvAssertReturnNcvStat(ncvStat); + + ncvStat = nppiStTranspose_64u_C1R(Tmp64_2.ptr(), PaddedHeightII64*sizeof(Ncv64u), + d_dst, dstStep*sizeof(Ncv64u), NcvSize32u(HeightII, WidthII)); + ncvAssertReturnNcvStat(ncvStat); + + NCV_SKIP_COND_END + + return NPPST_SUCCESS; +} + + +NCVStatus nppiStIntegralGetSize_8u32u(NcvSize32u roiSize, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + ncvAssertReturn(pBufsize != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roiSize.width > 0 && roiSize.height > 0, NPPST_INVALID_ROI); + + NCVMemStackAllocator gpuCounter(devProp.textureAlignment); + ncvAssertReturn(gpuCounter.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvIntegralImage_device((Ncv8u*)NULL, roiSize.width, + (Ncv32u*)NULL, (roiSize.width+1) * sizeof(Ncv32u), + roiSize, gpuCounter); + ncvAssertReturnNcvStat(ncvStat); + + *pBufsize = (Ncv32u)gpuCounter.maxSize(); + return NPPST_SUCCESS; +} + + +NCVStatus nppiStIntegralGetSize_32f32f(NcvSize32u roiSize, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + ncvAssertReturn(pBufsize != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roiSize.width > 0 && roiSize.height > 0, NPPST_INVALID_ROI); + + NCVMemStackAllocator gpuCounter(devProp.textureAlignment); + ncvAssertReturn(gpuCounter.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvIntegralImage_device((Ncv32f*)NULL, roiSize.width * sizeof(Ncv32f), + (Ncv32f*)NULL, (roiSize.width+1) * sizeof(Ncv32f), + roiSize, gpuCounter); + ncvAssertReturnNcvStat(ncvStat); + + *pBufsize = (Ncv32u)gpuCounter.maxSize(); + return NPPST_SUCCESS; +} + + +NCVStatus nppiStSqrIntegralGetSize_8u64u(NcvSize32u roiSize, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + ncvAssertReturn(pBufsize != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roiSize.width > 0 && roiSize.height > 0, NPPST_INVALID_ROI); + + NCVMemStackAllocator gpuCounter(devProp.textureAlignment); + ncvAssertReturn(gpuCounter.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvSquaredIntegralImage_device(NULL, roiSize.width, + NULL, (roiSize.width+1) * sizeof(Ncv64u), + roiSize, gpuCounter); + ncvAssertReturnNcvStat(ncvStat); + + *pBufsize = (Ncv32u)gpuCounter.maxSize(); + return NPPST_SUCCESS; +} + + +NCVStatus nppiStIntegral_8u32u_C1R(Ncv8u *d_src, Ncv32u srcStep, + Ncv32u *d_dst, Ncv32u dstStep, + NcvSize32u roiSize, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + NCVMemStackAllocator gpuAllocator(NCVMemoryTypeDevice, bufSize, devProp.textureAlignment, pBuffer); + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvIntegralImage_device(d_src, srcStep, d_dst, dstStep, roiSize, gpuAllocator); + ncvAssertReturnNcvStat(ncvStat); + + return NPPST_SUCCESS; +} + + +NCVStatus nppiStIntegral_32f32f_C1R(Ncv32f *d_src, Ncv32u srcStep, + Ncv32f *d_dst, Ncv32u dstStep, + NcvSize32u roiSize, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + NCVMemStackAllocator gpuAllocator(NCVMemoryTypeDevice, bufSize, devProp.textureAlignment, pBuffer); + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvIntegralImage_device(d_src, srcStep, d_dst, dstStep, roiSize, gpuAllocator); + ncvAssertReturnNcvStat(ncvStat); + + return NPPST_SUCCESS; +} + + +NCVStatus nppiStSqrIntegral_8u64u_C1R(Ncv8u *d_src, Ncv32u srcStep, + Ncv64u *d_dst, Ncv32u dstStep, + NcvSize32u roiSize, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + NCVMemStackAllocator gpuAllocator(NCVMemoryTypeDevice, bufSize, devProp.textureAlignment, pBuffer); + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = ncvSquaredIntegralImage_device(d_src, srcStep, d_dst, dstStep, roiSize, gpuAllocator); + ncvAssertReturnNcvStat(ncvStat); + + return NPPST_SUCCESS; +} + + +NCVStatus nppiStIntegral_8u32u_C1R_host(Ncv8u *h_src, Ncv32u srcStep, + Ncv32u *h_dst, Ncv32u dstStep, + NcvSize32u roiSize) +{ + ncvAssertReturn(h_src != NULL && h_dst != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roiSize.width > 0 && roiSize.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStep >= roiSize.width && + dstStep >= (roiSize.width + 1) * sizeof(Ncv32u) && + dstStep % sizeof(Ncv32u) == 0, NPPST_INVALID_STEP); + dstStep /= sizeof(Ncv32u); + + Ncv32u WidthII = roiSize.width + 1; + Ncv32u HeightII = roiSize.height + 1; + + memset(h_dst, 0, WidthII * sizeof(Ncv32u)); + for (Ncv32u i=1; i 0 && roiSize.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStep >= roiSize.width * sizeof(Ncv32f) && + dstStep >= (roiSize.width + 1) * sizeof(Ncv32f) && + srcStep % sizeof(Ncv32f) == 0 && + dstStep % sizeof(Ncv32f) == 0, NPPST_INVALID_STEP); + srcStep /= sizeof(Ncv32f); + dstStep /= sizeof(Ncv32f); + + Ncv32u WidthII = roiSize.width + 1; + Ncv32u HeightII = roiSize.height + 1; + + memset(h_dst, 0, WidthII * sizeof(Ncv32u)); + for (Ncv32u i=1; i 0 && roiSize.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStep >= roiSize.width && + dstStep >= (roiSize.width + 1) * sizeof(Ncv64u) && + dstStep % sizeof(Ncv64u) == 0, NPPST_INVALID_STEP); + dstStep /= sizeof(Ncv64u); + + Ncv32u WidthII = roiSize.width + 1; + Ncv32u HeightII = roiSize.height + 1; + + memset(h_dst, 0, WidthII * sizeof(Ncv64u)); + for (Ncv32u i=1; i +__device__ T getElem_DownsampleNearest(Ncv32u x, T *d_src); + + +template<> +__device__ Ncv32u getElem_DownsampleNearest(Ncv32u x, Ncv32u *d_src) +{ + return tex1Dfetch(tex32u, x); +} + + +template<> +__device__ Ncv32u getElem_DownsampleNearest(Ncv32u x, Ncv32u *d_src) +{ + return d_src[x]; +} + + +template<> +__device__ Ncv64u getElem_DownsampleNearest(Ncv32u x, Ncv64u *d_src) +{ + uint2 tmp = tex1Dfetch(tex64u, x); + Ncv64u res = (Ncv64u)tmp.y; + res <<= 32; + res |= tmp.x; + return res; +} + + +template<> +__device__ Ncv64u getElem_DownsampleNearest(Ncv32u x, Ncv64u *d_src) +{ + return d_src[x]; +} + + +template +__global__ void downsampleNearest_C1R(T *d_src, Ncv32u srcStep, T *d_dst, Ncv32u dstStep, + NcvSize32u dstRoi, Ncv32u scale) +{ + int curX = blockIdx.x * blockDim.x + threadIdx.x; + int curY = blockIdx.y * blockDim.y + threadIdx.y; + + if (curX >= dstRoi.width || curY >= dstRoi.height) + { + return; + } + + d_dst[curY * dstStep + curX] = getElem_DownsampleNearest((curY * srcStep + curX) * scale, d_src); +} + + +template +static NCVStatus downsampleNearestWrapperDevice(T *d_src, Ncv32u srcStep, + T *d_dst, Ncv32u dstStep, + NcvSize32u srcRoi, Ncv32u scale, + NcvBool readThruTexture) +{ + ncvAssertReturn(d_src != NULL && d_dst != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(srcRoi.width > 0 && srcRoi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(scale != 0, NPPST_INVALID_SCALE); + ncvAssertReturn(srcStep >= (Ncv32u)(srcRoi.width) * sizeof(T) && + dstStep >= (Ncv32u)(srcRoi.width * sizeof(T) / scale), NPPST_INVALID_STEP); + srcStep /= sizeof(T); + dstStep /= sizeof(T); + + NcvSize32u dstRoi; + dstRoi.width = srcRoi.width / scale; + dstRoi.height = srcRoi.height / scale; + + dim3 grid((dstRoi.width + NUM_DOWNSAMPLE_NEAREST_THREADS_X - 1) / NUM_DOWNSAMPLE_NEAREST_THREADS_X, + (dstRoi.height + NUM_DOWNSAMPLE_NEAREST_THREADS_Y - 1) / NUM_DOWNSAMPLE_NEAREST_THREADS_Y); + dim3 block(NUM_DOWNSAMPLE_NEAREST_THREADS_X, NUM_DOWNSAMPLE_NEAREST_THREADS_Y); + + if (!readThruTexture) + { + downsampleNearest_C1R + + <<>> + (d_src, srcStep, d_dst, dstStep, dstRoi, scale); + } + else + { + cudaChannelFormatDesc cfdTexSrc; + + if (sizeof(T) == sizeof(Ncv32u)) + { + cfdTexSrc = cudaCreateChannelDesc(); + + size_t alignmentOffset; + ncvAssertCUDAReturn(cudaBindTexture(&alignmentOffset, tex32u, d_src, cfdTexSrc, srcRoi.height * srcStep * sizeof(T)), NPPST_TEXTURE_BIND_ERROR); + ncvAssertReturn(alignmentOffset==0, NPPST_TEXTURE_BIND_ERROR); + } + else + { + cfdTexSrc = cudaCreateChannelDesc(); + + size_t alignmentOffset; + ncvAssertCUDAReturn(cudaBindTexture(&alignmentOffset, tex64u, d_src, cfdTexSrc, srcRoi.height * srcStep * sizeof(T)), NPPST_TEXTURE_BIND_ERROR); + ncvAssertReturn(alignmentOffset==0, NPPST_TEXTURE_BIND_ERROR); + } + + downsampleNearest_C1R + + <<>> + (d_src, srcStep, d_dst, dstStep, dstRoi, scale); + } + + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + +#if defined _SELF_TEST_ + T *h_src; + T *h_dst; + ncvAssertCUDAReturn(cudaMallocHost(&h_src, srcStep * srcRoi.height * sizeof(T)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMallocHost(&h_dst, dstStep * dstRoi.height * sizeof(T)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMemcpy(h_src, d_src, srcStep * srcRoi.height * sizeof(T), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + ncvAssertCUDAReturn(cudaMemcpy(h_dst, d_dst, dstStep * dstRoi.height * sizeof(T), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + + bool bPass = true; + + for (Ncv32u i=0; i +static NCVStatus downsampleNearestWrapperHost(T *h_src, Ncv32u srcStep, + T *h_dst, Ncv32u dstStep, + NcvSize32u srcRoi, Ncv32u scale) +{ + ncvAssertReturn(h_src != NULL && h_dst != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(srcRoi.width != 0 && srcRoi.height != 0, NPPST_INVALID_ROI); + ncvAssertReturn(scale != 0, NPPST_INVALID_SCALE); + ncvAssertReturn(srcStep >= (Ncv32u)(srcRoi.width) * sizeof(T) && + dstStep >= (Ncv32u)(srcRoi.width * sizeof(T) / scale) && + srcStep % sizeof(T) == 0 && dstStep % sizeof(T) == 0, NPPST_INVALID_STEP); + srcStep /= sizeof(T); + dstStep /= sizeof(T); + + NcvSize32u dstRoi; + dstRoi.width = srcRoi.width / scale; + dstRoi.height = srcRoi.height / scale; + + for (Ncv32u i=0; i((Ncv##bit##u *)d_src, srcStep, \ + (Ncv##bit##u *)d_dst, dstStep, \ + srcRoi, scale, readThruTexture); \ + } + + +#define implementNppDownsampleNearestHost(bit, typ) \ + NCVStatus nppiStDownsampleNearest_##bit##typ##_C1R_host(Ncv##bit##typ *h_src, Ncv32u srcStep, \ + Ncv##bit##typ *h_dst, Ncv32u dstStep, \ + NcvSize32u srcRoi, Ncv32u scale) \ + { \ + return downsampleNearestWrapperHost((Ncv##bit##u *)h_src, srcStep, \ + (Ncv##bit##u *)h_dst, dstStep, \ + srcRoi, scale); \ + } + + +implementNppDownsampleNearest(32, u) +implementNppDownsampleNearest(32, s) +implementNppDownsampleNearest(32, f) +implementNppDownsampleNearest(64, u) +implementNppDownsampleNearest(64, s) +implementNppDownsampleNearest(64, f) +implementNppDownsampleNearestHost(32, u) +implementNppDownsampleNearestHost(32, s) +implementNppDownsampleNearestHost(32, f) +implementNppDownsampleNearestHost(64, u) +implementNppDownsampleNearestHost(64, s) +implementNppDownsampleNearestHost(64, f) + + +//============================================================================== +// +// RectStdDev.cu +// +//============================================================================== + + +const Ncv32u NUM_RECTSTDDEV_THREADS = 128; + + +template +__device__ Ncv32u getElemSum(Ncv32u x, Ncv32u *d_sum) +{ + if (tbCacheTexture) + { + return tex1Dfetch(tex32u, x); + } + else + { + return d_sum[x]; + } +} + + +template +__device__ Ncv64u getElemSqSum(Ncv32u x, Ncv64u *d_sqsum) +{ + if (tbCacheTexture) + { + uint2 tmp = tex1Dfetch(tex64u, x); + Ncv64u res = (Ncv64u)tmp.y; + res <<= 32; + res |= tmp.x; + return res; + } + else + { + return d_sqsum[x]; + } +} + + +template +__global__ void rectStdDev_32f_C1R(Ncv32u *d_sum, Ncv32u sumStep, + Ncv64u *d_sqsum, Ncv32u sqsumStep, + Ncv32f *d_norm, Ncv32u normStep, + NcvSize32u roi, NcvRect32u rect, Ncv32f invRectArea) +{ + Ncv32u x_offs = blockIdx.x * NUM_RECTSTDDEV_THREADS + threadIdx.x; + if (x_offs >= roi.width) + { + return; + } + + Ncv32u sum_offset = blockIdx.y * sumStep + x_offs; + Ncv32u sqsum_offset = blockIdx.y * sqsumStep + x_offs; + + //OPT: try swapping order (could change cache hit/miss ratio) + Ncv32u sum_tl = getElemSum(sum_offset + rect.y * sumStep + rect.x, d_sum); + Ncv32u sum_bl = getElemSum(sum_offset + (rect.y + rect.height) * sumStep + rect.x, d_sum); + Ncv32u sum_tr = getElemSum(sum_offset + rect.y * sumStep + rect.x + rect.width, d_sum); + Ncv32u sum_br = getElemSum(sum_offset + (rect.y + rect.height) * sumStep + rect.x + rect.width, d_sum); + Ncv32u sum_val = sum_br + sum_tl - sum_tr - sum_bl; + + Ncv64u sqsum_tl, sqsum_bl, sqsum_tr, sqsum_br; + sqsum_tl = getElemSqSum(sqsum_offset + rect.y * sqsumStep + rect.x, d_sqsum); + sqsum_bl = getElemSqSum(sqsum_offset + (rect.y + rect.height) * sqsumStep + rect.x, d_sqsum); + sqsum_tr = getElemSqSum(sqsum_offset + rect.y * sqsumStep + rect.x + rect.width, d_sqsum); + sqsum_br = getElemSqSum(sqsum_offset + (rect.y + rect.height) * sqsumStep + rect.x + rect.width, d_sqsum); + Ncv64u sqsum_val = sqsum_br + sqsum_tl - sqsum_tr - sqsum_bl; + + Ncv32f mean = sum_val * invRectArea; + + ////////////////////////////////////////////////////////////////////////// + // sqsum_val_res = sqsum_val / rectArea + ////////////////////////////////////////////////////////////////////////// + + Ncv32f sqsum_val_1 = __ull2float_rz(sqsum_val); + Ncv64u sqsum_val_2 = __float2ull_rz(sqsum_val_1); + Ncv64u sqsum_val_3 = sqsum_val - sqsum_val_2; + Ncv32f sqsum_val_4 = __ull2float_rn(sqsum_val_3); + sqsum_val_1 *= invRectArea; + sqsum_val_4 *= invRectArea; + Ncv32f sqsum_val_res = sqsum_val_1 + sqsum_val_4; + + ////////////////////////////////////////////////////////////////////////// + // variance = sqsum_val_res - mean * mean + ////////////////////////////////////////////////////////////////////////// + +#if defined DISABLE_MAD_SELECTIVELY + Ncv32f variance = sqsum_val_2 - __fmul_rn(mean, mean); +#else + Ncv32f variance = sqsum_val_res - mean * mean; +#endif + + ////////////////////////////////////////////////////////////////////////// + // stddev = sqrtf(variance) + ////////////////////////////////////////////////////////////////////////// + + //Ncv32f stddev = sqrtf(variance); + Ncv32f stddev = __fsqrt_rn(variance); + + d_norm[blockIdx.y * normStep + x_offs] = stddev; +} + + +NCVStatus nppiStRectStdDev_32f_C1R(Ncv32u *d_sum, Ncv32u sumStep, + Ncv64u *d_sqsum, Ncv32u sqsumStep, + Ncv32f *d_norm, Ncv32u normStep, + NcvSize32u roi, NcvRect32u rect, + Ncv32f scaleArea, NcvBool readThruTexture) +{ + ncvAssertReturn(d_sum != NULL && d_sqsum != NULL && d_norm != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roi.width > 0 && roi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(sumStep >= (Ncv32u)(roi.width + rect.x + rect.width - 1) * sizeof(Ncv32u) && + sqsumStep >= (Ncv32u)(roi.width + rect.x + rect.width - 1) * sizeof(Ncv64u) && + normStep >= (Ncv32u)roi.width * sizeof(Ncv32f) && + sumStep % sizeof(Ncv32u) == 0 && + sqsumStep % sizeof(Ncv64u) == 0 && + normStep % sizeof(Ncv32f) == 0, NPPST_INVALID_STEP); + ncvAssertReturn(scaleArea >= 1.0f, NPPST_INVALID_SCALE); + sumStep /= sizeof(Ncv32u); + sqsumStep /= sizeof(Ncv64u); + normStep /= sizeof(Ncv32f); + + Ncv32f rectArea = rect.width * rect.height * scaleArea; + Ncv32f invRectArea = 1.0f / rectArea; + + dim3 grid(((roi.width + NUM_RECTSTDDEV_THREADS - 1) / NUM_RECTSTDDEV_THREADS), roi.height); + dim3 block(NUM_RECTSTDDEV_THREADS); + + if (!readThruTexture) + { + rectStdDev_32f_C1R + + <<>> + (d_sum, sumStep, d_sqsum, sqsumStep, d_norm, normStep, roi, rect, invRectArea); + } + else + { + cudaChannelFormatDesc cfdTexSrc; + cudaChannelFormatDesc cfdTexSqr; + cfdTexSrc = cudaCreateChannelDesc(); + cfdTexSqr = cudaCreateChannelDesc(); + + size_t alignmentOffset; + ncvAssertCUDAReturn(cudaBindTexture(&alignmentOffset, tex32u, d_sum, cfdTexSrc, (roi.height + rect.y + rect.height) * sumStep * sizeof(Ncv32u)), NPPST_TEXTURE_BIND_ERROR); + ncvAssertReturn(alignmentOffset==0, NPPST_TEXTURE_BIND_ERROR); + ncvAssertCUDAReturn(cudaBindTexture(&alignmentOffset, tex64u, d_sqsum, cfdTexSqr, (roi.height + rect.y + rect.height) * sqsumStep * sizeof(Ncv64u)), NPPST_TEXTURE_BIND_ERROR); + ncvAssertReturn(alignmentOffset==0, NPPST_TEXTURE_BIND_ERROR); + + rectStdDev_32f_C1R + + <<>> + (NULL, sumStep, NULL, sqsumStep, d_norm, normStep, roi, rect, invRectArea); + } + + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + +#if defined _SELF_TEST_ + Ncv32u *h_sum; + Ncv64u *h_sqsum; + Ncv32f *h_norm_d; + Ncv32u ExtHeight = roi.height + rect.y + rect.height; + ncvAssertCUDAReturn(cudaMallocHost(&h_sum, sumStep * ExtHeight * sizeof(Ncv32u)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMallocHost(&h_sqsum, sqsumStep * ExtHeight * sizeof(Ncv64u)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMallocHost(&h_norm_d, normStep * roi.height * sizeof(Ncv32u)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMemcpy(h_sum, d_sum, sumStep * ExtHeight * sizeof(Ncv32u), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + ncvAssertCUDAReturn(cudaMemcpy(h_sqsum, d_sqsum, sqsumStep * ExtHeight * sizeof(Ncv64u), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + ncvAssertCUDAReturn(cudaMemcpy(h_norm_d, d_norm, normStep * roi.height * sizeof(Ncv32f), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + + Ncv32f *h_norm_h; + ncvAssertCUDAReturn(cudaMallocHost(&h_norm_h, normStep * roi.height * sizeof(Ncv32u)), NPPST_MEM_ALLOC_ERR); + + ncvAssertReturnNcvStat(nppRectStdDev_32f_C1R_host(h_sum, sqsumStep, h_sqsum, sqsumStep, h_norm_h, normStep, roi, rect, scaleArea)); + + const Ncv64f relEPS = 0.005; + bool bPass = true; + for (Ncv32u i=0; i relEPS) + { + printf("::ncvRectStdDev_32f_C1R self test failed: i=%d, j=%d, cpu=%f, gpu=%f\n", i, j, h_norm_h[i * normStep + j], h_norm_d[i * normStep + j]); + bPass = false; + } + } + } + ncvAssertCUDAReturn(cudaFreeHost(h_sum), NPPST_MEMFREE_ERR); + ncvAssertCUDAReturn(cudaFreeHost(h_sqsum), NPPST_MEMFREE_ERR); + ncvAssertCUDAReturn(cudaFreeHost(h_norm_d), NPPST_MEMFREE_ERR); + ncvAssertCUDAReturn(cudaFreeHost(h_norm_h), NPPST_MEMFREE_ERR); + printf("::ncvRectStdDev_32f_C1R %s\n", bPass?"PASSED":"FAILED"); +#endif + + return NPPST_SUCCESS; +} + + +NCVStatus nppiStRectStdDev_32f_C1R_host(Ncv32u *h_sum, Ncv32u sumStep, + Ncv64u *h_sqsum, Ncv32u sqsumStep, + Ncv32f *h_norm, Ncv32u normStep, + NcvSize32u roi, NcvRect32u rect, + Ncv32f scaleArea) +{ + ncvAssertReturn(h_sum != NULL && h_sqsum != NULL && h_norm != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(roi.width > 0 && roi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(sumStep >= (Ncv32u)(roi.width + rect.x + rect.width - 1) * sizeof(Ncv32u) && + sqsumStep >= (Ncv32u)(roi.width + rect.x + rect.width - 1) * sizeof(Ncv64u) && + normStep >= (Ncv32u)roi.width * sizeof(Ncv32f) && + sumStep % sizeof(Ncv32u) == 0 && + sqsumStep % sizeof(Ncv64u) == 0 && + normStep % sizeof(Ncv32f) == 0, NPPST_INVALID_STEP); + ncvAssertReturn(scaleArea >= 1.0f, NPPST_INVALID_SCALE); + sumStep /= sizeof(Ncv32u); + sqsumStep /= sizeof(Ncv64u); + normStep /= sizeof(Ncv32f); + + Ncv32f rectArea = rect.width * rect.height * scaleArea; + Ncv32f invRectArea = 1.0f / rectArea; + + for (Ncv32u i=0; i +__global__ void transpose(T *d_src, Ncv32u srcStride, + T *d_dst, Ncv32u dstStride, NcvSize32u srcRoi) +{ + __shared__ T tile[TRANSPOSE_TILE_DIM][TRANSPOSE_TILE_DIM+1]; + + Ncv32u blockIdx_x, blockIdx_y; + + // do diagonal reordering + if (gridDim.x == gridDim.y) + { + blockIdx_y = blockIdx.x; + blockIdx_x = (blockIdx.x + blockIdx.y) % gridDim.x; + } + else + { + Ncv32u bid = blockIdx.x + gridDim.x * blockIdx.y; + blockIdx_y = bid % gridDim.y; + blockIdx_x = ((bid / gridDim.y) + blockIdx_y) % gridDim.x; + } + + Ncv32u xIndex = blockIdx_x * TRANSPOSE_TILE_DIM + threadIdx.x; + Ncv32u yIndex = blockIdx_y * TRANSPOSE_TILE_DIM + threadIdx.y; + Ncv32u index_in = xIndex + yIndex * srcStride; + + xIndex = blockIdx_y * TRANSPOSE_TILE_DIM + threadIdx.x; + yIndex = blockIdx_x * TRANSPOSE_TILE_DIM + threadIdx.y; + Ncv32u index_out = xIndex + yIndex * dstStride; + + for (Ncv32u i=0; i +NCVStatus transposeWrapperDevice(T *d_src, Ncv32u srcStride, + T *d_dst, Ncv32u dstStride, NcvSize32u srcRoi) +{ + ncvAssertReturn(d_src != NULL && d_dst != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(srcRoi.width > 0 && srcRoi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStride >= srcRoi.width * sizeof(T) && + dstStride >= srcRoi.height * sizeof(T) && + srcStride % sizeof(T) == 0 && dstStride % sizeof(T) == 0, NPPST_INVALID_STEP); + srcStride /= sizeof(T); + dstStride /= sizeof(T); + + dim3 grid((srcRoi.width + TRANSPOSE_TILE_DIM - 1) / TRANSPOSE_TILE_DIM, + (srcRoi.height + TRANSPOSE_TILE_DIM - 1) / TRANSPOSE_TILE_DIM); + dim3 block(TRANSPOSE_TILE_DIM, TRANSPOSE_TILE_DIM); + transpose + + <<>> + (d_src, srcStride, d_dst, dstStride, srcRoi); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + +#if defined _SELF_TEST_ + Ncv32u widthExt = grid.x * TRANSPOSE_TILE_DIM; + Ncv32u heightExt = grid.y * TRANSPOSE_TILE_DIM; + T *h_src; + T *h_dst; + ncvAssertCUDAReturn(cudaMallocHost(&h_src, srcStride * heightExt * sizeof(T)), NPPST_MEM_ALLOC_ERR); + ncvAssertCUDAReturn(cudaMallocHost(&h_dst, dstStride * widthExt * sizeof(T)), NPPST_MEM_ALLOC_ERR); + memset(h_src, 0, srcStride * heightExt * sizeof(T)); + memset(h_dst, 0, dstStride * widthExt * sizeof(T)); + ncvAssertCUDAReturn(cudaMemcpy(h_src, d_src, srcStride * heightExt * sizeof(T), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + ncvAssertCUDAReturn(cudaMemcpy(h_dst, d_dst, dstStride * widthExt * sizeof(T), cudaMemcpyDeviceToHost), NPPST_MEMCPY_ERROR); + NcvBool bPass = true; + for (Ncv32u i=0; i +static NCVStatus transposeWrapperHost(T *h_src, Ncv32u srcStride, + T *h_dst, Ncv32u dstStride, NcvSize32u srcRoi) +{ + ncvAssertReturn(h_src != NULL && h_dst != NULL, NPPST_NULL_POINTER_ERROR); + ncvAssertReturn(srcRoi.width > 0 && srcRoi.height > 0, NPPST_INVALID_ROI); + ncvAssertReturn(srcStride >= srcRoi.width * sizeof(T) && + dstStride >= srcRoi.height * sizeof(T) && + srcStride % sizeof(T) == 0 && dstStride % sizeof(T) == 0, NPPST_INVALID_STEP); + srcStride /= sizeof(T); + dstStride /= sizeof(T); + + for (Ncv32u i=0; i((Ncv##bit##u *)d_src, srcStep, \ + (Ncv##bit##u *)d_dst, dstStep, srcRoi); \ + } + + +#define implementNppTransposeHost(bit, typ) \ + NCVStatus nppiStTranspose_##bit##typ##_C1R_host(Ncv##bit##typ *h_src, Ncv32u srcStep, \ + Ncv##bit##typ *h_dst, Ncv32u dstStep, \ + NcvSize32u srcRoi) \ + { \ + return transposeWrapperHost((Ncv##bit##u *)h_src, srcStep, \ + (Ncv##bit##u *)h_dst, dstStep, srcRoi); \ + } + + +implementNppTranspose(32,u) +implementNppTranspose(32,s) +implementNppTranspose(32,f) +implementNppTranspose(64,u) +implementNppTranspose(64,s) +implementNppTranspose(64,f) + +implementNppTransposeHost(32,u) +implementNppTransposeHost(32,s) +implementNppTransposeHost(32,f) +implementNppTransposeHost(64,u) +implementNppTransposeHost(64,s) +implementNppTransposeHost(64,f) + + +//============================================================================== +// +// Compact.cu +// +//============================================================================== + + +const Ncv32u NUM_REMOVE_THREADS = 256; + + +template +__global__ void removePass1Scan(Ncv32u *d_src, Ncv32u srcLen, + Ncv32u *d_offsets, Ncv32u *d_blockSums, + Ncv32u elemRemove) +{ + Ncv32u blockId = blockIdx.y * 65535 + blockIdx.x; + Ncv32u elemAddrIn = blockId * NUM_REMOVE_THREADS + threadIdx.x; + + if (elemAddrIn > srcLen + blockDim.x) + { + return; + } + + __shared__ Ncv32u shmem[NUM_REMOVE_THREADS * 2]; + + Ncv32u scanElem = 0; + if (elemAddrIn < srcLen) + { + if (bRemove) + { + scanElem = (d_src[elemAddrIn] != elemRemove) ? 1 : 0; + } + else + { + scanElem = d_src[elemAddrIn]; + } + } + + Ncv32u localScanInc = blockScanInclusive(scanElem, shmem); + __syncthreads(); + + if (elemAddrIn < srcLen) + { + if (threadIdx.x == NUM_REMOVE_THREADS-1 && bWritePartial) + { + d_blockSums[blockId] = localScanInc; + } + + if (bRemove) + { + d_offsets[elemAddrIn] = localScanInc - scanElem; + } + else + { + d_src[elemAddrIn] = localScanInc - scanElem; + } + } +} + + +__global__ void removePass2Adjust(Ncv32u *d_offsets, Ncv32u srcLen, Ncv32u *d_blockSums) +{ + Ncv32u blockId = blockIdx.y * 65535 + blockIdx.x; + Ncv32u elemAddrIn = blockId * NUM_REMOVE_THREADS + threadIdx.x; + if (elemAddrIn >= srcLen) + { + return; + } + + __shared__ Ncv32u valOffs; + valOffs = d_blockSums[blockId]; + __syncthreads(); + + d_offsets[elemAddrIn] += valOffs; +} + + +__global__ void removePass3Compact(Ncv32u *d_src, Ncv32u srcLen, + Ncv32u *d_offsets, Ncv32u *d_dst, + Ncv32u elemRemove, Ncv32u *dstLenValue) +{ + Ncv32u blockId = blockIdx.y * 65535 + blockIdx.x; + Ncv32u elemAddrIn = blockId * NUM_REMOVE_THREADS + threadIdx.x; + if (elemAddrIn >= srcLen) + { + return; + } + + Ncv32u elem = d_src[elemAddrIn]; + Ncv32u elemAddrOut = d_offsets[elemAddrIn]; + if (elem != elemRemove) + { + d_dst[elemAddrOut] = elem; + } + + if (elemAddrIn == srcLen-1) + { + if (elem != elemRemove) + { + *dstLenValue = elemAddrOut + 1; + } + else + { + *dstLenValue = elemAddrOut; + } + } +} + + +NCVStatus compactVector_32u_device(Ncv32u *d_src, Ncv32u srcLen, + Ncv32u *d_dst, Ncv32u *dstLenPinned, + Ncv32u elemRemove, + INCVMemAllocator &gpuAllocator) +{ + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + ncvAssertReturn((d_src != NULL && d_dst != NULL) || gpuAllocator.isCounting(), NPPST_NULL_POINTER_ERROR); + + if (srcLen == 0) + { + if (dstLenPinned != NULL) + { + *dstLenPinned = 0; + } + return NPPST_SUCCESS; + } + + std::vector partSumNums; + std::vector partSumOffsets; + Ncv32u partSumLastNum = srcLen; + Ncv32u partSumLastOffs = 0; + do + { + partSumNums.push_back(partSumLastNum); + partSumOffsets.push_back(partSumLastOffs); + + Ncv32u curPartSumAlignedLength = alignUp(partSumLastNum * sizeof(Ncv32u), + gpuAllocator.alignment()) / sizeof(Ncv32u); + partSumLastOffs += curPartSumAlignedLength; + + partSumLastNum = (partSumLastNum + NUM_REMOVE_THREADS - 1) / NUM_REMOVE_THREADS; + } + while (partSumLastNum>1); + partSumNums.push_back(partSumLastNum); + partSumOffsets.push_back(partSumLastOffs); + + NCVVectorAlloc d_hierSums(gpuAllocator, partSumLastOffs+1); + ncvAssertReturn(gpuAllocator.isCounting() || d_hierSums.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + NCVVectorAlloc d_numDstElements(gpuAllocator, 1); + ncvAssertReturn(gpuAllocator.isCounting() || d_numDstElements.isMemAllocated(), NPPST_MEM_INTERNAL_ERROR); + + NCV_SET_SKIP_COND(gpuAllocator.isCounting()); + NCV_SKIP_COND_BEGIN + + dim3 block(NUM_REMOVE_THREADS); + + //calculate zero-level partial sums for indices calculation + if (partSumNums.size() > 2) + { + dim3 grid(partSumNums[1]); + + if (grid.x > 65535) + { + grid.y = (grid.x + 65534) / 65535; + grid.x = 65535; + } + removePass1Scan + + <<>> + (d_src, srcLen, + d_hierSums.ptr(), + d_hierSums.ptr() + partSumOffsets[1], + elemRemove); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + + //calculate hierarchical partial sums + for (Ncv32u i=1; i 65535) + { + grid.y = (grid.x + 65534) / 65535; + grid.x = 65535; + } + if (grid.x != 1) + { + removePass1Scan + + <<>> + (d_hierSums.ptr() + partSumOffsets[i], + partSumNums[i], NULL, + d_hierSums.ptr() + partSumOffsets[i+1], + NULL); + } + else + { + removePass1Scan + + <<>> + (d_hierSums.ptr() + partSumOffsets[i], + partSumNums[i], NULL, + NULL, + NULL); + } + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + } + + //adjust hierarchical partial sums + for (Ncv32s i=(Ncv32s)partSumNums.size()-3; i>=0; i--) + { + dim3 grid(partSumNums[i+1]); + if (grid.x > 65535) + { + grid.y = (grid.x + 65534) / 65535; + grid.x = 65535; + } + removePass2Adjust + <<>> + (d_hierSums.ptr() + partSumOffsets[i], partSumNums[i], + d_hierSums.ptr() + partSumOffsets[i+1]); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + } + } + else + { + dim3 grid(partSumNums[1]); + removePass1Scan + + <<>> + (d_src, srcLen, + d_hierSums.ptr(), + NULL, elemRemove); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + } + + //compact source vector using indices + dim3 grid(partSumNums[1]); + if (grid.x > 65535) + { + grid.y = (grid.x + 65534) / 65535; + grid.x = 65535; + } + removePass3Compact + <<>> + (d_src, srcLen, d_hierSums.ptr(), d_dst, + elemRemove, d_numDstElements.ptr()); + ncvAssertCUDAReturn(cudaGetLastError(), NPPST_CUDA_KERNEL_EXECUTION_ERROR); + + //get number of dst elements + if (dstLenPinned != NULL) + { + ncvAssertCUDAReturn(cudaMemcpyAsync(dstLenPinned, d_numDstElements.ptr(), sizeof(Ncv32u), + cudaMemcpyDeviceToHost, nppStGetActiveCUDAstream()), NPPST_MEM_RESIDENCE_ERROR); + ncvAssertCUDAReturn(cudaStreamSynchronize(nppStGetActiveCUDAstream()), NPPST_MEM_RESIDENCE_ERROR); + } + + NCV_SKIP_COND_END + + return NPPST_SUCCESS; +} + + +NCVStatus nppsStCompactGetSize_32u(Ncv32u srcLen, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + ncvAssertReturn(pBufsize != NULL, NPPST_NULL_POINTER_ERROR); + + if (srcLen == 0) + { + *pBufsize = 0; + return NPPST_SUCCESS; + } + + NCVMemStackAllocator gpuCounter(devProp.textureAlignment); + ncvAssertReturn(gpuCounter.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = compactVector_32u_device(NULL, srcLen, NULL, NULL, 0xC001C0DE, + gpuCounter); + ncvAssertReturnNcvStat(ncvStat); + + *pBufsize = (Ncv32u)gpuCounter.maxSize(); + return NPPST_SUCCESS; +} + + +NCVStatus nppsStCompactGetSize_32s(Ncv32u srcLen, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + return nppsStCompactGetSize_32u(srcLen, pBufsize, devProp); +} + + +NCVStatus nppsStCompactGetSize_32f(Ncv32u srcLen, Ncv32u *pBufsize, cudaDeviceProp &devProp) +{ + return nppsStCompactGetSize_32u(srcLen, pBufsize, devProp); +} + + +NCVStatus nppsStCompact_32u(Ncv32u *d_src, Ncv32u srcLen, + Ncv32u *d_dst, Ncv32u *p_dstLen, + Ncv32u elemRemove, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + NCVMemStackAllocator gpuAllocator(NCVMemoryTypeDevice, bufSize, devProp.textureAlignment, pBuffer); + ncvAssertReturn(gpuAllocator.isInitialized(), NPPST_MEM_INTERNAL_ERROR); + + NCVStatus ncvStat = compactVector_32u_device(d_src, srcLen, d_dst, p_dstLen, elemRemove, + gpuAllocator); + ncvAssertReturnNcvStat(ncvStat); + + return NPPST_SUCCESS; +} + + +NCVStatus nppsStCompact_32s(Ncv32s *d_src, Ncv32u srcLen, + Ncv32s *d_dst, Ncv32u *p_dstLen, + Ncv32s elemRemove, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + return nppsStCompact_32u((Ncv32u *)d_src, srcLen, (Ncv32u *)d_dst, p_dstLen, + *(Ncv32u *)&elemRemove, pBuffer, bufSize, devProp); +} + + +NCVStatus nppsStCompact_32f(Ncv32f *d_src, Ncv32u srcLen, + Ncv32f *d_dst, Ncv32u *p_dstLen, + Ncv32f elemRemove, Ncv8u *pBuffer, + Ncv32u bufSize, cudaDeviceProp &devProp) +{ + return nppsStCompact_32u((Ncv32u *)d_src, srcLen, (Ncv32u *)d_dst, p_dstLen, + *(Ncv32u *)&elemRemove, pBuffer, bufSize, devProp); +} + + +NCVStatus nppsStCompact_32u_host(Ncv32u *h_src, Ncv32u srcLen, + Ncv32u *h_dst, Ncv32u *dstLen, Ncv32u elemRemove) +{ + ncvAssertReturn(h_src != NULL && h_dst != NULL, NPPST_NULL_POINTER_ERROR); + + if (srcLen == 0) + { + if (dstLen != NULL) + { + *dstLen = 0; + } + return NPPST_SUCCESS; + } + + Ncv32u dstIndex = 0; + for (Ncv32u srcIndex=0; srcIndex - - #if !defined (HAVE_CUDA) #else /* !defined (HAVE_CUDA) */ +#include #include #include "NCV.hpp" @@ -94,17 +92,6 @@ void ncvSetDebugOutputHandler(NCVDebugOutputHandler *func) //============================================================================== -NCVStatus GPUAlignmentValue(Ncv32u &alignment) -{ - int curDev; - cudaDeviceProp curProp; - ncvAssertCUDAReturn(cudaGetDevice(&curDev), NCV_CUDA_ERROR); - ncvAssertCUDAReturn(cudaGetDeviceProperties(&curProp, curDev), NCV_CUDA_ERROR); - alignment = curProp.textureAlignment; //GPUAlignmentValue(curProp.major); - return NCV_SUCCESS; -} - - Ncv32u alignUp(Ncv32u what, Ncv32u alignment) { Ncv32u alignMask = alignment-1; @@ -216,7 +203,7 @@ NCVMemStackAllocator::NCVMemStackAllocator(Ncv32u alignment) } -NCVMemStackAllocator::NCVMemStackAllocator(NCVMemoryType memT, size_t capacity, Ncv32u alignment) +NCVMemStackAllocator::NCVMemStackAllocator(NCVMemoryType memT, size_t capacity, Ncv32u alignment, void *reusePtr) : currentSize(0), _maxSize(0), @@ -229,17 +216,26 @@ NCVMemStackAllocator::NCVMemStackAllocator(NCVMemoryType memT, size_t capacity, allocBegin = NULL; - switch (memT) + if (reusePtr == NULL) { - case NCVMemoryTypeDevice: - ncvAssertCUDAReturn(cudaMalloc(&allocBegin, capacity), ); - break; - case NCVMemoryTypeHostPinned: - ncvAssertCUDAReturn(cudaMallocHost(&allocBegin, capacity), ); - break; - case NCVMemoryTypeHostPageable: - allocBegin = (Ncv8u *)malloc(capacity); - break; + bReusesMemory = false; + switch (memT) + { + case NCVMemoryTypeDevice: + ncvAssertCUDAReturn(cudaMalloc(&allocBegin, capacity), ); + break; + case NCVMemoryTypeHostPinned: + ncvAssertCUDAReturn(cudaMallocHost(&allocBegin, capacity), ); + break; + case NCVMemoryTypeHostPageable: + allocBegin = (Ncv8u *)malloc(capacity); + break; + } + } + else + { + bReusesMemory = true; + allocBegin = (Ncv8u *)reusePtr; } if (capacity == 0) @@ -260,18 +256,23 @@ NCVMemStackAllocator::~NCVMemStackAllocator() if (allocBegin != NULL) { ncvAssertPrintCheck(currentSize == 0, "NCVMemStackAllocator dtor:: not all objects were deallocated properly, forcing destruction"); - switch (_memType) + + if (!bReusesMemory) { - case NCVMemoryTypeDevice: - ncvAssertCUDAReturn(cudaFree(allocBegin), ); - break; - case NCVMemoryTypeHostPinned: - ncvAssertCUDAReturn(cudaFreeHost(allocBegin), ); - break; - case NCVMemoryTypeHostPageable: - free(allocBegin); - break; + switch (_memType) + { + case NCVMemoryTypeDevice: + ncvAssertCUDAReturn(cudaFree(allocBegin), ); + break; + case NCVMemoryTypeHostPinned: + ncvAssertCUDAReturn(cudaFreeHost(allocBegin), ); + break; + case NCVMemoryTypeHostPageable: + free(allocBegin); + break; + } } + allocBegin = NULL; } } @@ -356,14 +357,14 @@ size_t NCVMemStackAllocator::maxSize(void) const //=================================================================== -NCVMemNativeAllocator::NCVMemNativeAllocator(NCVMemoryType memT) +NCVMemNativeAllocator::NCVMemNativeAllocator(NCVMemoryType memT, Ncv32u alignment) : currentSize(0), _maxSize(0), - _memType(memT) + _memType(memT), + _alignment(alignment) { ncvAssertPrintReturn(memT != NCVMemoryTypeNone, "NCVMemNativeAllocator ctor:: counting not permitted for this allocator type", ); - ncvAssertPrintReturn(NCV_SUCCESS == GPUAlignmentValue(this->_alignment), "NCVMemNativeAllocator ctor:: couldn't get device _alignment", ); } diff --git a/modules/gpu/src/nvidia/NCV.hpp b/modules/gpu/src/nvidia/core/NCV.hpp similarity index 76% rename from modules/gpu/src/nvidia/NCV.hpp rename to modules/gpu/src/nvidia/core/NCV.hpp index a71f650252..81eb417fbe 100644 --- a/modules/gpu/src/nvidia/NCV.hpp +++ b/modules/gpu/src/nvidia/core/NCV.hpp @@ -42,8 +42,49 @@ #ifndef _ncv_hpp_ #define _ncv_hpp_ +#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined CVAPI_EXPORTS //&& !defined(__CUDACC__) + #define NCV_EXPORTS __declspec(dllexport) +#else + #define NCV_EXPORTS +#endif + #include -#include "npp_staging.h" + + +//============================================================================== +// +// Compile-time assert functionality +// +//============================================================================== + + +/** +* Compile-time assert namespace +*/ +namespace NcvCTprep +{ + template + struct CT_ASSERT_FAILURE; + + template <> + struct CT_ASSERT_FAILURE {}; + + template + struct assertTest{}; +} + + +#define NCV_CT_PREP_PASTE_AUX(a,b) a##b ///< Concatenation indirection macro +#define NCV_CT_PREP_PASTE(a,b) NCV_CT_PREP_PASTE_AUX(a, b) ///< Concatenation macro + + +/** +* Performs compile-time assertion of a condition on the file scope +*/ +#define NCV_CT_ASSERT(X) \ + typedef NcvCTprep::assertTest)> \ + NCV_CT_PREP_PASTE(__ct_assert_typedef_, __LINE__) + //============================================================================== @@ -82,62 +123,72 @@ typedef float Ncv32f; typedef double Ncv64f; -typedef struct +struct NcvRect8u { Ncv8u x; Ncv8u y; Ncv8u width; Ncv8u height; -} NcvRect8u; + NcvRect8u() : x(0), y(0), width(0), height(0) {}; + NcvRect8u(Ncv8u x, Ncv8u y, Ncv8u width, Ncv8u height) : x(x), y(y), width(width), height(height) {} +}; -typedef struct +struct NcvRect32s { Ncv32s x; ///< x-coordinate of upper left corner. Ncv32s y; ///< y-coordinate of upper left corner. Ncv32s width; ///< Rectangle width. Ncv32s height; ///< Rectangle height. -} NcvRect32s; + NcvRect32s() : x(0), y(0), width(0), height(0) {}; + NcvRect32s(Ncv32s x, Ncv32s y, Ncv32s width, Ncv32s height) : x(x), y(y), width(width), height(height) {} +}; -typedef struct +struct NcvRect32u { Ncv32u x; ///< x-coordinate of upper left corner. Ncv32u y; ///< y-coordinate of upper left corner. Ncv32u width; ///< Rectangle width. Ncv32u height; ///< Rectangle height. -} NcvRect32u; + NcvRect32u() : x(0), y(0), width(0), height(0) {}; + NcvRect32u(Ncv32u x, Ncv32u y, Ncv32u width, Ncv32u height) : x(x), y(y), width(width), height(height) {} +}; -typedef struct +struct NcvSize32s { Ncv32s width; ///< Rectangle width. Ncv32s height; ///< Rectangle height. -} NcvSize32s; + NcvSize32s() : width(0), height(0) {}; + NcvSize32s(Ncv32s width, Ncv32s height) : width(width), height(height) {} +}; -typedef struct +struct NcvSize32u { Ncv32u width; ///< Rectangle width. Ncv32u height; ///< Rectangle height. -} NcvSize32u; - - -NPPST_CT_ASSERT(sizeof(NcvBool) <= 4); -NPPST_CT_ASSERT(sizeof(Ncv64s) == 8); -NPPST_CT_ASSERT(sizeof(Ncv64u) == 8); -NPPST_CT_ASSERT(sizeof(Ncv32s) == 4); -NPPST_CT_ASSERT(sizeof(Ncv32u) == 4); -NPPST_CT_ASSERT(sizeof(Ncv16s) == 2); -NPPST_CT_ASSERT(sizeof(Ncv16u) == 2); -NPPST_CT_ASSERT(sizeof(Ncv8s) == 1); -NPPST_CT_ASSERT(sizeof(Ncv8u) == 1); -NPPST_CT_ASSERT(sizeof(Ncv32f) == 4); -NPPST_CT_ASSERT(sizeof(Ncv64f) == 8); -NPPST_CT_ASSERT(sizeof(NcvRect8u) == sizeof(Ncv32u)); -NPPST_CT_ASSERT(sizeof(NcvRect32s) == 4 * sizeof(Ncv32s)); -NPPST_CT_ASSERT(sizeof(NcvRect32u) == 4 * sizeof(Ncv32u)); -NPPST_CT_ASSERT(sizeof(NcvSize32u) == 2 * sizeof(Ncv32u)); + NcvSize32u() : width(0), height(0) {}; + NcvSize32u(Ncv32u width, Ncv32u height) : width(width), height(height) {} +}; + + +NCV_CT_ASSERT(sizeof(NcvBool) <= 4); +NCV_CT_ASSERT(sizeof(Ncv64s) == 8); +NCV_CT_ASSERT(sizeof(Ncv64u) == 8); +NCV_CT_ASSERT(sizeof(Ncv32s) == 4); +NCV_CT_ASSERT(sizeof(Ncv32u) == 4); +NCV_CT_ASSERT(sizeof(Ncv16s) == 2); +NCV_CT_ASSERT(sizeof(Ncv16u) == 2); +NCV_CT_ASSERT(sizeof(Ncv8s) == 1); +NCV_CT_ASSERT(sizeof(Ncv8u) == 1); +NCV_CT_ASSERT(sizeof(Ncv32f) == 4); +NCV_CT_ASSERT(sizeof(Ncv64f) == 8); +NCV_CT_ASSERT(sizeof(NcvRect8u) == sizeof(Ncv32u)); +NCV_CT_ASSERT(sizeof(NcvRect32s) == 4 * sizeof(Ncv32s)); +NCV_CT_ASSERT(sizeof(NcvRect32u) == 4 * sizeof(Ncv32u)); +NCV_CT_ASSERT(sizeof(NcvSize32u) == 2 * sizeof(Ncv32u)); //============================================================================== @@ -162,13 +213,13 @@ const Ncv32u K_LOG2_WARP_SIZE = 5; #define NCV_CT_PREP_STRINGIZE(x) NCV_CT_PREP_STRINGIZE_AUX(x) -void ncvDebugOutput(const char *msg, ...); +NCV_EXPORTS void ncvDebugOutput(const char *msg, ...); typedef void NCVDebugOutputHandler(const char* msg); -void ncvSetDebugOutputHandler(NCVDebugOutputHandler* func); +NCV_EXPORTS void ncvSetDebugOutputHandler(NCVDebugOutputHandler* func); #define ncvAssertPrintCheck(pred, msg) \ @@ -222,6 +273,7 @@ void ncvSetDebugOutputHandler(NCVDebugOutputHandler* func); */ enum NCVStatus { + //NCV statuses NCV_SUCCESS, NCV_CUDA_ERROR, @@ -257,6 +309,24 @@ enum NCVStatus NCV_NOIMPL_HAAR_TILTED_FEATURES, NCV_WARNING_HAAR_DETECTIONS_VECTOR_OVERFLOW, + + //NPP statuses + NPPST_SUCCESS = NCV_SUCCESS, ///< Successful operation (same as NPP_NO_ERROR) + NPPST_ERROR, ///< Unknown error + NPPST_CUDA_KERNEL_EXECUTION_ERROR, ///< CUDA kernel execution error + NPPST_NULL_POINTER_ERROR, ///< NULL pointer argument error + NPPST_TEXTURE_BIND_ERROR, ///< CUDA texture binding error or non-zero offset returned + NPPST_MEMCPY_ERROR, ///< CUDA memory copy error + NPPST_MEM_ALLOC_ERR, ///< CUDA memory allocation error + NPPST_MEMFREE_ERR, ///< CUDA memory deallocation error + + //NPPST statuses + NPPST_INVALID_ROI, ///< Invalid region of interest argument + NPPST_INVALID_STEP, ///< Invalid image lines step argument (check sign, alignment, relation to image width) + NPPST_INVALID_SCALE, ///< Invalid scale parameter passed + NPPST_MEM_INSUFFICIENT_BUFFER, ///< Insufficient user-allocated buffer + NPPST_MEM_RESIDENCE_ERROR, ///< Memory residence error detected (check if pointers should be device or pinned) + NPPST_MEM_INTERNAL_ERROR, ///< Internal memory management error }; @@ -285,11 +355,11 @@ enum NCVStatus typedef struct _NcvTimer *NcvTimer; -NcvTimer ncvStartTimer(void); +NCV_EXPORTS NcvTimer ncvStartTimer(void); -double ncvEndQueryTimerUs(NcvTimer t); +NCV_EXPORTS double ncvEndQueryTimerUs(NcvTimer t); -double ncvEndQueryTimerMs(NcvTimer t); +NCV_EXPORTS double ncvEndQueryTimerMs(NcvTimer t); //============================================================================== @@ -299,16 +369,10 @@ double ncvEndQueryTimerMs(NcvTimer t); //============================================================================== -/** -* Alignment of GPU memory chunks in bytes -*/ -NCVStatus GPUAlignmentValue(Ncv32u &alignment); - - /** * Calculates the aligned top bound value */ -Ncv32u alignUp(Ncv32u what, Ncv32u alignment); +NCV_EXPORTS Ncv32u alignUp(Ncv32u what, Ncv32u alignment); /** @@ -326,7 +390,7 @@ enum NCVMemoryType /** * NCVMemPtr */ -struct NCVMemPtr +struct NCV_EXPORTS NCVMemPtr { void *ptr; NCVMemoryType memtype; @@ -337,7 +401,7 @@ struct NCVMemPtr /** * NCVMemSegment */ -struct NCVMemSegment +struct NCV_EXPORTS NCVMemSegment { NCVMemPtr begin; size_t size; @@ -348,7 +412,7 @@ struct NCVMemSegment /** * INCVMemAllocator (Interface) */ -class INCVMemAllocator +class NCV_EXPORTS INCVMemAllocator { public: virtual ~INCVMemAllocator() = 0; @@ -370,7 +434,7 @@ inline INCVMemAllocator::~INCVMemAllocator() {} /** * NCVMemStackAllocator */ -class NCVMemStackAllocator : public INCVMemAllocator +class NCV_EXPORTS NCVMemStackAllocator : public INCVMemAllocator { NCVMemStackAllocator(); NCVMemStackAllocator(const NCVMemStackAllocator &); @@ -378,7 +442,7 @@ class NCVMemStackAllocator : public INCVMemAllocator public: explicit NCVMemStackAllocator(Ncv32u alignment); - NCVMemStackAllocator(NCVMemoryType memT, size_t capacity, Ncv32u alignment); + NCVMemStackAllocator(NCVMemoryType memT, size_t capacity, Ncv32u alignment, void *reusePtr=NULL); virtual ~NCVMemStackAllocator(); virtual NCVStatus alloc(NCVMemSegment &seg, size_t size); @@ -400,17 +464,18 @@ private: Ncv8u *end; size_t currentSize; size_t _maxSize; + NcvBool bReusesMemory; }; /** * NCVMemNativeAllocator */ -class NCVMemNativeAllocator : public INCVMemAllocator +class NCV_EXPORTS NCVMemNativeAllocator : public INCVMemAllocator { public: - NCVMemNativeAllocator(NCVMemoryType memT); + NCVMemNativeAllocator(NCVMemoryType memT, Ncv32u alignment); virtual ~NCVMemNativeAllocator(); virtual NCVStatus alloc(NCVMemSegment &seg, size_t size); @@ -438,9 +503,9 @@ private: /** * Copy dispatcher */ -NCVStatus memSegCopyHelper(void *dst, NCVMemoryType dstType, - const void *src, NCVMemoryType srcType, - size_t sz, cudaStream_t cuStream); +NCV_EXPORTS NCVStatus memSegCopyHelper(void *dst, NCVMemoryType dstType, + const void *src, NCVMemoryType srcType, + size_t sz, cudaStream_t cuStream); /** @@ -514,6 +579,7 @@ class NCVVectorAlloc : public NCVVector { NCVVectorAlloc(); NCVVectorAlloc(const NCVVectorAlloc &); + NCVVectorAlloc& operator=(const NCVVectorAlloc&); public: @@ -563,8 +629,7 @@ public: return allocatedMem; } -private: - +private: INCVMemAllocator &allocator; NCVMemSegment allocatedMem; }; @@ -707,7 +772,7 @@ class NCVMatrixAlloc : public NCVMatrix { NCVMatrixAlloc(); NCVMatrixAlloc(const NCVMatrixAlloc &); - + NCVMatrixAlloc& operator=(const NCVMatrixAlloc &); public: NCVMatrixAlloc(INCVMemAllocator &allocator, Ncv32u width, Ncv32u height, Ncv32u pitch=0) diff --git a/modules/gpu/src/nvidia/NCVRuntimeTemplates.hpp b/modules/gpu/src/nvidia/core/NCVRuntimeTemplates.hpp similarity index 73% rename from modules/gpu/src/nvidia/NCVRuntimeTemplates.hpp rename to modules/gpu/src/nvidia/core/NCVRuntimeTemplates.hpp index 14d16bb3b9..3d3f94f8b1 100644 --- a/modules/gpu/src/nvidia/NCVRuntimeTemplates.hpp +++ b/modules/gpu/src/nvidia/core/NCVRuntimeTemplates.hpp @@ -1,3 +1,51 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2009-2010, NVIDIA Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef _ncvruntimetemplates_hpp_ +#define _ncvruntimetemplates_hpp_ + +#include +#include + + //////////////////////////////////////////////////////////////////////////////// // The Loki Library // Copyright (c) 2001 by Andrei Alexandrescu @@ -14,13 +62,6 @@ // http://loki-lib.sourceforge.net/index.php?n=Main.License //////////////////////////////////////////////////////////////////////////////// -#ifndef _ncvruntimetemplates_hpp_ -#define _ncvruntimetemplates_hpp_ - -#include -#include - - namespace Loki { //============================================================================== diff --git a/modules/gpu/src/opencv2/gpu/device/transform.hpp b/modules/gpu/src/opencv2/gpu/device/transform.hpp index 959cca2350..79ed09439d 100644 --- a/modules/gpu/src/opencv2/gpu/device/transform.hpp +++ b/modules/gpu/src/opencv2/gpu/device/transform.hpp @@ -68,51 +68,51 @@ namespace cv { namespace gpu { namespace device //! Read Write Traits - template - struct UnReadWriteTraits_ - { - enum {shift=1}; - }; - template - struct UnReadWriteTraits_ - { - enum {shift=4}; - }; - template - struct UnReadWriteTraits_ - { - enum {shift=2}; + template + struct UnReadWriteTraits_ + { + enum {shift=1}; + }; + template + struct UnReadWriteTraits_ + { + enum {shift=4}; + }; + template + struct UnReadWriteTraits_ + { + enum {shift=2}; }; - template struct UnReadWriteTraits - { - enum {shift=UnReadWriteTraits_::shift}; - - typedef typename TypeVec::vec_t read_type; - typedef typename TypeVec::vec_t write_type; + template struct UnReadWriteTraits + { + enum {shift=UnReadWriteTraits_::shift}; + + typedef typename TypeVec::vec_t read_type; + typedef typename TypeVec::vec_t write_type; }; - template - struct BinReadWriteTraits_ - { - enum {shift=1}; + template + struct BinReadWriteTraits_ + { + enum {shift=1}; }; - template - struct BinReadWriteTraits_ - { - enum {shift=4}; + template + struct BinReadWriteTraits_ + { + enum {shift=4}; }; - template - struct BinReadWriteTraits_ - { - enum {shift=2}; + template + struct BinReadWriteTraits_ + { + enum {shift=2}; }; - template struct BinReadWriteTraits - { - enum {shift=BinReadWriteTraits_::shift}; - - typedef typename TypeVec::vec_t read_type1; - typedef typename TypeVec::vec_t read_type2; - typedef typename TypeVec::vec_t write_type; + template struct BinReadWriteTraits + { + enum {shift=BinReadWriteTraits_::shift}; + + typedef typename TypeVec::vec_t read_type1; + typedef typename TypeVec::vec_t read_type2; + typedef typename TypeVec::vec_t write_type; }; //! Transform kernels @@ -122,14 +122,14 @@ namespace cv { namespace gpu { namespace device { template static __device__ void unroll(const T& src, D& dst, const Mask& mask, UnOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) dst.x = op(src.x); } template static __device__ void unroll(const T1& src1, const T2& src2, D& dst, const Mask& mask, BinOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) dst.x = op(src1.x, src2.x); } @@ -138,18 +138,18 @@ namespace cv { namespace gpu { namespace device { template static __device__ void unroll(const T& src, D& dst, const Mask& mask, UnOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src.x); + dst.x = op(src.x); if (mask(y, x_shifted + 1)) dst.y = op(src.y); } template static __device__ void unroll(const T1& src1, const T2& src2, D& dst, const Mask& mask, BinOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src1.x, src2.x); + dst.x = op(src1.x, src2.x); if (mask(y, x_shifted + 1)) dst.y = op(src1.y, src2.y); } @@ -158,22 +158,22 @@ namespace cv { namespace gpu { namespace device { template static __device__ void unroll(const T& src, D& dst, const Mask& mask, UnOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src.x); + dst.x = op(src.x); if (mask(y, x_shifted + 1)) - dst.y = op(src.y); + dst.y = op(src.y); if (mask(y, x_shifted + 2)) dst.z = op(src.z); } template static __device__ void unroll(const T1& src1, const T2& src2, D& dst, const Mask& mask, BinOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src1.x, src2.x); + dst.x = op(src1.x, src2.x); if (mask(y, x_shifted + 1)) - dst.y = op(src1.y, src2.y); + dst.y = op(src1.y, src2.y); if (mask(y, x_shifted + 2)) dst.z = op(src1.z, src2.z); } @@ -182,65 +182,65 @@ namespace cv { namespace gpu { namespace device { template static __device__ void unroll(const T& src, D& dst, const Mask& mask, UnOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src.x); + dst.x = op(src.x); if (mask(y, x_shifted + 1)) - dst.y = op(src.y); + dst.y = op(src.y); if (mask(y, x_shifted + 2)) - dst.z = op(src.z); + dst.z = op(src.z); if (mask(y, x_shifted + 3)) dst.w = op(src.w); } template static __device__ void unroll(const T1& src1, const T2& src2, D& dst, const Mask& mask, BinOp& op, int x_shifted, int y) - { + { if (mask(y, x_shifted)) - dst.x = op(src1.x, src2.x); + dst.x = op(src1.x, src2.x); if (mask(y, x_shifted + 1)) - dst.y = op(src1.y, src2.y); + dst.y = op(src1.y, src2.y); if (mask(y, x_shifted + 2)) - dst.z = op(src1.z, src2.z); + dst.z = op(src1.z, src2.z); if (mask(y, x_shifted + 3)) dst.w = op(src1.w, src2.w); } }; - template - __global__ static void transformSmart(const DevMem2D_ src_, PtrStep_ dst_, const Mask mask, UnOp op) - { - typedef typename UnReadWriteTraits::read_type read_type; - typedef typename UnReadWriteTraits::write_type write_type; - const int shift = UnReadWriteTraits::shift; - - const int x = threadIdx.x + blockIdx.x * blockDim.x; - const int y = threadIdx.y + blockIdx.y * blockDim.y; - const int x_shifted = x * shift; - - if (y < src_.rows) - { - const T* src = src_.ptr(y); - D* dst = dst_.ptr(y); - - if (x_shifted + shift - 1 < src_.cols) - { - read_type src_n_el = ((const read_type*)src)[x]; - write_type dst_n_el; - - OpUnroller::unroll(src_n_el, dst_n_el, mask, op, x_shifted, y); - - ((write_type*)dst)[x] = dst_n_el; - } - else - { - for (int real_x = x_shifted; real_x < src_.cols; ++real_x) - { - if (mask(y, real_x)) - dst[real_x] = op(src[real_x]); - } - } - } + template + __global__ static void transformSmart(const DevMem2D_ src_, PtrStep_ dst_, const Mask mask, UnOp op) + { + typedef typename UnReadWriteTraits::read_type read_type; + typedef typename UnReadWriteTraits::write_type write_type; + const int shift = UnReadWriteTraits::shift; + + const int x = threadIdx.x + blockIdx.x * blockDim.x; + const int y = threadIdx.y + blockIdx.y * blockDim.y; + const int x_shifted = x * shift; + + if (y < src_.rows) + { + const T* src = src_.ptr(y); + D* dst = dst_.ptr(y); + + if (x_shifted + shift - 1 < src_.cols) + { + read_type src_n_el = ((const read_type*)src)[x]; + write_type dst_n_el; + + OpUnroller::unroll(src_n_el, dst_n_el, mask, op, x_shifted, y); + + ((write_type*)dst)[x] = dst_n_el; + } + else + { + for (int real_x = x_shifted; real_x < src_.cols; ++real_x) + { + if (mask(y, real_x)) + dst[real_x] = op(src[real_x]); + } + } + } } template @@ -255,44 +255,44 @@ namespace cv { namespace gpu { namespace device } } - template - __global__ static void transformSmart(const DevMem2D_ src1_, const PtrStep_ src2_, PtrStep_ dst_, - const Mask mask, BinOp op) - { - typedef typename BinReadWriteTraits::read_type1 read_type1; - typedef typename BinReadWriteTraits::read_type2 read_type2; - typedef typename BinReadWriteTraits::write_type write_type; - const int shift = BinReadWriteTraits::shift; - - const int x = threadIdx.x + blockIdx.x * blockDim.x; - const int y = threadIdx.y + blockIdx.y * blockDim.y; - const int x_shifted = x * shift; - - if (y < src1_.rows) - { - const T1* src1 = src1_.ptr(y); - const T2* src2 = src2_.ptr(y); - D* dst = dst_.ptr(y); - - if (x_shifted + shift - 1 < src1_.cols) - { - read_type1 src1_n_el = ((const read_type1*)src1)[x]; - read_type2 src2_n_el = ((const read_type2*)src2)[x]; - write_type dst_n_el; - - OpUnroller::unroll(src1_n_el, src2_n_el, dst_n_el, mask, op, x_shifted, y); - - ((write_type*)dst)[x] = dst_n_el; - } - else - { - for (int real_x = x_shifted; real_x < src1_.cols; ++real_x) - { - if (mask(y, real_x)) - dst[real_x] = op(src1[real_x], src2[real_x]); - } - } - } + template + __global__ static void transformSmart(const DevMem2D_ src1_, const PtrStep_ src2_, PtrStep_ dst_, + const Mask mask, BinOp op) + { + typedef typename BinReadWriteTraits::read_type1 read_type1; + typedef typename BinReadWriteTraits::read_type2 read_type2; + typedef typename BinReadWriteTraits::write_type write_type; + const int shift = BinReadWriteTraits::shift; + + const int x = threadIdx.x + blockIdx.x * blockDim.x; + const int y = threadIdx.y + blockIdx.y * blockDim.y; + const int x_shifted = x * shift; + + if (y < src1_.rows) + { + const T1* src1 = src1_.ptr(y); + const T2* src2 = src2_.ptr(y); + D* dst = dst_.ptr(y); + + if (x_shifted + shift - 1 < src1_.cols) + { + read_type1 src1_n_el = ((const read_type1*)src1)[x]; + read_type2 src2_n_el = ((const read_type2*)src2)[x]; + write_type dst_n_el; + + OpUnroller::unroll(src1_n_el, src2_n_el, dst_n_el, mask, op, x_shifted, y); + + ((write_type*)dst)[x] = dst_n_el; + } + else + { + for (int real_x = x_shifted; real_x < src1_.cols; ++real_x) + { + if (mask(y, real_x)) + dst[real_x] = op(src1[real_x], src2[real_x]); + } + } + } } template @@ -355,11 +355,11 @@ namespace cv template static void call(const DevMem2D_& src, const DevMem2D_& dst, UnOp op, const Mask& mask, cudaStream_t stream = 0) - { + { const int shift = device::UnReadWriteTraits::shift; dim3 threads(16, 16, 1); - dim3 grid(1, 1, 1); + dim3 grid(1, 1, 1); grid.x = divUp(src.cols, threads.x * shift); grid.y = divUp(src.rows, threads.y); @@ -373,7 +373,7 @@ namespace cv template static void call(const DevMem2D_& src1, const DevMem2D_& src2, const DevMem2D_& dst, BinOp op, const Mask& mask, cudaStream_t stream = 0) - { + { const int shift = device::BinReadWriteTraits::shift; dim3 threads(16, 16, 1); @@ -392,7 +392,7 @@ namespace cv template static void transform_caller(const DevMem2D_& src, const DevMem2D_& dst, UnOp op, const Mask& mask, cudaStream_t stream = 0) - { + { TransformChooser::cn == 1 && device::VecTraits::cn == 1 && device::UnReadWriteTraits::shift != 1>::call(src, dst, op, mask, stream); } diff --git a/modules/gpu/src/precomp.hpp b/modules/gpu/src/precomp.hpp index d5ad3cc727..ca073119ee 100644 --- a/modules/gpu/src/precomp.hpp +++ b/modules/gpu/src/precomp.hpp @@ -69,9 +69,9 @@ #include "cufft.h" #include "opencv2/gpu/stream_accessor.hpp" #include "npp.h" - #include "npp_staging.h" - - #include "nvidia/NCV.hpp" + + #include "nvidia/core/NCV.hpp" + #include "nvidia/NPP_staging/npp_staging.hpp" #include "nvidia/NCVHaarObjectDetection.hpp" #define CUDART_MINIMUM_REQUIRED_VERSION 3020 diff --git a/modules/gtest/src/gtestcv.cpp b/modules/gtest/src/gtestcv.cpp index 25082ca1af..3b3b695235 100644 --- a/modules/gtest/src/gtestcv.cpp +++ b/modules/gtest/src/gtestcv.cpp @@ -1378,7 +1378,7 @@ cmpEpsFlt_(const _Tp* src1, const _Tp* src2, size_t total, int imaxdiff, size_t { _Tp a = src1[i], b = src2[i]; if( a < 0 ) a ^= C; if( b < 0 ) b ^= C; - _Tp d = std::abs(a - b); + _Tp d = std::abs(double(a - b)); if( d > imaxdiff ) { idx = i + startidx; diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 1a601589a9..079d3af271 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -3,8 +3,8 @@ # # ---------------------------------------------------------------------------- -add_subdirectory(c) -add_subdirectory(cpp) +#add_subdirectory(c) +#add_subdirectory(cpp) add_subdirectory(gpu) if(0) diff --git a/samples/gpu/CMakeLists.txt b/samples/gpu/CMakeLists.txt index de9fe6ef80..7b39e6ee6b 100644 --- a/samples/gpu/CMakeLists.txt +++ b/samples/gpu/CMakeLists.txt @@ -14,10 +14,12 @@ if (BUILD_EXAMPLES) "${CMAKE_SOURCE_DIR}/modules/legacy/include" "${CMAKE_SOURCE_DIR}/modules/contrib/include" "${CMAKE_SOURCE_DIR}/modules/gpu/include" + "${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia" + "${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia/core" ) if(HAVE_CUDA) - include_directories(${CUDA_INCLUDE_DIRS}) + include_directories(${CUDA_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia ${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia/core) endif() if(CMAKE_COMPILER_IS_GNUCXX) diff --git a/modules/gpu/src/nvidia/FaceDetectionFeed.cpp_NvidiaAPI_sample b/samples/gpu/cascadeclassifier_nvidia_api.cpp similarity index 74% rename from modules/gpu/src/nvidia/FaceDetectionFeed.cpp_NvidiaAPI_sample rename to samples/gpu/cascadeclassifier_nvidia_api.cpp index c1926a38c2..ff99f2c361 100644 --- a/modules/gpu/src/nvidia/FaceDetectionFeed.cpp_NvidiaAPI_sample +++ b/samples/gpu/cascadeclassifier_nvidia_api.cpp @@ -1,60 +1,25 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2009-2010, NVIDIA Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of the copyright holders may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - +#pragma warning( disable : 4201 4408 4127 4100) #include -#include -#define CV_NO_BACKWARD_COMPATIBILITY +#include "cvconfig.h" +#if !defined(HAVE_CUDA) + int main( int argc, const char** argv ) { return printf("Please compile the librarary with CUDA support."), -1; } +#else -#include "opencv2/opencv.hpp" +#include +#include "opencv2/opencv.hpp" #include "NCVHaarObjectDetection.hpp" + + using namespace cv; -using namespace std; -const Size preferredVideoFrameSize(640, 480); -string preferredClassifier = "haarcascade_frontalface_alt.xml"; -string wndTitle = "NVIDIA Computer Vision SDK :: Face Detection in Video Feed"; +const Size2i preferredVideoFrameSize(640, 480); + +std::string preferredClassifier = "haarcascade_frontalface_alt.xml"; +std::string wndTitle = "NVIDIA Computer Vision SDK :: Face Detection in Video Feed"; void printSyntax(void) @@ -62,7 +27,6 @@ void printSyntax(void) printf("Syntax: FaceDetectionFeed.exe [-c cameranum | -v filename] classifier.xml\n"); } - void imagePrintf(Mat& img, int lineOffsY, Scalar color, const char *format, ...) { int fontFace = CV_FONT_HERSHEY_PLAIN; @@ -83,7 +47,6 @@ void imagePrintf(Mat& img, int lineOffsY, Scalar color, const char *format, ...) va_end(arg_ptr); } - NCVStatus process(Mat *srcdst, Ncv32u width, Ncv32u height, NcvBool bShowAllHypotheses, NcvBool bLargestFace, @@ -104,15 +67,16 @@ NCVStatus process(Mat *srcdst, ncvAssertReturn(d_src.isMemAllocated(), NCV_ALLOCATOR_BAD_ALLOC); NCVMatrixAlloc h_src(cpuAllocator, width, height); ncvAssertReturn(h_src.isMemAllocated(), NCV_ALLOCATOR_BAD_ALLOC); - NCVVectorAlloc d_rects(gpuAllocator, 100); + NCVVectorAlloc d_rects(gpuAllocator, 100); ncvAssertReturn(d_rects.isMemAllocated(), NCV_ALLOCATOR_BAD_ALLOC); - Mat h_src_hdr(Size(width, height), CV_8U, h_src.ptr(), h_src.stride()); + NCV_SKIP_COND_BEGIN + + for (Ncv32u i=0; i<(Ncv32u)srcdst->rows; i++) + { + memcpy(h_src.ptr() + i * h_src.stride(), srcdst->ptr(i), srcdst->cols); + } - NCV_SKIP_COND_BEGIN - - (*srcdst).copyTo(h_src_hdr); - ncvStat = h_src.copySolid(d_src, 0); ncvAssertReturnNcvStat(ncvStat); ncvAssertCUDAReturn(cudaStreamSynchronize(0), NCV_CUDA_ERROR); @@ -130,8 +94,9 @@ NCVStatus process(Mat *srcdst, haar.ClassifierSize, bShowAllHypotheses ? 0 : 4, 1.2f, 1, - (bLargestFace ? NCVPipeObjDet_FindLargestObject : 0) | NCVPipeObjDet_VisualizeInPlace, - gpuAllocator, cpuAllocator, devProp.major, devProp.minor, 0); + (bLargestFace ? NCVPipeObjDet_FindLargestObject : 0) + | NCVPipeObjDet_VisualizeInPlace, + gpuAllocator, cpuAllocator, devProp, 0); ncvAssertReturnNcvStat(ncvStat); ncvAssertCUDAReturn(cudaStreamSynchronize(0), NCV_CUDA_ERROR); @@ -141,14 +106,16 @@ NCVStatus process(Mat *srcdst, ncvAssertReturnNcvStat(ncvStat); ncvAssertCUDAReturn(cudaStreamSynchronize(0), NCV_CUDA_ERROR); - h_src_hdr.copyTo(*srcdst); - + for (Ncv32u i=0; i<(Ncv32u)srcdst->rows; i++) + { + memcpy(srcdst->ptr(i), h_src.ptr() + i * h_src.stride(), srcdst->cols); + } + NCV_SKIP_COND_END return NCV_SUCCESS; } - int main( int argc, const char** argv ) { NCVStatus ncvStat; @@ -160,14 +127,19 @@ int main( int argc, const char** argv ) printf(" Space - Switch between NCV and OpenCV\n"); printf(" L - Switch between FullSearch and LargestFace modes\n"); printf(" U - Toggle unfiltered hypotheses visualization in FullSearch\n"); - - if (argc != 4 && argc != 1) - return printSyntax(), -1; - + VideoCapture capture; - Size frameSize; + bool bQuit = false; + + Size2i frameSize; - if (argc == 1 || strcmp(argv[1], "-c") == 0) + if (argc != 4 && argc != 1) + { + printSyntax(); + return -1; + } + + if (argc == 1 || strcmp(argv[1], "-c") == 0) { // Camera input is specified int camIdx = (argc == 3) ? atoi(argv[2]) : 0; @@ -192,14 +164,26 @@ int main( int argc, const char** argv ) return printSyntax(), -1; NcvBool bUseOpenCV = true; - NcvBool bLargestFace = true; - NcvBool bShowAllHypotheses = false; + NcvBool bLargestFace = false; //LargestFace=true is used usually during training + NcvBool bShowAllHypotheses = false; - string classifierFile = (argc == 1) ? preferredClassifier : argv[3]; - CascadeClassifier classifierOpenCV; + std::string classifierFile; + if (argc == 1) + { + classifierFile = preferredClassifier; + } + else + { + classifierFile.assign(argv[3]); + } + if (!classifierOpenCV.load(classifierFile)) - return printf("Error (in OpenCV) opening classifier\n"), printSyntax(), -1; + { + printf("Error (in OpenCV) opening classifier\n"); + printSyntax(); + return -1; + } int devId; ncvAssertCUDAReturn(cudaGetDevice(&devId), -1); @@ -214,9 +198,9 @@ int main( int argc, const char** argv ) // //============================================================================== - NCVMemNativeAllocator gpuCascadeAllocator(NCVMemoryTypeDevice); + NCVMemNativeAllocator gpuCascadeAllocator(NCVMemoryTypeDevice, devProp.textureAlignment); ncvAssertPrintReturn(gpuCascadeAllocator.isInitialized(), "Error creating cascade GPU allocator", -1); - NCVMemNativeAllocator cpuCascadeAllocator(NCVMemoryTypeHostPinned); + NCVMemNativeAllocator cpuCascadeAllocator(NCVMemoryTypeHostPinned, devProp.textureAlignment); ncvAssertPrintReturn(cpuCascadeAllocator.isInitialized(), "Error creating cascade CPU allocator", -1); Ncv32u haarNumStages, haarNumNodes, haarNumFeatures; @@ -278,32 +262,36 @@ int main( int argc, const char** argv ) // Main processing loop // //============================================================================== - - namedWindow(wndTitle, 1); + namedWindow(wndTitle, 1); Mat frame, gray, frameDisp; - for(;;) + do { - // For camera and video file, capture the next image + // For camera and video file, capture the next image capture >> frame; if (frame.empty()) break; - + + Mat gray; cvtColor(frame, gray, CV_BGR2GRAY); + // // process + // + NcvSize32u minSize = haar.ClassifierSize; if (bLargestFace) { Ncv32u ratioX = preferredVideoFrameSize.width / minSize.width; Ncv32u ratioY = preferredVideoFrameSize.height / minSize.height; Ncv32u ratioSmallest = std::min(ratioX, ratioY); - ratioSmallest = (Ncv32u)std::max(ratioSmallest / 2.5f, 1.f); + ratioSmallest = std::max((Ncv32u)(ratioSmallest / 2.5f), (Ncv32u)1); minSize.width *= ratioSmallest; minSize.height *= ratioSmallest; } - + + Ncv32f avgTime; NcvTimer timer = ncvStartTimer(); if (!bUseOpenCV) @@ -324,15 +312,16 @@ int main( int argc, const char** argv ) rectsOpenCV, 1.2f, bShowAllHypotheses && !bLargestFace ? 0 : 4, - (bLargestFace ? CV_HAAR_FIND_BIGGEST_OBJECT : 0) | CV_HAAR_SCALE_IMAGE, + (bLargestFace ? CV_HAAR_FIND_BIGGEST_OBJECT : 0) + | CV_HAAR_SCALE_IMAGE, Size(minSize.width, minSize.height)); for (size_t rt = 0; rt < rectsOpenCV.size(); ++rt) rectangle(gray, rectsOpenCV[rt], Scalar(255)); } - Ncv32f avgTime = (Ncv32f)ncvEndQueryTimerMs(timer); - + avgTime = (Ncv32f)ncvEndQueryTimerMs(timer); + cvtColor(gray, frameDisp, CV_GRAY2BGR); imagePrintf(frameDisp, 0, CV_RGB(255, 0,0), "Space - Switch NCV%s / OpenCV%s", bUseOpenCV?"":" (ON)", bUseOpenCV?" (ON)":""); @@ -347,16 +336,25 @@ int main( int argc, const char** argv ) case ' ': bUseOpenCV = !bUseOpenCV; break; - case 'L':case 'l': + case 'L': + case 'l': bLargestFace = !bLargestFace; break; - case 'U':case 'u': + case 'U': + case 'u': bShowAllHypotheses = !bShowAllHypotheses; break; case 27: - return 0; + bQuit = true; + break; } - } - + + } while (!bQuit); + + cvDestroyWindow(wndTitle.c_str()); + return 0; } + + +#endif \ No newline at end of file diff --git a/tests/gpu/CMakeLists.txt b/tests/gpu/CMakeLists.txt index 4a25f2f76d..ca0e601ef7 100644 --- a/tests/gpu/CMakeLists.txt +++ b/tests/gpu/CMakeLists.txt @@ -3,12 +3,15 @@ # ---------------------------------------------------------------------------- project(opencv_test_gpu) +set(the_target "opencv_test_gpu") + file(GLOB test_srcs "src/*.cpp") -source_group("Src" FILES ${test_srcs}) file(GLOB test_hdrs "src/*.h*") +source_group("Src" FILES ${test_srcs}) source_group("Include" FILES ${test_hdrs}) -set(the_target "opencv_test_gpu") + + include_directories ( "${CMAKE_SOURCE_DIR}/include/opencv" @@ -26,11 +29,21 @@ include_directories ( "${CMAKE_SOURCE_DIR}/modules/ml/include" "${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia" + "${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia/core" ) include_directories(../cxts) -add_executable(${the_target} ${test_srcs} ${test_hdrs}) +if(HAVE_CUDA) + include_directories(${CUDA_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia ${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia/core ${CMAKE_SOURCE_DIR}/modules/gpu/src/nvidia/NPP_staging) + + file(GLOB nvidia "src/nvidia/*.*") + SET(ncv_cpp ../../modules/gpu/src/nvidia/core/NCV.cpp) + source_group("Src\\nvidia" FILES ${nvidia}) +endif() + +add_executable(${the_target} ${test_srcs} ${test_hdrs} ${nvidia} ${ncv_cpp}) # Additional target properties set_target_properties(${the_target} PROPERTIES diff --git a/tests/gpu/src/nvidia/NCVAutoTestLister.hpp b/tests/gpu/src/nvidia/NCVAutoTestLister.hpp new file mode 100644 index 0000000000..d9f4438b80 --- /dev/null +++ b/tests/gpu/src/nvidia/NCVAutoTestLister.hpp @@ -0,0 +1,127 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _ncvautotestlister_hpp_ +#define _ncvautotestlister_hpp_ + +#include + +#include "NCVTest.hpp" + +class NCVAutoTestLister +{ +public: + + NCVAutoTestLister(std::string testSuiteName, NcvBool bStopOnFirstFail=false, NcvBool bCompactOutput=true) + : + testSuiteName(testSuiteName), + bStopOnFirstFail(bStopOnFirstFail), + bCompactOutput(bCompactOutput) + { + } + + void add(INCVTest *test) + { + this->tests.push_back(test); + } + + void invoke() + { + Ncv32u nPassed = 0; + Ncv32u nFailed = 0; + Ncv32u nFailedMem = 0; + + if (bCompactOutput) + { + printf("Test suite '%s' with %d tests\n", + testSuiteName.c_str(), + (int)(this->tests.size())); + } + + for (Ncv32u i=0; itests.size(); i++) + { + INCVTest &curTest = *tests[i]; + + NCVTestReport curReport; + bool res = curTest.executeTest(curReport); + + if (!bCompactOutput) + { + printf("Test %3i %16s; Consumed mem GPU = %8d, CPU = %8d; %s\n", + i, + curTest.getName().c_str(), + curReport.statsNums["MemGPU"], + curReport.statsNums["MemCPU"], + curReport.statsText["rcode"].c_str()); + } + + if (res) + { + nPassed++; + if (bCompactOutput) + { + printf("."); + } + } + else + { + if (!curReport.statsText["rcode"].compare("FAILED")) + { + nFailed++; + if (bCompactOutput) + { + printf("x"); + } + if (bStopOnFirstFail) + { + break; + } + } + else + { + nFailedMem++; + if (bCompactOutput) + { + printf("m"); + } + } + } + fflush(stdout); + } + if (bCompactOutput) + { + printf("\n"); + } + + printf("Test suite '%s' complete: %d total, %d passed, %d memory errors, %d failed\n\n", + testSuiteName.c_str(), + (int)(this->tests.size()), + nPassed, + nFailedMem, + nFailed); + } + + ~NCVAutoTestLister() + { + for (Ncv32u i=0; itests.size(); i++) + { + delete tests[i]; + } + } + +private: + + NcvBool bStopOnFirstFail; + NcvBool bCompactOutput; + std::string testSuiteName; + std::vector tests; +}; + +#endif // _ncvautotestlister_hpp_ diff --git a/tests/gpu/src/nvidia/NCVTest.hpp b/tests/gpu/src/nvidia/NCVTest.hpp new file mode 100644 index 0000000000..b8c2d9729e --- /dev/null +++ b/tests/gpu/src/nvidia/NCVTest.hpp @@ -0,0 +1,211 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _ncvtest_hpp_ +#define _ncvtest_hpp_ + +#pragma warning( disable : 4201 4408 4127 4100) + +#include +#include +#include +#include +#include +#include + +#include +#include "NPP_staging.hpp" + + +struct NCVTestReport +{ + std::map statsNums; + std::map statsText; +}; + + +class INCVTest +{ +public: + virtual bool executeTest(NCVTestReport &report) = 0; + virtual std::string getName() const = 0; +}; + + +class NCVTestProvider : public INCVTest +{ +public: + + NCVTestProvider(std::string testName) + : + testName(testName) + { + int devId; + ncvAssertPrintReturn(cudaSuccess == cudaGetDevice(&devId), "Error returned from cudaGetDevice", ); + ncvAssertPrintReturn(cudaSuccess == cudaGetDeviceProperties(&this->devProp, devId), "Error returned from cudaGetDeviceProperties", ); + } + + virtual bool init() = 0; + virtual bool process() = 0; + virtual bool deinit() = 0; + virtual bool toString(std::ofstream &strOut) = 0; + + virtual std::string getName() const + { + return this->testName; + } + + virtual ~NCVTestProvider() + { + deinitMemory(); + } + + virtual bool executeTest(NCVTestReport &report) + { + bool res; + report.statsText["rcode"] = "FAILED"; + + res = initMemory(report); + if (!res) + { + dumpToFile(report); + deinitMemory(); + return false; + } + + res = init(); + if (!res) + { + dumpToFile(report); + deinit(); + deinitMemory(); + return false; + } + + res = process(); + if (!res) + { + dumpToFile(report); + deinit(); + deinitMemory(); + return false; + } + + res = deinit(); + if (!res) + { + dumpToFile(report); + deinitMemory(); + return false; + } + + deinitMemory(); + + report.statsText["rcode"] = "Passed"; + return true; + } + +protected: + + cudaDeviceProp devProp; + std::auto_ptr allocatorGPU; + std::auto_ptr allocatorCPU; + +private: + + std::string testName; + + bool initMemory(NCVTestReport &report) + { + this->allocatorGPU.reset(new NCVMemStackAllocator(devProp.textureAlignment)); + this->allocatorCPU.reset(new NCVMemStackAllocator(devProp.textureAlignment)); + + if (!this->allocatorGPU.get()->isInitialized() || + !this->allocatorCPU.get()->isInitialized()) + { + report.statsText["rcode"] = "Memory FAILED"; + return false; + } + + if (!this->process()) + { + report.statsText["rcode"] = "Memory FAILED"; + return false; + } + + Ncv32u maxGPUsize = (Ncv32u)this->allocatorGPU.get()->maxSize(); + Ncv32u maxCPUsize = (Ncv32u)this->allocatorCPU.get()->maxSize(); + + report.statsNums["MemGPU"] = maxGPUsize; + report.statsNums["MemCPU"] = maxCPUsize; + + this->allocatorGPU.reset(new NCVMemStackAllocator(NCVMemoryTypeDevice, maxGPUsize, devProp.textureAlignment)); + + this->allocatorCPU.reset(new NCVMemStackAllocator(NCVMemoryTypeHostPinned, maxCPUsize, devProp.textureAlignment)); + + if (!this->allocatorGPU.get()->isInitialized() || + !this->allocatorCPU.get()->isInitialized()) + { + report.statsText["rcode"] = "Memory FAILED"; + return false; + } + + return true; + } + + void deinitMemory() + { + this->allocatorGPU.reset(); + this->allocatorCPU.reset(); + } + + void dumpToFile(NCVTestReport &report) + { + bool bReasonMem = (0 == report.statsText["rcode"].compare("Memory FAILED")); + std::string fname = "TestDump_"; + fname += (bReasonMem ? "m_" : "") + this->testName + ".log"; + std::ofstream stream(fname.c_str(), std::ios::trunc | std::ios::out); + if (!stream.is_open()) return; + + stream << "NCV Test Failure Log: " << this->testName << std::endl; + stream << "====================================================" << std::endl << std::endl; + stream << "Test initialization report: " << std::endl; + for (std::map::iterator it=report.statsText.begin(); + it != report.statsText.end(); it++) + { + stream << it->first << "=" << it->second << std::endl; + } + for (std::map::iterator it=report.statsNums.begin(); + it != report.statsNums.end(); it++) + { + stream << it->first << "=" << it->second << std::endl; + } + stream << std::endl; + + stream << "Test initialization parameters: " << std::endl; + bool bSerializeRes = false; + try + { + bSerializeRes = this->toString(stream); + } + catch (...) + { + } + + if (!bSerializeRes) + { + stream << "Couldn't retrieve object dump" << std::endl; + } + + stream.flush(); + } +}; + +#endif // _ncvtest_hpp_ diff --git a/tests/gpu/src/nvidia/NCVTestSourceProvider.hpp b/tests/gpu/src/nvidia/NCVTestSourceProvider.hpp new file mode 100644 index 0000000000..f4f9a392ec --- /dev/null +++ b/tests/gpu/src/nvidia/NCVTestSourceProvider.hpp @@ -0,0 +1,161 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _ncvtestsourceprovider_hpp_ +#define _ncvtestsourceprovider_hpp_ + +#include + +#include "NCV.hpp" +#include + + +template +class NCVTestSourceProvider +{ +public: + + NCVTestSourceProvider(Ncv32u seed, T rangeLow, T rangeHigh, Ncv32u maxWidth, Ncv32u maxHeight) + : + bInit(false) + { + ncvAssertPrintReturn(rangeLow < rangeHigh, "NCVTestSourceProvider ctor:: Invalid range", ); + + int devId; + cudaDeviceProp devProp; + ncvAssertPrintReturn(cudaSuccess == cudaGetDevice(&devId), "Error returned from cudaGetDevice", ); + ncvAssertPrintReturn(cudaSuccess == cudaGetDeviceProperties(&devProp, devId), "Error returned from cudaGetDeviceProperties", ); + + //Ncv32u maxWpitch = alignUp(maxWidth * sizeof(T), devProp.textureAlignment); + + allocatorCPU.reset(new NCVMemNativeAllocator(NCVMemoryTypeHostPinned, devProp.textureAlignment)); + data.reset(new NCVMatrixAlloc(*this->allocatorCPU.get(), maxWidth, maxHeight)); + ncvAssertPrintReturn(data.get()->isMemAllocated(), "NCVTestSourceProvider ctor:: Matrix not allocated", ); + + this->dataWidth = maxWidth; + this->dataHeight = maxHeight; + + srand(seed); + + for (Ncv32u i=0; istride(); j++) + { + data.get()->ptr()[i * data.get()->stride() + j] = + (T)(((1.0 * rand()) / RAND_MAX) * (rangeHigh - rangeLow) + rangeLow); + } + } + + this->bInit = true; + } + + NCVTestSourceProvider(std::string pgmFilename) + : + bInit(false) + { + ncvAssertPrintReturn(sizeof(T) == 1, "NCVTestSourceProvider ctor:: PGM constructor complies only with 8bit types", ); + + cv::Mat image = cv::imread(pgmFilename); + ncvAssertPrintReturn(!image.empty(), "NCVTestSourceProvider ctor:: PGM file error", ); + + int devId; + cudaDeviceProp devProp; + ncvAssertPrintReturn(cudaSuccess == cudaGetDevice(&devId), "Error returned from cudaGetDevice", ); + ncvAssertPrintReturn(cudaSuccess == cudaGetDeviceProperties(&devProp, devId), "Error returned from cudaGetDeviceProperties", ); + + allocatorCPU.reset(new NCVMemNativeAllocator(NCVMemoryTypeHostPinned, devProp.textureAlignment)); + data.reset(new NCVMatrixAlloc(*this->allocatorCPU.get(), image.cols, image.rows)); + ncvAssertPrintReturn(data.get()->isMemAllocated(), "NCVTestSourceProvider ctor:: Matrix not allocated", ); + + this->dataWidth = image.cols; + this->dataHeight = image.rows; + + cv::Mat hdr(image.size(), CV_8UC1, data.get()->ptr(), data.get()->pitch()); + image.copyTo(hdr); + + this->bInit = true; + } + + NcvBool fill(NCVMatrix &dst) + { + ncvAssertReturn(this->isInit() && + dst.memType() == allocatorCPU.get()->memType(), false); + + if (dst.width() == 0 || dst.height() == 0) + { + return true; + } + + for (Ncv32u i=0; idataHeight; + + Ncv32u srcFullChunks = dst.width() / this->dataWidth; + for (Ncv32u j=0; jdataWidth, + this->data.get()->ptr() + this->data.get()->stride() * srcLine, + this->dataWidth * sizeof(T)); + } + + Ncv32u srcLastChunk = dst.width() % this->dataWidth; + memcpy(dst.ptr() + i * dst.stride() + srcFullChunks * this->dataWidth, + this->data.get()->ptr() + this->data.get()->stride() * srcLine, + srcLastChunk * sizeof(T)); + } + + return true; + } + + NcvBool fill(NCVVector &dst) + { + ncvAssertReturn(this->isInit() && + dst.memType() == allocatorCPU.get()->memType(), false); + + if (dst.length() == 0) + { + return true; + } + + Ncv32u srcLen = this->dataWidth * this->dataHeight; + + Ncv32u srcFullChunks = (Ncv32u)dst.length() / srcLen; + for (Ncv32u j=0; jdata.get()->ptr(), srcLen * sizeof(T)); + } + + Ncv32u srcLastChunk = dst.length() % srcLen; + memcpy(dst.ptr() + srcFullChunks * srcLen, this->data.get()->ptr(), srcLastChunk * sizeof(T)); + + return true; + } + + ~NCVTestSourceProvider() + { + data.reset(); + allocatorCPU.reset(); + } + +private: + + NcvBool isInit(void) + { + return this->bInit; + } + + NcvBool bInit; + std::auto_ptr< INCVMemAllocator > allocatorCPU; + std::auto_ptr< NCVMatrixAlloc > data; + Ncv32u dataWidth; + Ncv32u dataHeight; +}; + +#endif // _ncvtestsourceprovider_hpp_ diff --git a/tests/gpu/src/nvidia/TestCompact.cpp b/tests/gpu/src/nvidia/TestCompact.cpp new file mode 100644 index 0000000000..2882f7cad2 --- /dev/null +++ b/tests/gpu/src/nvidia/TestCompact.cpp @@ -0,0 +1,129 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestCompact.h" + + +TestCompact::TestCompact(std::string testName, NCVTestSourceProvider &src, + Ncv32u length, Ncv32u badElem, Ncv32u badElemPercentage) + : + NCVTestProvider(testName), + src(src), + length(length), + badElem(badElem), + badElemPercentage(badElemPercentage > 100 ? 100 : badElemPercentage) +{ +} + + +bool TestCompact::toString(std::ofstream &strOut) +{ + strOut << "length=" << length << std::endl; + strOut << "badElem=" << badElem << std::endl; + strOut << "badElemPercentage=" << badElemPercentage << std::endl; + return true; +} + + +bool TestCompact::init() +{ + return true; +} + + +bool TestCompact::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + NCVVectorAlloc h_vecSrc(*this->allocatorCPU.get(), this->length); + ncvAssertReturn(h_vecSrc.isMemAllocated(), false); + NCVVectorAlloc d_vecSrc(*this->allocatorGPU.get(), this->length); + ncvAssertReturn(d_vecSrc.isMemAllocated(), false); + + NCVVectorAlloc h_vecDst(*this->allocatorCPU.get(), this->length); + ncvAssertReturn(h_vecDst.isMemAllocated(), false); + NCVVectorAlloc d_vecDst(*this->allocatorGPU.get(), this->length); + ncvAssertReturn(d_vecDst.isMemAllocated(), false); + NCVVectorAlloc h_vecDst_d(*this->allocatorCPU.get(), this->length); + ncvAssertReturn(h_vecDst_d.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_vecSrc), false); + for (Ncv32u i=0; ilength; i++) + { + Ncv32u tmp = (h_vecSrc.ptr()[i]) & 0xFF; + tmp = tmp * 99 / 255; + if (tmp < this->badElemPercentage) + { + h_vecSrc.ptr()[i] = this->badElem; + } + } + NCV_SKIP_COND_END + + NCVVectorAlloc h_dstLen(*this->allocatorCPU.get(), 1); + ncvAssertReturn(h_dstLen.isMemAllocated(), false); + Ncv32u bufSize; + ncvStat = nppsStCompactGetSize_32u(this->length, &bufSize, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + NCVVectorAlloc d_tmpBuf(*this->allocatorGPU.get(), bufSize); + ncvAssertReturn(d_tmpBuf.isMemAllocated(), false); + + Ncv32u h_outElemNum_h = 0; + + NCV_SKIP_COND_BEGIN + ncvStat = h_vecSrc.copySolid(d_vecSrc, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + ncvStat = nppsStCompact_32u(d_vecSrc.ptr(), this->length, + d_vecDst.ptr(), h_dstLen.ptr(), this->badElem, + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + ncvStat = d_vecDst.copySolid(h_vecDst_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppsStCompact_32u_host(h_vecSrc.ptr(), this->length, h_vecDst.ptr(), &h_outElemNum_h, this->badElem); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + if (h_dstLen.ptr()[0] != h_outElemNum_h) + { + bLoopVirgin = false; + } + else + { + for (Ncv32u i=0; bLoopVirgin && i < h_outElemNum_h; i++) + { + if (h_vecDst.ptr()[i] != h_vecDst_d.ptr()[i]) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestCompact::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestCompact.h b/tests/gpu/src/nvidia/TestCompact.h new file mode 100644 index 0000000000..ba4f93aa10 --- /dev/null +++ b/tests/gpu/src/nvidia/TestCompact.h @@ -0,0 +1,41 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testhypothesescompact_h_ +#define _testhypothesescompact_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestCompact : public NCVTestProvider +{ +public: + + TestCompact(std::string testName, NCVTestSourceProvider &src, + Ncv32u length, Ncv32u badElem, Ncv32u badElemPercentage); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestCompact(const TestCompact&); + TestCompact& operator=(const TestCompact&); + + + NCVTestSourceProvider &src; + Ncv32u length; + Ncv32u badElem; + Ncv32u badElemPercentage; +}; + +#endif // _testhypothesescompact_h_ diff --git a/tests/gpu/src/nvidia/TestDrawRects.cpp b/tests/gpu/src/nvidia/TestDrawRects.cpp new file mode 100644 index 0000000000..b86ac58b15 --- /dev/null +++ b/tests/gpu/src/nvidia/TestDrawRects.cpp @@ -0,0 +1,163 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestDrawRects.h" +#include "NCVHaarObjectDetection.hpp" + + +template +TestDrawRects::TestDrawRects(std::string testName, NCVTestSourceProvider &src, NCVTestSourceProvider &src32u, + Ncv32u width, Ncv32u height, Ncv32u numRects, T color) + : + NCVTestProvider(testName), + src(src), + src32u(src32u), + width(width), + height(height), + numRects(numRects), + color(color) +{ +} + + +template +bool TestDrawRects::toString(std::ofstream &strOut) +{ + strOut << "sizeof(T)=" << sizeof(T) << std::endl; + strOut << "width=" << width << std::endl; + strOut << "height=" << height << std::endl; + strOut << "numRects=" << numRects << std::endl; + strOut << "color=" << color << std::endl; + return true; +} + + +template +bool TestDrawRects::init() +{ + return true; +} + + +template +bool TestDrawRects::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + NCVMatrixAlloc h_img_d(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img_d.isMemAllocated(), false); + + NCVVectorAlloc d_rects(*this->allocatorGPU.get(), this->numRects); + ncvAssertReturn(d_rects.isMemAllocated(), false); + NCVVectorAlloc h_rects(*this->allocatorCPU.get(), this->numRects); + ncvAssertReturn(h_rects.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_img), false); + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + //fill vector of rectangles with random rects covering the input + NCVVectorReuse h_rects_as32u(h_rects.getSegment()); + ncvAssertReturn(h_rects_as32u.isMemReused(), false); + ncvAssertReturn(this->src32u.fill(h_rects_as32u), false); + for (Ncv32u i=0; inumRects; i++) + { + h_rects.ptr()[i].x = (Ncv32u)(((1.0 * h_rects.ptr()[i].x) / RAND_MAX) * (this->width-2)); + h_rects.ptr()[i].y = (Ncv32u)(((1.0 * h_rects.ptr()[i].y) / RAND_MAX) * (this->height-2)); + h_rects.ptr()[i].width = (Ncv32u)(((1.0 * h_rects.ptr()[i].width) / RAND_MAX) * (this->width+10 - h_rects.ptr()[i].x)); + h_rects.ptr()[i].height = (Ncv32u)(((1.0 * h_rects.ptr()[i].height) / RAND_MAX) * (this->height+10 - h_rects.ptr()[i].y)); + } + ncvStat = h_rects.copySolid(d_rects, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = ncvDrawRects_32u_device((Ncv32u *)d_img.ptr(), d_img.stride(), this->width, this->height, + (NcvRect32u *)d_rects.ptr(), this->numRects, this->color, 0); + } + else if (sizeof(T) == sizeof(Ncv8u)) + { + ncvStat = ncvDrawRects_8u_device((Ncv8u *)d_img.ptr(), d_img.stride(), this->width, this->height, + (NcvRect32u *)d_rects.ptr(), this->numRects, (Ncv8u)this->color, 0); + } + else + { + ncvAssertPrintReturn(false, "Incorrect drawrects test instance", false); + } + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + NCV_SKIP_COND_END + + ncvStat = d_img.copySolid(h_img_d, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + NCV_SKIP_COND_BEGIN + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = ncvDrawRects_32u_host((Ncv32u *)h_img.ptr(), h_img.stride(), this->width, this->height, + (NcvRect32u *)h_rects.ptr(), this->numRects, this->color); + } + else if (sizeof(T) == sizeof(Ncv8u)) + { + ncvStat = ncvDrawRects_8u_host((Ncv8u *)h_img.ptr(), h_img.stride(), this->width, this->height, + (NcvRect32u *)h_rects.ptr(), this->numRects, (Ncv8u)this->color); + } + else + { + ncvAssertPrintReturn(false, "Incorrect drawrects test instance", false); + } + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + //const Ncv64f relEPS = 0.005; + for (Ncv32u i=0; bLoopVirgin && i < h_img.height(); i++) + { + for (Ncv32u j=0; bLoopVirgin && j < h_img.width(); j++) + { + if (h_img.ptr()[h_img.stride()*i+j] != h_img_d.ptr()[h_img_d.stride()*i+j]) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +template +bool TestDrawRects::deinit() +{ + return true; +} + + +template class TestDrawRects; +template class TestDrawRects; diff --git a/tests/gpu/src/nvidia/TestDrawRects.h b/tests/gpu/src/nvidia/TestDrawRects.h new file mode 100644 index 0000000000..bde80fe6c6 --- /dev/null +++ b/tests/gpu/src/nvidia/TestDrawRects.h @@ -0,0 +1,44 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testdrawrects_h_ +#define _testdrawrects_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +template +class TestDrawRects : public NCVTestProvider +{ +public: + + TestDrawRects(std::string testName, NCVTestSourceProvider &src, NCVTestSourceProvider &src32u, + Ncv32u width, Ncv32u height, Ncv32u numRects, T color); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + + TestDrawRects(const TestDrawRects&); + TestDrawRects& operator=(const TestDrawRects&); + + NCVTestSourceProvider &src; + NCVTestSourceProvider &src32u; + Ncv32u width; + Ncv32u height; + Ncv32u numRects; + T color; +}; + +#endif // _testdrawrects_h_ diff --git a/tests/gpu/src/nvidia/TestHaarCascadeApplication.cpp b/tests/gpu/src/nvidia/TestHaarCascadeApplication.cpp new file mode 100644 index 0000000000..e3a13fc320 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHaarCascadeApplication.cpp @@ -0,0 +1,267 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include +#include "TestHaarCascadeApplication.h" +#include "NCVHaarObjectDetection.hpp" + + +TestHaarCascadeApplication::TestHaarCascadeApplication(std::string testName, NCVTestSourceProvider &src, + std::string cascadeName, Ncv32u width, Ncv32u height) + : + NCVTestProvider(testName), + src(src), + cascadeName(cascadeName), + width(width), + height(height) +{ +} + + +bool TestHaarCascadeApplication::toString(std::ofstream &strOut) +{ + strOut << "cascadeName=" << cascadeName << std::endl; + strOut << "width=" << width << std::endl; + strOut << "height=" << height << std::endl; + return true; +} + + +bool TestHaarCascadeApplication::init() +{ + return true; +} + + +bool TestHaarCascadeApplication::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32u numStages, numNodes, numFeatures; + + ncvStat = ncvHaarGetClassifierSize(this->cascadeName, numStages, numNodes, numFeatures); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + NCVVectorAlloc h_HaarStages(*this->allocatorCPU.get(), numStages); + ncvAssertReturn(h_HaarStages.isMemAllocated(), false); + NCVVectorAlloc h_HaarNodes(*this->allocatorCPU.get(), numNodes); + ncvAssertReturn(h_HaarNodes.isMemAllocated(), false); + NCVVectorAlloc h_HaarFeatures(*this->allocatorCPU.get(), numFeatures); + ncvAssertReturn(h_HaarFeatures.isMemAllocated(), false); + + NCVVectorAlloc d_HaarStages(*this->allocatorGPU.get(), numStages); + ncvAssertReturn(d_HaarStages.isMemAllocated(), false); + NCVVectorAlloc d_HaarNodes(*this->allocatorGPU.get(), numNodes); + ncvAssertReturn(d_HaarNodes.isMemAllocated(), false); + NCVVectorAlloc d_HaarFeatures(*this->allocatorGPU.get(), numFeatures); + ncvAssertReturn(d_HaarFeatures.isMemAllocated(), false); + + HaarClassifierCascadeDescriptor haar; + haar.ClassifierSize.width = haar.ClassifierSize.height = 1; + haar.bNeedsTiltedII = false; + haar.NumClassifierRootNodes = numNodes; + haar.NumClassifierTotalNodes = numNodes; + haar.NumFeatures = numFeatures; + haar.NumStages = numStages; + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + + ncvStat = ncvHaarLoadFromFile_host(this->cascadeName, haar, h_HaarStages, h_HaarNodes, h_HaarFeatures); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + ncvAssertReturn(NCV_SUCCESS == h_HaarStages.copySolid(d_HaarStages, 0), false); + ncvAssertReturn(NCV_SUCCESS == h_HaarNodes.copySolid(d_HaarNodes, 0), false); + ncvAssertReturn(NCV_SUCCESS == h_HaarFeatures.copySolid(d_HaarFeatures, 0), false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + NCV_SKIP_COND_END + + NcvSize32s srcRoi, srcIIRoi, searchRoi; + srcRoi.width = this->width; + srcRoi.height = this->height; + srcIIRoi.width = srcRoi.width + 1; + srcIIRoi.height = srcRoi.height + 1; + searchRoi.width = srcIIRoi.width - haar.ClassifierSize.width; + searchRoi.height = srcIIRoi.height - haar.ClassifierSize.height; + if (searchRoi.width <= 0 || searchRoi.height <= 0) + { + return false; + } + NcvSize32u searchRoiU(searchRoi.width, searchRoi.height); + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + + Ncv32u integralWidth = this->width + 1; + Ncv32u integralHeight = this->height + 1; + + NCVMatrixAlloc d_integralImage(*this->allocatorGPU.get(), integralWidth, integralHeight); + ncvAssertReturn(d_integralImage.isMemAllocated(), false); + NCVMatrixAlloc d_sqIntegralImage(*this->allocatorGPU.get(), integralWidth, integralHeight); + ncvAssertReturn(d_sqIntegralImage.isMemAllocated(), false); + NCVMatrixAlloc h_integralImage(*this->allocatorCPU.get(), integralWidth, integralHeight); + ncvAssertReturn(h_integralImage.isMemAllocated(), false); + NCVMatrixAlloc h_sqIntegralImage(*this->allocatorCPU.get(), integralWidth, integralHeight); + ncvAssertReturn(h_sqIntegralImage.isMemAllocated(), false); + + NCVMatrixAlloc d_rectStdDev(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_rectStdDev.isMemAllocated(), false); + NCVMatrixAlloc d_pixelMask(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_pixelMask.isMemAllocated(), false); + NCVMatrixAlloc h_rectStdDev(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_rectStdDev.isMemAllocated(), false); + NCVMatrixAlloc h_pixelMask(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_pixelMask.isMemAllocated(), false); + + NCVVectorAlloc d_hypotheses(*this->allocatorGPU.get(), this->width * this->height); + ncvAssertReturn(d_hypotheses.isMemAllocated(), false); + NCVVectorAlloc h_hypotheses(*this->allocatorCPU.get(), this->width * this->height); + ncvAssertReturn(h_hypotheses.isMemAllocated(), false); + + NCVStatus nppStat; + Ncv32u szTmpBufIntegral, szTmpBufSqIntegral; + nppStat = nppiStIntegralGetSize_8u32u(NcvSize32u(this->width, this->height), &szTmpBufIntegral, this->devProp); + ncvAssertReturn(nppStat == NPPST_SUCCESS, false); + nppStat = nppiStSqrIntegralGetSize_8u64u(NcvSize32u(this->width, this->height), &szTmpBufSqIntegral, this->devProp); + ncvAssertReturn(nppStat == NPPST_SUCCESS, false); + NCVVectorAlloc d_tmpIIbuf(*this->allocatorGPU.get(), std::max(szTmpBufIntegral, szTmpBufSqIntegral)); + ncvAssertReturn(d_tmpIIbuf.isMemAllocated(), false); + + Ncv32u detectionsOnThisScale_d = 0; + Ncv32u detectionsOnThisScale_h = 0; + + NCV_SKIP_COND_BEGIN + + ncvAssertReturn(this->src.fill(h_img), false); + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + nppStat = nppiStIntegral_8u32u_C1R(d_img.ptr(), d_img.pitch(), + d_integralImage.ptr(), d_integralImage.pitch(), + NcvSize32u(d_img.width(), d_img.height()), + d_tmpIIbuf.ptr(), szTmpBufIntegral, this->devProp); + ncvAssertReturn(nppStat == NPPST_SUCCESS, false); + + nppStat = nppiStSqrIntegral_8u64u_C1R(d_img.ptr(), d_img.pitch(), + d_sqIntegralImage.ptr(), d_sqIntegralImage.pitch(), + NcvSize32u(d_img.width(), d_img.height()), + d_tmpIIbuf.ptr(), szTmpBufSqIntegral, this->devProp); + ncvAssertReturn(nppStat == NPPST_SUCCESS, false); + + const NcvRect32u rect( + HAAR_STDDEV_BORDER, + HAAR_STDDEV_BORDER, + haar.ClassifierSize.width - 2*HAAR_STDDEV_BORDER, + haar.ClassifierSize.height - 2*HAAR_STDDEV_BORDER); + nppStat = nppiStRectStdDev_32f_C1R( + d_integralImage.ptr(), d_integralImage.pitch(), + d_sqIntegralImage.ptr(), d_sqIntegralImage.pitch(), + d_rectStdDev.ptr(), d_rectStdDev.pitch(), + NcvSize32u(searchRoi.width, searchRoi.height), rect, + 1.0f, true); + ncvAssertReturn(nppStat == NPPST_SUCCESS, false); + + ncvStat = d_integralImage.copySolid(h_integralImage, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvStat = d_rectStdDev.copySolid(h_rectStdDev, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + for (Ncv32u i=0; iallocatorGPU.get(), *this->allocatorCPU.get(), + devProp, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + NCVMatrixAlloc h_pixelMask_d(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_pixelMask_d.isMemAllocated(), false); + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + + ncvStat = d_pixelMask.copySolid(h_pixelMask_d, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + if (detectionsOnThisScale_d != detectionsOnThisScale_h) + { + bLoopVirgin = false; + } + else + { + std::sort(h_pixelMask_d.ptr(), h_pixelMask_d.ptr() + detectionsOnThisScale_d); + for (Ncv32u i=0; i &src, + std::string cascadeName, Ncv32u width, Ncv32u height); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestHaarCascadeApplication(const TestHaarCascadeApplication&); + TestHaarCascadeApplication& operator=(const TestHaarCascadeApplication&); + + + NCVTestSourceProvider &src; + std::string cascadeName; + Ncv32u width; + Ncv32u height; +}; + +#endif // _testhaarcascadeapplication_h_ diff --git a/tests/gpu/src/nvidia/TestHaarCascadeLoader.cpp b/tests/gpu/src/nvidia/TestHaarCascadeLoader.cpp new file mode 100644 index 0000000000..8991e69cd8 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHaarCascadeLoader.cpp @@ -0,0 +1,123 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestHaarCascadeLoader.h" +#include "NCVHaarObjectDetection.hpp" + + +TestHaarCascadeLoader::TestHaarCascadeLoader(std::string testName, std::string cascadeName) + : + NCVTestProvider(testName), + cascadeName(cascadeName) +{ +} + + +bool TestHaarCascadeLoader::toString(std::ofstream &strOut) +{ + strOut << "cascadeName=" << cascadeName << std::endl; + return true; +} + + +bool TestHaarCascadeLoader::init() +{ + return true; +} + + +bool TestHaarCascadeLoader::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32u numStages, numNodes, numFeatures; + Ncv32u numStages_2 = 0, numNodes_2 = 0, numFeatures_2 = 0; + + ncvStat = ncvHaarGetClassifierSize(this->cascadeName, numStages, numNodes, numFeatures); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + NCVVectorAlloc h_HaarStages(*this->allocatorCPU.get(), numStages); + ncvAssertReturn(h_HaarStages.isMemAllocated(), false); + NCVVectorAlloc h_HaarNodes(*this->allocatorCPU.get(), numNodes); + ncvAssertReturn(h_HaarNodes.isMemAllocated(), false); + NCVVectorAlloc h_HaarFeatures(*this->allocatorCPU.get(), numFeatures); + ncvAssertReturn(h_HaarFeatures.isMemAllocated(), false); + + NCVVectorAlloc h_HaarStages_2(*this->allocatorCPU.get(), numStages); + ncvAssertReturn(h_HaarStages_2.isMemAllocated(), false); + NCVVectorAlloc h_HaarNodes_2(*this->allocatorCPU.get(), numNodes); + ncvAssertReturn(h_HaarNodes_2.isMemAllocated(), false); + NCVVectorAlloc h_HaarFeatures_2(*this->allocatorCPU.get(), numFeatures); + ncvAssertReturn(h_HaarFeatures_2.isMemAllocated(), false); + + HaarClassifierCascadeDescriptor haar; + HaarClassifierCascadeDescriptor haar_2; + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + + const std::string testNvbinName = "test.nvbin"; + ncvStat = ncvHaarLoadFromFile_host(this->cascadeName, haar, h_HaarStages, h_HaarNodes, h_HaarFeatures); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + ncvStat = ncvHaarStoreNVBIN_host(testNvbinName, haar, h_HaarStages, h_HaarNodes, h_HaarFeatures); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + ncvStat = ncvHaarGetClassifierSize(testNvbinName, numStages_2, numNodes_2, numFeatures_2); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + ncvStat = ncvHaarLoadFromFile_host(testNvbinName, haar_2, h_HaarStages_2, h_HaarNodes_2, h_HaarFeatures_2); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + + if ( + numStages_2 != numStages || + numNodes_2 != numNodes || + numFeatures_2 != numFeatures || + haar.NumStages != haar_2.NumStages || + haar.NumClassifierRootNodes != haar_2.NumClassifierRootNodes || + haar.NumClassifierTotalNodes != haar_2.NumClassifierTotalNodes || + haar.NumFeatures != haar_2.NumFeatures || + haar.ClassifierSize.width != haar_2.ClassifierSize.width || + haar.ClassifierSize.height != haar_2.ClassifierSize.height || + haar.bNeedsTiltedII != haar_2.bNeedsTiltedII || + haar.bHasStumpsOnly != haar_2.bHasStumpsOnly ) + { + bLoopVirgin = false; + } + if (memcmp(h_HaarStages.ptr(), h_HaarStages_2.ptr(), haar.NumStages * sizeof(HaarStage64)) || + memcmp(h_HaarNodes.ptr(), h_HaarNodes_2.ptr(), haar.NumClassifierTotalNodes * sizeof(HaarClassifierNode128)) || + memcmp(h_HaarFeatures.ptr(), h_HaarFeatures_2.ptr(), haar.NumFeatures * sizeof(HaarFeature64)) ) + { + bLoopVirgin = false; + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestHaarCascadeLoader::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestHaarCascadeLoader.h b/tests/gpu/src/nvidia/TestHaarCascadeLoader.h new file mode 100644 index 0000000000..717a38e2e0 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHaarCascadeLoader.h @@ -0,0 +1,34 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testhaarcascadeloader_h_ +#define _testhaarcascadeloader_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestHaarCascadeLoader : public NCVTestProvider +{ +public: + + TestHaarCascadeLoader(std::string testName, std::string cascadeName); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + + std::string cascadeName; +}; + +#endif // _testhaarcascadeloader_h_ diff --git a/tests/gpu/src/nvidia/TestHypothesesFilter.cpp b/tests/gpu/src/nvidia/TestHypothesesFilter.cpp new file mode 100644 index 0000000000..c41ca0025f --- /dev/null +++ b/tests/gpu/src/nvidia/TestHypothesesFilter.cpp @@ -0,0 +1,176 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestHypothesesFilter.h" +#include "NCVHaarObjectDetection.hpp" + + +TestHypothesesFilter::TestHypothesesFilter(std::string testName, NCVTestSourceProvider &src, + Ncv32u numDstRects, Ncv32u minNeighbors, Ncv32f eps) + : + NCVTestProvider(testName), + src(src), + numDstRects(numDstRects), + minNeighbors(minNeighbors), + eps(eps) +{ +} + + +bool TestHypothesesFilter::toString(std::ofstream &strOut) +{ + strOut << "numDstRects=" << numDstRects << std::endl; + strOut << "minNeighbors=" << minNeighbors << std::endl; + strOut << "eps=" << eps << std::endl; + return true; +} + + +bool TestHypothesesFilter::init() +{ + this->canvasWidth = 4096; + this->canvasHeight = 4096; + return true; +} + + +bool compareRects(const NcvRect32u &r1, const NcvRect32u &r2, Ncv32f eps) +{ + double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5; + return std::abs((Ncv32s)r1.x - (Ncv32s)r2.x) <= delta && + std::abs((Ncv32s)r1.y - (Ncv32s)r2.y) <= delta && + std::abs((Ncv32s)r1.x + (Ncv32s)r1.width - (Ncv32s)r2.x - (Ncv32s)r2.width) <= delta && + std::abs((Ncv32s)r1.y + (Ncv32s)r1.height - (Ncv32s)r2.y - (Ncv32s)r2.height) <= delta; +} + + +inline bool operator < (const NcvRect32u &a, const NcvRect32u &b) +{ + return a.x < b.x; +} + + +bool TestHypothesesFilter::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + NCVVectorAlloc h_random32u(*this->allocatorCPU.get(), this->numDstRects * sizeof(NcvRect32u) / sizeof(Ncv32u)); + ncvAssertReturn(h_random32u.isMemAllocated(), false); + + Ncv32u srcSlotSize = 2 * this->minNeighbors + 1; + + NCVVectorAlloc h_vecSrc(*this->allocatorCPU.get(), this->numDstRects*srcSlotSize); + ncvAssertReturn(h_vecSrc.isMemAllocated(), false); + NCVVectorAlloc h_vecDst_groundTruth(*this->allocatorCPU.get(), this->numDstRects); + ncvAssertReturn(h_vecDst_groundTruth.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorCPU.get()->isCounting()); + + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_random32u), false); + Ncv32u randCnt = 0; + Ncv64f randVal; + + for (Ncv32u i=0; inumDstRects; i++) + { + h_vecDst_groundTruth.ptr()[i].x = i * this->canvasWidth / this->numDstRects + this->canvasWidth / (this->numDstRects * 4); + h_vecDst_groundTruth.ptr()[i].y = i * this->canvasHeight / this->numDstRects + this->canvasHeight / (this->numDstRects * 4); + h_vecDst_groundTruth.ptr()[i].width = this->canvasWidth / (this->numDstRects * 2); + h_vecDst_groundTruth.ptr()[i].height = this->canvasHeight / (this->numDstRects * 2); + + Ncv32u numNeighbors = this->minNeighbors + 1 + (Ncv32u)(((1.0 * h_random32u.ptr()[i]) * (this->minNeighbors + 1)) / 0xFFFFFFFF); + numNeighbors = (numNeighbors > srcSlotSize) ? srcSlotSize : numNeighbors; + + //fill in strong hypotheses (2 * ((1.0 * randVal) / 0xFFFFFFFF) - 1) + for (Ncv32u j=0; jeps * (randVal - 0.5)); + randVal = (1.0 * h_random32u.ptr()[randCnt++]) / 0xFFFFFFFF; randCnt = randCnt % h_random32u.length(); + h_vecSrc.ptr()[srcSlotSize * i + j].y = + h_vecDst_groundTruth.ptr()[i].y + + (Ncv32s)(h_vecDst_groundTruth.ptr()[i].height * this->eps * (randVal - 0.5)); + h_vecSrc.ptr()[srcSlotSize * i + j].width = h_vecDst_groundTruth.ptr()[i].width; + h_vecSrc.ptr()[srcSlotSize * i + j].height = h_vecDst_groundTruth.ptr()[i].height; + } + + //generate weak hypotheses (to be removed in processing) + for (Ncv32u j=numNeighbors; jcanvasWidth + h_vecDst_groundTruth.ptr()[i].x + + (Ncv32s)(h_vecDst_groundTruth.ptr()[i].width * this->eps * (randVal - 0.5)); + randVal = (1.0 * h_random32u.ptr()[randCnt++]) / 0xFFFFFFFF; randCnt = randCnt % h_random32u.length(); + h_vecSrc.ptr()[srcSlotSize * i + j].y = + this->canvasHeight + h_vecDst_groundTruth.ptr()[i].y + + (Ncv32s)(h_vecDst_groundTruth.ptr()[i].height * this->eps * (randVal - 0.5)); + h_vecSrc.ptr()[srcSlotSize * i + j].width = h_vecDst_groundTruth.ptr()[i].width; + h_vecSrc.ptr()[srcSlotSize * i + j].height = h_vecDst_groundTruth.ptr()[i].height; + } + } + + //shuffle + for (Ncv32u i=0; inumDstRects*srcSlotSize-1; i++) + { + Ncv32u randVal = h_random32u.ptr()[randCnt++]; randCnt = randCnt % h_random32u.length(); + Ncv32u secondSwap = randVal % (this->numDstRects*srcSlotSize-1 - i); + NcvRect32u tmp = h_vecSrc.ptr()[i + secondSwap]; + h_vecSrc.ptr()[i + secondSwap] = h_vecSrc.ptr()[i]; + h_vecSrc.ptr()[i] = tmp; + } + NCV_SKIP_COND_END + + Ncv32u numHypothesesSrc = h_vecSrc.length(); + NCV_SKIP_COND_BEGIN + ncvStat = ncvFilterHypotheses_host(h_vecSrc, numHypothesesSrc, this->minNeighbors, this->eps, NULL); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + NCV_SKIP_COND_END + + //verification + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + if (numHypothesesSrc != this->numDstRects) + { + bLoopVirgin = false; + } + else + { + std::vector tmpRects(numHypothesesSrc); + memcpy(&tmpRects[0], h_vecSrc.ptr(), numHypothesesSrc * sizeof(NcvRect32u)); + std::sort(tmpRects.begin(), tmpRects.end()); + for (Ncv32u i=0; ieps)) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestHypothesesFilter::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestHypothesesFilter.h b/tests/gpu/src/nvidia/TestHypothesesFilter.h new file mode 100644 index 0000000000..63894f82d5 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHypothesesFilter.h @@ -0,0 +1,44 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testhypothesesfilter_h_ +#define _testhypothesesfilter_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestHypothesesFilter : public NCVTestProvider +{ +public: + + TestHypothesesFilter(std::string testName, NCVTestSourceProvider &src, + Ncv32u numDstRects, Ncv32u minNeighbors, Ncv32f eps); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + + TestHypothesesFilter(const TestHypothesesFilter&); + TestHypothesesFilter& operator=(const TestHypothesesFilter&); + + NCVTestSourceProvider &src; + Ncv32u numDstRects; + Ncv32u minNeighbors; + Ncv32f eps; + + Ncv32u canvasWidth; + Ncv32u canvasHeight; +}; + +#endif // _testhypothesesfilter_h_ diff --git a/tests/gpu/src/nvidia/TestHypothesesGrow.cpp b/tests/gpu/src/nvidia/TestHypothesesGrow.cpp new file mode 100644 index 0000000000..3ca076c973 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHypothesesGrow.cpp @@ -0,0 +1,134 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestHypothesesGrow.h" +#include "NCVHaarObjectDetection.hpp" + + +TestHypothesesGrow::TestHypothesesGrow(std::string testName, NCVTestSourceProvider &src, + Ncv32u rectWidth, Ncv32u rectHeight, Ncv32f rectScale, + Ncv32u maxLenSrc, Ncv32u lenSrc, Ncv32u maxLenDst, Ncv32u lenDst) + : + NCVTestProvider(testName), + src(src), + rectWidth(rectWidth), + rectHeight(rectHeight), + rectScale(rectScale), + maxLenSrc(maxLenSrc), + lenSrc(lenSrc), + maxLenDst(maxLenDst), + lenDst(lenDst) +{ +} + + +bool TestHypothesesGrow::toString(std::ofstream &strOut) +{ + strOut << "rectWidth=" << rectWidth << std::endl; + strOut << "rectHeight=" << rectHeight << std::endl; + strOut << "rectScale=" << rectScale << std::endl; + strOut << "maxLenSrc=" << maxLenSrc << std::endl; + strOut << "lenSrc=" << lenSrc << std::endl; + strOut << "maxLenDst=" << maxLenDst << std::endl; + strOut << "lenDst=" << lenDst << std::endl; + return true; +} + + +bool TestHypothesesGrow::init() +{ + return true; +} + + +bool TestHypothesesGrow::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + NCVVectorAlloc h_vecSrc(*this->allocatorCPU.get(), this->maxLenSrc); + ncvAssertReturn(h_vecSrc.isMemAllocated(), false); + NCVVectorAlloc d_vecSrc(*this->allocatorGPU.get(), this->maxLenSrc); + ncvAssertReturn(d_vecSrc.isMemAllocated(), false); + + NCVVectorAlloc h_vecDst(*this->allocatorCPU.get(), this->maxLenDst); + ncvAssertReturn(h_vecDst.isMemAllocated(), false); + NCVVectorAlloc d_vecDst(*this->allocatorGPU.get(), this->maxLenDst); + ncvAssertReturn(d_vecDst.isMemAllocated(), false); + NCVVectorAlloc h_vecDst_d(*this->allocatorCPU.get(), this->maxLenDst); + ncvAssertReturn(h_vecDst_d.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_vecSrc), false); + memset(h_vecDst.ptr(), 0, h_vecDst.length() * sizeof(NcvRect32u)); + NCVVectorReuse h_vecDst_as32u(h_vecDst.getSegment(), lenDst * sizeof(NcvRect32u) / sizeof(Ncv32u)); + ncvAssertReturn(h_vecDst_as32u.isMemReused(), false); + ncvAssertReturn(this->src.fill(h_vecDst_as32u), false); + memcpy(h_vecDst_d.ptr(), h_vecDst.ptr(), h_vecDst.length() * sizeof(NcvRect32u)); + NCV_SKIP_COND_END + + ncvStat = h_vecSrc.copySolid(d_vecSrc, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvStat = h_vecDst.copySolid(d_vecDst, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + Ncv32u h_outElemNum_d = 0; + Ncv32u h_outElemNum_h = 0; + NCV_SKIP_COND_BEGIN + h_outElemNum_d = this->lenDst; + ncvStat = ncvGrowDetectionsVector_device(d_vecSrc, this->lenSrc, + d_vecDst, h_outElemNum_d, this->maxLenDst, + this->rectWidth, this->rectHeight, this->rectScale, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvStat = d_vecDst.copySolid(h_vecDst_d, 0); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + ncvAssertCUDAReturn(cudaStreamSynchronize(0), false); + + h_outElemNum_h = this->lenDst; + ncvStat = ncvGrowDetectionsVector_host(h_vecSrc, this->lenSrc, + h_vecDst, h_outElemNum_h, this->maxLenDst, + this->rectWidth, this->rectHeight, this->rectScale); + ncvAssertReturn(ncvStat == NCV_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + if (h_outElemNum_d != h_outElemNum_h) + { + bLoopVirgin = false; + } + else + { + if (memcmp(h_vecDst.ptr(), h_vecDst_d.ptr(), this->maxLenDst * sizeof(NcvRect32u))) + { + bLoopVirgin = false; + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestHypothesesGrow::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestHypothesesGrow.h b/tests/gpu/src/nvidia/TestHypothesesGrow.h new file mode 100644 index 0000000000..c8358ec782 --- /dev/null +++ b/tests/gpu/src/nvidia/TestHypothesesGrow.h @@ -0,0 +1,46 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testhypothesesgrow_h_ +#define _testhypothesesgrow_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestHypothesesGrow : public NCVTestProvider +{ +public: + + TestHypothesesGrow(std::string testName, NCVTestSourceProvider &src, + Ncv32u rectWidth, Ncv32u rectHeight, Ncv32f rectScale, + Ncv32u maxLenSrc, Ncv32u lenSrc, Ncv32u maxLenDst, Ncv32u lenDst); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestHypothesesGrow(const TestHypothesesGrow&); + TestHypothesesGrow& operator=(const TestHypothesesGrow&); + + + NCVTestSourceProvider &src; + Ncv32u rectWidth; + Ncv32u rectHeight; + Ncv32f rectScale; + Ncv32u maxLenSrc; + Ncv32u lenSrc; + Ncv32u maxLenDst; + Ncv32u lenDst; +}; + +#endif // _testhypothesesgrow_h_ diff --git a/tests/gpu/src/nvidia/TestIntegralImage.cpp b/tests/gpu/src/nvidia/TestIntegralImage.cpp new file mode 100644 index 0000000000..47de70cb13 --- /dev/null +++ b/tests/gpu/src/nvidia/TestIntegralImage.cpp @@ -0,0 +1,185 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include +#include "TestIntegralImage.h" + + +template +TestIntegralImage::TestIntegralImage(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height) + : + NCVTestProvider(testName), + src(src), + width(width), + height(height) +{ +} + + +template +bool TestIntegralImage::toString(std::ofstream &strOut) +{ + strOut << "sizeof(T_in)=" << sizeof(T_in) << std::endl; + strOut << "sizeof(T_out)=" << sizeof(T_out) << std::endl; + strOut << "width=" << width << std::endl; + strOut << "height=" << height << std::endl; + return true; +} + + +template +bool TestIntegralImage::init() +{ + return true; +} + + +template +bool TestIntegralImage::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32u widthII = this->width + 1; + Ncv32u heightII = this->height + 1; + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + NCVMatrixAlloc d_imgII(*this->allocatorGPU.get(), widthII, heightII); + ncvAssertReturn(d_imgII.isMemAllocated(), false); + NCVMatrixAlloc h_imgII(*this->allocatorCPU.get(), widthII, heightII); + ncvAssertReturn(h_imgII.isMemAllocated(), false); + NCVMatrixAlloc h_imgII_d(*this->allocatorCPU.get(), widthII, heightII); + ncvAssertReturn(h_imgII_d.isMemAllocated(), false); + + Ncv32u bufSize; + if (sizeof(T_in) == sizeof(Ncv8u)) + { + ncvStat = nppiStIntegralGetSize_8u32u(NcvSize32u(this->width, this->height), &bufSize, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + } + else if (sizeof(T_in) == sizeof(Ncv32f)) + { + ncvStat = nppiStIntegralGetSize_32f32f(NcvSize32u(this->width, this->height), &bufSize, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + } + else + { + ncvAssertPrintReturn(false, "Incorrect integral image test instance", false); + } + + NCVVectorAlloc d_tmpBuf(*this->allocatorGPU.get(), bufSize); + ncvAssertReturn(d_tmpBuf.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + + ncvAssertReturn(this->src.fill(h_img), false); + + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + if (sizeof(T_in) == sizeof(Ncv8u)) + { + ncvStat = nppiStIntegral_8u32u_C1R((Ncv8u *)d_img.ptr(), d_img.pitch(), + (Ncv32u *)d_imgII.ptr(), d_imgII.pitch(), + NcvSize32u(this->width, this->height), + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + } + else if (sizeof(T_in) == sizeof(Ncv32f)) + { + ncvStat = nppiStIntegral_32f32f_C1R((Ncv32f *)d_img.ptr(), d_img.pitch(), + (Ncv32f *)d_imgII.ptr(), d_imgII.pitch(), + NcvSize32u(this->width, this->height), + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + } + else + { + ncvAssertPrintReturn(false, "Incorrect integral image test instance", false); + } + + ncvStat = d_imgII.copySolid(h_imgII_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + if (sizeof(T_in) == sizeof(Ncv8u)) + { + ncvStat = nppiStIntegral_8u32u_C1R_host((Ncv8u *)h_img.ptr(), h_img.pitch(), + (Ncv32u *)h_imgII.ptr(), h_imgII.pitch(), + NcvSize32u(this->width, this->height)); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + } + else if (sizeof(T_in) == sizeof(Ncv32f)) + { + ncvStat = nppiStIntegral_32f32f_C1R_host((Ncv32f *)h_img.ptr(), h_img.pitch(), + (Ncv32f *)h_imgII.ptr(), h_imgII.pitch(), + NcvSize32u(this->width, this->height)); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + } + else + { + ncvAssertPrintReturn(false, "Incorrect integral image test instance", false); + } + + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + for (Ncv32u i=0; bLoopVirgin && i < h_img.height() + 1; i++) + { + for (Ncv32u j=0; bLoopVirgin && j < h_img.width() + 1; j++) + { + if (sizeof(T_in) == sizeof(Ncv8u)) + { + if (h_imgII.ptr()[h_imgII.stride()*i+j] != h_imgII_d.ptr()[h_imgII_d.stride()*i+j]) + { + bLoopVirgin = false; + } + } + else if (sizeof(T_in) == sizeof(Ncv32f)) + { + if (fabsf((float)h_imgII.ptr()[h_imgII.stride()*i+j] - (float)h_imgII_d.ptr()[h_imgII_d.stride()*i+j]) > 0.01f) + { + bLoopVirgin = false; + } + } + else + { + ncvAssertPrintReturn(false, "Incorrect integral image test instance", false); + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +template +bool TestIntegralImage::deinit() +{ + return true; +} + + +template class TestIntegralImage; +template class TestIntegralImage; diff --git a/tests/gpu/src/nvidia/TestIntegralImage.h b/tests/gpu/src/nvidia/TestIntegralImage.h new file mode 100644 index 0000000000..22677766b6 --- /dev/null +++ b/tests/gpu/src/nvidia/TestIntegralImage.h @@ -0,0 +1,40 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testintegralimage_h_ +#define _testintegralimage_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +template +class TestIntegralImage : public NCVTestProvider +{ +public: + + TestIntegralImage(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestIntegralImage(const TestIntegralImage&); + TestIntegralImage& operator=(const TestIntegralImage&); + + NCVTestSourceProvider &src; + Ncv32u width; + Ncv32u height; +}; + +#endif // _testintegralimage_h_ diff --git a/tests/gpu/src/nvidia/TestIntegralImageSquared.cpp b/tests/gpu/src/nvidia/TestIntegralImageSquared.cpp new file mode 100644 index 0000000000..ec245934fd --- /dev/null +++ b/tests/gpu/src/nvidia/TestIntegralImageSquared.cpp @@ -0,0 +1,117 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include "TestIntegralImageSquared.h" + + +TestIntegralImageSquared::TestIntegralImageSquared(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height) + : + NCVTestProvider(testName), + src(src), + width(width), + height(height) +{ +} + + +bool TestIntegralImageSquared::toString(std::ofstream &strOut) +{ + strOut << "width=" << width << std::endl; + strOut << "height=" << height << std::endl; + return true; +} + + +bool TestIntegralImageSquared::init() +{ + return true; +} + + +bool TestIntegralImageSquared::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32u widthSII = this->width + 1; + Ncv32u heightSII = this->height + 1; + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + NCVMatrixAlloc d_imgSII(*this->allocatorGPU.get(), widthSII, heightSII); + ncvAssertReturn(d_imgSII.isMemAllocated(), false); + NCVMatrixAlloc h_imgSII(*this->allocatorCPU.get(), widthSII, heightSII); + ncvAssertReturn(h_imgSII.isMemAllocated(), false); + NCVMatrixAlloc h_imgSII_d(*this->allocatorCPU.get(), widthSII, heightSII); + ncvAssertReturn(h_imgSII_d.isMemAllocated(), false); + + Ncv32u bufSize; + ncvStat = nppiStSqrIntegralGetSize_8u64u(NcvSize32u(this->width, this->height), &bufSize, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + NCVVectorAlloc d_tmpBuf(*this->allocatorGPU.get(), bufSize); + ncvAssertReturn(d_tmpBuf.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + + ncvAssertReturn(this->src.fill(h_img), false); + + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStSqrIntegral_8u64u_C1R(d_img.ptr(), d_img.pitch(), + d_imgSII.ptr(), d_imgSII.pitch(), + NcvSize32u(this->width, this->height), + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = d_imgSII.copySolid(h_imgSII_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStSqrIntegral_8u64u_C1R_host(h_img.ptr(), h_img.pitch(), + h_imgSII.ptr(), h_imgSII.pitch(), + NcvSize32u(this->width, this->height)); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + for (Ncv32u i=0; bLoopVirgin && i < h_img.height() + 1; i++) + { + for (Ncv32u j=0; bLoopVirgin && j < h_img.width() + 1; j++) + { + if (h_imgSII.ptr()[h_imgSII.stride()*i+j] != h_imgSII_d.ptr()[h_imgSII_d.stride()*i+j]) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestIntegralImageSquared::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestIntegralImageSquared.h b/tests/gpu/src/nvidia/TestIntegralImageSquared.h new file mode 100644 index 0000000000..b1aaf28af5 --- /dev/null +++ b/tests/gpu/src/nvidia/TestIntegralImageSquared.h @@ -0,0 +1,39 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testintegralimagesquared_h_ +#define _testintegralimagesquared_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestIntegralImageSquared : public NCVTestProvider +{ +public: + + TestIntegralImageSquared(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestIntegralImageSquared(const TestIntegralImageSquared&); + TestIntegralImageSquared& operator=(const TestIntegralImageSquared&); + + NCVTestSourceProvider &src; + Ncv32u width; + Ncv32u height; +}; + +#endif // _testintegralimagesquared_h_ diff --git a/tests/gpu/src/nvidia/TestRectStdDev.cpp b/tests/gpu/src/nvidia/TestRectStdDev.cpp new file mode 100644 index 0000000000..40a1ad7dac --- /dev/null +++ b/tests/gpu/src/nvidia/TestRectStdDev.cpp @@ -0,0 +1,180 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include + +#include "TestRectStdDev.h" + + +TestRectStdDev::TestRectStdDev(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height, NcvRect32u rect, Ncv32f scaleFactor, + NcvBool bTextureCache) + : + NCVTestProvider(testName), + src(src), + width(width), + height(height), + rect(rect), + scaleFactor(scaleFactor), + bTextureCache(bTextureCache) +{ +} + + +bool TestRectStdDev::toString(std::ofstream &strOut) +{ + strOut << "width=" << width << std::endl; + strOut << "height=" << height << std::endl; + strOut << "rect=[" << rect.x << ", " << rect.y << ", " << rect.width << ", " << rect.height << "]\n"; + strOut << "scaleFactor=" << scaleFactor << std::endl; + strOut << "bTextureCache=" << bTextureCache << std::endl; + return true; +} + + +bool TestRectStdDev::init() +{ + return true; +} + + +bool TestRectStdDev::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32s _normWidth = (Ncv32s)this->width - this->rect.x - this->rect.width + 1; + Ncv32s _normHeight = (Ncv32s)this->height - this->rect.y - this->rect.height + 1; + if (_normWidth <= 0 || _normHeight <= 0) + { + return true; + } + Ncv32u normWidth = (Ncv32u)_normWidth; + Ncv32u normHeight = (Ncv32u)_normHeight; + NcvSize32u szNormRoi(normWidth, normHeight); + + Ncv32u widthII = this->width + 1; + Ncv32u heightII = this->height + 1; + Ncv32u widthSII = this->width + 1; + Ncv32u heightSII = this->height + 1; + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + + NCVMatrixAlloc d_imgII(*this->allocatorGPU.get(), widthII, heightII); + ncvAssertReturn(d_imgII.isMemAllocated(), false); + NCVMatrixAlloc h_imgII(*this->allocatorCPU.get(), widthII, heightII); + ncvAssertReturn(h_imgII.isMemAllocated(), false); + + NCVMatrixAlloc d_imgSII(*this->allocatorGPU.get(), widthSII, heightSII); + ncvAssertReturn(d_imgSII.isMemAllocated(), false); + NCVMatrixAlloc h_imgSII(*this->allocatorCPU.get(), widthSII, heightSII); + ncvAssertReturn(h_imgSII.isMemAllocated(), false); + + NCVMatrixAlloc d_norm(*this->allocatorGPU.get(), normWidth, normHeight); + ncvAssertReturn(d_norm.isMemAllocated(), false); + NCVMatrixAlloc h_norm(*this->allocatorCPU.get(), normWidth, normHeight); + ncvAssertReturn(h_norm.isMemAllocated(), false); + NCVMatrixAlloc h_norm_d(*this->allocatorCPU.get(), normWidth, normHeight); + ncvAssertReturn(h_norm_d.isMemAllocated(), false); + + Ncv32u bufSizeII, bufSizeSII; + ncvStat = nppiStIntegralGetSize_8u32u(NcvSize32u(this->width, this->height), &bufSizeII, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + ncvStat = nppiStSqrIntegralGetSize_8u64u(NcvSize32u(this->width, this->height), &bufSizeSII, this->devProp); + ncvAssertReturn(NPPST_SUCCESS == ncvStat, false); + Ncv32u bufSize = bufSizeII > bufSizeSII ? bufSizeII : bufSizeSII; + NCVVectorAlloc d_tmpBuf(*this->allocatorGPU.get(), bufSize); + ncvAssertReturn(d_tmpBuf.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_img), false); + + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStIntegral_8u32u_C1R(d_img.ptr(), d_img.pitch(), + d_imgII.ptr(), d_imgII.pitch(), + NcvSize32u(this->width, this->height), + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStSqrIntegral_8u64u_C1R(d_img.ptr(), d_img.pitch(), + d_imgSII.ptr(), d_imgSII.pitch(), + NcvSize32u(this->width, this->height), + d_tmpBuf.ptr(), bufSize, this->devProp); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStRectStdDev_32f_C1R(d_imgII.ptr(), d_imgII.pitch(), + d_imgSII.ptr(), d_imgSII.pitch(), + d_norm.ptr(), d_norm.pitch(), + szNormRoi, this->rect, + this->scaleFactor, + this->bTextureCache); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = d_norm.copySolid(h_norm_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStIntegral_8u32u_C1R_host(h_img.ptr(), h_img.pitch(), + h_imgII.ptr(), h_imgII.pitch(), + NcvSize32u(this->width, this->height)); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStSqrIntegral_8u64u_C1R_host(h_img.ptr(), h_img.pitch(), + h_imgSII.ptr(), h_imgSII.pitch(), + NcvSize32u(this->width, this->height)); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + ncvStat = nppiStRectStdDev_32f_C1R_host(h_imgII.ptr(), h_imgII.pitch(), + h_imgSII.ptr(), h_imgSII.pitch(), + h_norm.ptr(), h_norm.pitch(), + szNormRoi, this->rect, + this->scaleFactor); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + const Ncv64f relEPS = 0.005; + for (Ncv32u i=0; bLoopVirgin && i < h_norm.height(); i++) + { + for (Ncv32u j=0; bLoopVirgin && j < h_norm.width(); j++) + { + Ncv64f absErr = fabs(h_norm.ptr()[h_norm.stride()*i+j] - h_norm_d.ptr()[h_norm_d.stride()*i+j]); + Ncv64f relErr = absErr / h_norm.ptr()[h_norm.stride()*i+j]; + + if (relErr > relEPS) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +bool TestRectStdDev::deinit() +{ + return true; +} diff --git a/tests/gpu/src/nvidia/TestRectStdDev.h b/tests/gpu/src/nvidia/TestRectStdDev.h new file mode 100644 index 0000000000..7c0473e296 --- /dev/null +++ b/tests/gpu/src/nvidia/TestRectStdDev.h @@ -0,0 +1,44 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testrectstddev_h_ +#define _testrectstddev_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +class TestRectStdDev : public NCVTestProvider +{ +public: + + TestRectStdDev(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height, NcvRect32u rect, Ncv32f scaleFactor, + NcvBool bTextureCache); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestRectStdDev(const TestRectStdDev&); + TestRectStdDev& operator=(const TestRectStdDev&); + + NCVTestSourceProvider &src; + NcvRect32u rect; + Ncv32u width; + Ncv32u height; + Ncv32f scaleFactor; + + NcvBool bTextureCache; +}; + +#endif // _testrectstddev_h_ diff --git a/tests/gpu/src/nvidia/TestResize.cpp b/tests/gpu/src/nvidia/TestResize.cpp new file mode 100644 index 0000000000..02108997b3 --- /dev/null +++ b/tests/gpu/src/nvidia/TestResize.cpp @@ -0,0 +1,161 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include + +#include "TestResize.h" + + +template +TestResize::TestResize(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height, Ncv32u scaleFactor, NcvBool bTextureCache) + : + NCVTestProvider(testName), + src(src), + width(width), + height(height), + scaleFactor(scaleFactor), + bTextureCache(bTextureCache) +{ +} + + +template +bool TestResize::toString(std::ofstream &strOut) +{ + strOut << "sizeof(T)=" << sizeof(T) << std::endl; + strOut << "width=" << width << std::endl; + strOut << "scaleFactor=" << scaleFactor << std::endl; + strOut << "bTextureCache=" << bTextureCache << std::endl; + return true; +} + + +template +bool TestResize::init() +{ + return true; +} + + +template +bool TestResize::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + Ncv32s smallWidth = this->width / this->scaleFactor; + Ncv32s smallHeight = this->height / this->scaleFactor; + if (smallWidth == 0 || smallHeight == 0) + { + return true; + } + + NcvSize32u srcSize(this->width, this->height); + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + + NCVMatrixAlloc d_small(*this->allocatorGPU.get(), smallWidth, smallHeight); + ncvAssertReturn(d_small.isMemAllocated(), false); + NCVMatrixAlloc h_small(*this->allocatorCPU.get(), smallWidth, smallHeight); + ncvAssertReturn(h_small.isMemAllocated(), false); + NCVMatrixAlloc h_small_d(*this->allocatorCPU.get(), smallWidth, smallHeight); + ncvAssertReturn(h_small_d.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_img), false); + NCV_SKIP_COND_END + + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_BEGIN + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = nppiStDownsampleNearest_32u_C1R((Ncv32u *)d_img.ptr(), d_img.pitch(), + (Ncv32u *)d_small.ptr(), d_small.pitch(), + srcSize, this->scaleFactor, + this->bTextureCache); + } + else if (sizeof(T) == sizeof(Ncv64u)) + { + ncvStat = nppiStDownsampleNearest_64u_C1R((Ncv64u *)d_img.ptr(), d_img.pitch(), + (Ncv64u *)d_small.ptr(), d_small.pitch(), + srcSize, this->scaleFactor, + this->bTextureCache); + } + else + { + ncvAssertPrintReturn(false, "Incorrect downsample test instance", false); + } + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + ncvStat = d_small.copySolid(h_small_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + NCV_SKIP_COND_BEGIN + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = nppiStDownsampleNearest_32u_C1R_host((Ncv32u *)h_img.ptr(), h_img.pitch(), + (Ncv32u *)h_small.ptr(), h_small.pitch(), + srcSize, this->scaleFactor); + } + else if (sizeof(T) == sizeof(Ncv64u)) + { + ncvStat = nppiStDownsampleNearest_64u_C1R_host((Ncv64u *)h_img.ptr(), h_img.pitch(), + (Ncv64u *)h_small.ptr(), h_small.pitch(), + srcSize, this->scaleFactor); + } + else + { + ncvAssertPrintReturn(false, "Incorrect downsample test instance", false); + } + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + //const Ncv64f relEPS = 0.005; + for (Ncv32u i=0; bLoopVirgin && i < h_small.height(); i++) + { + for (Ncv32u j=0; bLoopVirgin && j < h_small.width(); j++) + { + if (h_small.ptr()[h_small.stride()*i+j] != h_small_d.ptr()[h_small_d.stride()*i+j]) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +template +bool TestResize::deinit() +{ + return true; +} + + +template class TestResize; +template class TestResize; diff --git a/tests/gpu/src/nvidia/TestResize.h b/tests/gpu/src/nvidia/TestResize.h new file mode 100644 index 0000000000..1bd57a8007 --- /dev/null +++ b/tests/gpu/src/nvidia/TestResize.h @@ -0,0 +1,42 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testresize_h_ +#define _testresize_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + +template +class TestResize : public NCVTestProvider +{ +public: + + TestResize(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height, Ncv32u scaleFactor, NcvBool bTextureCache); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + TestResize(const TestResize&); + TestResize& operator=(const TestResize&); + + NCVTestSourceProvider &src; + Ncv32u width; + Ncv32u height; + Ncv32u scaleFactor; + + NcvBool bTextureCache; +}; + +#endif // _testresize_h_ diff --git a/tests/gpu/src/nvidia/TestTranspose.cpp b/tests/gpu/src/nvidia/TestTranspose.cpp new file mode 100644 index 0000000000..aa131f867b --- /dev/null +++ b/tests/gpu/src/nvidia/TestTranspose.cpp @@ -0,0 +1,148 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ + +#include + +#include "TestTranspose.h" + + +template +TestTranspose::TestTranspose(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height) + : + NCVTestProvider(testName), + src(src), + width(width), + height(height) +{ +} + + +template +bool TestTranspose::toString(std::ofstream &strOut) +{ + strOut << "sizeof(T)=" << sizeof(T) << std::endl; + strOut << "width=" << width << std::endl; + return true; +} + + +template +bool TestTranspose::init() +{ + return true; +} + + +template +bool TestTranspose::process() +{ + NCVStatus ncvStat; + bool rcode = false; + + NcvSize32u srcSize(this->width, this->height); + + NCVMatrixAlloc d_img(*this->allocatorGPU.get(), this->width, this->height); + ncvAssertReturn(d_img.isMemAllocated(), false); + NCVMatrixAlloc h_img(*this->allocatorCPU.get(), this->width, this->height); + ncvAssertReturn(h_img.isMemAllocated(), false); + + NCVMatrixAlloc d_dst(*this->allocatorGPU.get(), this->height, this->width); + ncvAssertReturn(d_dst.isMemAllocated(), false); + NCVMatrixAlloc h_dst(*this->allocatorCPU.get(), this->height, this->width); + ncvAssertReturn(h_dst.isMemAllocated(), false); + NCVMatrixAlloc h_dst_d(*this->allocatorCPU.get(), this->height, this->width); + ncvAssertReturn(h_dst_d.isMemAllocated(), false); + + NCV_SET_SKIP_COND(this->allocatorGPU.get()->isCounting()); + NCV_SKIP_COND_BEGIN + ncvAssertReturn(this->src.fill(h_img), false); + NCV_SKIP_COND_END + + ncvStat = h_img.copySolid(d_img, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_BEGIN + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = nppiStTranspose_32u_C1R((Ncv32u *)d_img.ptr(), d_img.pitch(), + (Ncv32u *)d_dst.ptr(), d_dst.pitch(), + NcvSize32u(this->width, this->height)); + } + else if (sizeof(T) == sizeof(Ncv64u)) + { + ncvStat = nppiStTranspose_64u_C1R((Ncv64u *)d_img.ptr(), d_img.pitch(), + (Ncv64u *)d_dst.ptr(), d_dst.pitch(), + NcvSize32u(this->width, this->height)); + } + else + { + ncvAssertPrintReturn(false, "Incorrect transpose test instance", false); + } + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + ncvStat = d_dst.copySolid(h_dst_d, 0); + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + + NCV_SKIP_COND_BEGIN + if (sizeof(T) == sizeof(Ncv32u)) + { + ncvStat = nppiStTranspose_32u_C1R_host((Ncv32u *)h_img.ptr(), h_img.pitch(), + (Ncv32u *)h_dst.ptr(), h_dst.pitch(), + NcvSize32u(this->width, this->height)); + } + else if (sizeof(T) == sizeof(Ncv64u)) + { + ncvStat = nppiStTranspose_64u_C1R_host((Ncv64u *)h_img.ptr(), h_img.pitch(), + (Ncv64u *)h_dst.ptr(), h_dst.pitch(), + NcvSize32u(this->width, this->height)); + } + else + { + ncvAssertPrintReturn(false, "Incorrect downsample test instance", false); + } + ncvAssertReturn(ncvStat == NPPST_SUCCESS, false); + NCV_SKIP_COND_END + + //bit-to-bit check + bool bLoopVirgin = true; + + NCV_SKIP_COND_BEGIN + //const Ncv64f relEPS = 0.005; + for (Ncv32u i=0; bLoopVirgin && i < this->width; i++) + { + for (Ncv32u j=0; bLoopVirgin && j < this->height; j++) + { + if (h_dst.ptr()[h_dst.stride()*i+j] != h_dst_d.ptr()[h_dst_d.stride()*i+j]) + { + bLoopVirgin = false; + } + } + } + NCV_SKIP_COND_END + + if (bLoopVirgin) + { + rcode = true; + } + + return rcode; +} + + +template +bool TestTranspose::deinit() +{ + return true; +} + + +template class TestTranspose; +template class TestTranspose; diff --git a/tests/gpu/src/nvidia/TestTranspose.h b/tests/gpu/src/nvidia/TestTranspose.h new file mode 100644 index 0000000000..d865c3c8f2 --- /dev/null +++ b/tests/gpu/src/nvidia/TestTranspose.h @@ -0,0 +1,41 @@ +/* + * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. + * + * NVIDIA Corporation and its licensors retain all intellectual + * property and proprietary rights in and to this software and + * related documentation and any modifications thereto. + * Any use, reproduction, disclosure, or distribution of this + * software and related documentation without an express license + * agreement from NVIDIA Corporation is strictly prohibited. + */ +#ifndef _testtranspose_h_ +#define _testtranspose_h_ + +#include "NCVTest.hpp" +#include "NCVTestSourceProvider.hpp" + + +template +class TestTranspose : public NCVTestProvider +{ +public: + + TestTranspose(std::string testName, NCVTestSourceProvider &src, + Ncv32u width, Ncv32u height); + + virtual bool init(); + virtual bool process(); + virtual bool deinit(); + virtual bool toString(std::ofstream &strOut); + +private: + + TestTranspose(const TestTranspose&); + TestTranspose& operator=(const TestTranspose&); + + NCVTestSourceProvider &src; + Ncv32u width; + Ncv32u height; +}; + +#endif // _testtranspose_h_ diff --git a/tests/gpu/src/nvidia/main_nvidia.cpp b/tests/gpu/src/nvidia/main_nvidia.cpp new file mode 100644 index 0000000000..e4f2119c30 --- /dev/null +++ b/tests/gpu/src/nvidia/main_nvidia.cpp @@ -0,0 +1,346 @@ +#pragma warning (disable : 4408 4201 4100) + +#include + +#include "NCV.hpp" +#include "NCVHaarObjectDetection.hpp" + +#include "TestIntegralImage.h" +#include "TestIntegralImageSquared.h" +#include "TestRectStdDev.h" +#include "TestResize.h" +#include "TestCompact.h" +#include "TestTranspose.h" + +#include "TestDrawRects.h" +#include "TestHypothesesGrow.h" +#include "TestHypothesesFilter.h" +#include "TestHaarCascadeLoader.h" +#include "TestHaarCascadeApplication.h" + +#include "NCVAutoTestLister.hpp" +#include "NCVTestSourceProvider.hpp" + + +template +void generateIntegralTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src, + Ncv32u maxWidth, Ncv32u maxHeight) +{ + for (Ncv32f _i=1.0; _i(testName, src, i, 2)); + } + for (Ncv32f _i=1.0; _i(testName, src, 2, i)); + } + + //test VGA + testLister.add(new TestIntegralImage("LinIntImg_VGA", src, 640, 480)); + + //TODO: add tests of various resolutions up to 4096x4096 +} + + +void generateSquaredIntegralTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src, + Ncv32u maxWidth, Ncv32u maxHeight) +{ + for (Ncv32f _i=1.0; _i &src, + Ncv32u maxWidth, Ncv32u maxHeight) +{ + NcvRect32u rect(1,1,18,18); + + for (Ncv32f _i=32; _i +void generateResizeTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src) +{ + //test VGA + for (Ncv32u i=1; i<480; i+=3) + { + char testName[80]; + sprintf_s(testName, sizeof(testName), "TestResize_VGA_s%d", i); + testLister.add(new TestResize(testName, src, 640, 480, i, true)); + testLister.add(new TestResize(testName, src, 640, 480, i, false)); + } + + //test HD + for (Ncv32u i=1; i<1080; i+=5) + { + char testName[80]; + sprintf_s(testName, sizeof(testName), "TestResize_1080_s%d", i); + testLister.add(new TestResize(testName, src, 1920, 1080, i, true)); + testLister.add(new TestResize(testName, src, 1920, 1080, i, false)); + } + + //TODO: add tests of various resolutions up to 4096x4096 +} + + +void generateNPPSTVectorTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src, Ncv32u maxLength) +{ + //compaction + for (Ncv32f _i=256.0; _i +void generateTransposeTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src) +{ + for (int i=2; i<64; i+=4) + { + for (int j=2; j<64; j+=4) + { + char testName[80]; + sprintf_s(testName, sizeof(testName), "TestTranspose_%dx%d", i, j); + testLister.add(new TestTranspose(testName, src, i, j)); + } + } + + for (int i=1; i<128; i+=1) + { + for (int j=1; j<2; j+=1) + { + char testName[80]; + sprintf_s(testName, sizeof(testName), "TestTranspose_%dx%d", i, j); + testLister.add(new TestTranspose(testName, src, i, j)); + } + } + + testLister.add(new TestTranspose("TestTranspose_VGA", src, 640, 480)); + testLister.add(new TestTranspose("TestTranspose_HD1080", src, 1920, 1080)); +} + + +template +void generateDrawRectsTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src, NCVTestSourceProvider &src32u, + Ncv32u maxWidth, Ncv32u maxHeight) +{ + for (Ncv32f _i=16.0; _i(testName, src, src32u, i, j, i*j/1000+1, (T)0xFFFFFFFF)); + } + else if (sizeof(T) == sizeof(Ncv8u)) + { + testLister.add(new TestDrawRects(testName, src, src32u, i, j, i*j/1000+1, (T)0xFF)); + } + else + { + ncvAssertPrintCheck(false, "Attempted to instantiate non-existing DrawRects test suite"); + } + } + + //test VGA + testLister.add(new TestDrawRects("DrawRects_VGA", src, src32u, 640, 480, 640*480/1000, (T)0xFF)); + + //TODO: add tests of various resolutions up to 4096x4096 +} + + +void generateVectorTests(NCVAutoTestLister &testLister, NCVTestSourceProvider &src, Ncv32u maxLength) +{ + //growth + for (Ncv32f _i=10.0; _i &src, Ncv32u maxLength) +{ + for (Ncv32f _i=1.0; _i &src, + Ncv32u maxWidth, Ncv32u maxHeight) +{ + for (Ncv32u i=20; i<512; i+=11) + { + for (Ncv32u j=20; j<128; j+=5) + { + char testName[80]; + sprintf_s(testName, sizeof(testName), "HaarAppl%d_%d", i, j); + testLister.add(new TestHaarCascadeApplication(testName, src, "haarcascade_frontalface_alt.xml", j, i)); + } + } + for (Ncv32f _i=20.0; _i testSrcRandom_32u(2010, 0, 0xFFFFFFFF, 4096, 4096); + NCVTestSourceProvider testSrcRandom_8u(2010, 0, 255, 4096, 4096); + NCVTestSourceProvider testSrcRandom_64u(2010, 0, 0xFFFFFFFFFFFFFFFF, 4096, 4096); + NCVTestSourceProvider testSrcFacesVGA_8u("../../data/group_1_640x480_VGA.pgm"); + NCVTestSourceProvider testSrcRandom_32f(2010, -1.0f, 1.0f, 4096, 4096); + + printf("Generating NPPST test suites\n"); + generateIntegralTests(testListerII, testSrcRandom_8u, 4096, 4096); + generateIntegralTests(testListerII, testSrcRandom_32f, 4096, 4096); + generateSquaredIntegralTests(testListerSII, testSrcRandom_8u, 4096, 4096); + generateRectStdDevTests(testListerRStdDev, testSrcRandom_8u, 4096, 4096); + generateResizeTests(testListerResize, testSrcRandom_32u); + generateResizeTests(testListerResize, testSrcRandom_64u); + generateNPPSTVectorTests(testListerNPPSTVectorOperations, testSrcRandom_32u, 4096*4096); + generateTransposeTests(testListerTranspose, testSrcRandom_32u); + generateTransposeTests(testListerTranspose, testSrcRandom_64u); + + printf("Generating NCV test suites\n"); + generateDrawRectsTests(testListerVisualize, testSrcRandom_8u, testSrcRandom_32u, 4096, 4096); + generateDrawRectsTests(testListerVisualize, testSrcRandom_32u, testSrcRandom_32u, 4096, 4096); + generateVectorTests(testListerVectorOperations, testSrcRandom_32u, 4096*4096); + generateHypothesesFiltrationTests(testListerHypFiltration, testSrcRandom_32u, 1024); + generateHaarLoaderTests(testListerHaarLoader); + generateHaarApplicationTests(testListerHaarAppl, testSrcFacesVGA_8u, 1280, 720); + + testListerII.invoke(); + testListerSII.invoke(); + testListerRStdDev.invoke(); + testListerResize.invoke(); + testListerNPPSTVectorOperations.invoke(); + testListerTranspose.invoke(); + testListerVisualize.invoke(); + testListerVectorOperations.invoke(); + testListerHypFiltration.invoke(); + testListerHaarLoader.invoke(); + testListerHaarAppl.invoke(); + + return 0; +} diff --git a/tests/gpu/src/nvidia_tests.cpp b/tests/gpu/src/nvidia_tests.cpp new file mode 100644 index 0000000000..04d6436829 --- /dev/null +++ b/tests/gpu/src/nvidia_tests.cpp @@ -0,0 +1,63 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// Intel License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000, Intel Corporation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of Intel Corporation may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Intel Corporation or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "gputest.hpp" +#include "cvconfig.h" + +class CV_NVidiaTestsCaller : public CvTest +{ +public: + CV_NVidiaTestsCaller() : CvTest("GPU-NVidia", "NVidia") {} + virtual ~CV_NVidiaTestsCaller() {} + +protected: + + void run( int ) + { +#if defined(HAVE_CUDA) + int main_nvidia(); + main_nvidia(); + ts->set_failed_test_info(CvTS::OK); +#else + ts->set_failed_test_info(CvTS::SKIPPED); +#endif + } +} CV_NVidiaTestsCaller_test; \ No newline at end of file