From ddf055ada9b5b183d5d566bb950981fc570ba80b Mon Sep 17 00:00:00 2001 From: Pierre Kunzli <pierre.kuenzli@unige.ch> Date: Tue, 14 Jan 2025 14:36:42 +0100 Subject: [PATCH] ajout TP correction gamma --- exercices/02-correction-gamma/fig/.gitkeep | 0 .../fig/CUDA-GridBlockThread-Structure.png | Bin 0 -> 8041 bytes .../Gamma-transformation-of-grey-level.png | Bin 0 -> 22999 bytes exercices/02-correction-gamma/fig/g31567.png | Bin 0 -> 11461 bytes exercices/02-correction-gamma/fig/g31611.png | Bin 0 -> 14033 bytes exercices/02-correction-gamma/readme.md | 179 ++++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 exercices/02-correction-gamma/fig/.gitkeep create mode 100644 exercices/02-correction-gamma/fig/CUDA-GridBlockThread-Structure.png create mode 100644 exercices/02-correction-gamma/fig/Gamma-transformation-of-grey-level.png create mode 100644 exercices/02-correction-gamma/fig/g31567.png create mode 100644 exercices/02-correction-gamma/fig/g31611.png create mode 100644 exercices/02-correction-gamma/readme.md diff --git a/exercices/02-correction-gamma/fig/.gitkeep b/exercices/02-correction-gamma/fig/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/exercices/02-correction-gamma/fig/CUDA-GridBlockThread-Structure.png b/exercices/02-correction-gamma/fig/CUDA-GridBlockThread-Structure.png new file mode 100644 index 0000000000000000000000000000000000000000..ff10e1130c5e113e382033bd6cfa3d43f57c42f6 GIT binary patch literal 8041 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 literal 0 HcmV?d00001 diff --git a/exercices/02-correction-gamma/fig/Gamma-transformation-of-grey-level.png b/exercices/02-correction-gamma/fig/Gamma-transformation-of-grey-level.png new file mode 100644 index 0000000000000000000000000000000000000000..a5abb6adaddee6b31e03462e406040d65534ff54 GIT binary patch literal 22999 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 literal 0 HcmV?d00001 diff --git a/exercices/02-correction-gamma/fig/g31567.png b/exercices/02-correction-gamma/fig/g31567.png new file mode 100644 index 0000000000000000000000000000000000000000..6e746334af1458959392415c868b7b3817e041b7 GIT binary patch literal 11461 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 literal 0 HcmV?d00001 diff --git a/exercices/02-correction-gamma/fig/g31611.png b/exercices/02-correction-gamma/fig/g31611.png new file mode 100644 index 0000000000000000000000000000000000000000..64bdb65feaa52f65106b6846629a05755bc16deb GIT binary patch literal 14033 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV7$V?#=yXE=#7sb0|Ns~v6E*A2L}g74M$1` z0|NtRfk$L90|S372s5rIk#t~SV2~_vjVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw z{mw>;fkA=6)5S5QV$R#U<#Te<W9>hjzgK<PLy?nHWnqibLi3lQT}=y`76q}mI66*9 zOJZ>qJnhdE6e94jU7@4oCu5MPU_jMGIfX9_oSce#@9g^g`|-`x^m%jdTBesjo3r!# zzWeL1?<qR}tn%5<bMMZ~d|rJnSZopx69dDAM%`L=1_p*V_S^pch(E5nGq%3*Oz%+@ z`&ZT-mW5%HY-`ys?w5|6F{dQ+e&Cn)pH!xQl|3@&M;u?lYm1YWJ4?%+uBvUnxclIt z*2p`XR=+p+WqxDc+HU(d)?N2v|L?eK`BLh6O1*qS(b08B!qY$Qm4Ea8ecK~<akcO_ z8vo-w9r9*B;r+{E60Ya>>EyoV8N&MBMN9WJzqsH0-?(zt=8S*VoqAy(^({@fYuOFi z?@hHobM4OV_XbtlYhPzi%02#7*6qER*#0TZWp&%$8&rMw-fnAqzTyJ^FTTa)^R0|` zzUbJucn1Ias_0F**&x>+p6`7w=2wP96DtEli5pXpwTAUCzQjD4N$<bQ9<s5>i{5vs zoagg{9Zz=G9yibzJC$(u@4abrKCIoBJcFH^`}&Wp`-W#)Tb0kfv}SpBe53o5H~W%j zh(~XK(zP#nhPlv$TVb2!>fS7fxlzvX`N4~|AD7O0^5V&#eaSPFg(j#(7l|4_o1_w6 z+UGGzrl|0~pn-j#O^AHb&1t%B2G>;-7#JMVM>e_j?#*lE9L0~jWNw23kbQS?(tX1- z&Bc>ef0aEfQ~1tj(~QmjFRa@t4NiPtceR|SII-a6#oG1*e|}t4wOsaI;@Q!8M`f;* z^L#!wJtH@r?~QfK&W+09Z>?J@3;xZE+5KMP*}?uvkAL+g#_`Oto~+Vs>CZGtrMY<h z-Exl44>zs;BFp&s@gMKlBQe`F7$c8P*I;0{Fmvidw{(@CtN$_0l(wE+v;Mupvm@Il z>wJ@S`ER%5^m;|lbKXUT_Z`o4>ZexUS3J{dTUlH7G#H#A9+gkJTm6e~aeXuQX6y8C zvaav#zFa;1DLnt?q`!Y>KmMaViCg?vUy@zT)7!P~2J(8lN}k^5_GH`Z%EZ9%CVZQ! zUO2-jpfCgsO1W#<5A1u`>0k3mkX^3g!TT?=>=({Gdi3aj^+E2q4__m<6`s;ue#heE z`SY826Mpg8|M{@L`kC?koqOL~-1wgJ+M3}TFGydY=e)b+G7i?!+j1<GPx=T?IGFHZ zGB-E(IsOgPZ*ELJetNQp!;D?9k`$7Sc@8E`yEi|j{JtZD^1E429?VPLVRF*Fx{pz! zG+@&1ud*z^**Q6kiw`ie|M`@;d~TWJ{Xzz9Kg*|6^3^RjJ~!C+dCzm(_xEg%Gw@jc zd@_0c&J7z1((V^-s5fBYW?*>H!@@!#d1l)_=7vzc)0{UaJ^wCyEar!U-q|F+*VaAv z_L|>6zjJ5R{lqhk{7<)52Hto4l3QK$-tp6leUD$<etObX-h17ha+%K$zV7_Aw0cwO ze*18}v=5W6KR?9(MV8%1i81kC&S}BOGtIyGlJ#_+z2PaUxu5tY&)sg0<GVZM5__Xh z%yVIy^yF7(@ezfe-xPM1-7h@TY#V7&J)yBU^^?4(-Gy=igHFYW(ISy>2yFW*%dn;> zVc*QTJ3a3wo@vdEJR>L0RW$X@$)h)Kl}qfsJ+u24U!q)&e_XZ4r+@n%&tUG3j`8rB zBs0ynd-~IczyHb$9mLMRvS!P0VmkCE^29ln<=<u54CeRw=y_BgnB@J7k0B#*|NbZj z28I%MCMIybNlh{>`aa`^_qR4CAAjp_`}K<VuRi98jXQQ!1l%`N*?DQ@@_ALy_cb$w z@vt?o=3{H#cR0abkufoCTh7f-?~Wcly6-T<v-725;^OvK$^{s{92U@FU|3)*Bmg4Y z5)4I~4<;C%d|G>)am%*qYrHu(H>G}m^k~s%<~OO^^6%#bagbKNT-e&Wk2zs~c}m#5 z_UcJ7HjB&ne2QLN`1sVb?97U_l?5J?n%n#IJvZ%M9<hKwwvMgseDdz;w{C^!`W79z z@Ud^oXHAATrgbw?Hhi(DZF_5zvSO~|q~m8ctgS4Fa*KaI_ZM&aBIikWOitEL{!=t* zx6012^@6=tRwr{O-?2Z*Jn2r}%k(qrpQn5=E;uf^t@LJqwfx*f>(39^B>(Q+x8{C< z)Xuy~yVZV9Rr&5&G<iyQkb^%cZET3&T{&s_5*1nZo}d5cdw*J`qVH#4zD91slZ~Er zYOBvrub#BW{N#V%Pt*DyGhHjsn53>==`u;W@8|#L>Xpfp#8oU8AKo!7R{7-G$#>FT z?hjx4?|*Hu-UUVj=64Nej_tY6cyrQ|m71PM7aV-NSu<RBcTviu>t;Q<6P|qaE}bC{ zQgg3>{Yjaor|abN?@~SMmN(Dv^Z1nRd2iwqcHT!;3!7&wFn`y;Q2S%`6qY61j8p&o z30*b+zS2qd$#)b_UQd^f;`4f`a;Ngl|J^1_iwi2ger8|JBe^?$(p%$RzKHYwYCqTa zockGF7B@*--7?`tdbrmoe($IA%@6O$oAX4{xTfyL>YSI>3<>)`cdYTVyEk=GjLf7b zGp6_*dOT^4b;vU<%}&R=Kj&|oo@Vkh!spW;mFtmNzdNR+Jhqgad!^?1l!p-x_UmRn zxo<S9rbhqd;z=^op4^yHeCBS@q$!E#J&X49CCQ}wpK9f0uu9^%mUHH{z?#F8=1jhL zBW}u8{k9nWljW;Fou89fQ@-lft;t4(rMmkkOlsk|zVkHC<HeTF8`6^JwI}S=SiEuW zM5F6Tb8<cZ?bQ1JwdbDf%w_ZAvXaXu=`TBzTOD-jXrJ@sn82e+9AXD}JRQ=K<Af*J zpL?}acJjUt?}M-Iw0Np_QfJTptk>_QuB^1)_1|{!jSP1tBk9kx8e-HJ7oYl;^6CB` zFVB6`E?)n9L-J^O%&DWDh0ceCI5~bxI&WxLr;}3p=zEXKZnZ1FzpKbgSlQW}T<@#D zMt*nQq}}|o?>#;}=Y93p_0*jSspY<s?|Dm}n;Y-i^6s{grQ{x)lks8pvqPCaHLJ*b zd4?tKPZzTK{AR|KlY6)O71f+tmUQ3y)5|GOh0nh-n6_3k{BoUHs_)OoK|()@C)HS= ztXKIte~Rao*&8QpGI{H-zBBUFp7zDT`!wpO6uthp*wb##P2aMACwtx%ZmbEd4_b8L zN#%OWlA5qncly=hrd@pUK>YHXcP`TVLuB_`re1obGJVM&d3n<>o8!;qynnILGCKI( zn!D;xZ7ZivNsZh;?a5lr`5X0)KZ&<ay?OO^dMe))R?X+r`Bf{+-JUz=UJ0FiNBe2t z3(m;MHxDnV#Ct}5`(;0Qj&19<W0rcU`{yUd`%0$mjQqa7FaF+!d(xBt_=bgT+#P!A z{^Q%h9h?o8rg<FK5;a#(TC?5d^}8uwZ(rXvH}>`mfi<lv{Jx*gmL^5k&6)aSdytiR zZf<1P$J4yGBIVk?T$-ZD@;Il2<J$Y>KD*-9ZC5^dIBNf_kMkmrepw|}x<2UWR_)92 z-@ff%{iANL>s|KH((hjrEvlQhwk6nVtbQ(fwcme93`a)RV&@HcGd8uKS#tjOyD6-E zefb~n9L}4vDdfwil;>aNx;4vX-fuWooLj<i?d+ys-~T<E;`wlP>DpJ7<y&g*Z4di8 z-=cNKEh8501<s{RMN6mX|5uy)!Ew_0B{%!7NP9Z)dF<Y+Firlw&*vi=nzApy=Pa1} zb>EU(Y6{Vl_iR{IoOo)}rprO~C%4aS|Gae7KNIz8{Us`;htJpV75m!1{#BfubIflu zJ;tAZP5$S+_4ph*(QHz~pP;aED|Oqt8Jmu~O7EXNX~TBg?KZW&&u@D$6|JB0`DDS~ z{b#?}DSux-Z}(f)hTzq|eBaOWnatAiw@WeN%<TRCMYosM>%R~A-8w~)>AIift)kTn zKW+DsJXX9tr|!q)4XrBqCtf95+Izh8s8@aJ{b-k`+>DD0UB7!v8Wo=J(YtJQ?xLo% zPF~30KTT5-W8*y}*-8q$)W4T$%C2mV-aG4Stmet=pt|j+_f7v~wa?&a*{i!9xA_9C zY!?@6=S}&vdv@FE^peW^Z#B#J&a$$8nqPM1(nm$j_t(wNAI!OHo4U_0Xx*p%=BYa_ zT58TeY`wfBg+EHGIAKz~?@yWfoKqWZ44&RGtJz)>eyV19|I(Ug{n1&!^&(%cke~dd z)_eWa%e=QL!zL{cwZFaj$}#rfxZmrhSofGmXJy}#z3;B_^Z1%G=OcVRvCn)rPx|Z6 zV&&)4zRu%ss6F#RcEZEeCHZH((${@^9a+0I;}V;H?)wHCyVdJC?93lq|GPcyR{WY% z|8KUKZCmmt+b||QeUkmjTh6N|ZQ?(gzwD0SjW@Crk~bUOtNr<L=bF7GPu*lETn$fL zfAy2)yzr~_|3n@~$0-&6EIh_G@A2lV#b35AXK<}$Px<+`Jnh;)n>ka8!b^ADo4$F{ zlr>Aw%1&6l{LFKyyvM<ja~J6EejRkC)aUhF<w;M%S6ekt>6XggI(bU*rP!dh?5mxp zH<^_?%$s-d^P_K56bmkYJEgTOecPJ)&8z<X4DMO0S?<7KWiqEh$Nt{Llb<!}maf`t z`?|kBZ*oJ7<?8mwf3CJvOuBm5x-9jt-#6vepR6bUiD@pImV5Hn{^e?%C;U^s3QhSx z^V6^8Z*Q#mXT5zdb9GVZ|M|-$;{X2pae!^!<GELhZHl4}Zd5E~GV+jQGkN*y+eXiQ zfmf|7o#vWxp3q+X+|D*TJ}0s)=v3^)hgJ1k{C+A2SzSE*G=6T`{GD4*nRz;FTY4sP zrS;eH?2C2MUt8zg&x`!OVolxp5?d!1rbBf{B~qWAP1QWD@NQ<nyZB%=13hbvr|S-w z*cdH7Txd7{WO>A-qSk-)ZGGF9zIkSQ&gqmvOJe=3OP#q{hLh|4vv)dA>R+Owcsg!w z(ba#8c<r87@vZJFPx<s=OVr+))W36P2ijkEn|5kWYK_nF`OELvMx5v0TqX4B{gRqA z^Vc_~O#M5Jcan`&>W_O>=T5x(eDv|AGWDMuC4IB@&A6nQ|9NKi@1HSc5vPQ99QHg= z9@MtuY*zoAs&jXr>b~y(z32CzLp+`iGtAffe)`*%IzLv{KRdspJ?!}Mr8lR4R9Jm| zO1$<m>(mmv!~8~f4KKd_d2~wQljD4U->eT3TAz7tv1C~N%={G2huW(iA3i?q){I@u zn<xHw<=4-5re>$gNpGoXwc%dNYj1wNT=(g_1^<~B2Isyn{n_#|eA$_^QDwa<_FLU< zx`!XHpL0|9w(Xl8Q+Br>KFn`F*(g6Z=+Sn`ujy;;!hJRwuhxI|1M1BDc`;9p+s(YV z^;Z6rv;6W_7ODHYQf~*ZduIA|-xTc?r`JvW_*wH^ob3PNwCg|RzqL%+?SA_4@$%&{ zcWbM>m`t_5O8n}5qZ#zSPObNJezMfZtEI~%<!66iw`I4{zh$o~)~06OUQzz6uC{wu zw`TF<Yt{Rf@VM?hc;Ta^rt_4vw{4myudHpa`}SVb^U|7cqLF6Z=ii%%|6<S*5_ooY zxmjSHx7+0Q-W`>0<(L1~+$xRwmhv@w$JrT0rN<xEADc3BS*uF@+)Y>BecChebWqsO zs+T>t{lfn9nP0M8Z_Se19=Rs{-s9xYx8_B^3SD-rw(s_;`Hvs#zP`S?(A08!jfJ%Q zs+(70r{CK7?ZWwgnkV&_+^L+k^=w_8_^~S+lP%9oU}>o=ay<3QAh%|()xKM5$rjtJ z?w!c;h+o;a-fG#I!mA(Gl%K5&Jf-q8^|{JU_gy=UW=%<*(w_U|Rnp##H%zR}O4C8% zv3_RV)#qKF`@&@NzulR%#%_Pj*3`edY9<$-o*uRB;<ebIu<KIy`d^+8YHQ4W;&;UD z%KZD=W=qS>xmsLPQ<vDLqHtz%uTR~&*FI6cX_KnT-*%gSkSX<fT=r(2x&Is!&eF|! zk+T0CPYG;WcP0KA`;uDqhaH^fcS?ROzM5-lc>2eUJ=^9#Rh$2KTig7{pSHYT5Fa7i zZ+$;D)oE_#?nF1?Z{L@zC~TIw6nXp2^X+=}9o7m4!9oJhPP&D~uH1is|3(T=>EFns zCcS01e#Dgi;n%E=FL`=sjhtHH*+SOqf%=(uN;WpBy?UM{9lgnF-}_!&*Z5m?$ClOR zMV@%EDl~R(bXu+WqtlwJZ|UxKKb7)d@3;8Z=iA@fxqW^9_stYb^8-B|4l~p*?|8N6 zrZwl+tA~2mYzaAT@{TKI@5QS+-|k6#J2J)a=IM1)p1k#}t2_2qFZ#@@hswF;N;Vs< z<~>_w^>xEe;Y;fd@0@UT?u^KFznrUc?N5JAFWOu##3s3Sby38vdiLvvz1H`yKA)C( zXJ_R3_TaE<(s7lq3^iAm`QAF88TIOXRPDMMOZ4ntD{kCye{zF?f1ls)jo-gcU3d0f zLUjGY{1o>OyOM47mQ}6uzO8>|+qWe>C+j|5IM3%7S^6eC?asGNyCxT`p7!<ir^|01 z%%5+hpLX-wl)DpW?@DwlU$$<3|G(JU$xoMWwEp(tXR7zDe6#TR(Z^I3o`)XaY`0zI zWOdNAd$Mv|UprLRpMLgU#?<iqbFl;-PL9th(UWFxTT|Tq>Ie7io`>F&vb$?eZ@J&F zCa&{!ck-z}`K30!s&?v<OLPwZzO!(??2JpE6&37nuWSFiv(xqN>y#~<%RHCa@7xxb zxWc!leCCIkFYE2XeS*%<zV&9OYGke6jU4yN7@w~@Q||=r-Ta|Z<@?DOa~H+??mS`m zS~b^x?!|>^<{m{p-M_x3?|u6!#laht7yqh>|J*2Sbj$OH<0NDAoBt{$WB)$8p|U+c z@c)vYbqDJUkCjh(E!!x6ZBg%82^CAzlb74-w&|wIPf|a#<L&lTlbyT6XYuc@PAL7e zuBXp>ep~(OzWR->cjH&}-QRUGV#dDt{=2(5?ZajL7Y9e>Tiqz*NclVO&xsjE@qR_` zE`00_o+keOko%-N#*51n>l9D!Hoo2aSMS6N%TmRY%u?6(M!5-3h}C>9&hRbK-sj~M zJ^OtVFV<RI`+R2AyQ<%jHcPaA&nP`*w_fY_tG16SsXK2!+_gS>@tuW{e{U_f)cmvM z)z0@O%gzL^HtP1AXL3~H*w2!y&mK!%xjE_5N~v|<CrBPC%kg@i{NsCJb7{87bx+Ah z+hX#|mu*hbp8a`F&%Sgv&v$n>yel>S6}Q7+vGbd(>AX{8^V2`i4*eK2<5~Et{NSs5 zbykO8j{f#N^yYQ5oW-5eA?N>YGEB{zWi+vR#~t>~8!bzHZ5L*}7v_EaH!<}6{dA$b zDd8c7TV&_4J8+k(*G#y$`g8WqvQrh0A69LTTV6Ap<%zn{t%Wf@H_w(&x}CP=@}{uk z^*4=IZ@Pc-N9kYlMV?HPrks4)9eQ)QpJrR3T-esqys-DZ0l)XII%j@a$FsKN)VYhN z`|WcAo{NS?zd!qA^|SXYUhP@sXnp414wfgMXWGbQC_c@*QLtCscg1BBMo%yInjbsk zEf>}VnVtMy5t<)!y#8isu+YPYpY~r{FjsAsio)rq`=Y1*jWF9E@+*q({Hynq@6QQ% z9;M06yu~+Y{p^dyr=>UlY;{plV33uX-tgw!uVSHfGp~jpxo@;^t{JCCP*{(YUVYs) zf3>{1MlUONoLh4HN4VcjncN-cu3yU8apdYG8}01!d$ZLPJU>NC`tD%UeEsA6p=ne6 z9u!2&pS%^`SZ}#{|BU**iP2y0t|&KKQJggCZRlR{)IV8v+?t;=+fKjp*s1LF|Cp*m z^OT2$*>}(0nDr!o)hF@vPhGjWLKAkUe|`QoGP3&Uio-$Y@((}N_buAX`S!~C`tVb+ zO`gu{x2siVOk!XA@ju7`KXqz0YyID!X>Px`H+a=HJ<plbjm~j;+C@+O?{K&*Z|>Fi ztIyv1I;DZ3B*TL7XPBGy@_fHfn>E!REe=wfXs4Wd<IsoBUrj!750~XK6&(q(DNXwF zX^M7=`m!|>O3zQRH7yHEJ?~xg=SX<G+M4U}HoJq{@@!R3`Ubu0nlr;_=9iC}r=RO> z-+pa+$ZQrB&2qI@yUpw8eiQyMdq=LDbx!k?hf@CjFX!AfN<DXce_E;g+uTgM@?2$3 zkD#`NSLb%0U!sz=-M?tJO26056C3ruSM%OZ`1XqL$L+R%f45F~SbyDrr$9l{sq_cJ zk$=r|jm%g1GEG_|_sr7c)5<B|ul5F8ZQkxtR1`M9eb$`)lQ#Xj^1o;0@0}|9=YNXZ zmv*Z1m71sAoF}c3l2%{8n9keo%QR`q=O^K-tm4nSlD)nB;eshU6-pm{oi)W$al40Q z`v1tV_&-+mXWL@br2QS@wq7~6!@XAh*CEqWwHp$97}g~J@P6=R%2OZxbFU`<j_UU| z+F3kzi@(DpBazqAx=E7ne6DN1So8dxWWD-|lgUw>9zj-rtyfj)pURmufjzDCknzip zC#UQ*_PzS}!TpPi-re8Yll!y$=${qB6RelsnVR$2yw>sXwp(fnw}bT3w$%3Ps{LHt zW~lnq>C|rX3+EIrdpk_JWV!x*&Af@dxj!sV8fsSaZLM4zz9eVCjSyS;^a&@OJtr3h zrYhHWKRliub%gVP)GHPhP4(~jsh>K3e3`QPrEiW3qvxs6UDs2;UR}9WF5iFV{7ctL zC+%73YTZ0#A#Zl?@_Qaklct28cx7#*e?G@dWViFFsV~&#uG{Zl<Z=3Wef?LP{TDa= zTO2HO$Ma+CtY`1lcLl2}l>10leck2rZ+6_gC;XRee&)??NO`$){*+DX0h7=F-X7eh zvTdtwYTWgoytgCk{$`(*yy?L-NhREK=V{}Z@6no{HJ80TrP<wXQn_}%|8Cp*Nk%*+ zKP+e6n>wN4z@*5Sn=NMlRJ6mlp7;IqXKB6sEF-p`f|}dUP7kl%X_IR7>~(Nnx_NBZ zS24}Uv!?&uZxXMns_DE`Zqg;k{c&Mxo8EcMwD~u0N@s_B-p4tQ?`WkaAE;h_hgT|Y z*QZBQ7V^k@?VR-c-;{GdExw<9apY%xMAzod-Kk%TPW+$t(Yr41nxba8v)r^#)^T#j zHrS>zy}lhhjpN@Pwt3&1rYK5!?z~m?c#2|duFU*Pg4F@1?k88?eBd3lZqq)+)YgTY zqwMrIm+znQ{nIA#^wgQ}cB@pToch!7IN0jt?qI8*`F<}$>KD64*H4_v`~BRR7j5$= z%S<hr_j~7*hqZ^Tr_Z1Lsj@!()bE_??&q@C&p8LjeU=SccSHX>W7+bU3qS5pX%)XW z>Empfw3YWXosZA=`8n6L@adF?@rP#%*V$_yR$cz~o91WE_tT9;-W*t3cFyys+|TJ# zihXXY?)|U1SlpyeYxVRn`R5Na_g@cv`$naH_sQoB3l=&X-By*kZDlh%{_B!X=b%aJ z&7AwcrLm`NVcr(_{nU%l!|m(h_iS`FzWtZy#l34&&fnPcrn@x3%jS04opaNcmZfdg zx@u#kb@}GZzqcbTxBodVGLN6(2K%4+Yf1$6&G`8;hN*h{>(nogj>-PwWoMWnE`QRC zec?S<*@VS)){Be(F)$QWgiX`@S8}G5dD-)=k&!ZsUn*%h92Ga-u-;PZq`&^(-`twQ z-x-%Zyr=p3zn*7g4GU@Gz1USRSO^*gzF+Wa<#M_0J9hk7x9>5-t;mQ7i=R8s*S=#< zyLs%S`uv*xt*x#5=cGy>_>y~j+grKwb>BAYzq020W_$Y=UqkKTM~@ykdgfgP%_%h> zd~kwqmZjA>{tee}ZhShGgMmTJ3A7eqQ)+jelJUl+?->{v8veFJCVZl^&zw1Q=#a3u zxVZj%Yrce|hYlSoo)ok6xxqer37&Zui+K)AXl-p>JjrJJdy5<P9u6~R=HA}6_t}=q ze!CaEw`dSuKBwrE@uhmEqKBX7|Nj&IMTXhn$&<<c`<@*-)Wp)_Cjp%sCx46|G@^gt z7aKQdR#S|vPTcdS?UDD2l3!#U<k^_(f48>s{E<8LUhy33>2Ie$Ggg~(aumOw5L35X z_vXKk`yS6=pDz2S&wEn2+`V#{TI+)2`SmrYA6&ZqUDo}-SllMt^|dkg14~|Zg+IS~ z`@bsxd+WY^wLj%QKP=y;QU1=lZ{OaBmX^=gzCV5SS6{MR&do`)_dL66x%a)r0$%40 z3=9qDJRC+zd?5gu^NcusEoX1dgroXjWRKTG?6Bc(*8VE%`hQzpx#G?D_595|`>vPs z*jgB$tgE++ka+U@WA%wcPI@O4o_~`)ZX@yL)VF=f4ck-{&aCw=z92sN&Yt%c&zjax zS2=lZAM*n9b{i#s|4(1`J!VMw%yW>5fx$|dk&#B^=C$t`Zj`^hwe__nDB1Vzd(7Y_ zbGMwqv(NtNl;F54<pKvf4*%i<Wv-UUUu*X<Gd#O=(X(#*dj*CU?a1?wJO`7s#Kgt* zBO@XzD(@FEyv@10>+5Y<lh0odCOr7VP(3qtcUkUxYtXtN?1cta(S-e*FO)NE=(ASc z`TD{~>B%+OZn?IKCl`AEx6?m)I{nHy8w;J2@A+iwRZrfo>S8r}<><N2xa7|tmECC< z&INkP8JGOIsq){hx$N0d-pMuzFMilhuGzIbf?+{%{hSnoFFVfj+_tJ-F<1ZWhPjmm zHE#9m^Iw?HapUtSy8EioWxb$i^rSn+CyginNuE^i`)QI&{iG*-e_OZ4SNOZ#KOR0S z(E9rNTa_n!Zp{?uKlS2uZPNaSCPfut^X2*8m@WzoKbw)G{!N<iOMdiyMureRkD|*e z+vBS4sGU5!d6)CYBP#l@%(e*j`+3@|+j#8%|IaG%{zX}nwwH+rzj@8)U37ZQ9QnMt zMc323L*GsFw7Z_0;W<g!xa!}o(n-?csdY0ZO*v5K&BSzOGQZl++DXm7_)=uq)hlBs z#peWkQ=ha)^`!S?8@rQ_cpf*^-YlKG$M*5$-pUUPRL-BiC9cw-C?t?D?~c~zxivZ} zm9Amx^3PR%zF+!(-UK6^*C!VK|9?Y8T(vTb-SE)97a!K_n{42}PVywXiCKTRAVXX1 zoF~kl`z{vCct);yu+aH<vr7G}C$}`i9p=w?GJSH4_R0HUrT-PqzMI8xcJACKvYvWx zttS|YO|CILx%)RC%d=i<g#$J_EmDupeR%wOkkzmCo<)2AIh}r}Ir((Et?9}5e$8sn zNz0d%IMn68cz)hX(rr_^7~>(kcTFnG)4%-LuqWe0dC;@=FE8Kp9Q!s=#ontZXwvU* z65?lMIXMjcpH*@k7M>(yUGk@MisAj&KNqWfKkxOZ<gm*AX-}>O_w#+ro$p;#a^G>y z<I0&eb_~-bnvU*!uwY8xYsFgjO;0vVQMA~+PpaJE)TCY4J$721&#~QNRad9xuXTUk zlh&)}<&3s=WIVbs<@^aoka8`}k1{ro%lJHJPA`ag_WTaVgd?&7-{Q)BBH6w^589V7 z{jWmm$;;E1<w#s>T|C)F>*U`_cN7=Lf19rUGh<TuGM~788NzR6<~@1nS*La~)~L$V zPE&Y+{p2ULn!f{Us)cjcK7Agv?gf8!;w1fZ3)WT^-BmG{w%TWrTDn^8pQ>tP<h}>R z>!<90sv6wgmv}qq-s1f;H%)vwb$Xqhhh+c%Wh(zC7{x5(R#*MmJ4MmL{OpVG@A@bG z2|wkwAm3wCweZ_HGoB=R)>)m*HLhYznXswzwff{e<|k)Qj@i+<?O3G8rzJgpBKwt2 z&R@zim#Jazp&h*({GKl_@T%FAsaE>UQokvEx8uV}&vW?#=M_@lem}mg;$3QV@V7}8 z>l3Y;r&zN2M?U^(woCBg<6tX~!}}lK&-<HY_RdtY_cy2Pw!b%4z1?P=Sif!6|Ifj_ zdH+rFln)69Tiu*&Cois2>2kOXq;YD{x0N?<D$INO`P^M;yYCwoPugQ~vajtePmo^E zoyy+lw@<jWu&exBzUm(T<+o{b?ytPH-?cs0zbMEp*?Rl^f(7+$2^-BLJ#N-NOyoV4 z=lycaexuEm^YeXop8jO6Dchjd=lOEaAK&g7eI7fle$AP(P}(=w)6-;GqT<QTlmFD7 zdhK_r%b4He(<aTWhVNfJwYR^vsV=r|-gM!+(Xun2{MD2WH`DyRYRZx-u|B^~^F8a# z&$idywNTyocdOXjIa5B}tBSex_D`+HGV}S5I;MoKs7rp4e&3^L`IO!J8CH8Z+?Z`+ zx%BevDf&B(FN^tTV~{Fw?QihDFYUHECymntPS01b^!d8^{1TquKRT!Ae}Aq1bL|?r zd0(EW)ZbXpo9p>cH}%Hl4f;#gtSRZ9a=rFT&}@E>$cZnbedAr2*_Ym_{L#E{{$GWY zwv+Z`cfCEcTRQak{hY}CaZV9TMz#9>MRS+d*BhMFU#jwuec73lRV9;*+fL~(xwG)c zOwHpPRZ}~HYrp=_^{i7&{de5ZGjHA|kAwW}r(|YqayV!!wWYY`)N7lSzkcqXY-5yq zusJ!XE$g02>W^pILGNz(o#xd1eg97Ni}d*(o_71pj+QYjF#amA=IQa>L2A?bHXAIv z*EeP3_1BrkEU*0}WxGr~K9xsS@3`Km8UN?-({i<+Cpq8F3A=i8@}vr%T?HE^7~QK` ztG&{<JwbNrrvJwZZtABmoqT<(U3)_9>a5+K?1eX)SO1cql~wY4c@@XCPmlG3?3f?R zOfquM+409bxXpX*(zgO@f>(Xo9c=YKduNu{^4cBeW@?s;UE5^3^s#-+^FJou%lLdG zttx+;{;R*N7-1gURlMWP?M?sQ7fs_i$dsUUOjRL0<?WN?8>?4Ut)CsR&zI@byH`8! z&)RBjb9&n{pMNszw%=2EmYw?b#>dRF+cPFL%$f12T0-x;{mXL6Gj_rg<U@1sFG>Ad z9rD%Q{_2Zw{*Q$wTsL1)?h&?s`*rEAt7?pv7Ek+*75u!PFK~II=ebp{=I-(P8Nc>a z+{7ngytgtJc`_CCPpLFH{4{RPRK;1f6B-x{L>~)HSZ3`RuX{4p`RlgjJnj+Rmsy^u z2ThBU{r6~p+Tj^~UNd*t)}($pVtQ(y!s7M6*Ye)ZND5*qTD|5S&tA>V@n$8H?1U%0 z4ZWRf?y|=@bpKlcy|C576SODA>`lD;JFN72wBdSRrcWnUy%E2(Cphl<U$<-fHU#=_ z$)EJZ#8i{9GQv%LkG@*vEs@*zH8?rmxSnB5%rDA2m2zC|oTnt;hBpg(`hxGR_?@;T z_`^1p`?(R{dwR|V-kh~*({&5}HGT81Zs<Mx>*bWh@WaA4{_CZ3T>RFTG{c;I$)5VQ z*o&VmUwx{5e`Ak+RrsX$<~qOU_2>oHcAM;<uwh=+zH8o>YOepjzI08=_BXpUKU-v7 zKl8%ncX!Y<(RYU?PySOJrncw3Po(dgEq%AxzX=Knd{g^Buk7`c{hO`!-4#jN;avLX z+qAFu!({uTmwmF*blxy+?#w5Tb#LG7a9_@&A1znCZ-&wHCnsm_d3bMM&ZQ5#)YyzG z{M_~~cfIKtroVL0wK*MTX2o?kW?nVywYI;r*Qzf4)ZKfLw`N_{{t-LlNqX=*AEqrz zjEVW5cKS}6Zz8z2v+C=j^IO*Z-+%Svj-4!DFEnoR-nVV*giVn*?9)<}{(hUXTdv;t z@wV@5*3;z<-{Ny$UA|~v$>WC`+V-92Z%_ZCcd9=~Pj1V_Cw~e~zpA+AeOGRl5lcx0 z|Kj({az6d|C%K*X&EhvL=k7gOGwtc?hZ2`(IK;mH`Ef63i2Ct2ftBBXXWZ`0eEm;z za@6#>^EWM7KXq1E%&d#w{pSYw1g+;$VVt>d-+BJ8={sK*Y)JfEQCE@X)~--zck=J1 zjn~=1)tH|6cAa|9(we85M-2YRG;ewD5f>sWZ@J9p?#mUgeWGpmKRjeI|N5r=EAD&0 z*3B^Ri{1COdgjSj`!A||y`OL=ePi#hKbt1*|9G#U&O-b0U2m2f{GJXsW}Dm%tca{_ z&%Z8`BvIGbYMAR2w7;z?<NS{KTWjy;?$tlJyuEMz>`liHd`-Xe?%tEvS3hn&HZ3Z8 z@2$wahKjSzyU!;{fBl)NJpcBtb32N|WYcHMUNC<oDtTAuV|wtjxe*?WHw-vAswZzN zH+Z$WUED{pjeGUu$Rl4CzpA)n(3ANqa8kAE&l4BUubaB*^d{Ne-TL9jujfYY*Q@`f zmXx^XY@OKa^JURr(<_zBW6X={ZoHX0+tY5g(Z|1U7S6w`oO<cM$vZ9P--=)x!k@hU zWIw}+=XuC+^{s2-^;bvQ$8W0A`E8<h-oGgD)T9H4Cwuk#M^4&4@5?UxRl;rCwAHRY zRaLmW{pRPxH<P_h%N^a`N5rVVecyEDd3)jWHNXB8Y@U{zbL6FGoz~*dzVGI2T2nE9 z_GG4NO^|iBee{eTZM*t$`7(jS>Z>1b^ZtG9bjh{z(^cl5$Z&tQEz|yGrLvyy&EpU5 zI@?>Dovcr_@|Jji_FlN`eZ#ZX)7{fbQa8`lbiOlV-LKF0w*5&v&u?wKYtuEy%=vq+ zKW{HItleR?FZ#5Z*{f{tTwZ?pJ-(-0yH}TqFmLFe(6GULXL{IrhRyTXLyupMSocZ! z>c{5jYxO5uo_n8~_3v=!$wcXl^u_BuZsz{eb+)(GI$0e&?e3lUxf3t$7IRno`LnH5 ze%8gi8|){X<^P_zH9j-&TSreG(=Ox1pBI>A89#4-Y`p9E@uXw=2mfB|$>XZpzGc7g z?!fzzS@{(nkIn|SWt-h?m2+S^6!)}2#XmFR+dE0wZ=dc?(LZ^%D%|aO>V3P^?;q6U z<~(6@K5l>JRqyd>d$(BqySyexz#`i^c+&Rke1G3`OtDt>jeouGMeo&*!A6zN2bm|? zEc|s-dYPEu;k=1Pj=MUSr+iuWDB5W5(uwh*vj5Axk}e*RPc;dw4R<Sdi!ZC36wWWJ zuk!QtGDg3Hk($r1pXdAgrcLv7S^WCL77Ph$|145h-hO!e=}em|k5)`sef99ye-%!1 zH@Bav%XGT=Jna16uPWiQ1D@Z~jK6dE>%XG8pV(D?hK2sSe<_c7Pu0&esmH_5?+$CP z$UgO~<#6hHkI&lwFMpe*HEmb&{bOG@|JrMs$#-y~=IMUE>y>|6tm*@&{&!2;zv||{ zN4AlF&25w?PxsiD>b1!*=KZ_ZQ`X<t)}Q&|kNo;m`;{k$zxZ`?O5*gxU*B!^`#Jg8 zl>d`CbFW;pvbR}Lbx(a=;JX)79xghZx_|P&u=BtDM7{Se%$Dw7H7|SfXLkQp^WNX_ zwUcKs4pCRIp7!te;VHcvj_s^F^<n9*%i;Mf;n|ZLWM&#k7Vqf2Jo!#l@2B#UuTmbp z*0fe%|9oBK-IG5euK6F>wuEP5h4ZBJwSmhrnI=tHy;}dwtNqTiAL`}GOfQ<AdgpO% zsEmHh@;6H?jio&uCOughI`^)p-^o`?9z9U`pY9{Q|JnlHSu2GnJpFt)ebSwbUMu^_ zmuAYW3%`GJ)mC4JyxB$K8~vP)-Q|q*c=;wSY-;`I7PCoDuB@r6->Y`g^xDeef>X;D z%X@y}&YqGvt3l=Ixfk`}PtTuv6Lx-g;<bNg<_91BIK%XmsifDgi!4w4vbX${zWO<K z$GO)#JP&VUm@(0cu`=qE=#Qt5`<K1B^!vt?zK794$K3d@-<-Fp>a<F((1ay1hO&LB z6H@$7{rI=v<5RV!>;?YiJx}HI$|FyyJX4!zu<V~g>W{<sm;LdZH|fdw$$zp>y*qL` zb>7}%#oIg`rrGXZwORY*Vd;HsW^(hct}j*Y_dNY1&jhqsFgN+tyqQnt2Tj@+o?e=s zG2zKk-g)z%y<&Ny>HPoR#G>OLGBuyK+xto?h15?w=i^y*{jwRO=P`Bm>FSlilhT*W zk&l~DbbOiK_g<6RFNzdTzCL#4{!AmoKR3PK{;8Yvd<oCOJsB(Rm<UZ!u{25TyHPN= z*m(BU&;Jxx$LHU6-+TLyg|x53KC{*zaW^;UGNdi>b9gtoNHx=c*4z{2DR1>}M%`vn z(eymg%9|WnH)r})?YlmoCam!*n`N_XW`oL7Ve^=L|5Fm*Ghb;j?u-nrD_1LbnJzo) ziG9?u&-$7B1La<W8XKyWk+c5$?wg<H`P@xtf=Xr4tof^_$<O!vY^m(&*)jj}rrxK= zw+KyGawoE~I`sXYE%EEBCan{ia6G(p-z5V(PL2b12{BBQrhL2<fBu*H$NuGafBgU@ zp-rDoYa8ucyit4UW24M<C!+j(ekR?rT{!pYxi8k6zD@t{COjeK>(skPRs6HQdR@C7 z%JgZ*sv6tMib<_g_?}e?Kl)LZR=m99Bj*XHQ=$K>*7^ONSL=I9=(2B)38Uw!4QIZu z7e4*z@u4ZZcjP{+;N6{ks_3S#o%Hl2XWm9-UtQI!qTqRR;$Pp;yWPfjuYTU;<q#Kp zHM44=D-#p1Z`487UnMDS<~yydpZYlj-P>L6d2{=tSDLcFKL<UF+GG0o`}K(Posp4^ zY3Z|SJ$bFoR2_F64$^U7wq{zX->Hh%|4+P<?J<9}VoL1k_gk)<Gt`t_^*K21_y1)j z71wTmt<665I<_qGSboQjY1wIC=d|Z9t*OkrmN@g=Jf{0+U&Lu`y`G-hc_mh}m~G$2 zvX7>+GbRcA5AjMW_c`_c)0!!Xn(zHR{bufaY;1Ks{fBKuz$wvxyHzX|Q`a4`^xQY& zlIOp&?lL})%JcfWEgpw2k2?P~=-Jx4I#2)BdYp>cwmC?soj;`{^KS31uv3*U#3C*E zbNwy9*O;bW`q3Wrj&J?b3q5ffmikXk%>(C0Z@N;qxAKvj?BuiS*>+ejme%U~ymyUC z#(fV<`!(fuk!J7i+_<Ky`JR^{L4MPOi=8L_Z@*vAU|H1Mb8q60uXTqR8NRWapY?j4 z<UZ;37im5Nce&|PKOYWHekaCY!0La>i~X^y?Qy0v)6LVK{<)B*Ud_;8x>t2+aiQzA s`^Jnn_Uojia=z7Hw#JC<%z^*xeY|{Z&rUJRgGQb_UHx3vIVCg!0A4t5V*mgE literal 0 HcmV?d00001 diff --git a/exercices/02-correction-gamma/readme.md b/exercices/02-correction-gamma/readme.md new file mode 100644 index 0000000..9989119 --- /dev/null +++ b/exercices/02-correction-gamma/readme.md @@ -0,0 +1,179 @@ +# Kernel grid en deux dimensions + +[[_TOC_]] + +Le but de cet exercice est que vous arriver à travailler avec une grille 2D de block et threads sur GPU. +En effet, la limite de blocks que vous pouvez avoir sur la direction x est de 2'147'483'647. +Si vous souhaitez aller au-dela de cette limite, ceci même pour traiter de données en 1D, vous deverez utiliser les autres dimension à disposition. + +Ce qu'il faut savoir c'est que: +- le nombre maximum de blocks en dim x est 2'147'483'647 +- la taille maximum d'un block en dim x est 1'024 +- le nombre maximum de blocks en dim y est 65'535 +- la taille maximum d'un block en dim y est 1'024 +- le nombre maximum de blocks en dim z est 65'535 +- la taille maximum d'un block en dim z est 64 + +Le nombre maximum de threads par block est de 1'024. + +Ceci en date de l'exercice et peut varier en fonction de compute capability de CUDA. +La compute capability de CUDA définit l'ensemble d'attribut que vous avez avec votre device. +Que ce soit hardware ou software. +Ceci dépend de la génération du GPU utilisé. + +Pour cet exercice, il ne sera pas nécessaire de pousser ces limites en terme de dimension sur le GPU. +Mais il faut être capable d'exploiter les dimensions offerte par CUDA pour: +- aller au dela de la limite 2'147'483'647 si nécessaire +- être capable de travailler aisément sur une structure régulière en 2 ou 3D + +Rappelez vous également que les GPU on une mémoire limitée. +Jetez un oeil aux [spécifications des machines à l'UniGE](https://doc.eresearch.unige.ch/hpc/hpc_clusters#for_advanced_users) ou de votre [propore GPU](https://developer.nvidia.com/cuda-gpus). + +## Exécuter un kernel sur une grille 2D + +Pour exécuter un kernel 2D, cela se fait fondamentalement comme une grille 1D: avec les paramètre d'exécution du kernel (`my_kernel<<<GRID_SIZE,BLOCK_SIZE>>>`). +Vous avez probablement passé de simple entier lors de la série précédente. +Mais pour pouvoir utiliser des dimensions supérieur il faut instancier un `dim3`. +Un `dim3` vous permet de spécifier les tailles en `x`, `y` et `z` (dans cet ordre), comme par exemple: +```c +const dim3 BLOCK_SIZE = dim3(3, 2); +``` +où je définis un grille de taille 3 x 2 (= 6 blocks). +Notez que le `dim3` n'est pas une erreur et est équivalent à: +```c +const dim3 BLOCK_SIZE = dim3(3, 2, 1); +``` +Vous pouvez faire de même avec la taille des blocks: +```c +const dim3 GRID_SIZE = dim3(4, 3); +``` +et lancer le kernel de la sorte: +```c +my_kernel<<<GRID_SIZE, BLOCK_SIZE>>>(...); +``` + +Vous pouvez ensuite utiliser ces dimensions dans votre kernel, comme en 1D: +```c +int rows = blockIdx.y*blockDim.y + threadIdx.y; +int cols = blockIdx.x*blockDim.x + threadIdx.x; +``` + +Si la notion grille 2D n'est pas claire, voici un schéma pour vous aider : + + + +où, probablement, on a: +```c +const dim3 BLOCK_SIZE = dim3(3, 3); +const dim3 GRID_SIZE = dim3(3, 3); +``` + +## Exercice 1: addition de vecteurs + +Adaptez l'exercice de la série de l'addition de vecteurs de manière à ce que vos vecteurs soient projetés sur une kernel grid en 2D en place d'une grille en 1D. +Imaginez que les vecteurs sont projeté rangée par rangée ou colone par colone. + +C'est-à-dire que vous passerez d'une répartition sur une grille 1D comme: + + + +à une répartition sur une grille 2D comme: + + + +## Exercice 2: correction de luminosité d'une image + +Nous allons à présent utliser la kernel grid 2D pour travailler "naturellement" avec des données en 2D. +Nous appliquerons ceci avec le réhaussement d'une image. +Notez que pour des raisons de simplicité, l'image ne sera qu'une simple matrice d'entiers. +Nous ne lirons pas d'image au format PNG, JPG, ou autre format existant. + +(Vous avez vu, lors du cours de VISNUM ???), que l'on obtient une bonne correction de la luminosité +en appliquant une transformation non-linéaire, appelée [correction gamma](https://en.wikipedia.org/wiki/Gamma_correction). + +Cette fonction dépend d'un paramètre nommé gamma, et voici à quoi ressemble cette transformation pour quelques valeurs de gamma choisie sur des niveau de gris: + + +Attention sur cette figure les `L` sont les différent niveau de gris or les niveaux de gris sont souvent normalisé entre 0 (noir) et 1 (blanc) dans les implémentation. + +Voici un pseudo-code illustrant l'application de la transformation gamma sur une image: +```python +# habituellement un pixel est codé sur un unsigned int 8, +# un entier de 8 bits (noir: 0 -> blanc: 255) +def func_gamma(img, gamma): + X,Y = dim(img) + G = zeros(X,Y) + for i in X: + for j in Y: + pixel_norm = img[i,j].as_double()/255.0 + new_pixel = 255 * pow(pixel_norm, gamma) + G[i,j] <- new_pixel.as_uint8() + return G +``` + +### Travail à réaliser + +Implémenter la transformation gamma sur GPU. +Il n'y a pas besoin de viser les performances pour cet exercice. +Assurez-vous surtout que vous ayez bien compris le modèle de programmation CUDA (mouvement mémoire, exécution de kernels et synchronization). + +### Lecture de l'image + +Pour l'image, pas besoin de lire une vrai image. +Générez simplement une matrice d'entiers en 2D contenant uniquement de pixels en niveau de gris. +Ce sont génàralement des entiers allant de 0 à 255. +Cette image doit être générée sur le host et copiée sur le device. + +Attention, à la connaissance de l'auteur, CUDA ne support pas les entiers non signé sur 8 bits. +Mais comme ce n'est pas très important pour cet exercice, vous pouvez utiliser de simple entiers non +signés (`unsigned int`). Pensez à vos conversions de type pour le calcul dans votre fonction de transformation. + +Voici un exemple d'image qui génère un dégradé de gris. +Mais vous êtes libre de tester avec la matrice qui vous plait. +Encore, pour cet exercice, + +```c +// non tested (bad teacher, bad...), but should be fine +int* gray_Scale(int n, int m) { + int n_pixels = n/m; + char *img = malloc(n_pixels); + if (!img) return NULL; + + int extra_pix = n_pixels % 255; + int per_gray = n_pixels / 255; + int g = 0; + while (i < count) { + for (int k = 0; k < per_gray; ++k) { + img[i] = g; + i++; + } + + if (extra_pix > 0) { + img[i] = g; + i++; + extra_pix--; + } + + g++; + } + return img; +} +``` + +Comparez également le résultat obtenu par votre code GPU avec une implémentation sur CPU. + +Si vous souhaitez **vraiment** lire et écrire une image sur CPU en **C++**, sachez que [openimageio (OIO)](https://sites.google.com/site/openimageio/home) est disponible sous forme de module sur les clusters: + +``` +OpenImageIO: OpenImageIO/1.7.17 + +Description: + OpenImageIO is a library for reading and writing images, and a bunch of related + classes, utilities, and applications. + +You will need to load all module(s) on any one of the lines below before the +"OpenImageIO/1.7.17" module is available to load. + + icc/2017.1.132-GCC-6.3.0-2.27 impi/2017.1.132 + ifort/2017.1.132-GCC-6.3.0-2.27 impi/2017.1.132 +``` -- GitLab