From e633d4fb58d5637bad58a5ca060aedb3d5f4b9e4 Mon Sep 17 00:00:00 2001 From: Erik Traff Date: Thu, 20 Oct 2022 23:45:31 +0200 Subject: [PATCH] Initial commit with code --- .gitignore | 8 + Makefile | 31 ++ README.md | 62 ++- definitions.h | 52 +++ figures/cg_running_time.png | Bin 0 -> 68584 bytes figures/result.pdf | Bin 0 -> 526621 bytes figures/result.png | Bin 0 -> 253296 bytes figures/running_time.png | Bin 0 -> 66970 bytes figures/speedup.png | Bin 0 -> 19178 bytes gpu_definitions.c | 195 ++++++++ gpu_definitions.h | 88 ++++ local_matrix.c | 319 +++++++++++++ local_matrix.h | 21 + plot_timings.m | 184 ++++++++ setup_gbar_env.sh | 7 + stencil_assembly.c | 503 +++++++++++++++++++++ stencil_assembly.h | 55 +++ stencil_grid_utility.c | 164 +++++++ stencil_grid_utility.h | 17 + stencil_methods.c | 862 ++++++++++++++++++++++++++++++++++++ stencil_methods.h | 183 ++++++++ stencil_optimization.c | 598 +++++++++++++++++++++++++ stencil_optimization.h | 22 + stencil_solvers.c | 457 +++++++++++++++++++ stencil_solvers.h | 58 +++ stencil_utility.h | 76 ++++ top3d.c | 88 ++++ 27 files changed, 4049 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 definitions.h create mode 100644 figures/cg_running_time.png create mode 100644 figures/result.pdf create mode 100644 figures/result.png create mode 100644 figures/running_time.png create mode 100644 figures/speedup.png create mode 100644 gpu_definitions.c create mode 100644 gpu_definitions.h create mode 100644 local_matrix.c create mode 100644 local_matrix.h create mode 100644 plot_timings.m create mode 100644 setup_gbar_env.sh create mode 100644 stencil_assembly.c create mode 100644 stencil_assembly.h create mode 100644 stencil_grid_utility.c create mode 100644 stencil_grid_utility.h create mode 100644 stencil_methods.c create mode 100644 stencil_methods.h create mode 100644 stencil_optimization.c create mode 100644 stencil_optimization.h create mode 100644 stencil_solvers.c create mode 100644 stencil_solvers.h create mode 100644 stencil_utility.h create mode 100644 top3d.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e648b6c --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.o +*.json +*.vtu +*.txt + +benchmark +test_stencil_methods +top3d \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e09ba9b --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +CFLAGS = -Wall -g -mp=gpu -gpu=cc80 -mp=noautopar -Msafeptr -march=native -O4 -mavx -mavx2 #-Minfo +DEFS = -DDTU_HPC +LIBS = -lcholmod -lm -lsuitesparseconfig -lcxsparse +INCL = "" + +ifdef OWN_CHOLMOD +LIBS += -L$(HOME)/SuiteSparse/SuiteSparse-5.10.1/lib -L/usr/lib64 -lopenblaso-r0.3.3 +INCL += -I$(HOME)/SuiteSparse/SuiteSparse-5.10.1/include/ +$(info Using custom suite-sparse) +else +LIBS += -L"/appl/SuiteSparse/5.1.2-sl73/lib/" -L"/appl/OpenBLAS/0.2.20/XeonGold6226R/gcc-6.4.0/lib" -lopenblas +INCL += -I"/appl/SuiteSparse/5.1.2-sl73/include/" +$(info Using old gbar suite-sparse) +endif + +$(info LIBS are $(LIBS)) +CC = nvc +CXX = g++ + +OBJ = stencil_methods.o stencil_assembly.o stencil_solvers.o stencil_grid_utility.o stencil_optimization.o local_matrix.o gpu_definitions.o + +all: top3d + +top3d: top3d.c $(OBJ) + $(CC) -std=c11 $(CFLAGS) -o $@ $^ $(INCL) $(DEFS) $(LIBS) + +%.o: %.c definitions.h + $(CC) -std=c11 $(CFLAGS) -o $@ -c $< $(INCL) $(DEFS) + +clean: + -rm -f top3dmgcg_matrixfree top3dmgcg_eightColored benchmark test_stencil_methods core top3d *.core *.o diff --git a/README.md b/README.md index 86c5287..a000967 100644 --- a/README.md +++ b/README.md @@ -1 +1,61 @@ -# MatrixFreeOpenmpGPU \ No newline at end of file +# GPU Accelerated Topology Optimisation Based on OpenMP Target Offloading +This repository contains an implementation of a topology optimisation solver for linear elastic compliance minimisation in three dimensions. The implementation is based on OpenMP target offloading to one GPU. + +## Linear MBB Beam Example +The result after 20 design iterations can be seen in the folloowing figure. +

+ +

+ +## Compilation +Even though OpenMP offloading to GPUs is supported by a wide range of compilers such as LLVM/Clang, ROCm, ICPC, NVC, and GCC, the compilers do not support the same subset of the OpenMP specification. We used NVIDIA's NVC compiler from the NVIDIA HPC SDK. The OpenMP directives may need to be adjusted if you choose to use another compiler. +
+ +### Dependencies +We used the following versions of the `cholmod` library and the `nvc` compiler. + +| **Pachage** | **Version** | **Installation** | +| :--- | :--- | :--- | +| `SuiteSparse/CHOLMOD` | 5.1.2 | [See Github release notes](https://github.com/DrTimothyAldenDavis/SuiteSparse/releases/tag/v5.1.2) | +| `nvhpc`| 22.5 | [NVIDIA HPC SDK](https://developer.nvidia.com/nvidia-hpc-sdk-releases)| +| `CUDA` | 11.1 | [CUDA Toolkit 11.1.0](https://developer.nvidia.com/cuda-11.1.0-download-archive?target_os=Linux) | + +To load the dependencies, you may adjust the module names in `setup_gbar_env.sh`. To load the modules and update `LD_LIBRARY_PATH`, run the following command. +```bash +$ source setup_gbar_env.sh +``` + +### Compiling the Project +After loading the modules and updating the dynamic link loader path, you may simply compile the project with +```bash +$ make +``` +Note that the project has been tuned for an NVIDIA Tesla A100 GPU which has compute capability `-gpu=cc80`. For an NVIDIA Tesla V100, the compute capability must be adjusted to `-gpu=cc70`. +## Running the Code + +To run 20 iterations of the code on a grid of 128 times 64 times 64 voxels and save the result you may use the following commands: +```bash +$ export OMP_NUM_THREADS=12 +$ export OMP_TARGET_OFFLOAD=MANDATORY +$ export CUDA_VISIBLE_DEVICES=0 +$ ./top3d -x 16 -y 8 -z 8 -l 4 -w 1 +``` +In the above example, we specify that we wish to use four levels in the multi-grid preconditioner with `-l 4`. Therefore we must divide the domain size by 2^l-1 to find the size of the coarsest grid which the application takes as input. + +### Inputs and Options +The following table includes a list of all the available options. + +| **Option** | **Description** | **Default Value** | +| :--- | :--- | ---: | +| -x | The number of elements in the x-dimension on the coarsest grid. | 12 | +| -y | The number of elements in the y-dimension on the coarsest grid. | 6 | +| -z | The number of elements in the z-dimension on the coarsest grid. | 6 | +| -f | Volume fraction | 0.20 | +| -r | Filter radius in elements | 1.5 | +| -i | Number of design iterations | 20 | +| -v | Verbose mode. Select 0 to disable. Set to 1 to enable. Set to 2 to get detailed information. | 0 | +| -l | Number of layers in multigrid. | 4 | +| -w | Write result to `.vtu` file by setting `-w 1`. | 0 | + +## Authorship +This code has been developed by Erik Albert Träff in collaboration with Anton Rydahl under the supervision of Niels Aage, Ole Signmund, and Sven Karlsson. diff --git a/definitions.h b/definitions.h new file mode 100644 index 0000000..ac7119d --- /dev/null +++ b/definitions.h @@ -0,0 +1,52 @@ +#pragma once + +#include +#include +#include +#include +#include + +#define __force_inline __attribute__((always_inline)) +#define __force_unroll __attribute__((optimize("unroll-loops"))) +#define __alignBound 32 + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) > (b) ? (b) : (a)) + +// define stencil sizes at compile time +#define STENCIL_SIZE_Y 8 +// The code will not work if STENCIL_SIZE_X and STENCIL_SIZE_Z are not equal to one! +#define STENCIL_SIZE_X 1 +#define STENCIL_SIZE_Z 1 + +#define number_of_matrix_free_levels 2 + +typedef double MTYPE; +typedef double STYPE; +typedef float CTYPE; + +typedef float DTYPE; // design type, for element denseties, gradients and such. + +struct FixedDofs { + uint_fast32_t n; + uint_fast32_t *idx; +}; + +struct gridContext { + double E0; + double Emin; + double nu; + double elementSizeX; + double elementSizeY; + double elementSizeZ; + uint_fast32_t nelx; + uint_fast32_t nely; + uint_fast32_t nelz; + uint_fast32_t wrapx; + uint_fast32_t wrapy; + uint_fast32_t wrapz; + double penal; + MTYPE **precomputedKE; + + struct FixedDofs *fixedDofs; +}; diff --git a/figures/cg_running_time.png b/figures/cg_running_time.png new file mode 100644 index 0000000000000000000000000000000000000000..e77abb4be1154b4b8e64f4aa7ddfa95b0f7d60ed GIT binary patch literal 68584 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%0DB=;=7&yL-2%a=Z-*nB(YbaEUng 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 GPUA$NtJ5r+kV2$6LK9f1~(Iz>O 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 SFGiv6rjcZOclY%Ay!ivZf96a8 literal 0 HcmV?d00001 diff --git a/figures/result.png b/figures/result.png new file mode 100644 index 0000000000000000000000000000000000000000..565b0ab3b0696ba6745480de43e77504d21e04ae GIT binary patch literal 253296 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êpUM#~5WbawEhv}Ad-{LQCzy4FN-!P9o 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 literal 0 HcmV?d00001 diff --git a/figures/running_time.png b/figures/running_time.png new file mode 100644 index 0000000000000000000000000000000000000000..a15fd045d4d669787d02b229d5374486972a2f4b GIT binary patch literal 66970 zcmd43bySsWyD$6ziin7SltFhXjf8+G(nzDUNVjx@0xBUXB_J&&-HjpwQqm2Aba%(O zrfa|N9%t`!#yIEu{yB3j*K)y(=egs$esxcO1$l|9*f+5e1i30D`A7*tFc#nsB^EmT zM8tK{4E}S;UP?~<(i{faB__ceq|NgPLWxK{dZ6MQzcTKmrM!Q1Z{w}S8%AZq<;>Iy z5^TZ;NusKm>BNtgGBv-b-`Vx-*GSV~D-BT1Pt{-Vn~V4BxnJRlQTn?~cpXT0y35Oc+TP$#+~#-X;ob~D zyoUOj7?vp->lpq&zej&sL4*1cRocY@8;QTamb{`j75w+*p~MZ}$o{^9ip|?k@b4?c zG>|J!e_!ESg8V=5hI(0oh%cVf`}X$s-i#+)vF#L|2M@v)wTt&Vual5OM@1Q#m{h#{ z^CNGVCU^N7u_@U}IA!0B9WyhtJ~9k3Z8kQx)rIa=pMLl^ZdBUNO5cgr)X~Xn z+2O5q-CY{g^^%j5t94jb^YFOu@70&7*xA|X>FLSK%ga0**rS%O>?W`EVl99>ej__NY5mVlY?J*uWrdjKWA;berbU!m5v-U=M$KdU|VX z>&|FqCSy(b=*zvmJ$`@2@j9Of= z{_Kba!66qK`ug>O+1l}X{SzIWo7^T7H7*vs)mNtbo)L;)zJM-w7CI~OPM5$}0E2i< za{iIHIBbuXm1Bq7^XDhqUEST?lV0cdeO~dIIlYUB=zWE838AE+c~}-j=fxx!$GbY+ z6nOda;K@9*$eM=BH;E#NVDj&-=c@ET(sht|39>DaW^mT8H(^6II^&&iL|=lI#DY)+V^ z#<$X$_EX_9b<;V zWZHCUUE!nd2?|O)derjF4{mC>xOsRu_QdJwvuE%d*;r1)u21(J92_jyIJmfaCs7Zt z?YWNC(>6JLe}Dg(w!8d_TgUMc5nLWe_5?MRm4_dglx=NoTlDn{oneF0JPx8ve7rtU zJD9IKsqud3Yksmwgu$WU<~H7^>Eo$0=EUGB0wD z<~>pCR$WnnG^`94!}gAjiDB&LifjJk|0u$Go&{`GHY>B{U@|{HKe&wW_uud8 z)NE{Swsv(zkI9RRH$4$KCA@we>Mo!AfsN}F!;?>1m9|ao?JM8>uE4#Uo0)}=h?|)$ z^`y(Rn)AkW7;uVH<0p2Bc%7ZVb}Y9XecTmkzq8P-nxhsrsC6g0)nKC9$$E3T>G1II z8ijC;?QB3;SXdwPDt0wb1ihSDVVvM1<_lxvW0m>fq@v_UwtkK^7CgI#KBI68q46*!yYROpFh97K3+`%vr0ljLPSJ&JpVvZF)T5W z!lRKQuEU6(6#W$?7wXYFFremn%~vM+4%^cL@2+{Tjjxw-)N+@Ctn^?6Dr{%5quV0m zCA|{w>edOtK((&h85zyNeCFxY3OH~4j^#3zp4k5N>sNu(`UDi}2!UGYW(>eKdW`DTE7c5_~tx3KOrKdx% zu&^kV;R!LaM#{?97e#3NS+}9}9q+HVSuM?V#HHnhTOc_(Ion%XKfAih3krq`Uo=DE z{rU4JGc&X2@oKrS#}O3egTupC-e_oMcQnf^ekDD?$H#|_n6Fb?Wiy2yxI0MEzg~ZS zc6NG9A>yf}sQ94Faq64jq+LC8XI5Y95-!2x8T*xwo#wn5M+enOiR%H(osuCX9CL3 z((*DJD=RfMb&H}9th#|O&ydjgc$ibxQfXDy$ntWh=g+AkTD7VjEun6Ri;KIsxR{!n z8W_x6qHw453VC~t0vARmI!Iq%e@2&k0q6bu_i)#a_V%)}vR|^Yva+)U+z$%E!eF7o zEEt-Ym^^;`2f4nA`wQgX15=8{Nau1qIK><6$&dKRYHPsrykU)|=Ey5>GZSkH! z1e@Rxc7;UnZI`vN%IxfH=nuZW7dUCnot>SbqPmF~_?8etOM45`A3AWe%7%}RZ+~OM zJIb}~;NXDt)-4RAQvC_GX(ddhjgwObgVk_RdPT)hL&NW}N;~LPv^>{+zHaR7(5{Zb zx}`nMpyT1@hU&>cOABwX;Vgvv_My|Rqmxs;^QOM2C^GKdp~rrkjO?yfg=ptfSU1rl zBYczY7zoq`A+NKV++4O;6H7}neEg~DX(cr^dNJ_>AJMa6H6W;ybJ84o8Dn(zd>ki*^%@+@^*v)qy9vp;Xl$4bT+x+&fuNOh! z9wkqCN)6khpy;7D_+Muj$kmi^DjI~5UPuj*PZVaG4++SxKl@m6+v{|9@DlEAg*LW9 zsNhgX-vtKJJPhX|#nIKBbXXoh6P1_mOn&$lmrQ^V3VN!pxy=Ljuq=S<0>QN;V z!E^Hu2a2IBlOFryFt+#j`NLE#EG<)0Q>EGhhw4kpZGw0I<=)CL zqVV)-Ol&MuC3|2KwQ-nohP>1+0dZhcVPPTidwu;$Vq}v(hf8Mf&q$VZ@(v6H>i5iZ zJ_B*49QFLQf!w&2odNm7+qiGF%IaKqvuAdCdX#Jl0Zwx9@kMI{a)(GQN)9PG3z28_ z(~7iy`NE3WI6BfdPp_=B8*tK9SI*DQs;a1n%3wSw+uslju2WZ{yV?)%i1r(l<2KK- z=g*(dtjFtm9{PQ1nctS;)1{!Gc=Du+m~V8tnVL9|giYfSxmBt4WF3$BfW44sy5&&8 z17^u8V}QJ=?(Xii#vG(LJ=SttV(+o*qr%m4HN?;Kl5X6*8P1{t72UpY=tjL^e~+(4 z>TNnt!f-qO+rcv*pm0Rgzn~Cu{F?rR+S-6K+T<#w8}+btt|W(fWbe(7?ZG8o)stES!VH z@Nfcz@$TK|lhoHLtq8lrlFIOV913BrGNAHl9({Or+l^^Fy+QQ^}W9_{pQ zj<&ssWG3eW=Cts#rIHfvo`{O3u7R9a9>b z)S;oLt@(z7e{3s@v^N$XYq`=oOU(!b&Ag~lJuXdiadT^vPxJEFsU=Q0(p0-F*TVZ# zaa!VmP30J|@^``Y8VqDc-6!-;L!5G09%bziV9!3rKRB3;U0v(Hk{@QsCydm22!=GL z8V`?*j0_C{OL;6V?y=J?p%ix$>JB_-(LZgN6xmxFAD!lsSm2%e`0=KUjErkla&mIK zPQm{AJ025m>$Surjy5)-X1vM*E5!T)0^vE^i;IghcJ$+V z^z!kNce!3pe+NWN62kc`#QNzSD`0X1ya^QZp z*qf2A!D8I;u@smeY?V6C(~t4HP=_URnfmFaC&~KfGB*Ikgl8!6KOqhZ2}!)~RwhZS z&l&6J=;(2@(>*xI@ct_hm+&qxI&5t0mcW6VL53MDWR8Kt2fs0TX1O^yUj7KWk#;Mn z??t3!px}7I=TaDpGZ>4iD_{RKhX~g39NnoMFvI24E|N@9=iuQ{wYiJ_$~%aK)2uHO z@CXZ8ZgyxMZqbMX{=-sTnUvD=i^y-=%H7>v`y5MX52`ZPi{9HpNx{qY$j9s9fqjqw zeNEQtpslsl)Y4f30SNbjZH&))Vyv&veyNX%GgQmo-X2d<=lhi3 z%5IDSa1#XnkBYk1FL*dyft7Z4n*W+N{5c}w?tOKpJI&qqfhDO`Jb8XrR~Kcs#SL8qdBrv?;%~j$UJ+haFi!)v~ z%CrHsf9x6nwMTpJFhQw{oqFNc`r3FkpHX`ZaXAx@`0Vr1;bFL?`T6;J&r=OsO39mV z8*lL28UW9BbrsN-Y26D@13b|Qqjz$!S#CWkFC*i&Iqg?k>Ts$2u?|47mI>D@=gYj5 zF4eTPKUYV~XYG%oIbZz1xf3l2h!vi2gUcw>kWjK;>2Qz$xq0*Ecl|;O%p}GDoH)sI zC#N41|DHrjU)rgTtc6u|RaNn|I|+hLRxT`Xu@b~lWF)pgo{-Rpi0y;TKY~tcu#wRl zpz)^@r>@rvIjzM@fBRfrD7}}KAtk)|h!-=9s?Zm9BeT6B#Up^j%n##hhncY$cI)cHJ0~k9&9vTL(>B? z1Dt5td1!~UbteMfwA^aE%5nAM3UgFc6zv<2<2|V+N5dc(9qCOQYMwgwewm}$gY)aZ*05^4xZaSBox<%<(nEJ{1dkQ z=A3x{8@Z~=#&eCnA0ZTXNBLiU*n&DX^GbpZ7e8}sD(Av@^FC-1+uPf1EiIuI$^c;b z0lfk=yTPq3++(4urZ%^}e)n)EXVUZdJxVcr8Enahc>~XFINr z(9OFP0>uO*UmX_K4WkBE4x~5zH-6DBm)Ccz?XP= zji6)&b_axXji*Y40BiJn`_|aV2=^9mdv9+<+pMtX$pNt1`>s1!moJ+Z-ff1<3Z@Vd zhTU6KRMgNQ+H*H?2t=23nP>yeK9yU%$UOmp9zLhCq4%YrDy-M;li#m<6zHYEQaHT?KNPfb0&4fOYLYql>-88EBlV`tVocj~;( zJ(ZOs;u$i~y?uNhYH7vi=dS~292+11^XHFYHLLl>NG~?vDIV_b!MFKs7klVzJKnAh zfv8t#JNr|9yqW+u{rt*G{Kt>3zZ*c(!VUF*{P=NKqKLYS@6Xe*8Hu5rfVi-zZW6C8 zu#w!jA*BA(+d_r8$O9i19yU~GUETB}nZ!~0td6-b1TziQuDRRXZZ$;nw}F$`Es zSxwCmgge(LpybifBrcfAub}`{XjuV2dH4{n`gW{|wKYn4u?;ux1~P0lRsoDM7;1Xo zzyJ&#$g?nIAf*Od_|~ybNIjP!US=a+L-dS|C9wAg9@|_pyrxSBf@)-ZygR4@@7}$G z-FErH>-nz4-q{wouhWwgbPNolO20LryG4bC!!<5;&!11twneu-qK{adpDzbVi1;mM zJg1>FJb=0Z+yOf1Q6Nii_wxf249tgm2~EvWKl!JP_INpS&-^kX za(0lKm9+@9`bna&+~d}#r;+PH3i--UGc(0sS04f#WlPpn6c6N5a@@fXZepFRe0lacMz>Q_sY^YHogRzYc_%ID))lT`jxw%#755a>_kN^kb*C=XtfDnH1;>F?NVT1U$PLm#> zw{AlJUc$Xf#X~CM>8`D<4Natv3`-2lfp8)|;9s^yobvwLmotEz4F@x|HX~qb zYm4K>kCMu#lXV`4?sY{kseD7}T@N;>0-Hd=SNP|{uKcE`#wvZ)q%RlCncmR^8--?c z^K)S#2OC=l3?W?U&ZB^o3+NBz<%2;{1$kRu9yg*D3S!z!KvPqb)7sc`c2XE~ulWQg zT4OLFBBP_1mzPoM-EG{ACcU-EdR+|-fIi>J@4L2ivN1A(R);382;(<9I}01me0u>; zOyFHg=6JOe$}9-5w^=_@VPbe9_Ewp0PAV<7pouJ*cL#a_fMUx#MnFVMhoG5&8ueZO zrL1gFZLNo@DpBmGs3_>VA`VM^G!nrUV-+0Wfz^0f4U{`@oFQ)6z=%g~8iQO+mRuLqK#x2{0PJq3}sdO2%-Th6e`9sHl8+ z`&Ob__^NN{+EAUxakQ>y*6(lH@ywcS5lI0m{w@TjtQN4kl?jQ6pd_*B*4;*+skrT} zxNQ9XnqPN>jev&)j|s2yQ>fFo@4J?$=j#9>N>U$#_XBQcXKTB&yNmW4>IyC{E*M8} zM?vr2Nj`a^TjN|+}0U9zq6Kc2kfSioX_U0x^90L@BIJ>$^C**+)cmVhe zyt-F4+JNMs2~^E&i(;9^f^>)b_Qi`Ay;*LGcT|72Mj*ew{=IO{zZd=?Dys9-{kR(7 z<{-epB!^#ls-eM2ileEiX>Ps@@+Mejh$z$rXXgXxsjb6U$QxX;k!q)PK%4Su$GC% zl5L=afBpJ3p_YbDDg8v~GMRj23_}<_>~>!PKOY~T8BL(H)j=!owLmrmve#m3~(i6UO|QRiJ=XAc!sK;wV*Y#0Oz_IY zZOLLinaX#<73?~cFCJpm_QMuQOiVmKIkc-H%*)OO4haUI)*bcizBS7Kc@V%UzN&9! zg^Lgo5rI8XWCvY35g_~Nkppl!B&jRw!VQ&ILg58GfRB&@qYhAm2NVclPh=$}C4t6d zxY(1Z4ayJy=v^kJO5hn)4$Fu)7>V)x zTs%Cb1qB7yaW7J(<$_*EckG2BYGJVgpc4$Bexh(%eiu%5_5vu;K3N3Yv^@sScFaAB zK+_RQ;=stK<;lrtwDOom|JZc28SfrZXEC_(@$&w(di7Or1^6gG{~<_~JKr1MUb|L3 z?4bIuEWiy;-&TX7;gyjQ4OiF4k1-=!39&8^iifq;RXeUq1FvaqO^)WboxwV({kjO$ z5M;TXQILABiJT}TH$KK%WDb+0jpZZklgd((|8xO~Op|VpkbJ?>nk0j@7z}=Z1(bZy ziDC5th<5{I0ALi>{)iR_cz>%SrK4q*py^LS+F!>)FK#oxOgCO zdRiJlB9w9tAQCF<`9ZVDr~7VEadB?2jGi~XnVp-v^Q>qF)-QIF+=eHjW(gx0QUyx47d(ZeZU(7^X{dsEhjH80QGwyuh+TrN3^0q zbV9;7)WoLwZ4j)W7`(-~L2&Dq8-ODq$j)wV=g@Qk%yzZ6f62*lJK9-eE{tlE<7%r|wrcFL>vCJ!k zgoHJor>@Xbl=!Ugd!AI}<#htdkR`$PE4p^k9W2%tFKBKAOaUH&iJZ5sgg%y?{j;IL zyZH|hAtBfzvN7zhn!cUcVo_Q4Ykcy>P5TK58Z{#zQ~e8;2>;&)Fz|y%-lt>&?yYq{ zEXvA~vb{H&l9G~^mImt?1H*?&`EwBYeGS`O_+d;;%#Rb$u5a$r&y_lCVWu_0e&0zr@h)*7n6fex z&}uw9PLGaUT@R%q=t1DAI?7W6rPtRf86aO)5z#8J>LhZD_H>xDJ?Axk6sK_DZAhe^9o}D7Y`c;T%U-} zc*-#52m3|od8Y;@0&c&P+?wU*r5aS2NQl?6Np9YRT`le8Wo>1JiP+iMxuOvV_V@KY zs$ZR`t?u-EfPsMlbunp;v5$tGeIthg_nl69kh`^JvE=u%7?XR<7TKTV?UQ=g();c8($muOK8$ZYk;1HqBWm44&6OGJWBoEaU&vL_3N3Jtk?1|y+4ak zpotbI9m#d-ItARqIoAkzkpj89y@W%W^qDm5@$aiTo=eT=RbKdaoE-zq+$UH) zd&gLLZ=WWR`{b-Gm?>-N#URP9)c$pzA@M5n93+kOQ1-25rGv`mkV>aviYYO zrNnJIhxej2jE)L&aw<{cAr0_j(9r0HUn)nBMzFH6^^?6G0rY|WDS<$JoRjnvqdMc( z`naF9)kUd^oFn4i;d3YLvqBj&Hq9QV)pKZ1;57pBshH72ZsST^Ei}VSIBi{6dF5k8 zQGMrpXw;W&Z55;!9@i4io~tZuZ0|da68Y^gkB+eS7zE|5I$l;)=xms8>}!OVk3#=Xq@+ zj#9aXZC7vc_VxEe3I;%wV(Med(K0z(wuGu%ssWv62KIXm56VNdqrFxvzkRD67yA1! z$Y{GU71m*7JzAEVmzP&oHZU?$#g+PS#Mjd5?qQT6rA}ZV9xh*)i*RFo~2+hyMLAQ zK3SD8`opqHft*-^Ocv7je*Y1WQ{oEH9f>)naT(Y0L_4cVZ~mRlM|&0I!q-It$yE=X z&A}WFY|?iC5m5=PE+(6VJ4-O2{Q76<3&@z0`|dsZtNZok>)R=nYhgO|q7D*i{@@$p z;T;x4l-&l284piXk|9Y*CG5Jh0PO-YcAzd1 zVfz_mfH-s&7k6)e|Jt={8C_l|KyiA+Q|kx8mGL?cP1`uIKY`^&#@m7#1b5~{+Xd|9{j~9h4mYes3kA^=6bjG`7vqgwH!f# zj@N$GYd>8SDew+M^Txd-PiUyCRc75T?sAAXLVP z4d@5~0oVu#SqFQg)=*ocS)Wn6+=CavTf&R#>gpgcpvbP`tDvsoc_byKL*$Zhoc(n@ z`jS#EIa!8t_65IU!?-MhDrQaQPt3`Y7XDdE3s}Fqu<{4`uB%8N4N;ro(I66GMh>2NMT@Cgxx+r8g0GpucL9YQ$ z0qGnv;HyBn6&3Mo{a|TTS5|^$a$hY6< ze35mqk_97!Tr5tX&LR-t|IeWz**FTB**jO?ZF=GJJ^$lJvLRlbd)Yy(?nuNP=Dg|N z_sfQ*-!!|HtnTNG{^r;F6Pbbh=FEKCCVHJ{ZS5_Er}O#gJ_g45xi&pqAj~%)Y^r&G zpwxiBS(ur#p*EG2>;UZpCOicT8say~N=gu3dHSW^LlK^VgM&jFR4*S7{1sGTVdTrx zLVe&fNN7yVQ(fJ}PoF^H-UO$)>0tt-s2~m_`L+|bQP_1I^X_m}Uds_~@T(9>Ny&x& zoaneXs2gE@M!?LKl$Al}mkd;gG!_8CGKgMTKL;TFH#q)$#@k){+fEYs6*wlb_^SlR3s&zrhc}2VC0(C zgv$0H9m(c03Fi3Dfm7b)vo`dDtBCBtZFO_|j~A~vY4<%$oaM~CoEXOktVkgAMBYGg;0u>D*zi;c{ zz{9~I1^TX>oWskPVI!1p8KK`hh3=l<>}Pyta##kL=QrTK%&bE3l)V_)Ya9A z108@9Lzoo;FSiBkCFM(e{roPvOs%a6KmT?C@D%utckkvWB~c#XXn?S}u+Z{nbAc`* zJbZyICgx<B#MvUU6AAP=Tb%nu4Jvh=cj z@3ck*q)CUyv2m!@HMx3JCe~yMl;&){Z0wEp+9`G^A04~uD$A;zKE;p{=(nS-d~9rtG2mxQi;ay9g20U^wc*XP~DCw4kQ04pw`tuuhdV4uTRt19Zb5V`YVT zh`c};^QPCUH>u~g@$;9(nZ$YSV8{t%IjXa(zSjS{MA!^vE-KU6Q)-q)F{2fyTjiXr zHXCJwN^%rKQAf5j;ak;WUFaC?=P~A>K1We{f9Kixd=Clo(h5(3=hT&m;Dyn2qQ6Z4_>C-3J@4!gIJ4V6OymI;Svl0{hgh{3V z0<4jR%loYii4Zvr#i>vOz2y4!-s#8zm+d*!{(;2X6=K#@p58f0*ow4S=kE+0CG&9sg)HR1Y8}+_CiK0L(oKe zq~LiY^a;quLcEUt$tQ?5g?M`-J=uL9A!Szh6oRvBOG{>!miG;R5*``QWC3&rH65aR zTie?aaMxpFT3{H1XHr>J1@HXE*Y{WPz1#Bk_B+Oj9w0q(fEDya_|SK!?-7=%ADa$F z$JJpFdy~tz|9nlbe@Q?n6PaXFwo;>V`KOT#e-;6|<`S>Z)VfUFYz-fN+^FFqu#-$d zOzm<&xgh#87R`YCMwgh7%&hyVb@FgiFVb2KAG8$!;%k+ez95af64f&@8qoK+E5k?# z4vEIor;_6v*;wK!078w5huJ3V#T8Y=#r^#KrPOr}SJT#IFF~T|7nzPjfWZr9vwSd^ znC{`~F?g)n>GVbSU;aE4ljYuK*^{So8T$e&gDSd_4DxGAh$+uyw?FzEXFOd&JI!a~ z$&Cw3*&}F4rC)OIy?F7*k*#aW2DHrdu{uJ3wNC$luX;Nx!^)M~G`@XSL8bVj63S7w zB`m71(b3w@X)Y9}-+8fH@WqG}U}uM)w&7p)kJs~mbJXHBpHoC18G0WIDozKpCT$V% zyi&Uq@=Nov*0!{Y+Ltv(0TxX&hqCUa-}q)E0FqUjSC?zv!+e4}vf`sY8ZZ*O ztX~$QVPMiSFtiQJ$6YCLY65=-+9_DMu^&Hn#&GzM*YR<4_l^F23=TSh24Ij967mG3 z^ja&(a6vw;4-@P>5c_FSYFrnj_x)o=amcCqc75++-=r{h==nheDA9CSi7tzPuq7&n z8Gi|jb<80;i8fmIK=+7k_jB3VoMHbOH9h?t)bvk~egMr5L^g<2fJxd&94!PAJnX$$ zi|mezBXqpH1C5})_3uJyhF~JJKq1$iOa;aZ-XKeXgNS+Q((&;zsG44&Um-S7!yz)z znE@uj-Zx9 zCj|@WDmM1k{(gwRf7X{TfMRMODGAjWt`kXuGQrCF1p=4gjR^7Gp`;YGeFaJ<3_j3f zu%O*R`3xjxL-z*fF*6gYN)?D?aIizIGxZ_ZE`|C{AT}+|JG;4}9zFkoAjuFAZNQGo z{Jq&3%f-OR2x&I!mQX5#yP);iH}=3AfblkLu}7loJ_P}TV6m<1l2TF-0+JXy3CUyNg)sfqY@H20Vju^o*o3)StuVG$G7psvIlAN-VNy)tY1WUqJ#Z&q<7;* zRQtmgjvs#(_F-5nNhN=-w9QqhUyggsmh4QByjGX-drSv=Fw_}GUIb_nGAob2oX z?oGfQf=!N=R8unsVY$G&bs+G@K-T}H0dmZ=80K;=E|t^Q#&|h7v9Yl3f%51A5~3+I za@&E+SXijTLh$Ayr#s3J7hPGg$a+EvLk!t>$anx*feQme*MMe6u`7myhL6t)WNWCi zW##2}nVHR2?SP2H7v_jm8=r5To~wJT87sOJ4u9cc9;-M}xtwd{M6E=mI{fI{u|sHjdL^Cz^1xN4~mu?PK&UKrkmfr*7VUd{VTii(h^YtTPk72G>J zUO$IFGrJ%rKtzhFbO3fA1ad&hbwHq(%1TO_y!;af5fEVy0R-wrb5oOxt1B$Q=#)$_ zm)+csVUa?FR8UZm{}l(R*J*zhsFGkpVKf8~u>b_eKtLjf;tgp*P!U7kzgIm81rI>P zxbt>T@-}Sm8DBu4ZZMD_jN0nE0S|&(1>KTX5YTb*G|M}? zxs)D>ywK0(qbLt$LCrEy5XhW172SQ8Enlk`szJwe$osd$ z4)+`#;n9M#4_o@+kwexS!6P8pTF$Qrsu=ZEPeo0w=ly^sCa>*`=*D5h=T<*O+yI}HS`rrj)=JKBIkt; zYYO&iqb1qcKOg0}1j7T%?Z^_! znYrSBMWaZ=zX9(#9^|)6yw1-c8V)BbmX?-)>-7R$!S(n`f`Eg4ttnrc##bPZchR6R zwf&P!c>s%U0E>*Sgf*ACwsmYC^sG-7S&vYRINc)K7uQ%uHd2xVG>n_>!n&-)`>UhT zHHPe@K)+#8ZyDnQpoHy@=$V?riNBwB0-vcIhN~>8W}M3%Rr3kSUg{@W6C%G$OKX5? zNO{^cxewrc1dPQqNL0j^0+4Ld-vnLi^z;QmMQK_uVh)3rP(Xe5+F#BaSC7kC;&2|mNcC4% zsSX6Thcp1|fTKm43JSmKz0P4Jf$zhg!%iABG&F>&f6t1(gRs!s+uP8P)IkQW#(OaB zhYFqpA>iWXwzso0=VB)gG&DCiH#G&VqzigK=7kF_m6!zJCF0@fSy`b3r!QZ=GzF6M zHnK`C4(2Dqc|RcCtq48>K^&C60}ukj4S4_?_^if;$}HphvKaaJ2Eh*=9*hzT4Yn{d1zAkf4sP zs=v@w(bn#mwIvdA!v~iE{Z&JIdr%#k3~sUl98)ueB$UIg*w>J=hGSUcT}o=eq~kiQ zHqTU$B*yHNl-JxmOm)5TN1gTx0I}tX)=D5Umxcc&Y#IW44!|{?zO?I3zd-%NvARRLg)cO^C?Z)2~Fc28RPJ*1h51 zrffzWD3vsFT1>b87_*Z?xLn0`9V;1Ef45+zZ`BC~de6AcFT zLP%jT2B0Hgof7!B*jrn#x3oz1oUen92Z%Z4xU?63N|-zN~-);E*j`0AYuO(QJyY;s|DWX>J83EX9et7RJm%9%lPmCPP6Lk z>9HIB`~b*QrZd3b-_*jw-oYXAoR-Hoi-3yE*Uzom1;TUA&MorB#lzswqF7*VZu+Hi zGdp52ti_KI>6QJ+Z3>bPR8ast*Dhb)+}c9#a8n}#0sSWHnCchMN5`ui%-2~Vn??5W z-c`jc}%+PMPuV zdAF#V&xxuTZw|OM84P7s|-w z)Q=|m{CTpgPqzW2>P@me`lK`=K=ce^ja?$=C|DjI9{&6HZ*bb#>FC5ATmKQ6)jB_q zXeDW*$^FdH`L8U%vRZ3#_rLfGrK(#CmTA(jUkb{~$~}CaJB<6U-oB^6 z)|H*An4%&5i^(qmRLUyezbcAorA1b2mJ$YqdWPwyJ@e562c*EHo0{iw$`nezonESz zD|H$3^txY=y4WQF|2uY8tXk?3kn-Bc2S`?{&nD*8n}oM+2|_}mrKJVrW|)n`=|JLx?DVTtZB&_BY}u+oL8b>OF%F$}`vxD69%cI8k|&2u#laSWL>;qp0i=E}V`IaSKpGz* z1qdh+5s{Ec%&mb?djEbxhmqH26Nv#WwJqTeLjmOJ09ruG;$v)Vu5SHVg3|;Vauj;& z=1mA~tWVZk>+5gLM(aWj_)FQJ z+T=ZbC3EK5JJz?c;dc7me1}vk(n8BK+qZrmyVYV?Kl_4zU$;h-0y_$>C#jTuNJJq` zCWixP@Jhoo?!BT>(3>awAihV_fZ7?)x#E^P@3J4-DZnVZ_ zdmtZm1nU|Cx;d~BUH450fBT&%&On+u4c%PvFR__`kNQ6%Hb;yt48K=agzV;IMMUbM zv^zOD9c?jsw7~Hp$eC(a*)Kv;0|N4(4Qd?Y;q?&1w;s5IzJTJTJz5cos?E#$&rVk( zJHDBj5cC;)eJ$KmQ|-sKOqVvfuUQtuOh;nECIci9B@cYEU}8`eV}YUCfCHum#pyG{ zXvK7{%g+O=@0bzy2b{ZKKv=olJkNBxm)l2z_}{$n#8V%?hk7vLsfpsXzjP=h!MQWH~v znTbh3d3i`c0HjZgii^!(j)T$%If?=Dv4sCBsfRehnntb4D_1bQQKEXWHVA0oLV)Yu z@@y5#7$kL22i{LEz*$z%hae6!Fx`m$Z+ZP61L)rh`@rxxtBbW61CAj1J^Y^>kH(G3{(*M32Deod8US`vvd|OxMIBV3kw?xDw;RUSXlXO+i_`lwg8WW^i=ByIBx>zgH^Xqt5XA{as9#r=upVULN`qh z=ODdp_P^=JENlCe4bbB#)@NcF2XK@IRPut-SrO>%aQ;IH0urEqb8v9vY8xeh%mQXZ z2>76rZL^Du5T2pCOHBd{BUe>N=MEwEGu9|zByjjzO3Hsm3l;+C&OKIuMq%zx7c&xn z@(cKupt9TCX=WLZ_1)z=n*sc!a18~FVF;iB5VM70Q|CsU`9 zTD%<8ZeME*qCa^wsh@tX!(K`KMeG)@1tj`>F2NO*fyf5%4GJ@)FKyKz0u13jlz>uX z;19?GF6-5+2XTT>7jA-{4w@I}MaCv33$S^O^jL}8AojJB1WD=xkV`Z*@3FG7Qc^aI zjiF8;fNTl9DoSWra_K+W1CaFp4SN`c6d~>4&yJ2=C^BHESXj8DzRLiTpYyi&;ujVc zP$@n57LIG=LNWKK-k;l;GUhFTX5;kyy6TNahDq7EE#A zozRH|bmwGcDLUa)S%H;^jVli)#l`^3MqUDk{@3d1b>>M{Ams45pli|PX@I(jiHRw# z{oYazKz?+a>c)yVgw__8m&=_KBMASK4_y22e1MH0AO*M~9ETq{zTw#8^w|gg&)&>k zUqestH-Nr=GQTp7QnUUr8VSN@MG-}aDEiiU3BRi+|@QV5Bk!u5-z)~{uY|3LP^+?{YfXy)1#A5iR->BI!E zH2+s$lav$03v26dY9v*GE==+fxkH{$)!b0}5B|rXA7s0m+t0pwQT9j!?TV8nAjy<9 zJQdmKx79tfFCcmS9DWaxADX_KE6k|Rf#Cc96W_AL>Tqd8tr9Sjk`j2sy-?9%-(SBI zEzEThU;nS}zoBHZobo7DWTOnVg%Qg&4!%TZ5DR)!ZfyIbXi4R3-3S z+4YS?5X?^3F5E@ccoG!@-mAFRYg{omaAGh!zN~4J$dXW0zv(W0G5J61GeGwApH}2x ziYtOZtO@ckta$__N>F(0gn@Dd$BqJ<&{3K)oVI(z+75^LC!O@cHb8w(g3QpzhHu|e z%pD)`2$2ZM(B{Vt$%!GqMfeCN(5Mik_?SJ|&v@{W*mBW}K~VvRm468vsI_ZbU;{Y{ zg`r=+^dK-g0byeJ{sw3rFr5X%7A!0|MMa#P%kU)_aJH$z8*S-|n#6xJ=(M-84!9Zn zDxWvmlP(`5WQ;Xi z)ml>035W0lZ{&SL$H8PP)aF&ef*HR7eFVT15Mpguv=FDq{By3`0UF1@DST;Jnc9m` zteqHFSFc+SbVDq^+{XloPHh*H zQ?+##j^tTQ3vJwUBs-^A#?oWEpmhAxm-LUt;Y9zmqxNtU8iL69ajfa3TUcm6l|Wc} z+(-B#2R+v_JC#v)GgRkPx7mHGYb&UHHK zFeh*Kb|J?_1Znt|^zss7!b)u%q87Nf(R)#_uFh*aKqhd&F<jQRjA^em5lw+96HYZu|B9lSZ#5QILQ-jr%*$1vgb{aPI_up+?AShTN#B+jj9 zh=Ujy8QnAnbUy-83NacQ(oT5O2|=#6UKf}y%z9K}zt{s1@A&A5o`FH#atu(gD`YQ$ z7Ht>9xgFFMDG;Gvz@7!m0!*y$KYoB&mobtJ+Kl+4N9lm@!q`~k_cznU)=f;kGg-P7&IqB&v=~Xmtd1Y-3Sf{;LO_v zxfu-NYWtwdYR$!de6{L728PG*%|ZHqcHm1On%Vth8x?N+5ANPO9_zmUA3ma85?V+~ zM0Qyrl#Vh(vUkadN_IwQqR@#@ge2J`vUft6$=;PHdu6ZR^V4~q*L~gJ@AbGJ_xz7u|ZA(fSt({wm!wDQI<1ELCfOF_~)yB)h8(-LdXrVPwZXg2xm>>W%`sg49e-a;D{$*xlOt7!3iL=j4=6*3fjR#RT>IE;OcnqVP%lW<0)2WvKFtRu_lS83I=b zd#5`_j|kxVK&HZgRZE7Fltv;B>WFEfuXv?3_*n#dDP9dgN}{?`Q){v+UdcjxsHFjm zpOnBs^6=KS>g!3;&cG;}<^sw;nnK8|El+uQZGIqKdYqo*!FCE4f&Um+UZSE9up;;< zp!bb6H1^PBUhfPx92*%)YA_$lIv=j&h!~9w4r(hz5jEIYnZqd|aT~E#KE?*2AAR~n zcQ>3nLo`n46jf5THTx?xH!v$lB?XuY%hqk%2yutx!OY!NJ@R@ll`K{fl&acAK#C;6Xbp9HNigf#U>Ov)}Fy$X${B`deBLlT}NcXGiAPr zJ%#vOT)wjgZg<@COuZKb!xA~VSiv!%0)+V*2kkJdm*l%upcQt)B-H$|i(%eQIS;WUjbvYqVp9=Qm|8|z3!F%xFU}S~B zr5JG%z}_D8;5Od7T~JZ^OOIDsUVdtFlE#}%ehOOOu3aCBwPI91T{+(8 zf=pcGTHD0C(oi4M*&VxEi_*pm;-tA9(rZ%{^~XQoPWDaSHmvvN>)2SG7=?gF=6HpS z=al;^-IR00EuJ8^e8~YU0_3#f$t=E|n}JiApB_88N*1Sqk_}ow05Z9u4m=g3y0Ew? zY_PAICC$>L*XcrebA9f6g&>iltcVn*l5|0bzfUH(qI>;AYGyY)!Dvc;ypj%BDOXSx z5zrGKQZZ)XdBy}*mNftxWhkQRYDS z3eyq`^Yc@FKfJ@$_lS23Yl`aHp!AY(QZ#m7(laJ}-c{r)U_wF71{XKpS;X527@kruk7Vv})W0~{s<`wrh$3Gj$@b5O?8S#Da_?b`T+;W2 z$X<2-kve0Vk^JPhG_qc@2dCdr>wFR;VyB0wbl(o2E#YEn;pGUj_zyDa!JGK+ECgm{ zjEMIWpC!mSe7y?*JaCnD>^}i}2JJ0P4X0Bh4NvUXlWuMOI~v*hE&+>)CON@(1f0Pl z5unTlC~yHYe0xnXw|U3LK>g4|A0ERW%-q;$5%?KM@?$F5COMplRwb)+I*<`T)QaaV%D#62K1u77km_>Ohzk`Zf@Q zjIdXPy2k@fU{Du$yQuL^3l7mM_1%!^X z@J*B5?zI7n=P!qE_Mj({Bkb^Mi|l57isZ{rigs&Cv9m0taM=er;-BmHY5f&6TNX%) zRK%wD?5RO&F&dSC4BClx1HGD;^rr@{YVVIFL6ZvG zLoZ7d%bP3njs&dZzxyX;vB0(iBF^m03<%dL9XYXY-aI7w&<{{Sq0MxXot>auZnved z-8grN)^YAd=C>W)R1}{MvV5Q7O$d0=T~>67iOPfO?<61;Q4`fZ8uy7jPatfA-WoME zGjw{$WHPdSrC8&Doi&g2&CZthQrv6ld6}tc5GWg=o~E?EWc%M42l9rG{TOut|GsR8 z7Qd+9<0nrs7^64ZC}FO9d>2mf*XrL`K9>ApEIG7r@@lDHsx~`? z(MIC-r?KyOEFmEQWb;Bh6ib5S`-g|Cg?B%@H^7`k_{x;0tLJ&W;0}_4dDl8p z$!lycmDbLM5nf2;PWTy00{@AWE3w&vg~*JJj9yxQ6xR}9jEZ}xO-j7$zC`>Dc%F~| zELENxYJTi>+1R-JvNc3m(FI3049IqX`+}qfRy6~ElHZNW2QW3FE zJmjbjV50uDl$sCH$RJc;SHYkd`hjn#H zBFD$8W@LY>f8_kom4_Nuvc*9^##^q=B=)e}q3Sd;-F(lJc#Fr|2kbWz?HBnBCubVF z#+oa>1x7#DDZFFPk#SF8j0)PcYemSuw(%8w9T+gxdlnH<1R0_jRZ(ETKz}*rgG`xZ zbYn5wc5M77ZJ>rC*=nQkv`xB6_{aUNH4iP|+(~VfYKThyUO7=8;BhI!aEJKmCkxLuz z-q+V-^yu+pOl69Jbg`&b=M2(FoSB^+Fxx=MWIS^Ac6Qf5UXx{Ic?IdNmoE>lmj78c^u5El375(? z9(h}PCqI8il7VXJ2HPG!gBs-t_gAPLny47&9v<4cxg*=E*m2x|J!7I}aq7xxm}KG72=AWMWTHq@R4pUd7iRgX=9pBYyzLW?`aAzS7@G62M# za!%CEr>>hnUORr%&Ht@Y#5tO&ki+cp`^{MqzMD5W<^VLL*SWF0#-p8Mk~yUie{ z4OQ?vr$Bqbe?G@h?5uo$ukC1l3XN{hRe-0gmr&i_cpZW?PRZIgz4El&!fNF3QUW?*u1 zkA=e2Sn_6>@g1arQ{Ow|M{1PLj+`$1qNMxGc5Uf-x*uQKjtwM)$u{fAG+C!%KK%B& z-0I3qMyPw*#>3s~O7^#TvGGWDYaMVem|A4c?X5MJ9A$hfW7!f#BJGW(NK@HUs9?_? z^SMrmKaacaA1uI+5recoOBS0E@dWOHy>7|XiGiO>DM@spBTcU;dl_TBZ;$=KVS?2^{wJHhZR**J!@}8cImz=90{lGrVwQ+pRiYb5e23Ig3i+10*dT z-BgDN=A=U`ydr(8i}lwEJLFdKt0^LE8Rqv4o0B}Ej+3~(UP!F3)!8~4{%CeJv44a) ztZ*`(v+v;%arKb~osou)b6&-9>pa-(O~0(nL^`?UX#5!YwouBTUbS2A#a5#o#3jCH zGa{3ny%yP4C`2O^S&%fu`Mj&}8)$m_d=EKBQ!BWHb+R;Gz&!X@m$XHue= z>1aYi%Iour#UrooCwXi-P*ihnWU!27GijL`4H2W73Jn$qt8%doB(06BvqMMv4rG0N z%Djmrgm_)@>|=YGbxBy#MUsaJ$Lctbq2ihEjSc_&nqH6vLl?;HM_>-@$HCLcXz0w}(>=%P*L7E}!0Y{KnTN(OxBin-(qJq>?7$X%)Yw#EC69P8-aO2&LVnD<$$NtQ zMe5%EJ>hk3MVS(1Cylf@S0C~At|aSlA9;oBWT$@?f91=BudR6nt9NdxOuZ<6+Fwa>?#)Z>$ z8W~xuU3Jed6fhiV2=)4KAi2Bed1{?v`tUr(upY@smB=0#y5ALk>el^4`7V1e6_r@1 z+N)+pew~dGkMxZq6EZG8X>p~aCTVQ&&2MhlqrWG2V}{Z?qq9}bd3Wk_?r(IyHcw5{ z@FhgIFXi}?r{JQ4$o~SBsO50Wuk(o+<54C|=t7V*Zp?cx>LyuLt_$+idA9{w26K?nY?~@*MMwzrl*~ScYSAtHY20|^~6>pn9`L| zKI8Vt`ek$PS}e<@;FRw>Xy|j&r>e&p?QRVn@Q@Q~+$-X^GehZ8iy%WS#u=CgX>B?t z9?%knu$7=Y?2S*A(Y@KwVtHa%1uhgP`fd~n<`!>x%|ouEb`u(ys_XD#I?Jm+oF#;# zTuQOzTn&x?SyjbX%x5W8nS(4);Qw8l@JQwE;C_P`Rha-gx-NsO(TYE-#)mrV5*5Ye z$X9-z`EHtYSU4CBffkx)Z?kS2Li59*=N`Kvc>iyyjO#wv4nh^@U^xQUM7LONAh6-TXV^$$eg>YUA?#k>XWTWRUh~=*;>71 zH65a-I`%HV&!ch@S$4ed^SW6U<@W9^8S~ZZ$-YO#Gk^cCuh6!ynE8G&*(d?h<>u6rSHTNIs!*f8GzRY@Lyfs4NQgr z|B26X_`kL9YB%QIJ>jP3(%&1|X&(y4$nE?cYs$ZxqHatkbT3>mYOU(XbD)fE+4Gae zzhFG>eRpE@E61Z&2G@?+78+_uKs5rD$pb;SW=+F>&6xjMaVmGc{M=J1IWO*}Coa`f zc)BjtOLu$9+Bt6jtP`okUfS_8;UKoY=Phjq$| z^$)(0D}RTV9-|%mPaF)XUbqStGPC<~LtBo_Ke_UMv<+82ybYsxZq}^L_}2K|k9T!0 zA9wn#{*z2Pa zze>;&9UZW=Uj|p{lVP)A6|TJd+gs<7`%0WE<1zv+?;og3=tVOmb~yIkJL^Nex*oky z%I!f{jR400bBUm#T5rz(J0ri+XQ{>+qzm&4vG4zc=g0HBBv}`i`(Gso9dcU~vbR8*4(~|vdM#fVwwHFbF-%a^ut%GR&)qdZP zeL^WH_vcfj6dZ?@W5Ste=uZgI465(08s0mfDeb~eG(B39LbC7W=PO*kQSSXCpUX3w zZp*bDNA@JqPj2tcr_?$mI9B4LU%8j_WW?2hF@rsY)lMJpKax`Jbe7_p+4gQ+@)^P| ziGQzxlF2pa!ye3srW>ElPCtodOjX~ICY-~>%CB+2z3XLbZh^3`*U27TRsWsQ@(Y0o zp!g&4N_)GEz0-|#$7%8$(o9dFmD%pdeC6=+&)zdn=7RUx=^*lvO16v2^2ae@B$TF+ zY3bet*j<`Uj^}nFDSbwaCDVw9f@JikHGv=g#}w(5y-Bfqf}+F+u?;TObzPSbHCBmi zlJs)xJwLB^PLB3$3l-Xl_AK#U=<>~PA{tg6o9y~?%h?SC%pWn=1ov==3VB~=J@S3* zDU&j%V4dl%_$A+60TSL3`6_orAGsYMMUT~c{<6Xb2C2HU1DVzCk zmzA0f=e&R2h!^7?GIf{QOOzH!-7GniC8K4LDtlxKm~%C2yEJLL>~~&IFX+Hp@P=pp z$?LPscLWu%*HnvFi@lVSJA1dgPn@a1U}vDla-AO|^3DnCpmb!hw@7p(%UqLCo)DWo zMI+T>n?2MUIUj9}7M^URaCvZ@i{;hS{PaVq)q^a$%I?{Y=vJ5=mvaiLUUNBZp=z*! zru_A8KGC33KKh1FqccilN$E%n9Z9CD+n$bgU8!jIVNvHY^OiL#Q{#a+iPWivfkDhI%%Hoo4nhXcFRQC(p5zl7I_{OrA4-*C1oixjIjnqN_3G{ zpOEwtZ9H+8l!02Qh&pBVDHGlrcl?kH`!3T zGuI=+*%{yul zBIRn5b957Qq=wpitwMHQ@bD~*?FzO(N8+b>xA{DCNZ5q~?#rb z-o_#VX_*-RGP=BOx?-iTDB1htEp~dhJ*1ZjHkrJMPq`Wry<}NkZ|1k<$5^<%3JQGs zqb7Zwhj)~<)gr4T6PqLxO7bBm^$vBX`b!kzG8Z!TR7{R(upLc39xW@%`jTEM?856u za$FG;dfOiQ?`M@>-bbb4&Q@HTHhjE1%Za_^G=rA7Nc*!oUNnM--HJPV>&vw{$A12N zp%M2%{TNAOvvF7Q1J3^XfIg|rAGItJSoU0*AP@ZrAs znSaeYSRh67oi9D_6sEjXf%-DbKSAyzuSo5tWTwGlu0vMUF)#e3^mRp(!k;8I2}W)s z`JUDc4PTqy=4?+dRc&H;v`Zl1`s<3F9p%P@iEb6_T<(%>mFu&ygV^4SI&OOU`Ev4W z`?!*n=EJSQ5v#eYWja1Q`TnOY4C}88Cq3U}b+))Sb22OPFMY}BuRLyfLA~y zRqA`RF|*;3RG1p6B8n=MHhKE9zwElg}?HLf_)1(+VX^0)oe6 zWz@h$&GhOHt;MC>xDzYyBtEfm^5Oun!i9%;G}LrfLTTzJ%o@lPVd3L;g6(b2q`26m zcRvE8SSWj40wZ^e30nzU2+&-$`L0l}$j5h$XL97Q+R8Vv?=MfOR#sj-A$vd8YB!_V zPiAHJo=%2HyLF_2ExzK1#bTnqvPwA_9j|*)@a70)IY9J(sk#6Zx^Nr zc=sb#C~wm}_*v=y={5$v(DI*PELPDBP$qW-6nrmR8wfc;wV!L-=J;uuy=ph@-K@%n z#(#e2>DSZOSJ#nnm$GNp)c$ag*{#6Ec)M+?#SY%H8`Ab$7aK5juDm%FrcCa4bckg( zJUp2Dt^E`WOH7kMi+lYrPvkel!HMPhi^6;btG}83|JCY2psC_e<&g@^T~<6ov%yIe znU*5u$QIHm3FM6aux$a|5rb_Evwsh_)}K3g=%>-WJXLF_i?*Iq;v1N{@1A=skj15* zdaGdGuPxcLU@y&ua>ItjM_=wIeL3amKmFGh)nZ=z9mo^*2kN9xm>9Y_RLAW1FL^lH z{o#els}`lpxzVFgy+NuMW`AO)(JfgsyjD;AOYeF|h0PObmLpF{9$GSbl0LigsYfW6a+d$CC54K-#n&i+6rk1u0zvUC|Ao{(nCJ~`e z?H%%rm$v4fc;fXVeXFL^Z(mB|8~gX!uGN{a5S!DFf+`w7T`E5ry0v6RWIqaZn$Wmu zx!~nDW^3?UsV4b^P4vstvni5Evr_bl-PY-2w}HJfV=8t1=97Pv{9h_io?Tm+m|iFt zNDl3iC}kTr{pMbDa*%0tu+6%{af9RNN#5$))+rCY>aJM2{|+k@eaTCmQ>ShoFvaN= z=cpUY77Lq^qu8T*1jWA2b+VB^%$_SJP#txq+V!833r-Ffsy}ER%a@P2%v72rk*+p$ zzq^_<;k1E$5QAeA`|pue6rhDDT^Sp5@CB6=E&^xiR})e~T0Ocao<* z(}B8|Uxs?OTl7Tx9(LdOEn~F@v0K?y(>SAJ?MjkE<)^$k{pf}?KO)}_lh)Jgf;!;* zAT(!f_B%?7>DUc&6q6G)y`RcgE*-t|JtJ09N{0M?&-G39&wdUyFaF%ZbIwX(zm^KU z%j#I&WPQ6_LhtuNVe}MzUaei-tM+2`#^60&UNHqmM-Hda!u>`DbMfm*bS^n+6_u59 zBkh5AT`X+;%*O`<&RPkzo;5SH8f)z{4-3iOI-)aq@9I0}GM|;Brww+T=IJkV4L>5; zn_fqMpvb7O*ie6C51PFjfw7@&p$|O~B;O1_8T2hsV1^n_eSgeX7a^W{MplZ2C3)bx zS!%Ar^~Vo(h*ZtA^W63N74ca@=2vO)d{&wX*Y(odQMOzw_oRv_-wj6OG{UGy>uG z?C^T)*P*40E>R_CO;tMRYrf0SS}rM9e6(6nmwqm#qO1! zBHy^N=99b2oBX=fNxYNcg#FM^{iDV6wkoePf6ckyE$meun@d_M5%Enu8Kkq=7`b8h zi!hM}SnQ2=q>r^;tS|{$d!aI4o!G;CpomWNy;*)<;Q30|&G@?ejL( z2ak!nDHY$mpd?=~mb$RXZ`tDWRnINV`-`zNW$N|YCXa-K*E%IC2w0hQDmZdQSgOyt z3{YUKruU-b7ny~IhK-$_F(gin^SR7=CB9dmx?ptX{aJ$ZvCV=?Piw7|nRB#+#7#nPJtT%HS zpSw}?$XUOM__cE+5p!1^5K8d}8VcwQ6vAMg2?vbKkPyw$-U!u~ zQ;xi+@HS`@J9 z(M7ioLtn~yyhkEjiEssNv1U-5^rCzAxU;xP*anG9O{)s>Y$VR1vZ^+C9p{biuiShGJqb;^ygLU)K6H}L$>3jlWXN94|SR=hp=rwcU|mA#G45Cl-<62jzcg8$pUMbb|7TMQ&KjbRpNSt+{%2${;KfO5T7Pn=pR5t92%m9G_IdAkQ{* zMJO&X^Uk)3=iZMWZ`-kBAl8?9&Xh6!Sd*KG&_81X#bdOBV zw{k=2`SE`6Jiq}EvmGEnENJGR520;)`+od3=#rrQp0}^LVVw5R!drEVP}+MwCj0b_ z=3VV^3*UOqpBr^-y!CD#5;Ttt&N%z^5eQ1_{jF+zMNVBe zG*-TR3N4!Z&!*wKE$-vKABgK=BGjV7Y1t+-y!_;2Xy;S6O5G4ibQ`>KzSjlPjLq6`pn2o$ znO|Y_?}txlB--8$Cz5%mBK#PaQ;y?xhrqrZAlU$6EAkF9jiWDejAOHm3+4!#ke&Zh zx|zWDptrQ4WFJ~gcy06e8v;{8@n@EgwiYp~CVsx1v!j^&`q%FD?C!U=E{JWilri5_#}^iPVDJOHXTm}9YN zZCYnrnT7|C!j>Z_^L~ESsl#6e?Vx=kYWM3i>?t~mZo2?u4=4)a)16a0K>);6X`bl8 ziUuOL5VAy|B{pls#KxxTW{&~a%zW%JIWz3526!wC$r_!p%FKR!ge3{oy{x)&CV?ds zvMP=s(4Ro)L(dG;0V-xmR|x-CsDpAraM__(h@Y0eDDVLpopMQvL9XVJbQIvmAECh7 zlJp$xcMz<#*eL|cv(#Et*e!e9B%Uj4pQ6oD;fzFY#hjZnXedxwvcX&sJ{WcYXY&H1 zy@vj};jM2ELZ6&lTWl?M7-@TZ^V@p>86~GSTzsQAIXj#3&HNqYYNgheZGn=jU|U;- zny*!Foz&-V-kqtjAi`j@#skVMIGDJe75%vA2uv@8EH#W>IRc&qJy_jw8EBA$BsubF zwQYMrn>`;Y=xx7~-|`y5wtc#AXDa*j(QUHtx61clEZv6#h0Y^zcm|mk>dj|pXngmJ zrb8W4*>wru08?5~h^|x?zO)c^d5wHz7UcM$fQgBlXdhRPwq8W+gWpT0&M2_FiM+*t zwO}sOCd>SYb>LoK4#01?dSh5;xbI1Q9t)RsIW1EHGu!`lt&ZSY?ZLI$1>q+^^1-gT z{o__<$8rUG;3tqO*>^Ur7&hPufiPNv0=)4iy{l$=-Kgxu!cQIi1@}_u6C)5MraXG` z1fJl-7q9#FYGoT9y;rh6b) zgJT!3&O5J2UQSLi*lgf);RPCo#m>Ye0VH^)4%6PfbKv4mbshp)gHRX)d|xSCEb~UU z7(|Yt2{5o71cL0hZ-LLOE4f4YvozX7tE=0avr=1!2_J#^`T6hPzeB44?^T8* z2gEDMc5ACEc*-F04^lTAyP&BySy>&bkHi9tl`MFzjXz#3&-SO1n-i2c!oqZURu@*N zp)m$TFl4w=hWx(*e+x|S@l|8N(*cVg%-dKMx%KmYV@bl%Zyem_#AJY~nWWqbAT)wE z27}|Ud-qu~ycLhULZG1YC$kJUM_zGo%Qm{O1cY~ zqn3i9jy+Ch5cGjo%I2+GiMs<+1z6iFk`eQUKpMi>)7un_AVcK?M^k`>AiEVNUUak;Gb4 z9JxBoN)x3f$s;)SnPWaNDIwhYC%O)bjmwUmEVr=A)rv68jD0dqUm|FPJLe zJ5@)A;y~GvI(81UVf;`ZE}o4IAH!FR%noRR=*6pPbgm*u`Ru)Od!auBY?H{_v-C80 zpxKTdjURgUo>xC_ANAEIWlvND>-@mH@B+c{3>m}=Y);BPE3)w6La^2Y;S|xw(rLT7 z539XbgRC4wut93->=NWp;s5=>8kjw)u|fcbEA-*T2kORhF)M*P2M-A{r^1)s-^cUb zGSI7)CY;F^^dvD*ZCq8`Hk|b_=id*E9HoVim>frt@)l~NyXPA43}6q!*8GR_l2%Y~ z5(ySiBcRHFq_vrfD%pAU<U^Uh0YIx<5_|2^ zcrljbuz>Uh-VlgOI6{;g=#|9UVaB7M8Y|2TSgB+W?tB3TFTjvUompOC-i(Bg@C;UV zjh2u3Vv*U?(^D}D{sVa9EEb(v@R4u{l8=Eg+a&uDkA#RnTV=dbO!};S0QYOPP~|(v zBU!0pjt#Nmd0?BZR4@;KVW1p&%a$$bdl%>D!RWPZPEaSqT}2R=HNn!7LyqNw{_1|*1jfgZRSHF79gxV+)khFzUJn(-b?}o z)_GQ1iP5t6fMPCAFzp7G`G8ZW5TLpstwU~eGPBj-Fe2$#PhlsVO`=qu1qNQ62~tif z#^%#3`3m{D}o(1SQ2 zgu$R1Sv1q4yF4##0Ck{RN)agAF*_aAGB@X-p_iEl%MzyuDj%ZYuV3bn7DRwz5GGC? zN`6p!o5--qU9RRUPFj#vsbha51$Ni$5Z1L+2A z=-5d)f~qPdQW3MhJvWPZF5%*U%@UI4P?CWLD`ANVCW%F-RpXmlfURLG25Z73V8Codz!rx?arMq)i|LaQdm&n z^$XGYhhxF&u?XQUG?TGUVg3nJQNoVjg1%ty;qFWqkFOy=$0CdU?Odo7+b6zn^+0n) zb=rSLJKIp4yl`Ef$Y*Gpi;3i$xu-}pq^g2fg(K)>lia|y2#5J~C5=e95aA#Lb^Lh} zGFlAB?0cRn#S*OCjCx6~z)!~o1i;Kl=-HGU3c*WoZwd|8S`FO^ox_+fh+M7LH-{_5 zDkv)cMqWOvIJL+qX7>xH-ezC}d8wEN^Pbyt-S|uFv4o@N_AQo)`HWYo(m^FH7-EEv=Nua=3ByZNSDoQm=$lr3`7@q&kr#L(J* z*^lbW=qnU$(15@?1Dyf3-D(`W2nzsMB?t0DPviiYH`oFQ`&-|07sFzcL;|oOLva{4 z@MusKvhYdAge-`ize-Bl?#be@@xJPUY_Klp1@>V~X-WHl{+EU_2@)xo|G|ONz~F#; z%w9SWF7s{r9~q>=f5R#>knPP=NEU~Lg!ucvwP;2cY&M5R#Z-Yeq}4T1l5|UlBZxZV zm#VjzwmUlOB@g9ezPlF)EAf}Ez3zEyEaQ7_x<%KD33!-Gw5yw(Gj(cv_cM@4F;m}I zIf7cYI|i*YD!aA*@+}UQS12M-BPww3S;Mmry0PiA4=0lLc(RcArQ?$}#(b&z<|FQ* zelcDRQZmkkJ-xlf*o2b$fPg>zRGy#i-&N{E;AiprABYR0#{J*CT>@-^*Z&i>_y0F< zAtzCiv^)s==DwUz!^1l_gC84&3HH`cJI!Vq_AnW-<}nOO7Y)+?L4qQG>woK0<2 zMxO~45|7TigDlA!1gj4x3fJ|f30|xZf`!r9Ih~=CJPW-N(D+b+_J=6qZ;(SF3WGBQ z>AsWpLr+VM%tvlJ5uR3fA;P`|lVE@s^hXm&vCQVJUu2=;Ry_bR?P0mtz%^um@$0@xHFNc2u;v`<*e zvr3L5f~0(RO}Zp+!k8nG*V^751yilW@L0(TfO~UQTXQ9Q|M;NJj{h7I5K!y+09bBGDFeo`S5{^_zdAc^ihgY z1S)rl!vzx0(9W$7uoqUa;X8ziV^Is$%`86#s4&!EgTgB?>0= zzO2yx2Z- z9d;e)_H=i3A&b^kRh@!`5GdpOJV)TkLk!?ZJB@ao(Gkn+x=Ei2Di>sHE0m7}Lr9?Cb|(JY>h^P3vmLY#q)(H<+eGuP*!mK(%>~L>jYQPd{a{KXniDxM zo)$F;ivAxzKD$%D6?#ov6QUDKM`sHeJ1ldEcl4pqTDH$4k*Mjs$v|%FP}UmuYER$p z8XoW_f?^UqgJT+te9UpwWHBKI33>dGctzU?T5(r`5;(zqWx*ri{$p?rgB(2w=V4Zf zT>t<$#pBts3P^a%mejwvWiBkhJxg$ypv47**V3vj3rmgbw7dZY!SC$=h_=Z+39UFNHKJlic9A@J zMUe{O7S&k>x>rE^mmBdfugvul9d?K)UA-DVDYqZB2KKTZR3`XaJh`Jke>&nXpuA~j zVgm2Za4Gj9EL1r;I82^LpH~@H6mHA6h>KAv0BwfZUk%3Sb|O25_&;_9EJQvhJ_A;5qti)bo7kjAVNZV_$>iJU?3oG`uue1HPJj#nkVy>(S^9? zN?r?H3w0gK@{2P~woRJJEoW|*Z)%mynwi(J_DtZYCY)+P-?hP1>&> zDqeQ$ed1oDc;u7S{Kufj;&U}!5Y@b4Zcg|}AZQa7B(vJuBqMe_AEW4Ik9XxZ8u1fu zswgK=-7<;X*pK=(oGbuULC{*fR<*{Saql>s4(B#o0{H1phrz9 z&Guwp@xgT?>unt+fHjCw*xMKQJV_qyB76H8qJux8mW=2uBq+EYHpA^H8i~wB+rFZ3 zhne`Z1u68Dwr}3N^KrSWWHF2!KYfy8@&DTq98J4-zT&}@qr4&p2pa?ICDI5FoH#rJCElceHrNe)nC^kky7BmoSl-w%fTTV+lc%N zHo5TrrMa)Vh4lG=US;<+2vM9SDD>1)zrT4hqbOc+U;XLs^{eK&0Nf9*LeUuoc+6pF z7Cm=g88$>64VxM6C^ZVwyG^!TwQ|WCc+Sxu5$TKw50|*|ai^&h{2v&62k_wSQQkx{ zvPaz(8_S;ILwu!hjkQQDN@hG113!PdxVS*BsRfo3UQgv?G!jjMy}jyxLMyeZ-$p5r zf^-u~a#o1eXonz9!y4(j`$WLiv~gFUY@Rwo-1tKk+mA z6Nm?xaY!Io^YQV)__|va9@HOEi5{z-)!-Q&)qH4@y-8`-apYP!>npf_AeRd5JgKn_ z2bC5nA|1t#F1WBT(o=Y<-Z^!O42}kN%qtEm=v@2xjS$(#$gGt4<;&k8?vtZbO0{3S z_2>zH_+q3S*4k$H=f&cT5MWyOg8smPI>CO9AfEJ2L;8G)o9W}mP(1%8c6a9e{<$4d z8j0RsqOtNEyU=NT8WJKvt*)ub6(sNO?#??6IT6pF5iWiNT;&4iI#S1jitcM|fpNsp z5OEXD0@!<9^Y-ykR8T-EN`8kd4C6_M1MIk9wAHbhv^_mNdNNr1u9>3$_8(vK7PSd1b3hJy^X3Q!Fwkp)GVMi| zm;m~)Y-NWfE@R^2-yWG=uI}L#95bCpv(!Q`6l;A3b`?yPW}6=n0s!Fh!=czzhn?in z-GOxIT=Y?1UifN4P+`R3sXWOe3)DIGD3yKt_O*3HBagu=xQ3Es6n*g3* z(o3QLFKhhYVL)%kmtbT_74wpJNu#iWmazW5zV#@Hdut5s0m=lnw)KKzSs&`_`QUF0 zI>wr*dn~{B1nyRT_czR#EbEtN%qEnCfVyiJdr$cD|~pfGEc4^ z>djnm=1u={k#Rdw{BU@eGCNL@4uPtw@bLIcO@s6+a*B#R2B~Hm8R_XL(Qc&dh1Z)a z^h{Cofklh4UX20y@}~ecG)VA581211$CST@wvT^USar$)sF7f}U;E|2iJK+2s?j9{ zeKCUdHMS^p=pujYCY8uH9Tn=Q8uGhkq9o6jsmjyI6V$Yh03?)<&AUch2N~^k-HWSJ z273Hc#kEa)vOm_<^&so(U0ZcD&4e8$QXx~Pek3BkOya^YSS#_%#$r1)izga~cM?27?US>@t zkzVM|yPs|LWiZuF6shSnjB6UIonL(MRNf*+Crg(z9=AoF&BOb1PG_qBYWUi1&DGYv z81hpWnW71m2Jw5hYgT!|*g`IjnZN6N6c$k7!a!K#oActf1KVkkuUzjf3U@L`;(#K^ zD7Y9o7RDfb>_an)P?U$uj|0*<)p#`)e?rv7)btUV#ncnUEIhSj;IXKe!_UQ4{UL6= zU>YT(5=L-Kyht&8o;v**lb5xBORZ^% zro`&SPpBkJonim-JRb6+hubx^C&S%~IpW(St{ z%BYpQaj+%?kkFRv`w3$fb#?XHXUC$uiH)Cs)ypF6@nbYCw=dD;ESbNe`v(gELK z(I`{b!;K1TG|#noaH*O~o4@>4l}iTXNS?HD?1jaXs^Mm-7sZv_0*3Q@)J2%8Tqe4I zRTqjCcU`oo$X-HYB6CQ?;Eht_ z)rt;@$n}n=p`lep?@=dv{{mJE@_GP`@JsNM?BXQWQm#}SS6h3|Xq)-UKYXxgWVgFO zQOID74N9apYSj)3Y}#o$p{ktmwFLO-6c+wPYR4_pPPU8Zx}S&5dD_`B^|oF#<9A&c zvSpfdKo7wMPylqwgfI^`Rd91FfCw35ohUsBV$D(MeBXP8~J?T?G5q2OC#mbnL%6RP3#5_ zzbqp=5f)X8nPXQqrQF(;6GilnT6N7RdBkRX9vL@rj%RI5i1CgI;8x{1e>AAc6fmy! z2eFK}mo!!qjAQ8EuCQNUGj8WvtzNY^?*4Rq;9}JX1czbr(wS+gX{ydji<$regVF6b zpjC;MV;({x>d^7Q!3At}5mN3E3wzqY!F*GwILf7z{I(LIBrRx16SW(uw-J2Zn;>Ae}MYD>AXPlAeJ3K@cbsg@j zxnDySk5qsBXg(R%f>n$H3jtVymp5hfT`eMDT(bpmR=9xl^ia{QlH7IR0B_)@XV!-? zsfvh@L~}E%k-}r9?L_|r&81uX)x_~$UUDS2Djf-tKc1}PU>^UvGCBDAQ+esk_2$$J zj!SGb6JfV!)6TofKx-%pB;DW*6s5`-Wwx6|Qo$1O`0;csNLRLdz&yHa{cAoF|@ji~%>-AhVQODoJXczm4+qM}rUyV90f5Ulh z0!d*R6&m9(_{q_)Jt;Sb?K*2Rm%Z#`j__ztNx79bd~m@*XQyHif#tLKM;IpRCFVQ% zE62r0MImm-!17znX^HCqpinHiGpP>FE@6X;k~jEe!h7t1nqEApXo1m7yovaggI~nDR;!d-+ zM;SvcZl6=5AM$c@r(bJPKfcdmaLS+kvBdS(BGLn4l}>#Dy7c35B+h30NWx+&C0dz% zv@Un0t#21jP0`&ZnH%###876%yg;64(?j^Ovt`+a)wiWayqQtG{r(!wVuJ_O0 zDepe{EghB6bqln6&-CluS$C{81gKoO38lG9HzJX0WW`nT+ut3!{*9)-ve3? z(aEzs%xY;ew?4x7qdsBx5UG-|LZ={G293AKmvG}}k6c|B9Aqz+={#iXCYR5f%YA7# ziRqqX@Wtx(b^+J~fbb&zG3iJ9%IYe%td64LlG~Ffhfn^(Y&CPD&`f&s^rM zOE>h6iaSwW)}r>;mYsjzZC{=5;P-M8>P)ruAAK*THxkt9irYnfBo*7Nk~Q3 zJ3RT@JWJj!CNyg<71>VbfpAlVO$!eMGWw>lkzu-q^X&}FSSAW~1PpPhMYq$@|H6b8 z16hRE1p4_A^H+g3pjC~6$y!N81?ujYXC47LLC+-CcAepe$*quRgo;BnQo`^**$B2D!>Pi2}S+pH6(I;968e-CeE)WGW8O7?q)^JDPW6TIDKYKP7d*Y{0I)BYSQRGUD za&=%d;YhS$AR}}4^jrmo0y@=YQJ_{JHe&o1iqC=}N(;H7f`T?}EGPcqQ)hbRj~^#a zp47pnTt=k111g7arRyo+3}90N7zn+fEe=ayP#=R_)POCCU`=J@2)@Y4X#`s9$R

zmK`30zz`M=jCNL+8SEE9skwl{;X0Ye}Tr&4(2j?aUaG!N&Gz129aPz;KR;(ER*?ZxG52gZX(S3>9yo`byU z3cj+Z6__ToGg#w_fzuls6Qe2E1PjteloX&kVo~B$ghma4gbm%J+rT{q0|?yjQV(n7 zDwv|3!mNO0jaEXMtiT5x8SGOSd@g{?hO3S>4}k;I`!IkgaDoJJP{VQ0oQrN>w_+SxQC4YBXbrd~(6KV`tMh%k>~$7}(&BSIqFVP-Q;efNFva6^ zFKKYxukmbQUqawjrg*tqti*Qb$gHK^qNL7ki)m(x9l6;&d&sSfEtnWd`&$ zS|%^1iIL7ofd|%HVI@8tjespjc1w#udULBb>6R^8y1JAyrlwQa1P;;CB4_~JNR#le z<&)iq*e)>>J<_c}bt;Rb&;(luc-#p1Z>=u+XE`|JkL;yIJqIKb_X+gzqwjIv$0@>` zuW}?}qaglqHd*Kq7AFYTNJK_Dxd(%gBih5Fux?-syLRjV2ryECog;3QmJr+dXfr8V ze zTdU;lWMs9&vw-E;)|lt8%=UOC(Yz5mj=fu32~4_MZEM`x7G42!5>VBg}t3K&)8hd>Gj}@ zYtG9b=H0~Fjuo7lb6=vg!*F4r+i`r()2H187WLtc4+nUBh==^Ba4*NygCQ5>iZc<* zTd&0Kd>Cb!Qr5MXw8Z$4?5{fIfj@k$bJY@LQ!Ta;J%G53Isl%ziJg3-t)-PR$9W&1 zE|vh45cE`3#q{3Faa?QknMfyYPR2Hi()!X7^laeSoMmC*bmZXYS2_9SyvVf+0cXLF zDtUYQ;fJkX4p4jQ;HX84u0}cr5{9j5Am!i1KbAXET$Fb*RrlM&#hZ~i{j~cW!$ZR| z0mGs&c<8y!2I^T^V`|R?|`iQ z)|H5O;+%(BFz{&5_`a2w$9YDgJjO8!_wWUd{> zObfq#YuOF)4mgP2qob>3?3F56=7^tqeptbv8g`igXOJrUM9xiS(@29Ow!feS6~jC$h> zfU?l$VDd=hr6s6jUU=BTq4Vjaa~!c%0_tXW#TyVc+q4#V4tUVtUvVb}j)x%E3*(0X zZJ;vX&)q&7sWh_BGNAv+L}>jA7rFG$d)Vj`l?4rmC3$b*$Je15%7S;J>hw59QcGin zX($E5#KDe8h>g|q#Y<)G)-1P1*sY507b{StI#TrCoVJ6rY)I}U|HBHaU+V7nnI`9- zy^+wUBrgvdDSuJAFPdF6SbLmkS{VZ*P9AiZT$#C7*Vq^%&%9^Pp1CctT%YTQ5Iv1} zmf~!oFqLxHM z`ICZ)p3I$rX~ijls3E+}kCdl0cqg}1RQ6AY+4KbzJ6aK9lCTMYt_Ux*%y1}Dr5X|2BS5=p|<5iZJcp%@xsZqPKzMYzNL zd6@1sm2t>pI}p|~K)8eM1<9${HKe5wphBB$jHQ874FS8z2^hPl%!f%3-%|>!>1BjG zI)HTy8+B`2+awwgiy$Qc?1TYEYo5SfV&vy&={G{tsVL1i!mR~8yxaQy*-saH(iF$O z5PgrsfU+9t>nMhy7r7k1eb+9ngo52Hm!r0PK_^lko0VmYjSkZexcalVW>6hCfaeHb z*FV-^wg%{b9GvrRE+)b)4`I1Z`30*;M|XzU`!q9FHH+=#HWBw)zrBp*{?Rdoaec5~7;LT>0m(Sz68^R?5E@zd~(?fAX=FO_6(v*2u8gfo$^MzlvWxY&^3U_GQZ zTVnWHZvf9ce+9v?@qvL;ex=QHsM`YEDeo+ld_SwuOmC8Ysx&|0e5T4dZ?TpP<6GH$ z{;O`m>^DsBXJ0s9=ol|uR@>3vzJggxBM>LCccbGXqFSfce--c#)je71=Gnd7>rz6- z!>T$y^P%F09^}!!mTJr-54NsF1W7_=kGc`;3=gAD$qlf{Lt6g8_ANzn+AwK**lp3q z=bH7vsF-ssQYu6lTzX)@;A-+B;T(g4lpi-37M7PG^Et!MpOf0CZ{>2$p_^D~jiz@3 zco#qZ8pRPN!C*%{y5V~kW!pZA^E3!smKHV2nJj`>Ya2Q3Pky5K3xBC=NLi?yr1cAO zpHAzZ-Im0eyqv5oistFhk6IoW?gA=dW!3t zl++q;#XtFatoF3waFC(Z%^t&hQ6I=-e7)qE-3BJ3Ki2z-6Ye~Uy3j{dQ-CH9mEsjt{?iXPz|MpsFsW)XRUK1*={SykA@d zP%g(Ih+tys_fb;QH>t!l9L~wTaQKt{|>O>M_A`*A%1-rLylBFk%+L283SN0s1jB1&&iG-AkBR^L2hyNZ%@5ADSQ z{wzFYXmoZy`!?TUhaC5(&3Y@8))*b2#BQmp`}6zvrG7k?~JU!k*0t7o$2!G&XIKQF7HFTlripjCaCEqX44b4O~J>N zm8;P`U6pw-|Nb+R)CY<3uVn`H;>6KuwxaIb=roBHyN-(!SeQEXH4C)>lR|9|nQ(id zs*PXtLii|UHSlnT1G5@y*I|sOtQ;u*k?}po;n1)p$#w92r_9RCSy<;d5L+v+%N-oV zGPs)eZkoWJ=Lo_$Q3m5fwb6@8IIN?+1b_}@+Bf@}4CuaZ1Eb4|F*#5Ma0kNHqc#!6+R_F+p@4!lLI-?V8q@SP$Tb#T^q`%t6aufqpc!%)wx8Xo3FMkNn zz_z~XU+zAQ>+CUVkw+LMf1Jq( zRBRuOi77;MhM0~N2|dDa*>bSv1VU$iWZU=m^@TzJgfy}ZC=OyEV%u5fsZYOl)Iap# zMUy!luSCPXmFYvgf!#xm+fqGlH~eyU6YI2&nXI|2<8C%F#N^}-pd(eDg&`aE2X4fn z$aSwfEO*Wl$NgG+80z~91c#-#oA!6%&T|AaguN83Fx9NxL*F$9)Cya4x@gZU`>HY_Zm-k>=^#vs)e ztiKUC|FBE{1pw*snt+ZAjpdifsAn!Nx;i>(b0UN@jUOl`%D8`QI$LnMi(N-pA?;eD z^&8iPigvnk-WV_>{%)=TA#!|_uZd79J%|f*o29w%TI!ZdJ%&6R_`2fEY6eP@g>h-x zFsIIUzL~p}&*U#W`k?#xu-!cJj3ANj{=TCp;huEx#mR|N+2`FvO=pJ`EES^UU;G&5 z=KZ&>G0kW*#$xe}!A1{qFUKmPRC z;w9@@wnq0mN%)lVrD zPaR>;)&J=TY3Y!yqh9lDwC;*(=iZDxoIMKKXa8#VB7FaD_jc6pE8sYUAuoAFyQh+k zePWfFzfI>obXuY_7|D^6lA;=&9jNX>+YgS%L;h!#{ltSGKqFd9oM)J70^J_Xs|KA4 zxd52!G$J$}bVXpXmQSFPg$o9o?hYjd1qZ-_aid7}dExJW2(SneZLz1W;*N5z{Sz0# z=*=yYcMAo6kVsWR7&a(E^#EM#pj!b61VzJPp)*24PMEh~6EHL|fZ(Cf&bp( zp=ho;^TD&8NjDMC^eq;KDEZgF>Zg9oUjOV%`1Bj;za}AHJ6P0mn!eMpNn-zIVJROW z;qYO4+VN2JdG8J&A=tKnQWq~YTmXpy^1J5r#5k<4dx=forCF~kDENR}?%vPCiGdCV zLpeD)^y6#xe*rGjXBkdzU@G^o&)7QPTQQob3%g6Y8fJ4D5V@t<=1=Rd{r#Ip7#lRQ z_MqFs@yD%QNxo#1prmj(<%Nz2eV@IJvQ?;^1up%A4da>3!b2p` zP%xYd`uPtoKv`L6Wng;0Cg}hqQ_{OZjdE_#h(?YL)G`0Vy89<1=WprDe<9}mzxkFe zDnw4;GJxFI0Rcc9hyMJT8H!1OO7*Z1L`T(ibr@{%>XaQK7ug8^Bc{Au!SLg)uP-J* zw~p*Re&Pgis$DjRNeR>))*D&jamuL(kPB%IhL7yFV-Wag$Y1~q=tJ8VBr>pExWG?j zZ259m1du26ffP1&c1|d#F%t)9qN1~v@a5zoB3se@UbZFU)XWTK4P}U7{?~2{4}{69 zJ%j?~4Oq-jk0TJmWo!f#~+;b3;LCsr&Hu zwlA%lnfUnT-oD*$X@ekB+LMX!^hNqk4H(as=;=ZA_!5_S^VH1bBv^#HiZL-U7(eFc z3t1h8sV{lo#x01umDr8W9>@zY7dWd3@NlASVPTQ{C`(ZdLi(o7o10IM!%=wSGLpep z;|K-1(U-Tee_)Pu@;%u6xML9dQ&CZ2%8HCiD zG&VMViy{zW8HgYH3nNa&A}U+lpM%7AgRlQT2I+q;RKF)2L6A5F^IAmbjA9&w7yWEZ8$ZN|ACd$oJ$t3itdd1NZv`Ge_Y{#`w-+D_1B0|^M@I*7_cb?9 zdGcg4w=mIRrC{6L@3|syfq`e6B_|)B9o*E*ra;2rq?WvIwX%^tq(^bJt^7auoyjtQ zkyDk0goJc_{=o#DyNyl-b1l(7qoV>w9sH%meK#c~cQ;a8e4?4o@Yl%f_pe*T7YUP$5d-jN!FADEOi}!{v7my#Cbqg^ zHR(KBq=bEO*ChM`k-$v+`WH6l7?R%iZg>6s?wtnO^fE(e#;dEnOWzSMmBxLx;#?8_ z`8G3Ad4wK|f{kBX9GR07Z1XuQOF2q@X?fW!U=Q&-AMB>KO1@jkT|a1!w?B`Dz@-Tq z*V>vIdFBHYqfLp&*w|i$Op$NA>P`ut^FjZO73nl#B?GY|=v~&<8JHLb1+@lp-p}yd zN&GP`Qt(m1{Z)#n-cLofyu9rG<6e&o@Os2Ai--W%7hvB(PyEI%Z{i2V{15B7fgS@# ze5Gn_{FAkT#>>CA=zkKK|8p7s?YpzPKtbEp6`^W90@YA69hDW{2_;X}-o}W^Hb+z&}AW z$IWzZCWeQyV9Z7^3^!qd>drf-qdKzAZpOSfY)MWz(~Q0cs3T{b3&PdFR$Ca;vZ2M zNQ#Mdap8id+IYxj>Qxg1qtJ4lRm;g}7Qqb@my#NL^$uC4dpxtRWBV-xft7Gy_g)kl zo;ZOIiZMWZKggbDe~R^9WNgap4UDTgHFb^Xi-6;2gY-nHlrBYM8A+OQ!?nqaDb@UKB-F z>+9-_=^oJ#dB{%1c?b=IX_F2y&b*baVHaR88HhZAqtMUZMiche60j8)R!Vrd@Y#cB_P;17D5$HGm(oP-fc#5h9e_R< z^MsMYR$|FM-6~i=`uU-Q73_mBE7soqOZ`oi6)_WZ`dVF_^{k2j!KN)bs3{ ztxJJl5S7>QQ}`%HiO(0ANY7d%h*q$8BMPRnva*^*(8c25z5^!`rmtAbq{Js%$=Gx# z49D$UId^BQdcN8@Kjg(jN@$6r1ULbs8GAlZA4nLS^dCGhx3uizMc9Kb@nOk$T(l~U zqXy$q#`kbi0DiDGtiBFE8=!rR-UCEi08Hb3&M1KxS4s@5Jh!nWY{fH%VI-tS9GJ#1 zzW$|!E{W)o0s0)+pQ@^=nNpA(9Qfx0i8aV)CCBUo)WRK@PTN%^R&o*b6bC`txr1k^ z3aXmFZsOmc{I5;-|4P%rBbE&Fs$XSgfZ1TBXFFT31S~30An;!+zWB=*(t4fdJ+&xX8@=RMqbI+lvsYPwdB1HeHjGC-4~<(X5JFDTsO?j-4|BZX@ zofa<}eg6;dvssY*r~k&n*v~(A-L-8q1w1d3__lA^6e3j|fAHYJlP6E^^G;8n2kr1I zjjtx=Xn%419kEXGl9FD#Vr-vTv5BDZ(O`aEl{%mxo@=f1YNS$+&E@kh-m!bBt=N}g z8X6rFgBx5ab(d=U7E$?|H`ySr)p3`NGB-EZ3ai0ehIH??V6+deUN`S1UE>i;#uF!= z-PTwWC3P--7sW3udf7&eV7{Xs7y z-e*W@dBPF09B3rCK6749DXy zTNW*L9LeDv$+T2d0RKR49K)8_*Ovw`twI*dt!e*VzsCJaa$7>4xQUs}-j`|Q&XC%o z({~{I>Fv)=3yJrC4r4S%^I68?#X7Z|HvMx*Ls~MvMch0kAu0J#Pw#U=!u;%PsunZe zE6oqN_S!S@TY^7WhI_^gHGCkWGR; z7ij&1mcNUJOYiwnpDcQOh`a4;EtTprQX27t&YU&#OW&GH-FNZ+@Y(O?baryfcQfOm zbbsrN*#$ZL-a_m8uQa-w(+J!e#HVez-hbKc^PRUM{UqceOE0qX!hhcRVZk_X={5c8 zji;98xn0+uQQ)*8d{L8H^_zHVnDu-Uqv=3hWp&h&RRdk>%OYl+Yd|d54xKs ze*_LaVBD8MI=yg_lQdKry}=5wB`^hHzUo0Uk46RM0nT3-kHK~dqv%|?)X?^!CgSpE z-dsSE8~q|OFVZOM;Z4QFpc%>Z0H+U)CV}MdG~qrlfJqscX60%B6&ak!MkX~e@Pu}+ zt=D<$D=)I8YUD%B$ydauRC1)$M!J?BXWV(4ac6&@$+ud`Q~T301pcinCHlNZ-(i%}(1HCy4$7|I0*5jD`Y+56;S)am`SaelA-N9aHVS=4Y5EyCN`E(# z%Y1X_7nBqgFO*{X-S#|D2d8C5ZLH+AMsiDuBYXGCz#0K!-T;=rivIR+%;Vv-(0wxa zz{FHiZBRk$e-;W7J|ta-I-_EG$jCCJND9t}-yG=akyBHvh*kWDRLf8fQmq4j9qa$Q zWS~EMIKbEUlWdf$9u9oKt0QlTMG{^Wr!*9?olw68^uo}Nk?2Kw^OT3X`x$0t44|x_ zw=y%kldQ8l@;tHKB{rO7hvQG(qzb0YonUMfzQ{%NZqzIm%uzkH9}5hU8!!cymzIzMFds78XbXCgJm}2%jTYH@FFzW^<}a7;QWarIj%F$K(~a#z zwMb}U+y&s){A^xwP-9u|0U9Aoj?bwd7h7PE5Xst$8l2EXPyD2GR}vn))up@VdnGS- zTPR=KtGt?rOS1LPoG2(N%jNhr_DAB#DextB(F3RWNgowt(>gDhO8@eE$0k8quScOWK6dgUDpm= zg}>gp)A7-O5BWpZ&+3b?7%I1-Sl$|544o%_#IR~+5fzYe&ve{ zaRl&X?*Zwbl&-jyD1CRL^KpKrVs0=1WFvRl>V7zq1_u+5?e!~Nf}#nr1}mCT!U+m~4ApgN#`Ir; zk%#w}@@q{bAsWw<^_SR;xVYRSLRMdS259O>S4EE-5BFC^G2m*AP=6|M4l&3{c{RM9 zKu~lkrkbY97F_7B^J)HRW&7nB)AvzFk_-?Oz6fojo1|4%#c)Uy4@#BUA&RK+wUQq9 ztz#mz>bKtI&BshTLvlz6E_CHk|4fJ&n*Ovhbc)nuwzC#S6bUY zsyZY3hh5P|le96MKsYw0p}QcZdZjY&Wc~t)7ptPrXmxvjU!Btq;=jhaU!p$yYFl#5 zPA)_^3n@x(-p#lSlq%t(P8!Z#$T1<($U-;zj`e+xXtT46BR(Ybym{ zgRRsx=dUT>;#1ncrhKTu<~08r@rlacy7klI;1`>c_mXp#6n7*SCBvn?gp|&dKJ94F zaNk^Tf@6$M>c4HQ5I6sGWBrf9&U#l%mJn@lR#Iakr{0i-XFAv@#z7?)qOBZ9=S(@0 zV>9fdk1qG?>NpiXJWhz$h?a1HQ#M4oaN{X6_$PMHbpV^u-aN4ulnSV2Tz3W9F8Laf4iLX^VTABl^w}>-Mkb8UGM|AutP`I!Zw-M)M=S#8EgR0$|#v` zoh7m{aNsoF=zOKtY$UR$PA?UBSQPKG?Tk*_&3c{+4zj5g?- zM9iBoJ{2cZR*KB$66W;$zQZb2kCKe)JNMr;PF6sDtg~@Qq^U^$%j76GAtB+}ljfbO z4)l!_1m_!2&`rYzg>;uSn-S4@Mz76HY(U^@@o@iGuXa^kDQiw-6z?(PJ(lztEkKzM z&oa$(^@cf}98BQP6VV(q=_U()B9ckImF`MZy?#|l8o5~;OL2Yu0aSl=R%_BkQb{y( zYeZBCZf2%BzzR_rO`G2|bG|Afi)6g!8sFFEs z)7u4}n<6|i13(7G7{HY?$?sX1zi7oT04?a6C~htOcX;HJiB;H)VCC=1qfHeFKTHm7 zBS%FcPvZR=0)jw?yTYM6)oqR)4$rHbD#gukMTRQ!! z=h#f#Hb&~^cAsHq#VwwE##ilxyp${?>IXzcZBspnkH9QgmJy6$+jSo7AdGwmEGwfX`Tv=FLoXHs=t@KsdDw)pLu2xb+4oEvrdjqK52CO zEEC5XCnsc`!RJylZ=2UcE~q-Ks$-6HG%+G#@f zwPwFk%eAAL*O{bYYG*WnXPerwCUhm?iFpu39I_>cBCFE8p$hU3V_Wpi< z@TVjRx!XnY)Evy(cgbCli;5^eXLiGIIlARtaZNe5Ocvjc^v9_RHo5+ui@fvbT`|Lf zotU2Zf9Pgl_$)r{_VZnB$DN=L_hb99UlQ>+Dzx{xiGQM{7>_dk=#>-wGu0h)AV}yg z{p<_X?yjK-JHMIyR=G4Ma|x))|p_rTXhpbcfX%> zJ>6P(>9ru53fld)7IAGWJ8b78U%NNmT`wcSOB*bN%&Yn=-uN-l^3}l2-fpo>^@iv+ z&mlttehQwg9s?^w64xt_#7Ard{f!M!8-%S|Co3vm7sX{An!pRykBl4P{)ked>A-Q%}NP!1=S*$*Et(~Q&9Me9;M%*G%3 zQ!1;nHye|C@-;=ZtU3|*p!CBkB5K@fKd7pt8KiZ8&!sP2CFa)~3hg<} zd@0Wg`9;55S(@!U^!4Gkft#j2@mVs{*Kb)dzTUog`gdOO4P$KqYYBx`Kjo>>Hno>& ze_BZ{wPNu)P%O^X{9+F1P?fu_n0u!FVcGt8k*{(US4Jk*e#VbPixzk>+_OrjdBXJJ zbiRJo%HkDI;fM=)!m`CCWFZERtVlLI5A43$SLidBs$7%SFA-7?%UrH_p-*q*_}R#y zPTqHr+8~pByR?wBNJu*S*p8iEA_))9t{aBtC5F20qE=Y!q0m+?6b6w>4Um z5Q(~9)wbtm+vF@#oM+dn$up;;KRwn_DLm9Z$ZBMUx%@i?PrnPjhlk}aAEn^z4Pzfj zi4Ib-m`zREyncjnkjBhJT8^*``lSYoA**LnK{nRx{XHu^0pIhdj#rGykfm_W53yU_ z>2e?`NIP{SO<&tDLrPfm4=wG`)Ypdi()k5P?=cRxx30mPu30Qvn>F^@Wu5DM5>HnU zkBJN)Z)U2>Ht)Mt`mOEvu98=TLvvVjYW*uQ3VPU?t&UA+4#yi45^ zsKY#&$0)k^o7D1HV(-_a5hpuvfFR3FQVC`E8f@PUlGd|DbUKE|q72m(bm?L%+gK(B zWUUrRF{B#eyTTuyA!ugh&}S&QSWfO>wJT+_^Z6%gAEPQ7lS;yb7wYpZKobfdpz2BZfIJUFE1ivoW_%?(`09- z-j0V>ekM*_Dq8(wNfb8Pl1Bw!F8%n%Y{Sa!eao3ins8B*$=t-zfUmiIoT|`@ZlG&w zOZo|u`zqbzgJjQ5Q>}!Q!u?zp{*<>IYmDZuw0`XR+U(3~`w0ri3KgF%1uPsC51ys1 zMgMe4`?73(Px{Jcp`=%tS7sIr)l~ednv=%4VlOIw&#O57ur7Za;au~io0zJNlAKbw zdWtahRb8z__7nYzh9QT~9-R7qxg)-Lvs}EqslpCIf0c3iflc$_&!r=#R7sOOtxKyl zt99aU3_M5>YK{ncVqBk)9{-l}2Yqg)O%Y{A8@a~Ox_R57x1lOZUjx|Fht{&V)jMx> znh2N7o$dc#G$<_femP%ohqYyxYFV%FMdtF@vf;jO?lSpg@B=3j-1O`G9LwOlIL)@;*uY)ncs zK>a+otK2QPrs#wVnNu*$)Gsp!wBk#-D--q1tM`|XO?H|InYYb+(Zp%EPi1^_*FNeo zUw3c6LH~7*REwc)mL0WeG94vv46W~UTC#So2-l7ejX_jLqGYH`Tl*?#gwb<$2Upz?ygeiz1rL@vz#VilMoeiYVmmBYVBLI z*RCA(HGzK;nmB#<1P5Okv_5FjNND#fX)f(3o{Gs|iqmS*Nan8^KS|-S+nj-BAk;yr zp;VHCxqyXJ=Vxc7uV8zz#e;WzIuM*3bhJoQY5CMzQW|#gs=cHruZ4)_+$NVt43n+A z&Jh<+wLPq%na}gDOs4WNTDwHcQD*b~EqPpeZkfZn--&}0T%xm1#|D)HBxXy55{f(q ze*OM(Z)D`Cr+D0NMnZ~jcb}r=*m1_!R1dn{a<+`c(SNqleb)V}x;*{(r6eizn)*Z_Uc2H7`yt#gn`$Meo717X_msg(z(Gjnc z?K2$_`E|EDrlGs1s@SsD1svuJCmne0uMw)4^)l|93-7P}ekv%bvwo1nvzhGpX5UFw z(zLsLC9O)-$uAQV0zNH$a=&eP+56ocuc6!>qQ?(&JZ^1%`Pz|nynpbWk-&Jyk=gmZ zUb{yYNczmgX=bTrX%qrSvM(?)-@h3rl`SG#Nor?oA!WL6GINN1XVuoGNl~faG(o0* zXN*4HH!y0MKXhVfy1&?Igu>iFySZ^Z!y_a>m34@oe(>fSC8w3JwzPJ#m_OJ3?$gn} z75(1vHpW1Hc=?wE+2n<5&R?k7XWidC&JK6yaXxXWuzg=tiKD^|x#q^9Xm(yn_R4U- zsRpUEAotIeVdIrg4XDGt@=Kd;kKF&^c|%ldytNXGHU!CY_L$Dc<<@`NJ!gAtuw|X5 z8d!*xRDvn($`)lo8qyr(OlM1oKIggIn$RW=tt_7v(FZnzFsficCqq92w{_ zr1(I!)}S&UMoKyA5Nbx7)nPJV>+MjRLs)VR2$wc{mFE0ir|*+h;4U>vTt4x zJYiAN%DK~l^!3Y+RcuDbRoxF)n>~29jPv-OSBDmB?q=uSnA2HZri|kGdb;Cd7tM2z z>s@KD)VAETXSZg8g>8-0p@!h$KNrm%T9rpVCtO#HpBSghQ-(cMWcRH5~D+Nf&%FCx1bqXRJ z0=C%aHODG7qGdQwt=$^YbIOl-o;CI0%2(;UW0Yh0t)MvvZk0q{)pMkEXUZU78m@M^t9w6V_hNxiDTgZ+hU`0*~}z zy`tuw%@pM`?uPqFvZ4sLUbc65|UQU5UGQp5-4g;KI}5j}^iYdsIU1o^y3 zu`j+5Mn|;M%&>-nq~D zF4m2~kDS_r!Xl>wGubQmEm=}lBOPGfN698xInU8RDA76penkO})&MJN-n)%5M`@*X z@=SWJ8j^LrDyO%DH(KL~TPfGBoS?9*8EmyczHW!>iHf5)@MSWRC3yTuM)GNm>?5omPG&1XPiaQ)fZ%E!fJ*%$U{!a&;9ZK*O?(b6;~Vcdc_ zU+wn!iNV{_r^m;Tlg(_z=|VY~>Up4CqHYL zGk-Dc+B?*(N$ynB!nYtc!j!5rZn#glZJI<>{-j*oLZ;sD&uWj_kAIvkS)kgym7mXy zHeqnrdg;Q&)~ed~e_f7v*{Fk7icdD$VbP-B z?pm2Fci%$yJ8x!mrfx&LdZ=yW@2<`SzNLdM*OpWlirc-XTNOnjWS1+Xw+2OoHJN|X za!shklf_v)ZqHwxf9&NR!n@oNqWw{PxVzk`{SXB}k1#i#EtFdUt20eM7CHt&f7j2G z_kIsr2x!j+GJiVzbF`_qO2_9?1!dzz@DraCtMWDT0_*E`7NmI=c9TwLxI=w*ouaUP zVIh7r)z(qcCuB9@J%x1CIdzITG9^`>)6{~B0ll&Jhnk)|j036p-Mb@m7Rez^!nz`j z$98+QH#D^*Lim`}*aF2b(Y-#tH1Xyhuac%F__yqn2~7!oDV=R~qp?v*Gg5(0e;4aH ztN!(6{WaduQti9zJiCh%-0jb~Z6jCeOFMde_E1uf_qjV4KQqZy%iZ~PE^VFATG+5w zI?z1w=*=kbKqj}(d3kHFhihxlOf>${K4Q*G2kOpRx6Zv!^D&8&os14V z++sHM_-(734Eu{=`5&{#uFd|=3j*N2t z4BP>TN0vCjvSIYzE93AaEyK9#^PYw`At6t6z4FcnO|!1{A2&(4wcLMHt#Z!n#QWyE z?Tjk|7d}25pXDsL!JiWO#4#~FNI*)ApuyuIiVan2sl;R{{dQUk{!S*iLXhdQ9fJ zsHHs#1&`}fW)^o9ECFy^(p8*5=&3Ru=SSd7csNP_Q6Rc|L6-A+{G88^ zo-@;mO0(oH;@-e09;SlcD4Jnky!+ilC*dIo7Z2q)OPF)2_-URyN&jioejLyyD0kpe zfEWqyYcRfgvKY^3lIgpB=FlROaSMJx!lS=)4bDD4Ep~H7fB7;2`+o)=Q=+RV#@prn z(=g`CI2YX$VC@fypAgao3fbVH$?O9r_42}kxnpWbmyy$QD=3H`Wc9(%-*1L+x2qRP-q_a(Z#4*s&_h-`XE4*OTv|t~R@QuOEp#m%}Fz_zFqg@Ha{c{BzoL zE||u;{mYtU;N{MOQvpV9o3GZD|NW~XN{mm!Qjn4Hu|r%~TTtukvad6R@=@|&>ccK4 zFg2RWHnY-r|ix1Z9lWBg;B6`9!Y3rX4r`cZeaf4`k zHKN+fyr^gL_`d6!n#a-=EHV`7bPzR?Yc~(j3i=DM^sDY2x;PO1VAKvt7JzOBqa7^E zzYK94V7S?PH6vEu z2XZwmis0vSu0g0ZcH_EeJdJZ0{CT~nO5r(85!3wGg%(SHW}g?X6G9CQ=8NNS@*Bgu z0O?;fwp!mX?Uk>qIGc>$dX4uRuV-h*f^A0rbf`Y@F60Lv5ZZ)g<@G~~4i2l3#DE%F zrw}G_@6gpaMfP1Hq6Vp1F@pBfp9?uwYJU0V%|kYf{LzQN&F>{3zpdi>6T@z)^nRqO562AZC<>io7z=bH&&yOnd zSfL2>D?$ZYXJr>;T=W+{zF~0~hy0RTB_%z5Jo;E$z{V9z+Iq)T{8+JGkUFnv z&3?TMv$CrvfrPTv8_dFvVB4-kRX^Sz_9&buKbiC_MO6Nq$nP7Z0vvxu*2WT+{*s8? zBKhav;8`brDH3)Qscc}UIq&c<7(s#xsO4H00&blpl0Ldps_?(YeWwz zY%3FkaSc)s;5k6F0dXeTeCYWv7_=dCX3`puI`Nu#SAzXXG@Xa>EHHPL4!B4V+5O<7 zgMX&H>v8KhL}I}>MN8|0a-1N1EbuaUt8=ZmUNoJKd?1R$&L=S?Wd=ndEPzzg9t5n# z!87U8hYzs0h5&v(vp+P5&&sfPjN0ec{s4(I(Bu))i-!*a(G3H^7X_D1Xnd}k)-24m z{xZEs;$uuE(~N%kN#?2jFQ6Jw|0o-$p5M{luA09FLKiVQ4{m}UVV*D>jlqRMtSRzH z7Q==1Qc~8!qxP6?1X48AbF9w`3aaJ9%ry_zZd82Xg_`M|Qjp6MQzKDF7#Ku@i|gnB zUNaoFkY`htC?|hU2GmS=6cN*MO;xww;xLS;v6c!ndX_3(MxUQave}XEw$#~o z`=pLA-yz#=#pVtvB5oj(KbOK+>m@RanY_io<1Xw;T@6EKe6GWC+HdOco1epEGFMx< zVPQ07odYiN)-79*u|$&xNf##)7!@B%#wn&>+?$IvCl&KSK->Jm3B})t3fc5X1A;(( zef==|DYxGTBnbi)#0!z;v|MEI%Q-1nJa*Ijq|_>7(qysg*N?sj-_a#+`Oh2aA$9N} zxgm}b5Xc1)JtJcQpABMa2p+I;=C97(xqUm}H)%7&0@!eep4&XwjfWGoawwR%Rd{qO zXc=vdmwEP_f&{Enme~h1cHA)d|0u-Nf1-8N(K%_?7sO+xgEw~d>hm=gdauS7xp(3p zm6LTOp@wpwC8}y6l898O3BACZwoi&}*PAzQh~5ma92HnFl#!_hOpk2>lA|B-5HDeO za6ibRoOtgC{D}N~eHCFamwDpJ0k-qZ41sTEzMRth|JpnEf2i|4j(191yJ=?+rO0KI zkX5VOG6}_0MkuAtC99iDD|C@8LT#q0PV1p|NR(oA=o}7e>F9oP3AM#mYfwTI5nb41 zvCnUv%dh(f96xz@JPh-l_xJtzd}iLy=POB<(tLTUuCONaT#E3_=XnQgKm3Uz+plV9 z_|TPf4!TXEeNg@PcD=P~%F1U#<^(3sw!lO@!$jl2m`m9R~7S*5i zTSjhCYN|IU7ayOD7g`!K*7*DR6=KC9aHP1jRFJ4lGyfswqkNUI6##{{IVBBY0eW^Q^ms3CFR#wFwoU(P zXo%h#62j;94QPrQlOBOD6W?)XXl|(O)Xr(?8$N54L`MDwu9^zQflWsvc)W(j<=)x= zt}(3#{?5t4K|hTFXZ0%jf!y9eZLIG6^9)bFs{CM#-+EW;IYw=}jnnTh$%s#h+|r+* ztw>N`p0HB-Bp}dPEiJ!CD4fik97BCv3rhxurQY`Q-Wwa6x6BDhO^EXWUcCt*&UiO3 zj)BI(9vgN9pDP>?U{>?;Mn@0PG?C^u&s7;Ya$ukwo2t49w8(?h|4geNXZi6(0n|~pi7H5Op(DA5{3`N_r?(Kfo-d;1QVSSzj ztq`TKQyThZPSaMs&7y5Pcbd;v*G345z*C^;j8<2-&YE}e@K1#-y*%p8Wb>|Tg~Scg zS)eJ+S)JL6kVOe3M+A+wc1lu`RKm@`#8;>0T~U#Vdiu*#VyQ@?`J=VTp~sKEtt;&Q zPo23_XL1THR%Us0WdHZ84t_QRtXO95Ms%Sl)GDGYn7V!^%*K{IDaS|%HKQ#ThRqX( zh2uz%oD%|vAPBVV?ZZfFoU3&UGoWc=rRU}$Hh^#UUA6A-m`&!f$ofr;9D)VwKyb}p z%}h-lqa7l~73@ok+DcE6oP(Uvr)M9K%fmJ+MJ>;t3(O9){HT4E#oJ@VCY$Uueb4-` zVW#TOO@qX{xRb&Wt0+SP}B+_QwX3O*}tTH{0z_btn=N1mDc8Su3vO=jF|` zvKnB?;W`2|LeR>75vi8V^cQ-U03JR#qeVO=G|E!AJ~JRuzA)7w$6=D5*}pxF%V1Cv z2g;FyplcDLDLd{Ob?o?#KGF7SQF;|QB*kx{m?u)z>wNj^uW@p@1u5->V@;H8S|(Zq z1dr_@nj4O*FstRsEmvtkrJ46s9eG)E#_7}FX^UqeWRY{x1jP@g5v$&BIsK$p!Bl%* z(b+GluBow?;Km>cJ)yFN3Fo(-j>BXg!a8`kcAVn$69adttB3Ofcju`(CE8-CyyDBI z!N?E2s&N|aH#RaV+X5Ur1Pi35rY85NvW0BV#tVz}rJwp&1|Jn!e=tr{v#ql;FzlPF z%cG(O*`Z(BSgzK4GlcM~FBT$LD|p(FVCtSvK1*{yp4M4)b}n5AXA;UcLMr(`Q8h#f zd6Cx{0AE<}N2Nx#pL6i=l=Ydkx#2otn)+5{sU7sIN*Jx`7(?-`?8X?7AEfR1P&;b-}JQKSNT2$+={y_z~L z9c3C|r+Ip{tps($8U*l*3KD^{+=2o%($ln*{|Es7c_iaKO_3jKs{mZ(Vk zr}X?)VyT9n!gs8(Wa=1k`SdyU*VYiaNt(8xf7dYjfe^rbgI^9jD!02*s#NxoyW5ZD z?sYKYlUBIiH@hyyQYxUzS~)~hBPB+y7rrHqX+FL>nqUMYdfHo>n`cM#ZZ3$P4E$da zR(6YD*=PNchK`Ptj3AJE|n~F#joqtge|JJzWyR14a8mL+JqvfM z&7rOBaC8cJ14xdwEkjLFn==->?r3doEf+-Cj>;dR;wQL?{lHGn$GBj4Y|*Z-PRMB} zJPnKiSyldzxAl1jUn+UH#McQkl%=I-YA%1HLnVxwV>ier$L1Z4wYK~W6DqKg>gs&I zJxEM)qw@lD3@j|%h%tRPzpqxsET(cqaI|K2_Fj3-QU~6<70x0ZPnF^W2M@A=E_>K8 zL`abQM)%2yvZ}9t+&o66lgXvNq2Rs<()@e|=qKvsWf-zd%-P!Zeq@J1GWf zz5iQ%TR(nZnc@rgLv4onPtRD9q)#?jS^@lW+S8|lLHZq-Ra4VS%KT(*+s zuy?P@e#y&B-Q^mUEKF~f?;3W;LtZh;eFyJf)QMKZr<_`DT$B9E+X*RagR?|hbMW7g z9cKvycio|8(reOzm%g=AQbIvVmwZeXR;+}$yM7` z=#g?@*aDG@a(G&GY2yLQ7$@E(#eueQq9FnI98lIIl999j6UExe?6`zOXYO#Gneffp zk^lXP{~tK2%HD(J;}=|KTAGpbk4`qeColj1Ffo7N+6;~Qxo7e^*_f@F!qt;5a+c)S HuHExHBjc{5 literal 0 HcmV?d00001 diff --git a/figures/speedup.png b/figures/speedup.png new file mode 100644 index 0000000000000000000000000000000000000000..185aa86e3c78adca09ab393f2ef773b6b92cdb65 GIT binary patch literal 19178 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

LZY2WPq17$Ps?|kMY4X z+Rny?8)5;RsvuNoArXxG0D&82lLx*NV|rRDs+)K2Oh7sV!9+Evl|g!(q1{^%l$;e6 z_280s?5;xWy~a)G0)OMdOv4wnt5>(Tx6P-jH0=$*6$P>`oE{K$Y>cCJfJkMWD%6#t z0|j&W*#$%m*!z{w2Vq)`Q8w4qghz3#5#iv}@<``2er$v1jev)c69nj~3GNwlPj6`Z z2F5ZQNr6QLB05_CqKW@pcJ3)C(|&FVSd!0dIkx}uj}d*++ac0SG+#{~#smsgawy`x z8jGOZbKIJNdW;=hQgQ$?%YFvM^QqXT%zc8`Hm#WzXd^y;{5U_=kPHsIbLjD*rG)Nrf=iv9nRz8B z$e>Xwb7U^~>J_LQ?Lh|%Ep=FBhH9)B*a&mc(C@w&N`qaNQL&eN4)S2&M8P)Zi=s;E zh_@RD<2$TfmTpqGCAdI>%o*#=_CK8=D_4ggN* z_vj&>?QLyO=OVTHKemY_Gf`6;!$U%tqG>^=+BB;Prj-!4crLrkDgdG?R(AF&xP!nz z7rjE!w2OKTo+U;r8Vm^ydZ0)VBiNF(UY57a%TPOJ5K^$phWJKqI zxqajc8Ej8dLseB(F1-+>oO`Nzag3ilUUWBtE=H}$xCjiqa!2k^S@S&KeuZ2yzp61`OE! z;aN4&-*tqQl$7T5*5R+`KL5zgWx!5HkKEY?U(8y4L&K%g2*PsN`(>mZ$njtV%vCM; z9DRAYzjOq{(=!YxA@p^KWErt)D?KjULHMVV{>cY&-i^B?Zw(FiK{*-be4~&Lur)p? z!l1NFk%}WCBvf6dN>`vZRQRVgJ*FRn%uK>%n^syH<#T?v;o;)!oZ4a0@gU@AU(dMa)gX$0ZcCjZR*3}tChK7THO3k%J z!gC3_{?QsQluWrpIwIb2N$x*aFMMkSmTyS@>(GEF%gxQtYgN0)Ewx_y*X8B=z_A7c z785irAa`1=H1UT43p_wjhrM1s4i=s7jBC5S@j^I|#0mPZy^*x+Y&zyG$j+^~uMOb| z06%|bLA9}Y9GU?RzquP$MbwZ@TOf2U4RPeUIb_PVtr}C|X;?QS+gLsI;rRuRA3t7x z$-~cI4ZRGw*Iv0fEkUVR?i7WvdXn_(*9*P`=(u+e4-a2{yaDSABF)RETV(ZXqrD{= zT*QMyEG&Hg{(UH9&@CxWHsx7EV||&IDi7jCpTLsYLnf=xl#_>g3gUHmObLLTFy4N8 zr31U$*p*N$T>(~gxS=6gfyRr-1-2oG8=+deA5MEi;__{nSzLTO@8MXdUhVD%eGurT z&LCP^^qKCfI|w0>QPI(Mi`_5DgP~K1Mllpy;ruh`wkOCRgYQuQnrFT96+W<%LU%|= zNZ78zPm`lvO@@y@2XF&Ghwx~D;xY%wb}-@+;NydDQ5$y4qeqEJm`@U8VW2=F!L@W$ zAjtb0V?OBn{@PfZe!eg6GbT5R;fzm5eHpOdQ26+}nDl8^?_sB-#Wmnum_targets; + gpu_gc->target = (struct gpuNode *) malloc(num_targets*sizeof(struct gpuNode)); + + // Finding size of x per target + const int nelx = gc->nelx; + const int block_x = (int) nelx/num_targets; + + for (int i = 0;itarget[i]).gc = (struct gridContext *) malloc(sizeof(struct gridContext)); + struct gpuNode * node = &(gpu_gc->target[i]); + node -> id = i; + if (i>0){ + node -> prev = &(gpu_gc->target[i-1]); + node -> offset_x = 1; + } + else { + node -> prev = NULL; + node -> offset_x = 0; + } + if (i next = &(gpu_gc->target[i+1]); + } + else { + node -> next = NULL; + } + + // Global offset in the grid + node -> x_global = i *block_x; + + // Calculating x size + int nelx_local = ( i== num_targets-1) ? nelx - i*num_targets : block_x; + if (node -> prev != NULL){ + nelx_local += 1; + } + if (node -> next != NULL){ + nelx_local += 1; + } + setupGC(node->gc,nl,nelx_local,gc->nely,gc->nelz); + if (verbose == 1) { + printf("GPU %d:\n\tGlobal index: %d\n\tOffset: %d\n",node->id,node->x_global,node->offset_x); + printf("\tPrev is null? %d\n\tNext is null? %d\n",node->prev == NULL,node->next==NULL); + } + } +} + +void freeGPUGrid( + struct gpuGrid * gpu_gc, + const int nl) +{ + const int num_targets = gpu_gc->num_targets; + for (int i=0;itarget[i]); + freeGC(node->gc,nl); + } + free(gpu_gc->target); +} + +void computePadding( + const struct gridContext * gc, + const int l, + int * ncell, + int * wrapx, + int * wrapy, + int * wrapz, + uint_fast32_t * ndof +){ + *ncell = pow(2, l); + const int32_t nelx = gc->nelx / (*ncell); + const int32_t nely = gc->nely / (*ncell); + const int32_t nelz = gc->nelz / (*ncell); + const int paddingx = + (STENCIL_SIZE_X - ((nelx + 1) % STENCIL_SIZE_X)) % STENCIL_SIZE_X; + const int paddingy = + (STENCIL_SIZE_Y - ((nely + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingz = + (STENCIL_SIZE_Z - ((nelz + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + // Writing the result + *wrapx = nelx + paddingx + 3; + *wrapy = nely + paddingy + 3; + *wrapz = nelz + paddingz + 3; + *ndof = 3 * (*wrapy) * (*wrapz) * (*wrapx); +} + +DTYPE compute_volume( + const struct gridContext gc, + DTYPE * xPhys +){ + DTYPE vol = 0.0; + #pragma omp target teams distribute parallel for collapse(3) map(always,tofrom:vol) reduction(+ : vol) + for (int i = 1; i < gc.nelx + 1; i++) + for (int k = 1; k < gc.nelz + 1; k++) + for (int j = 1; j < gc.nely + 1; j++) { + const int idx = + i * (gc.wrapy - 1) * (gc.wrapz - 1) + + k * (gc.wrapy - 1) + j; + + vol += xPhys[idx]; + } + return vol; +} + +float compute_change( + DTYPE * x, + DTYPE * xnew, + const int nelem +){ + float change = 0.0; + + #pragma omp target teams distribute parallel for schedule(static) map(always,tofrom:change) reduction(max : change) + for (uint_least32_t i = 0; i < nelem; i++) { + change = MAX(change, fabs(x[i] - xnew[i])); + x[i] = xnew[i]; + } + return change; +} + +void update_solution( + const DTYPE * x, + DTYPE * xnew, + const DTYPE * dv, + const DTYPE * dc, + const int nelem, + const DTYPE g +){ + DTYPE l1 = 0.0, l2 = 1e9, move = 0.2; + + while ((l2 - l1) / (l1 + l2) > 1e-6) { + DTYPE lmid = 0.5 * (l2 + l1); + DTYPE gt = 0.0; + + + #pragma omp target teams distribute parallel for schedule(static) map(always,tofrom:gt) firstprivate(move,lmid) reduction(+:gt) + for (uint_least32_t i = 0; i < nelem; i++) { + xnew[i] = + MAX(0.0, MAX(x[i] - move, + MIN(1.0, MIN(x[i] + move, + x[i] * sqrt(-dc[i] / (dv[i] * lmid)))))); + gt += dv[i] * (xnew[i] - x[i]); + } + + gt += g; + if (gt > 0) + l1 = lmid; + else + l2 = lmid; + } +} + +void enter_data( + const struct gridContext gridContext, + const struct SolverDataBuffer solverData, + const struct gpuGrid gpu_gc, + const DTYPE * xPhys, + const DTYPE * x, + const DTYPE * xnew, + const STYPE * U, + const CTYPE * F, + const DTYPE * dc, + const int nelem, + const int nl +){ + int u_size = 0; + const int ndof = 3 * gridContext.wrapx * gridContext.wrapy * gridContext.wrapz; + for (int l_tmp = 0;l_tmp < nl; l_tmp++){ + int ncell; + int wrapxc; + int wrapyc; + int wrapzc; + uint_fast32_t ndofc; + computePadding(&gridContext,l_tmp,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + if (l_tmp == 0){ + u_size = ndofc; + } + CTYPE *zptr = solverData.zmg[l_tmp]; + CTYPE *dptr = solverData.dmg[l_tmp]; + CTYPE *rptr = solverData.rmg[l_tmp]; + MTYPE *invDptr = solverData.invD[l_tmp]; + const MTYPE * KE = gpu_gc.target[0].gc->precomputedKE[l_tmp]; + #pragma omp target enter data map(to:zptr[:ndofc],invDptr[:ndofc],rptr[:ndofc],\ + dptr[:ndofc],KE[:24*24*ncell*ncell*ncell]) device(gpu_gc.target[0].id) nowait + } + #pragma omp target enter data map(to:xPhys[:nelem],x[:nelem],dc[:nelem],xnew[:nelem],U[:u_size],F[:ndof],\ + solverData.r[:ndof],solverData.p[:ndof],solverData.q[:ndof],solverData.z[:ndof]) device(gpu_gc.target[0].id) nowait + #pragma omp taskwait +} diff --git a/gpu_definitions.h b/gpu_definitions.h new file mode 100644 index 0000000..76c8396 --- /dev/null +++ b/gpu_definitions.h @@ -0,0 +1,88 @@ +#ifndef GPU_DEFINITIONS +#define GPU_DEFINITIONS +#include "definitions.h" +#include "stencil_grid_utility.h" +#include "stencil_assembly.h" + +struct SolverDataBuffer { + // cg data + CTYPE *r; + CTYPE *p; + CTYPE *q; + CTYPE *z; + + // jacobi + mg data + MTYPE **invD; + CTYPE **dmg; + CTYPE **rmg; + CTYPE **zmg; + + // explicitly assembled matrices + struct CSRMatrix *coarseMatrices; + struct CoarseSolverData bottomSolver; +}; + +struct gpuNode { + int id; + struct gpuNode * prev; + struct gpuNode * next; + struct gridContext * gc; + int offset_x; + int x_global; +}; + +struct gpuGrid { + int num_targets; + struct gpuNode * target; +}; + +void gridContextToGPUGrid( + struct gridContext * gc, + struct gpuGrid * gpu_gc, + const int nl, + const int verbose); + +void freeGPUGrid( + struct gpuGrid * gpu_gc, + const int nl); + +void computePadding( + const struct gridContext * gc, + const int l, + int * ncell, + int * wrapx, + int * wrapy, + int * wrapz, + uint_fast32_t * ndof); + +DTYPE compute_volume( + const struct gridContext gc, + DTYPE * xPhys); + +float compute_change( + DTYPE * x, + DTYPE * xnew, + const int nelem); + +void update_solution( + const DTYPE * x, + DTYPE * xnew, + const DTYPE * dv, + const DTYPE * dc, + const int nelem, + const DTYPE g); + +void enter_data( + const struct gridContext gridContext, + const struct SolverDataBuffer solverData, + const struct gpuGrid gpu_gc, + const DTYPE * xPhys, + const DTYPE * x, + const DTYPE * xnew, + const STYPE * U, + const CTYPE * F, + const DTYPE * dc, + const int nelem, + const int nl); + +#endif diff --git a/local_matrix.c b/local_matrix.c new file mode 100644 index 0000000..db3c64f --- /dev/null +++ b/local_matrix.c @@ -0,0 +1,319 @@ +#include "local_matrix.h" + +#include + +// compute the contitutive matrix +// temperature: frozen, called only in preprocessing +void getC(MTYPE C[6][6], /* out */ + const MTYPE nu) /* in */ +{ + const MTYPE temp1 = (1.0 - nu) / ((1.0 + nu) * (1.0 - 2.0 * nu)); + const MTYPE temp2 = nu / ((1.0 + nu) * (1.0 - 2.0 * nu)); + const MTYPE temp3 = 1.0 / (2.0 * (1.0 + nu)); + + for (unsigned int i = 0; i < 6 * 6; i++) + *((MTYPE *)C + i) = 0.0; + + C[0][0] = temp1; + C[1][1] = temp1; + C[2][2] = temp1; + C[3][3] = temp3; + C[4][4] = temp3; + C[5][5] = temp3; + C[0][1] = temp2; + C[1][0] = temp2; + C[0][2] = temp2; + C[2][0] = temp2; + C[1][2] = temp2; + C[2][1] = temp2; +} + +// compute the strain-displacement matrix +// temperature: frozen, called only in preprocessing +void getB(MTYPE B[6][24], /* out */ + MTYPE *jdet, /* out */ + const MTYPE iso[3], /* in */ + const MTYPE xe[24]) /* in */ +{ + /* xi = iso(1); */ + const MTYPE xi = iso[1 - 1]; + /* eta = iso(2); */ + const MTYPE eta = iso[2 - 1]; + /* zeta = iso(3); */ + const MTYPE zeta = iso[3 - 1]; + + const MTYPE n1xi = -0.125 * (1 - eta) * (1 - zeta); + const MTYPE n1eta = -0.125 * (1 - xi) * (1 - zeta); + const MTYPE n1zeta = -0.125 * (1 - xi) * (1 - eta); + const MTYPE n2xi = 0.125 * (1 - eta) * (1 - zeta); + const MTYPE n2eta = -0.125 * (1 + xi) * (1 - zeta); + const MTYPE n2zeta = -0.125 * (1 + xi) * (1 - eta); + + const MTYPE n3xi = 0.125 * (1 + eta) * (1 - zeta); + const MTYPE n3eta = 0.125 * (1 + xi) * (1 - zeta); + const MTYPE n3zeta = -0.125 * (1 + xi) * (1 + eta); + const MTYPE n4xi = -0.125 * (1 + eta) * (1 - zeta); + const MTYPE n4eta = 0.125 * (1 - xi) * (1 - zeta); + const MTYPE n4zeta = -0.125 * (1 - xi) * (1 + eta); + + const MTYPE n5xi = -0.125 * (1 - eta) * (1 + zeta); + const MTYPE n5eta = -0.125 * (1 - xi) * (1 + zeta); + const MTYPE n5zeta = 0.125 * (1 - xi) * (1 - eta); + const MTYPE n6xi = 0.125 * (1 - eta) * (1 + zeta); + const MTYPE n6eta = -0.125 * (1 + xi) * (1 + zeta); + const MTYPE n6zeta = 0.125 * (1 + xi) * (1 - eta); + + const MTYPE n7xi = 0.125 * (1 + eta) * (1 + zeta); + const MTYPE n7eta = 0.125 * (1 + xi) * (1 + zeta); + const MTYPE n7zeta = 0.125 * (1 + xi) * (1 + eta); + const MTYPE n8xi = -0.125 * (1 + eta) * (1 + zeta); + const MTYPE n8eta = 0.125 * (1 - xi) * (1 + zeta); + const MTYPE n8zeta = 0.125 * (1 - xi) * (1 + eta); + + MTYPE L[6][9]; + for (unsigned int i = 0; i < 6 * 9; i++) + *((MTYPE *)L + i) = 0.0; + + MTYPE jac[3][3]; + for (unsigned int i = 0; i < 3 * 3; i++) + *((MTYPE *)jac + i) = 0.0; + + MTYPE jacinvt[9][9]; + for (unsigned int i = 0; i < 9 * 9; i++) + *((MTYPE *)jacinvt + i) = 0.0; + + MTYPE Nt[9][24]; + for (unsigned int i = 0; i < 9 * 24; i++) + *((MTYPE *)Nt + i) = 0.0; + + L[0][0] = 1.0; + L[1][4] = 1.0; + L[2][8] = 1.0; + L[3][1] = 1.0; + L[3][3] = 1.0; + L[4][5] = 1.0; + L[4][7] = 1.0; + L[5][2] = 1.0; + L[5][6] = 1.0; + + Nt[0][0] = n1xi; + Nt[1][0] = n1eta; + Nt[2][0] = n1zeta; + Nt[0][3] = n2xi; + Nt[1][3] = n2eta; + Nt[2][3] = n2zeta; + Nt[0][6] = n3xi; + Nt[1][6] = n3eta; + Nt[2][6] = n3zeta; + Nt[0][9] = n4xi; + Nt[1][9] = n4eta; + Nt[2][9] = n4zeta; + Nt[0][12] = n5xi; + Nt[1][12] = n5eta; + Nt[2][12] = n5zeta; + Nt[0][15] = n6xi; + Nt[1][15] = n6eta; + Nt[2][15] = n6zeta; + Nt[0][18] = n7xi; + Nt[1][18] = n7eta; + Nt[2][18] = n7zeta; + Nt[0][21] = n8xi; + Nt[1][21] = n8eta; + Nt[2][21] = n8zeta; + + Nt[3][1] = n1xi; + Nt[4][1] = n1eta; + Nt[5][1] = n1zeta; + Nt[3][4] = n2xi; + Nt[4][4] = n2eta; + Nt[5][4] = n2zeta; + Nt[3][7] = n3xi; + Nt[4][7] = n3eta; + Nt[5][7] = n3zeta; + Nt[3][10] = n4xi; + Nt[4][10] = n4eta; + Nt[5][10] = n4zeta; + Nt[3][13] = n5xi; + Nt[4][13] = n5eta; + Nt[5][13] = n5zeta; + Nt[3][16] = n6xi; + Nt[4][16] = n6eta; + Nt[5][16] = n6zeta; + Nt[3][19] = n7xi; + Nt[4][19] = n7eta; + Nt[5][19] = n7zeta; + Nt[3][22] = n8xi; + Nt[4][22] = n8eta; + Nt[5][22] = n8zeta; + + Nt[6][2] = n1xi; + Nt[7][2] = n1eta; + Nt[8][2] = n1zeta; + Nt[6][5] = n2xi; + Nt[7][5] = n2eta; + Nt[8][5] = n2zeta; + Nt[6][8] = n3xi; + Nt[7][8] = n3eta; + Nt[8][8] = n3zeta; + Nt[6][11] = n4xi; + Nt[7][11] = n4eta; + Nt[8][11] = n4zeta; + Nt[6][14] = n5xi; + Nt[7][14] = n5eta; + Nt[8][14] = n5zeta; + Nt[6][17] = n6xi; + Nt[7][17] = n6eta; + Nt[8][17] = n6zeta; + Nt[6][20] = n7xi; + Nt[7][20] = n7eta; + Nt[8][20] = n7zeta; + Nt[6][23] = n8xi; + Nt[7][23] = n8eta; + Nt[8][23] = n8zeta; + + jac[0][0] = n1xi * xe[0] + n2xi * xe[3] + n3xi * xe[6] + n4xi * xe[9] + + n5xi * xe[12] + n6xi * xe[15] + n7xi * xe[18] + n8xi * xe[21]; + + jac[1][0] = n1eta * xe[0] + n2eta * xe[3] + n3eta * xe[6] + n4eta * xe[9] + + n5eta * xe[12] + n6eta * xe[15] + n7eta * xe[18] + n8eta * xe[21]; + + jac[2][0] = n1zeta * xe[0] + n2zeta * xe[3] + n3zeta * xe[6] + + n4zeta * xe[9] + n5zeta * xe[12] + n6zeta * xe[15] + + n7zeta * xe[18] + n8zeta * xe[21]; + + jac[0][1] = n1xi * xe[1] + n2xi * xe[4] + n3xi * xe[7] + n4xi * xe[10] + + n5xi * xe[13] + n6xi * xe[16] + n7xi * xe[19] + n8xi * xe[22]; + + jac[1][1] = n1eta * xe[1] + n2eta * xe[4] + n3eta * xe[7] + n4eta * xe[10] + + n5eta * xe[13] + n6eta * xe[16] + n7eta * xe[19] + n8eta * xe[22]; + + jac[2][1] = n1zeta * xe[1] + n2zeta * xe[4] + n3zeta * xe[7] + + n4zeta * xe[10] + n5zeta * xe[13] + n6zeta * xe[16] + + n7zeta * xe[19] + n8zeta * xe[22]; + + jac[0][2] = n1xi * xe[2] + n2xi * xe[5] + n3xi * xe[8] + n4xi * xe[11] + + n5xi * xe[14] + n6xi * xe[17] + n7xi * xe[20] + n8xi * xe[23]; + + jac[1][2] = n1eta * xe[2] + n2eta * xe[5] + n3eta * xe[8] + n4eta * xe[11] + + n5eta * xe[14] + n6eta * xe[17] + n7eta * xe[20] + n8eta * xe[23]; + + jac[2][2] = n1zeta * xe[2] + n2zeta * xe[5] + n3zeta * xe[8] + + n4zeta * xe[11] + n5zeta * xe[14] + n6zeta * xe[17] + + n7zeta * xe[20] + n8zeta * xe[23]; + + /* jdet = det(jac); */ + // det(A)=A11(A22A33−A23A32)−A12(A21A33−A23A31)+A13(A21A32−A22A31) + (*jdet) = jac[0][0] * (jac[1][1] * jac[2][2] - jac[1][2] * jac[1][2]) - + jac[0][1] * (jac[1][0] * jac[2][2] - jac[1][2] * jac[2][0]) + + jac[0][2] * (jac[1][0] * jac[2][1] - jac[1][1] * jac[2][0]); + + /* ijac = inv(jac); */ + // https://en.wikipedia.org/wiki/Invertible_matrix#Inversion_of_3_%C3%97_3_matrices + jacinvt[0][0] = + (1.0 / (*jdet)) * (jac[1][1] * jac[2][2] - jac[1][2] * jac[1][2]); + jacinvt[0][1] = + (1.0 / (*jdet)) * -1.0 * (jac[1][0] * jac[2][2] - jac[1][2] * jac[2][0]); + jacinvt[0][2] = + (1.0 / (*jdet)) * (jac[1][0] * jac[2][1] - jac[1][1] * jac[2][0]); + + jacinvt[1][0] = + (1.0 / (*jdet)) * -1.0 * (jac[0][1] * jac[2][2] - jac[0][2] * jac[2][1]); + jacinvt[1][1] = + (1.0 / (*jdet)) * (jac[0][0] * jac[2][2] - jac[0][2] * jac[2][0]); + jacinvt[1][2] = + (1.0 / (*jdet)) * -1.0 * (jac[0][0] * jac[2][1] - jac[0][1] * jac[2][0]); + + jacinvt[2][0] = + (1.0 / (*jdet)) * (jac[0][1] * jac[1][2] - jac[0][2] * jac[1][1]); + jacinvt[2][1] = + (1.0 / (*jdet)) * -1.0 * (jac[0][0] * jac[1][2] - jac[0][2] * jac[1][0]); + jacinvt[2][2] = + (1.0 / (*jdet)) * (jac[0][0] * jac[1][1] - jac[0][1] * jac[1][0]); + + for (int k = 1; k < 3; k++) + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + jacinvt[3 * k + i][3 * k + j] = jacinvt[i][j]; + + MTYPE partial[9][24]; + + /*! \todo add checks so that double / single precision GEMM + is selected. */ + cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 9, 24, 9, 1.0, + (MTYPE *)jacinvt, 9, (MTYPE *)Nt, 24, 0.0, (MTYPE *)partial, 24); + + cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 6, 24, 9, 1.0, + (MTYPE *)L, 9, (MTYPE *)partial, 24, 0.0, (MTYPE *)B, 24); +} + +// compute the local stiffness matrix +// temperature: frozen, called only in preprocessing +void getKEsubspace(MTYPE *KEarray, /* out */ + const MTYPE nu, /* in */ + const int l) { /* in */ + + const int ncell = pow(2, l); + const int integrationPoints = 10; + + const MTYPE a = 0.5 * ncell; + const MTYPE b = 0.5 * ncell; + const MTYPE c = 0.5 * ncell; + + const MTYPE xe[24] = {-a, -b, -c, a, -b, -c, a, b, -c, -a, b, -c, + -a, -b, c, a, -b, c, a, b, c, -a, b, c}; + + MTYPE C[6][6]; + getC(C, nu); + + const MTYPE spacing = 2.0 / (MTYPE)ncell / (MTYPE)integrationPoints; + const MTYPE subCellVolume = spacing * spacing * spacing; + + MTYPE iso[3]; + MTYPE B[6][24]; + MTYPE partial[24][6]; + MTYPE jdet; + + for (int i = 0; i < 24 * 24 * ncell * ncell * ncell; i++) + KEarray[i] = 0.0; + + for (int ii = 0; ii < ncell; ii++) + for (int kk = 0; kk < ncell; kk++) + for (int jj = 0; jj < ncell; jj++) { + + const int cellidx = ncell * ncell * ii + ncell * kk + jj; + + MTYPE igp = -1.0 + spacing / 2.0 + 2.0 / (MTYPE)ncell * ((MTYPE)ii); + + for (int iii = 0; iii < integrationPoints; iii++) { + + MTYPE jgp = -1.0 + spacing / 2.0 + 2.0 / (MTYPE)ncell * ((MTYPE)jj); + + for (int jjj = 0; jjj < integrationPoints; jjj++) { + + MTYPE kgp = -1.0 + spacing / 2.0 + 2.0 / (MTYPE)ncell * ((MTYPE)kk); + + for (int kkk = 0; kkk < integrationPoints; kkk++) { + + iso[0] = igp; + iso[1] = -1.0 * jgp; /*important to flip y/eta-coordinate, due to + bad numbering in original code*/ + iso[2] = kgp; + + getB(B, &jdet, iso, xe); + + cblas_dgemm(CblasRowMajor, CblasTrans, CblasNoTrans, 24, 6, 6, + 1.0, (MTYPE *)B, 24, (MTYPE *)C, 6, 0.0, + (MTYPE *)partial, 6); + + cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 24, 24, 6, + jdet * subCellVolume, (MTYPE *)partial, 6, (MTYPE *)B, + 24, 1.0, KEarray + 24 * 24 * cellidx, 24); + + kgp += spacing; + } + jgp += spacing; + } + igp += spacing; + } + } +} diff --git a/local_matrix.h b/local_matrix.h new file mode 100644 index 0000000..f36f4c8 --- /dev/null +++ b/local_matrix.h @@ -0,0 +1,21 @@ +#pragma once + +#include "definitions.h" + +// compute the contitutive matrix +// temperature: frozen, called only in preprocessing +void getC(MTYPE C[6][6], /* out */ + const MTYPE nu); /* in */ + +// compute the strain-displacement matrix +// temperature: frozen, called only in preprocessing +void getB(MTYPE B[6][24], /* out */ + MTYPE *jdet, /* out */ + const MTYPE iso[3], /* in */ + const MTYPE xe[24]); /* in */ + +// compute the local stiffness matrix +// temperature: frozen, called only in preprocessing +void getKEsubspace(MTYPE *KEarray, /* out */ + const MTYPE nu, /* in */ + const int l); /* in */ diff --git a/plot_timings.m b/plot_timings.m new file mode 100644 index 0000000..4c4fe31 --- /dev/null +++ b/plot_timings.m @@ -0,0 +1,184 @@ +function plot_timings() +close all; +% reading C output + +threads_new=[1,4,8,16]; +threads_old=[1,4,8,16]; +threads_cpu=[1,4,8,16]; + +X = cell(length(threads_new),1); +Y = cell(length(threads_old),1); +Z = cell(length(threads_cpu),1); + + +for i=1:length(threads_new) + filename = strcat(['./tests/new_version_',num2str(threads_new(i)),'.txt']); + fileID = fopen(filename,'r'); + formatSpec = '%lf'; + A = fscanf(fileID,formatSpec); + X{i} = reshape(A,[7,length(A)/7]); +end + +for i=1:length(threads_old) + filename = strcat(['./tests/old_version_',num2str(threads_old(i)),'.txt']); + fileID = fopen(filename,'r'); + formatSpec = '%lf'; + A = fscanf(fileID,formatSpec); + Y{i} = reshape(A,[7,length(A)/7]); +end + +for i=1:length(threads_cpu) + filename = strcat(['./tests/cpu_version_',num2str(threads_cpu(i)),'.txt']); + fileID = fopen(filename,'r'); + formatSpec = '%lf'; + A = fscanf(fileID,formatSpec); + Z{i} = reshape(A,[7,length(A)/7]); +end + +dim = [2,2]; + +%% Time per iteration + +fig = figure('visible','off','Renderer', 'painters'); +fig.Position(3:4)=[1000,800]; +sgtitle('Average Wall Clock Time per Iteration','fontsize',20) +for i=1:length(threads_new) + subplot(dim(1),dim(2),i) + new_time = X{i}(7,:)./X{i}(1,:); + plot(X{i}(5,:),new_time,'*',... + 'displayname','New GPU Version') + hold on + old_time = Y{i}(7,:)./Y{i}(1,:); + plot(Y{i}(5,:),old_time,'*',... + 'displayname','Original GPU Version') + cpu_time = Z{i}(7,:)./Z{i}(1,:); + plot(Z{i}(5,:),cpu_time,'*',... + 'displayname','Original CPU Version') + hold off + ylabel('$t\:[s]$','interpreter','latex','fontsize',14) + xlabel('Grid Size $N_x\times N_y \times N_z$','interpreter','latex','fontsize',14) + legend('location','nw') + title(strcat([num2str(threads_new(i)),' Threads']),... + 'interpreter','latex','fontsize',16) + grid() +end + +%saveas(fig,'./figures/running_time.png') +z=getframe(fig); +imwrite(z.cdata,'./figures/running_time.png') + +%% Time per Gonjugate Gradient Iteration + +fig = figure('visible','off','Renderer', 'painters'); +fig.Position(3:4)=[1000,800]; +sgtitle('Average Wall Clock Time per Conjugate Gradient Iteration','fontsize',20) +for i=1:length(threads_new) + subplot(dim(1),dim(2),i) + new_time = X{i}(7,:)./X{i}(6,:); + plot(X{i}(5,:),new_time,'*',... + 'displayname','New GPU Version') + hold on + old_time = Y{i}(7,:)./Y{i}(6,:); + plot(Y{i}(5,:),old_time,'*',... + 'displayname','Original GPU Version') + cpu_time = Z{i}(7,:)./Z{i}(6,:); + plot(Z{i}(5,:),cpu_time,'*',... + 'displayname','Original CPU Version') + hold off + ylabel('$t\:[s]$','interpreter','latex','fontsize',14) + xlabel('Grid Size $N_x\times N_y \times N_z$','interpreter','latex','fontsize',14) + legend('location','nw') + title(strcat([num2str(threads_new(i)),' Threads']),... + 'interpreter','latex','fontsize',16) + grid() +end + +z=getframe(fig); +imwrite(z.cdata,'./figures/cg_running_time.png') + +%% Time per Gonjugate Gradient Iteration + +fig = figure('visible','off','Renderer', 'painters'); +fig.Position(3:4)=[500,400]; +new_time = X{1}(7,:)./X{1}(1,:); +old_time = Y{1}(7,:)./Y{1}(1,:); +plot(X{1}(5,:),old_time./new_time,'*',... + 'displayname','1 Thread - Old GPU') +hold on +for i=2:length(threads_new) + new_time = X{i}(7,:)./X{i}(1,:); + old_time = Y{i}(7,:)./Y{i}(1,:); + plot(X{i}(5,:),old_time./new_time,'*',... + 'displayname',strcat([num2str(threads_new(i)),' Threads'])) +end +hold off +ylabel('$\frac{t_{original}}{t_{new}}$','interpreter','latex','fontsize',16) +xlabel('Grid Size $N_x\times N_y \times N_z$','interpreter','latex','fontsize',14) +legend('location','ne') +grid() +title('Speed-up','fontsize',18) + +z=getframe(fig); +imwrite(z.cdata,'./figures/speedup.png') +end +% function plot_timings() +% close all; +% % reading C output +% +% threads_new=[1,4,8,16]; +% threads_old=[1,4,8,16]; +% +% X = cell(length(threads_new),1); +% Y = cell(length(threads_old),1); +% +% for i=1:length(threads_new) +% filename = strcat(['./tests/new_version_',num2str(threads_new(i)),'.txt']); +% fileID = fopen(filename,'r'); +% formatSpec = '%lf'; +% A = fscanf(fileID,formatSpec); +% X{i} = reshape(A,[7,length(A)/7]); +% end +% +% for i=1:length(threads_old) +% filename = strcat(['./tests/old_version_',num2str(threads_old(i)),'.txt']); +% fileID = fopen(filename,'r'); +% formatSpec = '%lf'; +% A = fscanf(fileID,formatSpec); +% Y{i} = reshape(A,[7,length(A)/7]); +% end +% +% dim = [1,2]; +% % 'visible','off', +% fig = figure('Renderer', 'painters', 'Position', [10 10 1000 330]); +% sgtitle('Average Wall Clock Time per Iteration','fontsize',20) +% subplot(dim(1),dim(2),1) +% plot(X{1}(5,:),X{1}(7,:)./X{1}(1,:),'*',... +% 'displayname',strcat([num2str(threads_new(1)),' threads'])) +% hold on +% for i=2:length(threads_new) +% plot(X{i}(5,:),X{i}(7,:)./X{i}(1,:),'*',... +% 'displayname',strcat([num2str(threads_new(i)),' threads'])) +% end +% hold off +% ylim([0,20]) +% ylabel('$t\:[s]$','interpreter','latex','fontsize',16) +% xlabel('Grid Size','interpreter','latex','fontsize',16) +% legend('location','nw') +% title('New GPU Version','interpreter','latex','fontsize',18) +% +% subplot(dim(1),dim(2),2) +% plot(Y{1}(5,:),Y{1}(7,:)./Y{1}(1,:),'*',... +% 'displayname',strcat([num2str(threads_old(1)),' threads'])) +% hold on +% for i=2:length(threads_old) +% plot(Y{i}(5,:),Y{i}(7,:)./Y{i}(1,:),'*',... +% 'displayname',strcat([num2str(threads_old(i)),' threads'])) +% end +% hold off +% %ylim([0,20]) +% ylabel('$t\:[s]$','interpreter','latex','fontsize',16) +% xlabel('Grid Size','interpreter','latex','fontsize',16) +% legend('location','nw') +% title('Old GPU Version','interpreter','latex','fontsize',18) +% %saveas(fig,'./figures/running_time.png') +% end \ No newline at end of file diff --git a/setup_gbar_env.sh b/setup_gbar_env.sh new file mode 100644 index 0000000..7da68ca --- /dev/null +++ b/setup_gbar_env.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +module load suitesparse/5.1.2 +module load nvhpc/22.5-nompi +module load cuda/11.1 + +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/appl/SuiteSparse/5.1.2-sl73/lib:/appl/OpenBLAS/0.2.20/XeonGold6226R/gcc-6.4.0/lib \ No newline at end of file diff --git a/stencil_assembly.c b/stencil_assembly.c new file mode 100644 index 0000000..2d0b73d --- /dev/null +++ b/stencil_assembly.c @@ -0,0 +1,503 @@ +#include "stencil_assembly.h" + +#include "stencil_utility.h" + +#define CHOLMOD_INT_TYPE int + + +void allocateSubspaceMatrix(const struct gridContext gc, const int l, + struct CSRMatrix *M) { + + // compute number of rows + const int ncell = pow(2, l); + const int32_t nelxc = gc.nelx / ncell; + const int32_t nelyc = gc.nely / ncell; + const int32_t nelzc = gc.nelz / ncell; + + const int32_t nxc = nelxc + 1; + const int32_t nyc = nelyc + 1; + const int32_t nzc = nelzc + 1; + const int32_t ndofc = 3 * nxc * nyc * nzc; + + // allocate row offset array + (*M).nrows = ndofc; + (*M).rowOffsets = malloc(sizeof(int) * (ndofc + 1)); + + // calculate size of rows + (*M).rowOffsets[0] = 0; + +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(nxc,nzc,nyc) shared(M) + for (int i = 0; i < nxc; i++) + for (int k = 0; k < nzc; k++) + for (int j = 0; j < nyc; j++) { + const int nidx = (i * nyc * nzc + nyc * k + j); + + // add 1 to index to offset the result + const uint32_t idx1 = 3 * nidx + 0 + 1; + const uint32_t idx2 = 3 * nidx + 1 + 1; + const uint32_t idx3 = 3 * nidx + 2 + 1; + + const int32_t xmin = MAX(i - 1, 0); + const int32_t ymin = MAX(j - 1, 0); + const int32_t zmin = MAX(k - 1, 0); + + const int32_t xmax = MIN(i + 1, nxc - 1); + const int32_t ymax = MIN(j + 1, nyc - 1); + const int32_t zmax = MIN(k + 1, nzc - 1); + + const int32_t localSize = + 3 * (xmax - xmin + 1) * (ymax - ymin + 1) * (zmax - zmin + 1); + + (*M).rowOffsets[idx1] = localSize; + (*M).rowOffsets[idx2] = localSize; + (*M).rowOffsets[idx3] = localSize; + } + + // perform cummulative sum + for (int i = 1; i < ndofc + 1; i++) + (*M).rowOffsets[i] += (*M).rowOffsets[i - 1]; + + // allocate column and val arrays + const int nnz = (*M).rowOffsets[ndofc]; + (*M).nnz = nnz; + (*M).colIndex = malloc(sizeof(int) * nnz); + (*M).vals = malloc(sizeof(MTYPE) * nnz); + + // populate col array +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(nxc,nyc,nzc) shared(M) + for (int i = 0; i < nxc; i++) + for (int k = 0; k < nzc; k++) + for (int j = 0; j < nyc; j++) { + const int rowNodeIndex = i * nyc * nzc + nyc * k + j; + + // add 1 to index to offset the result + const uint32_t row1 = 3 * rowNodeIndex + 0; + const uint32_t row2 = 3 * rowNodeIndex + 1; + const uint32_t row3 = 3 * rowNodeIndex + 2; + + const int32_t xmin = MAX(i - 1, 0); + const int32_t ymin = MAX(j - 1, 0); + const int32_t zmin = MAX(k - 1, 0); + + const int32_t xmax = MIN(i + 2, nxc); + const int32_t ymax = MIN(j + 2, nyc); + const int32_t zmax = MIN(k + 2, nzc); + + int rowOffset1 = (*M).rowOffsets[row1]; + int rowOffset2 = (*M).rowOffsets[row2]; + int rowOffset3 = (*M).rowOffsets[row3]; + + for (int ii = xmin; ii < xmax; ii++) + for (int kk = zmin; kk < zmax; kk++) + for (int jj = ymin; jj < ymax; jj++) { + + const int colNodeIndex = ii * nyc * nzc + nyc * kk + jj; + + const uint32_t col1 = 3 * colNodeIndex + 0; + const uint32_t col2 = 3 * colNodeIndex + 1; + const uint32_t col3 = 3 * colNodeIndex + 2; + + (*M).colIndex[rowOffset1 + 0] = col1; + (*M).colIndex[rowOffset2 + 0] = col1; + (*M).colIndex[rowOffset3 + 0] = col1; + + (*M).colIndex[rowOffset1 + 1] = col2; + (*M).colIndex[rowOffset2 + 1] = col2; + (*M).colIndex[rowOffset3 + 1] = col2; + + (*M).colIndex[rowOffset1 + 2] = col3; + (*M).colIndex[rowOffset2 + 2] = col3; + (*M).colIndex[rowOffset3 + 2] = col3; + + rowOffset1 += 3; + rowOffset2 += 3; + rowOffset3 += 3; + } + } +} + +void freeSubspaceMatrix(struct CSRMatrix *M) { + + free((*M).rowOffsets); + free((*M).vals); + free((*M).colIndex); +} + +void assembleSubspaceMatrix(const struct gridContext gc, const int l, + const DTYPE *x, struct CSRMatrix M, MTYPE *tmp) { + +// zero the val array +#pragma omp parallel for schedule(static) default(none) shared(M) + for (int i = 0; i < M.nnz; i++) + M.vals[i] = 0.0; + + const int ncell = pow(2, l); + const int32_t nelxc = gc.nelx / ncell; + const int32_t nelyc = gc.nely / ncell; + const int32_t nelzc = gc.nelz / ncell; + + const int32_t nyc = nelyc + 1; + const int32_t nzc = nelzc + 1; + + const int paddingyc = + (STENCIL_SIZE_Y - ((nelyc + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingzc = + (STENCIL_SIZE_Z - ((nelzc + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + const int wrapyc = nelyc + paddingyc + 3; + const int wrapzc = nelzc + paddingzc + 3; + + // loop over active elements, in 8 colored fashion to avoid data-races + for (int32_t bx = 0; bx < 2; bx++) + for (int32_t bz = 0; bz < 2; bz++) + for (int32_t by = 0; by < 2; by++) + +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(bx,by,bz,nelxc,nelzc,nelyc) shared(gc,x,M) + for (int32_t i = bx; i < nelxc; i += 2) + for (int32_t k = bz; k < nelzc; k += 2) + for (int32_t j = by; j < nelyc; j += 2) { + + //// get 'true' edof + uint_fast32_t edof[24]; + getEdof_halo(edof, i, j, k, nyc, nzc); + + const int32_t i_halo = i + 1; + const int32_t j_halo = j + 1; + const int32_t k_halo = k + 1; + + // make local zero size buffer + alignas(__alignBound) MTYPE ke[24][24]; + for (int iii = 0; iii < 24; iii++) + for (int jjj = 0; jjj < 24; jjj++) + ke[iii][jjj] = 0.0; + + // assemble local matrix + for (int ii = 0; ii < ncell; ii++) + for (int kk = 0; kk < ncell; kk++) + for (int jj = 0; jj < ncell; jj++) { + const int ifine = ((i_halo - 1) * ncell) + ii + 1; + const int jfine = ((j_halo - 1) * ncell) + jj + 1; + const int kfine = ((k_halo - 1) * ncell) + kk + 1; + + const int cellidx = ncell * ncell * ii + ncell * kk + jj; + + const uint_fast32_t elementIndex = + ifine * (gc.wrapy - 1) * (gc.wrapz - 1) + + kfine * (gc.wrapy - 1) + jfine; + const MTYPE elementScale = + gc.Emin + x[elementIndex] * x[elementIndex] * + x[elementIndex] * (gc.E0 - gc.Emin); + + for (int iii = 0; iii < 24; iii++) + for (int jjj = 0; jjj < 24; jjj++) + ke[iii][jjj] += elementScale * + gc.precomputedKE[l][24 * 24 * cellidx + + 24 * iii + jjj]; + } + + // add matrix contribution to val slices + // initial naive implementation w. linear search and row-by-row + // update + // potential optimizations: bisection search, node-by-node + // update + for (int iii = 0; iii < 24; iii++) { + const int32_t rowStart = M.rowOffsets[edof[iii]]; + const int32_t rowEnd = M.rowOffsets[edof[iii] + 1]; + + for (int jjj = 0; jjj < 24; jjj++) { + // printf("Looking for %i in %i, [%i %i]: ", edof[jjj], + // edof[iii], rowStart, rowEnd); + + for (int idx = rowStart; idx < rowEnd; idx++) { + if (M.colIndex[idx] == edof[jjj]) { + //#pragma omp atomic update + M.vals[idx] += ke[iii][jjj]; + // printf("%i", idx); + break; + } + } + + // printf("\n"); + } + } + } + + // apply boundaryConditions +#pragma omp parallel for schedule(static) default(none) shared(M,tmp) + for (int row = 0; row < M.nrows; row++) { + tmp[row] = 1.0; + } + +#pragma omp parallel for schedule(static) default(none) firstprivate(wrapyc, wrapzc, nyc, nzc) shared(gc,tmp) + for (int i = 0; i < gc.fixedDofs[l].n; i++) { + const int row = + haloToTrue(gc.fixedDofs[l].idx[i], wrapyc, wrapzc, nyc, nzc); + tmp[row] = 0.0; + } + + // if either row or col is marked as fixed dof, zero the term +#pragma omp parallel for schedule(static) default(none) shared(M,tmp) + for (int row = 0; row < M.nrows; row++) { + const int32_t rowStart = M.rowOffsets[row]; + const int32_t rowEnd = M.rowOffsets[row + 1]; + + for (int col = rowStart; col < rowEnd; col++) + M.vals[col] *= tmp[row] * tmp[M.colIndex[col]]; + } + +#pragma omp parallel for schedule(static) default(none) firstprivate(wrapyc, wrapzc, nyc, nzc) shared(gc,M) + for (int i = 0; i < gc.fixedDofs[l].n; i++) { + const int row = + haloToTrue(gc.fixedDofs[l].idx[i], wrapyc, wrapzc, nyc, nzc); + + // printf("%i -> %i (%i)\n", gc.fixedDofs[l].idx[i], row, fdtmp.idx[i]); + const int32_t rowStart = M.rowOffsets[row]; + const int32_t rowEnd = M.rowOffsets[row + 1]; + for (int col = rowStart; col < rowEnd; col++) + if (row == M.colIndex[col]) + M.vals[col] = 1.0; + } +} + +void applyStateOperatorSubspaceMatrix(const struct gridContext gc, const int l, + const struct CSRMatrix M, const CTYPE *in, + CTYPE *out) { + + const int ncell = pow(2, l); + const int32_t nelxc = gc.nelx / ncell; + const int32_t nelyc = gc.nely / ncell; + const int32_t nelzc = gc.nelz / ncell; + + const int32_t nxc = nelxc + 1; + const int32_t nyc = nelyc + 1; + const int32_t nzc = nelzc + 1; + + const int paddingxc = + (STENCIL_SIZE_X - ((nelxc + 1) % STENCIL_SIZE_X)) % STENCIL_SIZE_X; + const int paddingyc = + (STENCIL_SIZE_Y - ((nelyc + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingzc = + (STENCIL_SIZE_Z - ((nelzc + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + const int wrapxc = nelxc + paddingxc + 3; + const int wrapyc = nelyc + paddingyc + 3; + const int wrapzc = nelzc + paddingzc + 3; + + const int ndofc = 3 * wrapxc * wrapyc * wrapzc; + +#pragma omp parallel for schedule(static) default(none) firstprivate(ndofc) shared(out) + for (int i = 0; i < ndofc; i++) + out[i] = 0.0; + +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(nxc,nyc,nzc,wrapyc,wrapzc) shared(M,in,out) + for (int32_t i = 1; i < nxc + 1; i++) + for (int32_t k = 1; k < nzc + 1; k++) + for (int32_t j = 1; j < nyc + 1; j++) { + + const int haloNodeIndex = i * wrapyc * wrapzc + wrapyc * k + j; + const uint32_t rowHaloIndex1 = 3 * haloNodeIndex + 0; + const uint32_t rowHaloIndex2 = 3 * haloNodeIndex + 1; + const uint32_t rowHaloIndex3 = 3 * haloNodeIndex + 2; + + const uint32_t i_no_halo = i - 1; + const uint32_t j_no_halo = j - 1; + const uint32_t k_no_halo = k - 1; + + const int rowNodeIndex = + i_no_halo * nyc * nzc + nyc * k_no_halo + j_no_halo; + const uint32_t rowIndex1 = 3 * rowNodeIndex + 0; + const uint32_t rowIndex2 = 3 * rowNodeIndex + 1; + const uint32_t rowIndex3 = 3 * rowNodeIndex + 2; + + double outBufferRow1 = 0.0; + double outBufferRow2 = 0.0; + double outBufferRow3 = 0.0; + + const int32_t xmin = MAX(i - 1, 1); + const int32_t ymin = MAX(j - 1, 1); + const int32_t zmin = MAX(k - 1, 1); + + const int32_t xmax = MIN(i + 2, nxc + 1); + const int32_t ymax = MIN(j + 2, nyc + 1); + const int32_t zmax = MIN(k + 2, nzc + 1); + + // recalculate indices instead of recreating i,j,k without halo + int offsetRow1 = M.rowOffsets[rowIndex1]; + int offsetRow2 = M.rowOffsets[rowIndex2]; + int offsetRow3 = M.rowOffsets[rowIndex3]; + + for (int ii = xmin; ii < xmax; ii++) + for (int kk = zmin; kk < zmax; kk++) + for (int jj = ymin; jj < ymax; jj++) { + + const int haloColNodeIndex = + ii * wrapyc * wrapzc + wrapyc * kk + jj; + + const uint32_t colHaloIndex1 = 3 * haloColNodeIndex + 0; + const uint32_t colHaloIndex2 = 3 * haloColNodeIndex + 1; + const uint32_t colHaloIndex3 = 3 * haloColNodeIndex + 2; + + outBufferRow1 += + (double)in[colHaloIndex1] * M.vals[offsetRow1 + 0] + + (double)in[colHaloIndex2] * M.vals[offsetRow1 + 1] + + (double)in[colHaloIndex3] * M.vals[offsetRow1 + 2]; + + outBufferRow2 += + (double)in[colHaloIndex1] * M.vals[offsetRow2 + 0] + + (double)in[colHaloIndex2] * M.vals[offsetRow2 + 1] + + (double)in[colHaloIndex3] * M.vals[offsetRow2 + 2]; + + outBufferRow3 += + (double)in[colHaloIndex1] * M.vals[offsetRow3 + 0] + + (double)in[colHaloIndex2] * M.vals[offsetRow3 + 1] + + (double)in[colHaloIndex3] * M.vals[offsetRow3 + 2]; + + offsetRow1 += 3; + offsetRow2 += 3; + offsetRow3 += 3; + } + + out[rowHaloIndex1] = outBufferRow1; + out[rowHaloIndex2] = outBufferRow2; + out[rowHaloIndex3] = outBufferRow3; + } +} + +void initializeCholmod(const struct gridContext gc, const int l, + struct CoarseSolverData *solverData, + const struct CSRMatrix M) { + + solverData->cholmodCommon = malloc(sizeof(cholmod_common)); + + // In order to enable GPU acceloration we must use _l_ functions + cholmod_start(solverData->cholmodCommon); + solverData->cholmodCommon->nmethods = 9; + + solverData->sparseMatrix = cholmod_allocate_sparse( + M.nrows, /* # of rows of A */ + M.nrows, /* # of columns of A */ + M.nnz, /* max # of nonzeros of A */ + 1, /* TRUE if columns of A sorted, FALSE otherwise */ + 1, /* TRUE if A will be packed, FALSE otherwise */ + 1, /* stype of A 0=use both upper and lower, 1=use upper, -1 use lower */ + CHOLMOD_REAL, /* CHOLMOD_PATTERN, _REAL, _COMPLEX, or _ZOMPLEX */ + solverData->cholmodCommon); + +#pragma omp parallel for schedule(static) default(none) shared(M,solverData) + for (int i = 0; i < M.nrows + 1; i++) + ((CHOLMOD_INT_TYPE *)solverData->sparseMatrix->p)[i] = M.rowOffsets[i]; + +#pragma omp parallel for schedule(static) default(none) shared(M,solverData) + for (int i = 0; i < M.nnz; i++) + ((CHOLMOD_INT_TYPE *)solverData->sparseMatrix->i)[i] = M.colIndex[i]; + + solverData->factoredMatrix = cholmod_analyze( + solverData->sparseMatrix, /* matrix to order and analyze */ + solverData->cholmodCommon); + + solverData->rhs = cholmod_allocate_dense( + M.nrows, /* # of rows of matrix */ + 1, /* # of cols of matrix */ + M.nrows, /* leading dimension */ + CHOLMOD_REAL, /* CHOLMOD_REAL, _COMPLEX, or _ZOMPLEX */ + solverData->cholmodCommon); + + solverData->solution = NULL; + solverData->Y_workspace = NULL; + solverData->E_workspace = NULL; +} + +void finishCholmod(const struct gridContext gc, const int l, + struct CoarseSolverData *solverData, + const struct CSRMatrix M, const int verbose) { + if (verbose == 1){ + cholmod_print_common("common", solverData->cholmodCommon); + } + cholmod_free_dense(&solverData->rhs, solverData->cholmodCommon); + cholmod_free_dense(&solverData->solution, solverData->cholmodCommon); + cholmod_free_dense(&solverData->Y_workspace, solverData->cholmodCommon); + cholmod_free_dense(&solverData->E_workspace, solverData->cholmodCommon); + + cholmod_free_sparse(&solverData->sparseMatrix, solverData->cholmodCommon); + cholmod_free_factor(&solverData->factoredMatrix, solverData->cholmodCommon); + + cholmod_finish(solverData->cholmodCommon); + free(solverData->cholmodCommon); +} + +void factorizeSubspaceMatrix(const struct gridContext gc, const int l, + struct CoarseSolverData solverData, + const struct CSRMatrix M) { + #pragma omp parallel for schedule(static) default(none) shared(M,solverData) + for (int i = 0; i < M.nnz; i++) + ((double *)solverData.sparseMatrix->x)[i] = M.vals[i]; + + cholmod_factorize(solverData.sparseMatrix, solverData.factoredMatrix, + solverData.cholmodCommon); +} + +void solveSubspaceMatrix(const struct gridContext gc, const int l, + struct CoarseSolverData solverData, const CTYPE *in, + CTYPE *out) { + const int ncell = pow(2, l); + const int32_t nelxc = gc.nelx / ncell; + const int32_t nelyc = gc.nely / ncell; + const int32_t nelzc = gc.nelz / ncell; + + const int32_t nxc = nelxc + 1; + const int32_t nyc = nelyc + 1; + const int32_t nzc = nelzc + 1; + + const int paddingyc = + (STENCIL_SIZE_Y - ((nelyc + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingzc = + (STENCIL_SIZE_Z - ((nelzc + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + const int wrapyc = nelyc + paddingyc + 3; + const int wrapzc = nelzc + paddingzc + 3; + +// copy grid data to vector +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(nxc,nyc,nzc) shared(solverData,in) + for (int i = 1; i < nxc + 1; i++) + for (int k = 1; k < nzc + 1; k++) + for (int j = 1; j < nyc + 1; j++) { + const int nidx = ((i - 1) * nyc * nzc + (k - 1) * nyc + (j - 1)); + const int nidx_s = (i * wrapyc * wrapzc + wrapyc * k + j); + + ((double *)solverData.rhs->x)[3 * nidx + 0] = in[3 * nidx_s + 0]; + ((double *)solverData.rhs->x)[3 * nidx + 1] = in[3 * nidx_s + 1]; + ((double *)solverData.rhs->x)[3 * nidx + 2] = in[3 * nidx_s + 2]; + } + + // cholmod_print_dense(solverData.rhs, "rhs", &solverData.cholmodCommon); + + // call cholmod solve + + cholmod_solve2(CHOLMOD_A, // system to solve + solverData.factoredMatrix, // factorization to use + solverData.rhs, // right-hand-side + NULL, // handle + &solverData.solution, // solution, allocated if need be + NULL, // handle + &solverData.Y_workspace, // workspace, or NULL + &solverData.E_workspace, // workspace, or NULL + solverData.cholmodCommon); + +// printf("cholmod solve status: %i\n", solveSuccess); + +// cholmod_print_dense(solverData.solution, "solution", +// &solverData.cholmodCommon); + +// copy data back to grid format +#pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(nxc,nyc,nzc) shared(out,solverData) + for (int i = 1; i < nxc + 1; i++) + for (int k = 1; k < nzc + 1; k++) + for (int j = 1; j < nyc + 1; j++) { + const int nidx = ((i - 1) * nyc * nzc + (k - 1) * nyc + (j - 1)); + const int nidx_s = (i * wrapyc * wrapzc + wrapyc * k + j); + + out[3 * nidx_s + 0] = ((double *)solverData.solution->x)[3 * nidx + 0]; + out[3 * nidx_s + 1] = ((double *)solverData.solution->x)[3 * nidx + 1]; + out[3 * nidx_s + 2] = ((double *)solverData.solution->x)[3 * nidx + 2]; + } +} diff --git a/stencil_assembly.h b/stencil_assembly.h new file mode 100644 index 0000000..aee34bb --- /dev/null +++ b/stencil_assembly.h @@ -0,0 +1,55 @@ +#pragma once + +#include "definitions.h" + +// #include "/zhome/c3/7/127558/SuiteSparse/SuiteSparse-5.10.1/include/cholmod.h" +#include "cholmod.h" + +struct CSRMatrix { + uint64_t nnz; + int32_t nrows; + + int *rowOffsets; + int *colIndex; + MTYPE *vals; +}; + +struct CoarseSolverData { + cholmod_common *cholmodCommon; + cholmod_sparse *sparseMatrix; + cholmod_factor *factoredMatrix; + + cholmod_dense *rhs; + cholmod_dense *solution; + + cholmod_dense *Y_workspace; + cholmod_dense *E_workspace; +}; + +void allocateSubspaceMatrix(const struct gridContext gc, const int l, + struct CSRMatrix *M); + +void freeSubspaceMatrix(struct CSRMatrix *M); + +void assembleSubspaceMatrix(const struct gridContext gc, const int l, + const DTYPE *x, struct CSRMatrix M, MTYPE *tmp); + +void applyStateOperatorSubspaceMatrix(const struct gridContext gc, const int l, + const struct CSRMatrix M, const CTYPE *in, + CTYPE *out); + +void initializeCholmod(const struct gridContext gc, const int l, + struct CoarseSolverData *ssolverData, + const struct CSRMatrix M); + +void finishCholmod(const struct gridContext gc, const int l, + struct CoarseSolverData *solverData, + const struct CSRMatrix M, const int verbose); + +void factorizeSubspaceMatrix(const struct gridContext gc, const int l, + struct CoarseSolverData solverData, + const struct CSRMatrix M); + +void solveSubspaceMatrix(const struct gridContext gc, const int l, + struct CoarseSolverData solverData, const CTYPE *in, + CTYPE *out); diff --git a/stencil_grid_utility.c b/stencil_grid_utility.c new file mode 100644 index 0000000..b185d1e --- /dev/null +++ b/stencil_grid_utility.c @@ -0,0 +1,164 @@ +#include "stencil_grid_utility.h" + +#include "local_matrix.h" + +#include "gpu_definitions.h" + +void setFixedDof_halo(struct gridContext *gc, const int l) { + + // Computing dimensions for grid + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + const int32_t nelyc = (*gc).nely / ncell; + const int32_t nelzc = (*gc).nelz / ncell; + + const int nyc = (nelyc + 1); + const int nzc = (nelzc + 1); + + // classic cantilever + // (*gc).fixedDofs[l].n = 3 * nyc * nzc; + // (*gc).fixedDofs[l].idx = malloc(sizeof(uint_fast32_t) * + // (*gc).fixedDofs[l].n); int offset = 0; for (uint_fast32_t k = 1; k < (nzc + + // 1); k++) + // for (uint_fast32_t j = 1; j < (nyc + 1); j++) { + // (*gc).fixedDofs[l].idx[offset + 0] = + // 3 * (wrapyc * wrapzc + wrapyc * k + j) + 0; + // (*gc).fixedDofs[l].idx[offset + 1] = + // 3 * (wrapyc * wrapzc + wrapyc * k + j) + 1; + // (*gc).fixedDofs[l].idx[offset + 2] = + // 3 * (wrapyc * wrapzc + wrapyc * k + j) + 2; + // offset += 3; + // } + + // new cantilever + const int nodelimit = (nelyc / 4) + 1; + (*gc).fixedDofs[l].n = 3 * nzc * 2 * nodelimit; + (*gc).fixedDofs[l].idx = malloc(sizeof(uint_fast32_t) * (*gc).fixedDofs[l].n); + int offset = 0; + const int i = 1; + for (uint_fast32_t k = 1; k < (nzc + 1); k++) { + for (uint_fast32_t j = 1; j < nodelimit + 1; j++) { + (*gc).fixedDofs[l].idx[offset + 0] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 0; + (*gc).fixedDofs[l].idx[offset + 1] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 1; + (*gc).fixedDofs[l].idx[offset + 2] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 2; + offset += 3; + } + for (uint_fast32_t j = (nyc + 1) - nodelimit; j < (nyc + 1); j++) { + (*gc).fixedDofs[l].idx[offset + 0] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 0; + (*gc).fixedDofs[l].idx[offset + 1] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 1; + (*gc).fixedDofs[l].idx[offset + 2] = + 3 * (i * wrapyc * wrapzc + wrapyc * k + j) + 2; + offset += 3; + } + } + + const uint_fast32_t n = (*gc).fixedDofs[l].n; + const uint_fast32_t *pidx = (*gc).fixedDofs[l].idx; + + #pragma omp target enter data map(to : pidx[:n]) +} + +void setupGC(struct gridContext *gc, const int nl, const int nelx, const int nely, const int nelz) { + + (*gc).E0 = 1; + (*gc).Emin = 1e-6; + (*gc).nu = 0.3; + (*gc).penal = 3; // dummy variable, does nothing + + (*gc).elementSizeX = 0.5; + (*gc).elementSizeY = 0.5; + (*gc).elementSizeZ = 0.5; + + (*gc).nelx = nelx; + (*gc).nely = nely; + (*gc).nelz = nelz; + + const int paddingx = + (STENCIL_SIZE_X - (((*gc).nelx + 1) % STENCIL_SIZE_X)) % STENCIL_SIZE_X; + const int paddingy = + (STENCIL_SIZE_Y - (((*gc).nely + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingz = + (STENCIL_SIZE_Z - (((*gc).nelz + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + (*gc).wrapx = (*gc).nelx + paddingx + 3; + (*gc).wrapy = (*gc).nely + paddingy + 3; + (*gc).wrapz = (*gc).nelz + paddingz + 3; + + (*gc).precomputedKE = malloc(sizeof(MTYPE *) * nl); + (*gc).fixedDofs = malloc(sizeof(struct FixedDofs) * nl); + + for (int l = 0; l < nl; l++) { + const int ncell = pow(2, l); + const int pKESize = 24 * 24 * ncell * ncell * ncell; + (*gc).precomputedKE[l] = malloc(sizeof(MTYPE) * pKESize); + getKEsubspace((*gc).precomputedKE[l], (*gc).nu, l); + + setFixedDof_halo(gc, l); + + //MTYPE *pKE = (*gc).precomputedKE[l]; + +//#pragma omp target enter data map(to : pKE[:pKESize]) + } +} + +void freeGC(struct gridContext *gc, const int nl) { + + for (int l = 0; l < nl; l++) { + free((*gc).precomputedKE[l]); + free((*gc).fixedDofs[l].idx); + } + + free((*gc).precomputedKE); + free((*gc).fixedDofs); +} + +void allocateZeroPaddedStateField(const struct gridContext gc, const int l, + CTYPE **v) { + + // Computing dimensions for coarse grid + int ncell,wrapx,wrapy,wrapz; + uint_fast32_t ndof; + computePadding(&gc,l,&ncell,&wrapx,&wrapy,&wrapz,&ndof); + + (*v) = malloc(sizeof(CTYPE) * ndof); + +#pragma omp parallel for schedule(static) default(none) firstprivate(ndof) shared(v) + for (int i = 0; i < ndof; i++) + (*v)[i] = 0.0; +} + +void allocateZeroPaddedStateField_MTYPE(const struct gridContext gc, + const int l, MTYPE **v) { + + // Computing dimensions for coarse grid + int ncell,wrapx,wrapy,wrapz; + uint_fast32_t ndof; + computePadding(&gc,l,&ncell,&wrapx,&wrapy,&wrapz,&ndof); + + (*v) = malloc(sizeof(MTYPE) * ndof); + +#pragma omp parallel for schedule(static) default(none) firstprivate(ndof) shared(v) + for (int i = 0; i < ndof; i++) + (*v)[i] = 0.0; +} + +void allocateZeroPaddedStateField_STYPE(const struct gridContext gc, + const int l, STYPE **v) { + + // Computing dimensions for coarse grid + int ncell,wrapx,wrapy,wrapz; + uint_fast32_t ndof; + computePadding(&gc,l,&ncell,&wrapx,&wrapy,&wrapz,&ndof); + + (*v) = malloc(sizeof(STYPE) * ndof); + +#pragma omp parallel for schedule(static) default(none) firstprivate(ndof) shared(v) + for (int i = 0; i < ndof; i++) + (*v)[i] = 0.0; +} diff --git a/stencil_grid_utility.h b/stencil_grid_utility.h new file mode 100644 index 0000000..1985a24 --- /dev/null +++ b/stencil_grid_utility.h @@ -0,0 +1,17 @@ +#pragma once + +#include "definitions.h" + +void setFixedDof_halo(struct gridContext *gc, const int l); + +void setupGC(struct gridContext *gc, const int nl, const int nelx, const int nely, const int nelz); + +void freeGC(struct gridContext *gc, const int nl); + +void allocateZeroPaddedStateField(const struct gridContext gc, const int l, + CTYPE **v); +void allocateZeroPaddedStateField_MTYPE(const struct gridContext gc, + const int l, MTYPE **v); + +void allocateZeroPaddedStateField_STYPE(const struct gridContext gc, + const int l, STYPE **v); diff --git a/stencil_methods.c b/stencil_methods.c new file mode 100644 index 0000000..10b07b3 --- /dev/null +++ b/stencil_methods.c @@ -0,0 +1,862 @@ +#include "stencil_methods.h" + +#include "stencil_utility.h" + +#include + +void applyStateOperator_stencil(const struct gpuNode * gpu_node, const DTYPE *x, + const CTYPE *in, CTYPE *out) { + const struct gridContext gc = *(gpu_node->gc); + const uint32_t nx = gc.nelx + 1; + const uint32_t ny = gc.nely + 1; + const uint32_t nz = gc.nelz + 1; + + // this is necessary for omp to recognize that gc.precomputedKE[0] is already + // mapped + const MTYPE *precomputedKE = gc.precomputedKE[0]; + const int wrapy = gc.wrapy; + const int wrapz = gc.wrapz; + + // loop over elements, depends on the which level you are on. For the finest + // (level 0) nelx*nely*nelz = 100.000 or more, but for every level you go down + // the number of iterations reduce by a factor of 8. i.e. level 2 will only + // have ~1000. This specific loop accounts for ~90% runtime + //#pragma omp teams distribute parallel for collapse(3) schedule(static) + +#pragma omp target teams distribute parallel for schedule(static) collapse(3) device(gpu_node->id) + for (int32_t i = 1; i < nx + 1; i += STENCIL_SIZE_X) { + for (int32_t k = 1; k < nz + 1; k += STENCIL_SIZE_Z) { + for (int32_t j = 1; j < ny + 1; j += STENCIL_SIZE_Y) { + + alignas(__alignBound) MTYPE out_x[STENCIL_SIZE_Y]; + alignas(__alignBound) MTYPE out_y[STENCIL_SIZE_Y]; + alignas(__alignBound) MTYPE out_z[STENCIL_SIZE_Y]; + + alignas(__alignBound) MTYPE in_x[STENCIL_SIZE_Y]; + alignas(__alignBound) MTYPE in_y[STENCIL_SIZE_Y]; + alignas(__alignBound) MTYPE in_z[STENCIL_SIZE_Y]; + +// zero the values about to be written in this + #pragma omp simd safelen(STENCIL_SIZE_Y) simdlen(STENCIL_SIZE_Y) \ + aligned(out_x, out_y, out_z \ + : __alignBound) + for (int jj = 0; jj < STENCIL_SIZE_Y; jj++) { + out_x[jj] = 0.0; + out_y[jj] = 0.0; + out_z[jj] = 0.0; + } + + // center line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){0, 0, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 0}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, 1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 0}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 0}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 0}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 0}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, -1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 0}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 0}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 0}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 0}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // side line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){0, 0, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 1}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 1}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 1}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, 1}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, 1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 1}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, 1}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, -1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 1}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, 1}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // side line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){0, 0, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, -1}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, -1}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, -1}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 0, -1}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, 1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, -1}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, 1, -1}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){0, -1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, -1}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){0, -1, -1}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // side line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){1, 0, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 0}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 0}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 0}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 0}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, 1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 1, 0}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 1, 0}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, -1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, -1, 0}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, -1, 0}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // side line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){-1, 0, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 0}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 0}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 0}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 0}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, -1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, -1, 0}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, -1, 0}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, 1, 0}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 1, 0}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 1, 0}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // edge line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){-1, 1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 1, -1}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, 0, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, -1}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, -1}, + (const int[]){-1, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, -1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, -1, -1}, + (const int[]){-1, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // edge line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){1, 0, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, -1}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, -1}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, -1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, -1, -1}, + (const int[]){0, -1, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, 1, -1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 1, -1}, + (const int[]){0, 0, -1}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // edge line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){1, 0, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 1}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 0, 1}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, 1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, 1, 1}, + (const int[]){0, 0, 0}, ny, nz, x, in_x, + in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){1, -1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){1, -1, 1}, + (const int[]){0, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + // edge line, uses uses the same 15 doubles from in + loadStencilInput(gc, i, j, k, (const int[]){-1, 0, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 1}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 0, 1}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, -1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, -1, 1}, + (const int[]){-1, -1, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + + loadStencilInput(gc, i, j, k, (const int[]){-1, 1, 1}, in, in_x, in_y, + in_z); + applyStateStencilSpoke_finegrid(gc, precomputedKE, i, j, k, + (const int[]){-1, 1, 1}, + (const int[]){-1, 0, 0}, ny, nz, x, + in_x, in_y, in_z, out_x, out_y, out_z); + #pragma omp simd safelen(STENCIL_SIZE_Y) simdlen(STENCIL_SIZE_Y) + for (int jj = 0; jj < STENCIL_SIZE_Y; jj++) { + const uint_fast32_t offset = + 3 * (i * wrapy * wrapz + k * wrapy + j + jj); + out[offset + 0] = out_x[jj]; + out[offset + 1] = out_y[jj]; + out[offset + 2] = out_z[jj]; + } + } + } + } + +// zero out the extra padded nodes +#pragma omp target teams distribute parallel for collapse(3) schedule(static) device(gpu_node->id) + for (int32_t i = 0; i < gc.wrapx; i++) + for (int32_t k = 0; k < gc.wrapz; k++) + for (int32_t j = ny + 1; j < gc.wrapy; j++) { + + const uint_fast32_t offset = + 3 * (i * wrapy * wrapz + k * wrapy + j); + + out[offset + 0] = 0.0; + out[offset + 1] = 0.0; + out[offset + 2] = 0.0; + } + + const uint_fast32_t n = gc.fixedDofs[0].n; + const uint_fast32_t *fidx = gc.fixedDofs[0].idx; + +// apply boundaryConditions +#pragma omp target teams distribute parallel for schedule(static) device(gpu_node->id) + for (int i = 0; i < n; i++) { + out[fidx[i]] = in[fidx[i]]; + } +} + + +// Apply the global matrix vector product out = K * in +// temperature: very hot, called ~25 x (number of mg levels [1-5]) x +// (number of cg iterations [125-2500]) = [125-12500] times pr design +// iteration + +void applyStateOperatorSubspace_halo(const struct gpuNode * gpu_node, const int l, + const DTYPE *x, CTYPE *in, CTYPE *out) { + const struct gridContext gc = *(gpu_node->gc); + + // Computing dimensions for coarse grid + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(&gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + + const int32_t nelxc = gc.nelx / ncell; + const int32_t nelyc = gc.nely / ncell; + const int32_t nelzc = gc.nelz / ncell; + + MTYPE* KE = gc.precomputedKE[l]; + uint_fast32_t * idx = gc.fixedDofs[l].idx; + uint_fast32_t n = gc.fixedDofs[l].n; + + #pragma omp target teams distribute parallel for schedule(static) device(gpu_node->id) + for (uint32_t i = 0; i < ndofc; i++) + out[i] = 0.0; + + for (int32_t bx = 0; bx < 2; bx++) + for (int32_t bz = 0; bz < 2; bz++) + for (int32_t by = 0; by < 2; by++) + #pragma omp target teams distribute parallel for collapse(4) schedule(static) device(gpu_node->id) + for (int32_t i = bx + 1; i < nelxc + 1; i += 2) + for (int32_t k = bz + 1; k < nelzc + 1; k += 2) + for (int32_t j = by + 1; j < nelyc + 1; j += 2) + for (int imv=0;imv<24;imv++){ + MTYPE out_local = 0.0; + uint_fast32_t idx_update = 0; + for (int kt=0;kt<2;kt++){ + for (int jt=0;jt<2;jt++){ + for (int it=0;it<2;it++){ + int nx = i + it; + if (jt == 1){ + nx = i + 1-it; + } + const int pos = 3*(kt*4+jt*2+it); + const int nz = k + kt; + const int ny = j + 1-jt; + const uint_fast32_t nIndex = nx * wrapyc * wrapzc + nz * wrapyc + ny; + uint_fast32_t edof = 3 * nIndex; + for (int off1 = 0;off1<3;off1++){ + if (pos + off1 == imv){ + idx_update = edof+off1; + } + } + for (int ii = 0; ii < ncell; ii++) + for (int kk = 0; kk < ncell; kk++) + for (int jj = 0; jj < ncell; jj++){ + const int ifine = ((i - 1) * ncell) + ii + 1; + const int jfine = ((j - 1) * ncell) + jj + 1; + const int kfine = ((k - 1) * ncell) + kk + 1; + + const int cellidx = 24 * 24 * (ncell * ncell * ii + ncell * kk + jj); + + const uint_fast32_t elementIndex = + ifine * (gc.wrapy - 1) * (gc.wrapz - 1) + + kfine * (gc.wrapy - 1) + jfine; + const MTYPE elementScale = + gc.Emin + x[elementIndex] * x[elementIndex] * + x[elementIndex] * (gc.E0 - gc.Emin); + for (int off = 0;off<3;off++){ + out_local += elementScale*KE[cellidx+imv*24+pos+off]*((MTYPE)in[edof+off]); + } + } + + } + } + } + #pragma omp atomic update + out[idx_update] += (CTYPE)out_local; + } + + + + // apply boundaryConditions +//#pragma omp parallel for schedule(static) default(none) shared(gc,in,out) +#pragma omp target teams distribute parallel for schedule(static) device(gpu_node->id)//default(none) shared(gc,in,out) + for (int i = 0; i < n; i++) { + out[idx[i]] = in[idx[i]]; + } +} + +void projectToFinerGrid_halo(const struct gpuNode * gpu_node, + /*in*/ const int l, /*in*/ + const CTYPE *ucoarse, /*in*/ + CTYPE *ufine /*out*/) { + const struct gridContext * gc = gpu_node->gc; + + // Computing dimensions for fine grid + int ncellf,wrapxf,wrapyf,wrapzf; + uint_fast32_t ndoff; + computePadding(gc,l,&ncellf,&wrapxf,&wrapyf,&wrapzf,&ndoff); + + // Computing dimensions for coarse grid + int ncellc,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l+1,&ncellc,&wrapxc,&wrapyc,&wrapzc,&ndofc); + + const int nelxf = gc->nelx / ncellf; + const int nelyf = gc->nely / ncellf; + const int nelzf = gc->nelz / ncellf; + + const int nxf = nelxf + 1; + const int nyf = nelyf + 1; + const int nzf = nelzf + 1; + + // loop over nodes, usually very large with nx*ny*nz = 100.000 or more + #pragma omp target teams distribute parallel for collapse(4) schedule(static) device(gpu_node->id) + for (int32_t ifine = 1; ifine < nxf + 1; ifine++) + for (int32_t kfine = 1; kfine < nzf + 1; kfine++) + for (int32_t jfine = 1; jfine < nyf + 1; jfine++) { + for(int offset = 0;offset<3;offset++){ + + const uint32_t fineIndex = + ifine * wrapyf * wrapzf + kfine * wrapyf + jfine; + + const uint32_t icoarse1 = (ifine - 1) / 2 + 1; + const uint32_t icoarse2 = (ifine) / 2 + 1; + const uint32_t jcoarse1 = (jfine - 1) / 2 + 1; + const uint32_t jcoarse2 = (jfine) / 2 + 1; + const uint32_t kcoarse1 = (kfine - 1) / 2 + 1; + const uint32_t kcoarse2 = (kfine) / 2 + 1; + + // Node indices on coarse grid + const uint_fast32_t coarseIndex1 = + icoarse1 * wrapyc * wrapzc + kcoarse1 * wrapyc + jcoarse2; + const uint_fast32_t coarseIndex2 = + icoarse2 * wrapyc * wrapzc + kcoarse1 * wrapyc + jcoarse2; + const uint_fast32_t coarseIndex3 = + icoarse2 * wrapyc * wrapzc + kcoarse1 * wrapyc + jcoarse1; + const uint_fast32_t coarseIndex4 = + icoarse1 * wrapyc * wrapzc + kcoarse1 * wrapyc + jcoarse1; + const uint_fast32_t coarseIndex5 = + icoarse1 * wrapyc * wrapzc + kcoarse2 * wrapyc + jcoarse2; + const uint_fast32_t coarseIndex6 = + icoarse2 * wrapyc * wrapzc + kcoarse2 * wrapyc + jcoarse2; + const uint_fast32_t coarseIndex7 = + icoarse2 * wrapyc * wrapzc + kcoarse2 * wrapyc + jcoarse1; + const uint_fast32_t coarseIndex8 = + icoarse1 * wrapyc * wrapzc + kcoarse2 * wrapyc + jcoarse1; + + ufine[3 * fineIndex + offset] = 0.125 * ucoarse[3 * coarseIndex1 + offset] + + 0.125 * ucoarse[3 * coarseIndex2 + offset] + + 0.125 * ucoarse[3 * coarseIndex3 + offset] + + 0.125 * ucoarse[3 * coarseIndex4 + offset] + + 0.125 * ucoarse[3 * coarseIndex5 + offset] + + 0.125 * ucoarse[3 * coarseIndex6 + offset] + + 0.125 * ucoarse[3 * coarseIndex7 + offset] + + 0.125 * ucoarse[3 * coarseIndex8 + offset]; + } + } +} + +// projects a field to a coarser grid ufine -> ucoarse +// temperature: medium, called (number of mg levels [1-5]) x (number of cg +// iterations [5-100]) = [5-500] times pr design iteration +void projectToCoarserGrid_halo(const struct gpuNode * gpu_node,//in + const int l,//in + const CTYPE *ufine, //in + CTYPE *ucoarse //out + ) { + const struct gridContext * gc = gpu_node->gc; + + // Computing dimensions for fine grid + int ncellf,wrapxf,wrapyf,wrapzf; + uint_fast32_t ndoff; + computePadding(gc,l,&ncellf,&wrapxf,&wrapyf,&wrapzf,&ndoff); + + // Computing dimensions for coarse grid + int ncellc,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l+1,&ncellc,&wrapxc,&wrapyc,&wrapzc,&ndofc); + + const int nelxc = gc->nelx / ncellc; + const int nelyc = gc->nely / ncellc; + const int nelzc = gc->nelz / ncellc; + + const int nxc = nelxc + 1; + const int nyc = nelyc + 1; + const int nzc = nelzc + 1; + + const MTYPE vals[4] = {1.0, 0.5, 0.25, 0.125}; + //const int n_threads = 8; + //const int n_teams = 5120/n_threads; + + // loop over nodes, usually very large with nx*ny*nz = 100.000 or more + //#pragma omp target data map(to:ufine[:ndofc_fine],vals[:4]) map(tofrom:ucoarse[:ndofc_coarse]) + #pragma omp target data map(to:vals[:4]) device(gpu_node->id) + { + //#pragma omp target teams num_teams(n_teams) distribute collapse(3) + #pragma omp target teams distribute parallel for schedule(static) collapse(3) device(gpu_node->id) + for (int32_t icoarse = 1; icoarse < nxc + 1; icoarse++) + for (int32_t kcoarse = 1; kcoarse < nzc + 1; kcoarse++) + for (int32_t jcoarse = 1; jcoarse < nyc + 1; jcoarse++) { + + const int coarseIndex = + icoarse * wrapyc * wrapzc + kcoarse * wrapyc + jcoarse; + + ucoarse[3 * coarseIndex] = 0; + ucoarse[3 * coarseIndex+1] = 0; + ucoarse[3 * coarseIndex+2] = 0; + } + #pragma omp target teams distribute parallel for schedule(static) collapse(3) device(gpu_node->id) + for (int32_t icoarse = 1; icoarse < nxc + 1; icoarse++) + for (int32_t kcoarse = 1; kcoarse < nzc + 1; kcoarse++) + for (int32_t jcoarse = 1; jcoarse < nyc + 1; jcoarse++) { + + const int coarseIndex = + icoarse * wrapyc * wrapzc + kcoarse * wrapyc + jcoarse; + + + // Node indices on fine grid + const int nx1 = (icoarse - 1) * 2 + 1; + const int ny1 = (jcoarse - 1) * 2 + 1; + const int nz1 = (kcoarse - 1) * 2 + 1; + + const int xmin = nx1 - 1; + const int ymin = ny1 - 1; + const int zmin = nz1 - 1; + + const int xmax = nx1 + 2; + const int ymax = ny1 + 2; + const int zmax = nz1 + 2; + + /*ucoarse[3 * coarseIndex] = 0; + ucoarse[3 * coarseIndex+1] = 0; + ucoarse[3 * coarseIndex+2] = 0;*/ + + // this can be done faster by writing out the 27 iterations by hand, + // do it when necessary. + //#pragma omp parallel for num_threads(n_threads) collapse(4) schedule(static) + for (int32_t ifine = xmin; ifine < xmax; ifine++) + for (int32_t kfine = zmin; kfine < zmax; kfine++) + for (int32_t jfine = ymin; jfine < ymax; jfine++) + for (int32_t offset = 0; offset < 3; offset++){ + + const uint32_t fineIndex = + ifine * wrapyf * wrapzf + kfine * wrapyf + jfine; + + const int ind = (nx1 - ifine) * (nx1 - ifine) + + (ny1 - jfine) * (ny1 - jfine) + + (nz1 - kfine) * (nz1 - kfine); + int idx = 3 * coarseIndex+offset; + CTYPE prod = vals[ind] * ufine[3 * fineIndex + offset]; + #pragma omp atomic update + ucoarse[idx] += prod; + } + } + } +} + +// generate the matrix diagonal for jacobi smoothing. +// temperature: low-medium, called number of levels for every design +// iteration. +void assembleInvertedMatrixDiagonalSubspace_halo(const struct gpuNode * gpu_node, + const DTYPE *x, const int l, + MTYPE *diag) { + const struct gridContext * gc = gpu_node->gc; + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + const int32_t nelxc = gc->nelx / ncell; + const int32_t nelyc = gc->nely / ncell; + const int32_t nelzc = gc->nelz / ncell; + const int wrapy = gc->wrapy; + const int wrapz = gc->wrapz; + + uint_fast32_t* idx = gc->fixedDofs[l].idx; + uint_fast32_t n = gc->fixedDofs[l].n; + const double Emin = gc->Emin; + const double E0_Emin = gc->E0-gc->Emin; + const MTYPE * KE = gc->precomputedKE[l]; + + //#pragma omp target data map(to:idx[:n]) + //{ + #pragma omp target teams distribute parallel for schedule(static) device(gpu_node->id) + for (unsigned int i = 0; i < ndofc; i++) + diag[i] = 0.0; + + #pragma omp target teams distribute parallel for collapse(9) schedule(static) device(gpu_node->id) + for (int32_t bx = 0; bx < 2; bx++) + for (int32_t bz = 0; bz < 2; bz++) + for (int32_t by = 0; by < 2; by++) + for (int32_t it = 1; it < nelxc + 1; it += 2) + for (int32_t kt = 1; kt < nelzc + 1; kt += 2) + for (int32_t jt = 1; jt < nelyc + 1; jt += 2) + for (int ii = 0; ii < ncell; ii++) + for (int kk = 0; kk < ncell; kk++) + for (int jj = 0; jj < ncell; jj++) { + int32_t i = bx + it; + int32_t k = bz + kt; + int32_t j = by + jt; + if ((i >= nelxc + 1) || (k >= nelzc + 1) || (j >= nelyc + 1)){ + break; + } + uint_fast32_t edof[24]; + getEdof_halo(edof, i, j, k, wrapyc, wrapzc); + const int ifine = ((i - 1) * ncell) + ii + 1; + const int jfine = ((j - 1) * ncell) + jj + 1; + const int kfine = ((k - 1) * ncell) + kk + 1; + + const int cellidx = ncell * ncell * ii + ncell * kk + jj; + + const uint_fast32_t elementIndex = + ifine * (wrapy - 1) * (wrapz - 1) + + kfine * (wrapy - 1) + jfine; + const MTYPE elementScale = + Emin + x[elementIndex] * x[elementIndex] * + x[elementIndex] * E0_Emin; + + for (int iii = 0; iii < 24; iii++){ + #pragma omp atomic update + diag[edof[iii]] += elementScale * KE[24 * 24 * cellidx + iii * 24 + iii]; + } + } +//printf("(wrapxc,wrapyc,wrapzc)=(%d,%d,%d)\n",wrapxc,wrapyc,wrapzc); + +// apply boundaryConditions +#pragma omp target teams distribute parallel for schedule(static) device(gpu_node->id) + for (int i = 0; i < n; i++){ + diag[idx[i]] = 1.0; + } + +#pragma omp target teams distribute parallel for collapse(3) schedule(static) device(gpu_node->id) + for (int i = 1; i < nelxc + 2; i++) + for (int k = 1; k < nelzc + 2; k++) + for (int j = 1; j < nelyc + 2; j++) { + const int nidx = (i * wrapyc * wrapzc + wrapyc * k + j); + + diag[3 * nidx + 0] = 1.0 / diag[3 * nidx + 0]; + diag[3 * nidx + 1] = 1.0 / diag[3 * nidx + 1]; + diag[3 * nidx + 2] = 1.0 / diag[3 * nidx + 2]; + } + //} +} + +__force_inline inline void getEdof_halo_8(uint_fast32_t edof[8], const int i, + const int j, const int k, + const int wrapy, const int wrapz) { + + const int nx_1 = i; + const int nx_2 = i + 1; + const int nz_1 = k; + const int nz_2 = k + 1; + const int ny_1 = j; + const int ny_2 = j + 1; + + const uint_fast32_t nIndex1 = nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_2; + const uint_fast32_t nIndex2 = nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_2; + const uint_fast32_t nIndex3 = nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_1; + const uint_fast32_t nIndex4 = nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_1; + const uint_fast32_t nIndex5 = nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_2; + const uint_fast32_t nIndex6 = nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_2; + const uint_fast32_t nIndex7 = nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_1; + const uint_fast32_t nIndex8 = nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_1; + + edof[0] = 3 * nIndex1; + edof[1] = 3 * nIndex2; + edof[2] = 3 * nIndex3; + edof[3] = 3 * nIndex4; + + edof[4] = 3 * nIndex5; + edof[5] = 3 * nIndex6; + edof[6] = 3 * nIndex7; + edof[7] = 3 * nIndex8; +} + +// generate elementwise gradients from displacement. +// temperature: cold, called once for every design iteration. +void getComplianceAndSensetivity_halo(const struct gpuNode * gpu_node, + const DTYPE *x, STYPE *u, DTYPE *c, + DTYPE *dcdx) { + const struct gridContext gc = *(gpu_node->gc); + + c[0] = 0.0; + DTYPE cc = 0.0; + + #pragma omp target teams distribute parallel for schedule(static) collapse(3) device(gpu_node->id) + for (int32_t i = 1; i < gc.nelx + 1; i++) + for (int32_t k = 1; k < gc.nelz + 1; k++) + for (int32_t j = 1; j < gc.nely + 1; j++) { + const uint_fast32_t elementIndex = + i * (gc.wrapy - 1) * (gc.wrapz - 1) + k * (gc.wrapy - 1) + j; + dcdx[elementIndex] = 0.0; + } + +// loops over all elements, typically 100.000 or more. Note that there are no +// write dependencies, other than the reduction. + MTYPE * KE = gc.precomputedKE[0]; + double E_diff = gc.E0 - gc.Emin; + double Emin = gc.Emin; + //#pragma omp target data map(always,tofrom:cc) + { + for (int ii=0;ii<8;ii++) + #pragma omp target teams distribute parallel for schedule(static) collapse(3) map(always,tofrom:cc) reduction(+ : cc) firstprivate(Emin,E_diff) device(gpu_node->id) + for (int32_t i = 1; i < gc.nelx + 1; i++) + for (int32_t k = 1; k < gc.nelz + 1; k++) + for (int32_t j = 1; j < gc.nely + 1; j++) { + uint_fast32_t edof[8]; + + getEdof_halo_8(edof, i, j, k, gc.wrapy, gc.wrapz); + const uint_fast32_t elementIndex = + i * (gc.wrapy - 1) * (gc.wrapz - 1) + k * (gc.wrapy - 1) + j; + + // clocal = ulocal^T * ke * ulocal + STYPE clocal = 0.0; + for(int iii=0;iii<3;iii++){ + MTYPE tmp = 0.0; + for (int jj=0;jj<8;jj++){ + tmp += KE[(ii*3+iii)*24+3*jj]*u[edof[jj]]; + tmp += KE[(ii*3+iii)*24+3*jj+1]*u[edof[jj]+1]; + tmp += KE[(ii*3+iii)*24+3*jj+2]*u[edof[jj]+2]; + } + clocal += u[edof[ii]+iii] * tmp; + } + // apply contribution to c and dcdx + cc += clocal * (Emin + x[elementIndex] * x[elementIndex] * + x[elementIndex] * E_diff); + dcdx[elementIndex] += clocal * (-3.0 * E_diff * + x[elementIndex] * x[elementIndex]); + } + } + c[0] = cc; +} diff --git a/stencil_methods.h b/stencil_methods.h new file mode 100644 index 0000000..6239b3a --- /dev/null +++ b/stencil_methods.h @@ -0,0 +1,183 @@ +#pragma once + +#include "definitions.h" +#include "gpu_definitions.h" + +void applyStateOperator_stencil(const struct gpuNode * gpu_node, const DTYPE *x, + const CTYPE *in, CTYPE *out); + +void applyStateOperatorSubspace_halo(const struct gpuNode * gpu_node, const int l, + const DTYPE *x, CTYPE *in, CTYPE *out); + +void getComplianceAndSensetivity_halo(const struct gpuNode * gpu_node, + const DTYPE *x, STYPE *u, DTYPE *c, + DTYPE *dcdx); + +void projectToFinerGrid_halo(const struct gpuNode * gpu_node, + /*in*/ const int l, /*in*/ + const CTYPE *ucoarse, /*in*/ + CTYPE *ufine /*out*/); + +void projectToCoarserGrid_halo(const struct gpuNode * gpu_node, + /*in*/ const int l, /*in*/ + const CTYPE *ufine, /*in*/ + CTYPE *ucoarse /*out*/); + +void assembleInvertedMatrixDiagonalSubspace_halo(const struct gpuNode * gpu_node, + const DTYPE *x, const int l, + MTYPE *diag); + +#pragma omp declare target +__force_inline int inline getLocalNodeIndex( + const int nodeOffsetFromElement[3]) { + int output = -1; + + const int ox = nodeOffsetFromElement[0]; + const int oy = nodeOffsetFromElement[1]; + const int oz = nodeOffsetFromElement[2]; + + // hack by jumptable, inputs are compile-time constant, so it should be fine. + // I do miss templates for this stuff though.. + + if (ox == 1 && oy == 1 && oz == 1) + output = 5; + else if (ox == 1 && oy == 0 && oz == 1) + output = 6; + else if (ox == 0 && oy == 1 && oz == 1) + output = 4; + else if (ox == 0 && oy == 0 && oz == 1) + output = 7; + else if (ox == 1 && oy == 1 && oz == 0) + output = 1; + else if (ox == 1 && oy == 0 && oz == 0) + output = 2; + else if (ox == 0 && oy == 1 && oz == 0) + output = 0; + else if (ox == 0 && oy == 0 && oz == 0) + output = 3; + + return output; +} + +__force_inline inline void applyStateStencilSpoke_finegrid( + const struct gridContext gc, const MTYPE *precomputedKE, const int i_center, + const int j_center, const int k_center, const int nodeOffset[3], + const int elementOffset[3], const uint32_t ny, const uint32_t nz, const DTYPE *x, + MTYPE inBuffer_x[STENCIL_SIZE_Y], MTYPE inBuffer_y[STENCIL_SIZE_Y], + MTYPE inBuffer_z[STENCIL_SIZE_Y], MTYPE outBuffer_x[STENCIL_SIZE_Y], + MTYPE outBuffer_y[STENCIL_SIZE_Y], MTYPE outBuffer_z[STENCIL_SIZE_Y]) { + + // compute sending and recieving local node number, hopefully be evaluated at + // compile-time + + const int recievingNodeOffset[3] = {-elementOffset[0], -elementOffset[1], + -elementOffset[2]}; + const int nodeOffsetFromElement[3] = {nodeOffset[0] - elementOffset[0], + nodeOffset[1] - elementOffset[1], + nodeOffset[2] - elementOffset[2]}; + + const int localRecievingNodeIdx = getLocalNodeIndex(recievingNodeOffset); + const int localSendingNodeIdx = getLocalNodeIndex(nodeOffsetFromElement); + + // compute index for element + const int i_element = i_center + elementOffset[0]; + const int j_element = j_center + elementOffset[1]; + const int k_element = k_center + elementOffset[2]; + + MTYPE localBuf_x[STENCIL_SIZE_Y]; + MTYPE localBuf_y[STENCIL_SIZE_Y]; + MTYPE localBuf_z[STENCIL_SIZE_Y]; + + const int startRecieve_local = 3 * localRecievingNodeIdx; + const int startSend_local = 3 * localSendingNodeIdx; + + // loop over simd stencil size +// currently does not compile to simd instructions.. +#pragma omp simd safelen(STENCIL_SIZE_Y) simdlen(STENCIL_SIZE_Y) aligned( \ + inBuffer_x, inBuffer_y, inBuffer_z, outBuffer_x, outBuffer_y, outBuffer_z \ + : __alignBound) + for (int jj = 0; jj < STENCIL_SIZE_Y; jj++) { + + // local coordinates + const uint_fast32_t elementIndex = + (i_element) * (gc.wrapy - 1) * (gc.wrapz - 1) + + (k_element) * (gc.wrapy - 1) + (j_element + jj); + MTYPE elementScale = gc.Emin + x[elementIndex] * x[elementIndex] * + x[elementIndex] * (gc.E0 - gc.Emin); + + // important, sets true zero to halo values. This is necessary for + // correctness. Performance can be gained by removing the constant Emin, and + // setting the minimum allowed density to a corresponding non-zero value. + // But this is left for the future at the moment. + if (i_element == 0 || i_element > gc.nelx || j_element + jj == 0 || + j_element + jj > gc.nely || k_element == 0 || k_element > gc.nelz) + elementScale = 0.0; + + localBuf_x[jj] = 0.0; + localBuf_y[jj] = 0.0; + localBuf_z[jj] = 0.0; + + // add the spoke contribution + localBuf_x[jj] += + precomputedKE[24 * (startRecieve_local + 0) + (startSend_local + 0)] * + inBuffer_x[jj]; + localBuf_x[jj] += + precomputedKE[24 * (startRecieve_local + 0) + (startSend_local + 1)] * + inBuffer_y[jj]; + localBuf_x[jj] += + precomputedKE[24 * (startRecieve_local + 0) + (startSend_local + 2)] * + inBuffer_z[jj]; + + localBuf_y[jj] += + precomputedKE[24 * (startRecieve_local + 1) + (startSend_local + 0)] * + inBuffer_x[jj]; + localBuf_y[jj] += + precomputedKE[24 * (startRecieve_local + 1) + (startSend_local + 1)] * + inBuffer_y[jj]; + localBuf_y[jj] += + precomputedKE[24 * (startRecieve_local + 1) + (startSend_local + 2)] * + inBuffer_z[jj]; + + localBuf_z[jj] += + precomputedKE[24 * (startRecieve_local + 2) + (startSend_local + 0)] * + inBuffer_x[jj]; + localBuf_z[jj] += + precomputedKE[24 * (startRecieve_local + 2) + (startSend_local + 1)] * + inBuffer_y[jj]; + localBuf_z[jj] += + precomputedKE[24 * (startRecieve_local + 2) + (startSend_local + 2)] * + inBuffer_z[jj]; + + outBuffer_x[jj] += elementScale * localBuf_x[jj]; + outBuffer_y[jj] += elementScale * localBuf_y[jj]; + outBuffer_z[jj] += elementScale * localBuf_z[jj]; + } +} + +__force_inline inline void +loadStencilInput(const struct gridContext gc, const int i_center, + const int j_center, const int k_center, + const int nodeOffset[3], const CTYPE *in, + MTYPE buffer_x[STENCIL_SIZE_Y], MTYPE buffer_y[STENCIL_SIZE_Y], + MTYPE buffer_z[STENCIL_SIZE_Y]) { + + const int i_sender = i_center + nodeOffset[0]; + const int j_sender = j_center + nodeOffset[1]; + const int k_sender = k_center + nodeOffset[2]; + +#pragma omp simd safelen(STENCIL_SIZE_Y) simdlen(STENCIL_SIZE_Y) \ + aligned(buffer_x, buffer_y, buffer_z \ + : __alignBound) + for (int jj = 0; jj < STENCIL_SIZE_Y; jj++) { + + const uint_fast32_t sendingNodeIndex = + (i_sender)*gc.wrapy * gc.wrapz + (k_sender)*gc.wrapy + (j_sender + jj); + + const int startSend = 3 * sendingNodeIndex; + + buffer_x[jj] = in[startSend + 0]; + buffer_y[jj] = in[startSend + 1]; + buffer_z[jj] = in[startSend + 2]; + } +} +#pragma omp end declare target diff --git a/stencil_optimization.c b/stencil_optimization.c new file mode 100644 index 0000000..0d5cf4a --- /dev/null +++ b/stencil_optimization.c @@ -0,0 +1,598 @@ +#include "stencil_optimization.h" + +#include "stencil_grid_utility.h" +#include "stencil_methods.h" +#include "stencil_solvers.h" +#include "gpu_definitions.h" + +#ifdef _OPENMP +#include +#endif + +// main function +void top3dmgcg(const uint_fast32_t nelx, const uint_fast32_t nely, + const uint_fast32_t nelz, const DTYPE volfrac, const DTYPE rmin, + const uint_fast32_t nl, const float cgtol, + const uint_fast32_t cgmax, const int verbose,const int write_result,const int max_iterations) { + + struct gridContext gridContext; + setupGC(&gridContext, nl,nelx,nely,nelz); + + struct gpuGrid gpu_gc; + const int num_targets = 1; //omp_get_num_devices(); + if (verbose == 1){ + printf("OpenMP enabled with %d devices.\n",num_targets); + printf("OpenMP default device: %d\n",omp_get_default_device()); + } + gpu_gc.num_targets = num_targets; + + gridContextToGPUGrid(&gridContext,&gpu_gc,nl,verbose); + + const uint_fast64_t nelem = (gridContext.wrapx - 1) * + (gridContext.wrapy - 1) * (gridContext.wrapz - 1); + + CTYPE *F; + STYPE *U; + allocateZeroPaddedStateField(gridContext, 0, &F); + allocateZeroPaddedStateField_STYPE(gridContext, 0, &U); + + double forceMagnitude = -1; + + { // setup cantilever load + const int ny = nely + 1; + + const int k = 0; + + const double radius = ((double)ny) / 5.0; // snap + const double radius2 = radius * radius; + const double center_x = (double)nelx; + const double center_y = ((double)nely - 1.0) / 2.0; + + int num_elements = 0; + for (int i = 0; i < nelx; i++) { + for (int j = 0; j < nely; j++) { + const double dx = (double)i - center_x; + const double dy = (double)j - center_y; + const double dist2 = dx * dx + dy * dy; + if (dist2 < radius2) { + num_elements++; + } + } + } + + double nodalForce = forceMagnitude / (4.0 * (double)num_elements); + for (int i = 0; i < nelx; i++) { + for (int j = 0; j < nely; j++) { + + const int ii = i + 1; + const int jj = j + 1; + const int kk = k + 1; + + const double dx = (double)i - center_x; + const double dy = (double)j - center_y; + const double dist2 = dx * dx + dy * dy; + + if (dist2 < radius2) { + const uint_fast32_t nidx1 = + (ii + 1) * gridContext.wrapy * gridContext.wrapz + + gridContext.wrapy * kk + (jj + 1); + const uint_fast32_t nidx2 = + (ii + 1) * gridContext.wrapy * gridContext.wrapz + + gridContext.wrapy * kk + jj; + const uint_fast32_t nidx3 = + ii * gridContext.wrapy * gridContext.wrapz + + gridContext.wrapy * kk + (jj + 1); + const uint_fast32_t nidx4 = + ii * gridContext.wrapy * gridContext.wrapz + + gridContext.wrapy * kk + jj; + F[3 * nidx1 + 2] += nodalForce; + F[3 * nidx2 + 2] += nodalForce; + F[3 * nidx3 + 2] += nodalForce; + F[3 * nidx4 + 2] += nodalForce; + } + } + } + } + + DTYPE *dc = malloc(sizeof(DTYPE) * nelem); + DTYPE *dv = malloc(sizeof(DTYPE) * nelem); + DTYPE *x = malloc(sizeof(DTYPE) * nelem); + DTYPE *xPhys = malloc(sizeof(DTYPE) * nelem); + DTYPE *xnew = malloc(sizeof(DTYPE) * nelem); + DTYPE c = 0.0; + + #pragma omp parallel for schedule(static) default(none) firstprivate(nelem) shared(x,xPhys,dv) + for (uint_fast64_t i = 0; i < nelem; i++) { + x[i] = 0.0; + xPhys[i] = 0.0; + dv[i] = 1.0; + } + + #pragma omp parallel for collapse(3) schedule(static) default(none) firstprivate(volfrac) shared(gridContext,x,xPhys) + for (int i = 1; i < gridContext.nelx + 1; i++) + for (int k = 1; k < gridContext.nelz + 1; k++) + for (int j = 1; j < gridContext.nely + 1; j++) { + const int idx = i * (gridContext.wrapy - 1) * (gridContext.wrapz - 1) + + k * (gridContext.wrapy - 1) + j; + + x[idx] = volfrac; + xPhys[idx] = volfrac; + } + + // allocate needed memory for solver + struct SolverDataBuffer solverData; + allocateSolverData(gridContext, nl, &solverData); + initializeCholmod(gridContext, nl - 1, &solverData.bottomSolver, + solverData.coarseMatrices[nl - 1]); + + #pragma omp target enter data map(to:dv[:nelem]) device(gpu_gc.target[0].id) + applyDensityFilterGradient(gridContext, rmin, dv); + + unsigned int loop = 0; + float change = 1; + + #ifdef _OPENMP + if (verbose ==1){ + printf(" OpenMP enabled with %d threads\n", omp_get_max_threads()); + } + + const double start_wtime = omp_get_wtime(); + #endif + + // Mapping data to the GPU grid + enter_data(gridContext,solverData,gpu_gc,xPhys,x,xnew,U,F,dc,nelem,nl); + + /* %% START ITERATION */ + DTYPE vol = 0.0; + int gciter_total = 0; + while ((change > 1e-2) && (loop < max_iterations)) { + + loop++; + + int cgiter; + float cgres; + const int nswp = 4; + solveStateMG_halo(&gpu_gc, xPhys, nswp, nl, cgtol, &solverData, &cgiter, + &cgres, F, U); + //printf("Exit solveStateMG_halo\n"); + vol = compute_volume(gridContext,xPhys); + + getComplianceAndSensetivity_halo(&(gpu_gc.target[0]), xPhys, U, &c, dc); + //printf("Exit getComplianceAndSensetivity_halo\n"); + applyDensityFilterGradient(gridContext, rmin, dc); + + //#pragma omp taskwait + vol /= (DTYPE)(gridContext.nelx * gridContext.nely * gridContext.nelz); + DTYPE g = vol - volfrac; + + // Iteratively stepping solution forward + update_solution(x,xnew,dv,dc,nelem,g); + + // Computing the maximum change over all elements + change = compute_change(x,xnew,nelem); + + #pragma omp target update from(x[:nelem]) + applyDensityFilter(gridContext, rmin, x, xPhys); + #pragma omp target update to(xPhys[:nelem]) + + gciter_total += cgiter; + + if (verbose ==1){ + printf("It.:%4i Obj.:%6.3e Vol.:%6.3f ch.:%4.2f relres: %4.2e iters: %4i ", + loop, c, vol, change, cgres, cgiter); + #ifdef _OPENMP + printf("time: %6.3f \n", omp_get_wtime() - start_wtime); + #else + printf(" \n"); + #endif + } + } + + //#pragma omp target update from(xPhys[:nelem]) + + printf("%4i %12.6f %6.3f %4.2f %9i %9i",loop, c, vol, change,nelx*nely*nelz,gciter_total); + #ifdef _OPENMP + printf(" %6.3f \n", omp_get_wtime() - start_wtime); + #else + printf("\n"); + #endif + if (verbose ==1){ + #ifdef _OPENMP + printf("End time: %6.3f \n", omp_get_wtime() - start_wtime); + #endif + } + char name1[60]; + char name2[60]; + if (write_result == 1){ + snprintf(name1, 60, "out_%d_%d_%d.vtu",(int)nelx, (int)nely, (int)nelz); + writeDensityVtkFile(nelx, nely, nelz, xPhys,name1); + snprintf(name2, 60, "out_%d_%d_%d_halo.vtu",(int)nelx, (int)nely, (int)nelz); + writeDensityVtkFileWithHalo(nelx, nely, nelz, xPhys,name2); + } + finishCholmod(gridContext, nl - 1, &solverData.bottomSolver, + solverData.coarseMatrices[nl - 1],verbose); + freeSolverData(&solverData, nl); + freeGC(&gridContext, nl); + freeGPUGrid(&gpu_gc,nl); + + free(dc); + free(dv); + free(x); + free(xPhys); + free(xnew); +} + +// this function acts as a matrix-free replacement for out = (H*rho(:))./Hs +// note that rho and out cannot be the same pointer! +// temperature: cold, called once pr design iteration +void applyDensityFilter(const struct gridContext gc, const DTYPE rmin, + const DTYPE *rho, DTYPE *out) { + + const uint32_t nelx = gc.nelx; + const uint32_t nely = gc.nely; + const uint32_t nelz = gc.nelz; + + const uint32_t elWrapy = gc.wrapy - 1; + const uint32_t elWrapz = gc.wrapz - 1; + + //#pragma omp target teams distribute parallel for firstprivate(rmin,elWrapy,elWrapz) + // It was found that this function was hard to parallelize in an efficient way on the GPU + +// loop over elements, usually very large with nelx*nely*nelz = 100.000 or +// more + #pragma omp parallel for collapse(3) default(none) firstprivate(nelx,nely,nelz,rmin,elWrapy,elWrapz) shared(out,rho) + for (unsigned int i1 = 1; i1 < nelx + 1; i1++) + for (unsigned int k1 = 1; k1 < nelz + 1; k1++) + for (unsigned int j1 = 1; j1 < nely + 1; j1++) { + + const uint32_t e1 = i1 * elWrapy * elWrapz + k1 * elWrapy + j1; + + double oute1 = 0.0; + double unityScale = 0.0; + + // loop over neighbourhood + const uint32_t i2max = MIN(i1 + (ceil(rmin) + 1), nelx + 1); + const uint32_t i2min = MAX(i1 - (ceil(rmin) - 1), 1); + + // the three loops herein are over a constant neighbourhood. typically + // 4x4x4 or something like that + for (uint32_t i2 = i2min; i2 < i2max; i2++) { + + const uint32_t k2max = MIN(k1 + (ceil(rmin) + 1), nelz + 1); + const uint32_t k2min = MAX(k1 - (ceil(rmin) - 1), 1); + + for (uint32_t k2 = k2min; k2 < k2max; k2++) { + + const uint32_t j2max = MIN(j1 + (ceil(rmin) + 1), nely + 1); + const uint32_t j2min = MAX(j1 - (ceil(rmin) - 1), 1); + + for (uint32_t j2 = j2min; j2 < j2max; j2++) { + + const uint32_t e2 = i2 * elWrapy * elWrapz + k2 * elWrapy + j2; + + const double filterWeight = + MAX(0.0, rmin - sqrt((i1 - i2) * (i1 - i2) + + (j1 - j2) * (j1 - j2) + + (k1 - k2) * (k1 - k2))); + + oute1 += filterWeight * rho[e2]; + unityScale += filterWeight; + } + } + } + out[e1] = oute1 / unityScale; + } +} + +// this function acts as a matrix-free replacement for v = H* (v(:)./Hs) +// note that rho and out cannot be the same pointer! +// temperature: cold, called twice pr design iteration +void applyDensityFilterGradient(const struct gridContext gc, const DTYPE rmin, + DTYPE *v) { + const uint32_t nelx = gc.nelx; + const uint32_t nely = gc.nely; + const uint32_t nelz = gc.nelz; + const uint32_t elWrapy = gc.wrapy - 1; + const uint32_t elWrapz = gc.wrapz - 1; + const uint32_t N = (gc.wrapx - 1) * elWrapy * elWrapz; + DTYPE *tmp = malloc(sizeof(DTYPE) * N); + +// loop over elements, usually very large with nelx*nely*nelz = 100.000 or +// more + const uint_fast64_t nelem = (gc.wrapx - 1) * + (gc.wrapy - 1) * (gc.wrapz - 1); + const double ceil_rmin = ceil(rmin); + #pragma omp target data map(to:tmp[:N]) //map(always,tofrom:v[:nelem]) + { + #pragma omp target teams distribute parallel for + for(int i=0;i\n"); + fprintf(fid, "\n"); + fprintf(fid, "\n", + numberOfNodes, numberOfElements); + + // points + fprintf(fid, "\n"); + fprintf(fid, + "\n", + 3); + for (int i = 0; i < nx; i++) + for (int k = 0; k < nz; k++) + for (int j = 0; j < ny; j++) + fprintf(fid, "%e %e %e\n", (float)i, (float)j, (float)k); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + + fprintf( + fid, + "\n"); + for (int i = 0; i < nelx; i++) + for (int k = 0; k < nelz; k++) + for (int j = 0; j < nely; j++) { + const int nx_1 = i; + const int nx_2 = i + 1; + const int nz_1 = k; + const int nz_2 = k + 1; + const int ny_1 = j; + const int ny_2 = j + 1; + fprintf(fid, "%d %d %d %d %d %d %d %d\n", + nx_1 * ny * nz + nz_1 * ny + ny_2, + nx_2 * ny * nz + nz_1 * ny + ny_2, + nx_2 * ny * nz + nz_1 * ny + ny_1, + nx_1 * ny * nz + nz_1 * ny + ny_1, + nx_1 * ny * nz + nz_2 * ny + ny_2, + nx_2 * ny * nz + nz_2 * ny + ny_2, + nx_2 * ny * nz + nz_2 * ny + ny_1, + nx_1 * ny * nz + nz_2 * ny + ny_1); + } + + fprintf(fid, "\n"); + + fprintf(fid, + "\n"); + for (int i = 1; i < numberOfElements + 1; i++) + fprintf(fid, "%d\n", i * 8); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + for (int i = 0; i < numberOfElements; i++) + fprintf(fid, "%d\n", 12); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + fprintf(fid, "\n"); + for (unsigned int i1 = 1; i1 < nelx + 1; i1++) + for (unsigned int k1 = 1; k1 < nelz + 1; k1++) + for (unsigned int j1 = 1; j1 < nely + 1; j1++) { + const uint64_t idx = i1 * elWrapy * elWrapz + k1 * elWrapy + j1; + fprintf(fid, "%e\n", densityArray[idx]); + } + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fclose(fid); +} + +// writes a file with a snapshot of the density field (x,xPhys), can be opened +// with paraview temperature: very cold, usually called once only +void writeDensityVtkFileWithHalo(const int nelx, const int nely, const int nelz, + const DTYPE *densityArray, + const char *filename) { + + const int paddingx = + (STENCIL_SIZE_X - ((nelx + 1) % STENCIL_SIZE_X)) % STENCIL_SIZE_X; + const int paddingy = + (STENCIL_SIZE_Y - ((nely + 1) % STENCIL_SIZE_Y)) % STENCIL_SIZE_Y; + const int paddingz = + (STENCIL_SIZE_Z - ((nelz + 1) % STENCIL_SIZE_Z)) % STENCIL_SIZE_Z; + + const int wrapx = nelx + paddingx + 3; + const int wrapy = nely + paddingy + 3; + const int wrapz = nelz + paddingz + 3; + + const int elWrapx = wrapx - 1; + const int elWrapy = wrapy - 1; + const int elWrapz = wrapz - 1; + + int numberOfNodes = wrapx * wrapy * wrapz; + int numberOfElements = elWrapx * elWrapy * elWrapz; + + FILE *fid = fopen(filename, "w"); + + // write header + fprintf(fid, "\n"); + fprintf(fid, "\n"); + fprintf(fid, "\n", + numberOfNodes, numberOfElements); + + // points + fprintf(fid, "\n"); + fprintf(fid, + "\n", + 3); + for (int i = 0; i < wrapx; i++) + for (int k = 0; k < wrapz; k++) + for (int j = 0; j < wrapy; j++) + fprintf(fid, "%e %e %e\n", (float)i, (float)j, (float)k); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + + fprintf( + fid, + "\n"); + for (int i = 0; i < elWrapx; i++) + for (int k = 0; k < elWrapz; k++) + for (int j = 0; j < elWrapy; j++) { + const int nx_1 = i; + const int nx_2 = i + 1; + const int nz_1 = k; + const int nz_2 = k + 1; + const int ny_1 = j; + const int ny_2 = j + 1; + fprintf(fid, "%d %d %d %d %d %d %d %d\n", + nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_2, + nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_2, + nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_1, + nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_1, + nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_2, + nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_2, + nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_1, + nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_1); + } + + fprintf(fid, "\n"); + + fprintf(fid, + "\n"); + for (int i = 1; i < numberOfElements + 1; i++) + fprintf(fid, "%d\n", i * 8); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + for (int i = 0; i < numberOfElements; i++) + fprintf(fid, "%d\n", 12); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + fprintf(fid, "\n"); + for (unsigned int i1 = 0; i1 < elWrapx; i1++) + for (unsigned int k1 = 0; k1 < elWrapz; k1++) + for (unsigned int j1 = 0; j1 < elWrapy; j1++) { + const uint64_t idx = i1 * elWrapy * elWrapz + k1 * elWrapy + j1; + fprintf(fid, "%e\n", densityArray[idx]); + } + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fprintf(fid, "\n"); + fprintf(fid, "\n"); + fprintf(fid, "\n"); + + fclose(fid); +} diff --git a/stencil_optimization.h b/stencil_optimization.h new file mode 100644 index 0000000..e67e4c7 --- /dev/null +++ b/stencil_optimization.h @@ -0,0 +1,22 @@ +#pragma once + +#include "definitions.h" + +void top3dmgcg(const uint_fast32_t nelx, const uint_fast32_t nely, + const uint_fast32_t nelz, const DTYPE volfrac, const DTYPE rmin, + const uint_fast32_t nl, const float cgtol, + const uint_fast32_t cgmax, const int verbose, + const int write_result,const int max_iterations); + +void applyDensityFilter(const struct gridContext gc, const DTYPE rmin, + const DTYPE *rho, DTYPE *out); + +void applyDensityFilterGradient(const struct gridContext gc, const DTYPE rmin, + DTYPE *v); + +void writeDensityVtkFile(const int nelx, const int nely, const int nelz, + const DTYPE *densityArray, const char *filename); + +void writeDensityVtkFileWithHalo(const int nelx, const int nely, const int nelz, + const DTYPE *densityArray, + const char *filename); diff --git a/stencil_solvers.c b/stencil_solvers.c new file mode 100644 index 0000000..a28f1cc --- /dev/null +++ b/stencil_solvers.c @@ -0,0 +1,457 @@ +#include "stencil_solvers.h" + +#include "stencil_grid_utility.h" +#include "stencil_methods.h" + +// jacobi smoothing/preconditioning +// temperature: hot, called 2x(number of levels)x(number of cg iterations) ~ +// [20-1000] times every design iteration. Note that most compute time is spent +// in child function. + +void smoothDampedJacobiSubspace_halo(const struct gpuNode * gpu_node, + const DTYPE *x, const int l, + const uint_fast32_t nswp, + const CTYPE omega, const MTYPE *invD, + CTYPE *u, const CTYPE *b, CTYPE *tmp) { + + const struct gridContext * gc = gpu_node->gc; + + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndof; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndof); + + const int32_t nelxc = gc->nelx / ncell; + const int32_t nelyc = gc->nely / ncell; + const int32_t nelzc = gc->nelz / ncell; + + // usually nswp is between 1 and 5 + for (int s = 0; s < nswp; s++) { + applyStateOperatorSubspace_halo(gpu_node, l, x, u, tmp); + + + // long for loop, as ndof is typically 300.000 or more, but also trivially + // parallel. + #pragma omp target teams distribute parallel for collapse(3) schedule(static) device(gpu_node->id) + for (int i = 1; i < nelxc + 2; i++) + for (int k = 1; k < nelzc + 2; k++) + for (int j = 1; j < nelyc + 2; j++) { + const int nidx = (i * wrapyc * wrapzc + wrapyc * k + j); + + const uint32_t idx1 = 3 * nidx + 0; + const uint32_t idx2 = 3 * nidx + 1; + const uint32_t idx3 = 3 * nidx + 2; + + u[idx1] += omega * invD[idx1] * (b[idx1] - tmp[idx1]); + u[idx2] += omega * invD[idx2] * (b[idx2] - tmp[idx2]); + u[idx3] += omega * invD[idx3] * (b[idx3] - tmp[idx3]); + } + } +} + +// jacobi smoothing/preconditioning +// temperature: hot, called 2x(number of levels)x(number of cg iterations) ~ +// [20-1000] times every design iteration. Note that most compute time is spent +// in child function. +void smoothDampedJacobiSubspaceMatrix_halo( + const struct gridContext * gc, const struct CSRMatrix M, const int l, + const uint_fast32_t nswp, const CTYPE omega, const MTYPE *invD, CTYPE *u, + const CTYPE *b, CTYPE *tmp) { + + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndof; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndof); + + const int32_t nelxc = gc->nelx / ncell; + const int32_t nelyc = gc->nely / ncell; + const int32_t nelzc = gc->nelz / ncell; + + // usually nswp is between 1 and 5 + for (int s = 0; s < nswp; s++) { + applyStateOperatorSubspaceMatrix(*gc, l, M, u, tmp); + +// long for loop, as ndof is typically 300.000 or more, but also trivially +// parallel. + #pragma omp parallel for collapse(3) schedule(static) default(none) \ + firstprivate(nelxc,nelzc,nelyc,omega,wrapyc,wrapzc) shared(u,invD,b,tmp) + for (int i = 1; i < nelxc + 2; i++) + for (int k = 1; k < nelzc + 2; k++) + for (int j = 1; j < nelyc + 2; j++) { + const int nidx = (i * wrapyc * wrapzc + wrapyc * k + j); + + const uint32_t idx1 = 3 * nidx + 0; + const uint32_t idx2 = 3 * nidx + 1; + const uint32_t idx3 = 3 * nidx + 2; + + u[idx1] += omega * invD[idx1] * (b[idx1] - tmp[idx1]); + u[idx2] += omega * invD[idx2] * (b[idx2] - tmp[idx2]); + u[idx3] += omega * invD[idx3] * (b[idx3] - tmp[idx3]); + } + } +} + +// jacobi smoothing/preconditioning +// temperature: hot, called 2x(number of levels)x(number of cg iterations) ~ +// [20-1000] times every design iteration. Note that most compute time is spent +// in child function. + +void smoothDampedJacobi_halo(const struct gpuNode * gpu_node, const DTYPE *x, + const uint_fast32_t nswp, const CTYPE omega, + const MTYPE *invD, CTYPE *u, const CTYPE *b, + CTYPE *tmp) { + const struct gridContext gc = *(gpu_node->gc); + // usually nswp is between 1 and 5 + for (int s = 0; s < nswp; s++) { + applyStateOperator_stencil(gpu_node, x, u, tmp); + + // it is not faster to make an even simpler kernel with four loops +#pragma omp target teams distribute parallel for collapse(3) schedule(static) device(gpu_node->id) + for (int i = 1; i < gc.nelx + 2; i++) + for (int k = 1; k < gc.nelz + 2; k++) + for (int j = 1; j < gc.nely + 2; j++) { + const int nidx = i * gc.wrapy * gc.wrapz + gc.wrapy * k + j; + + const uint32_t idx1 = 3 * nidx + 0; + const uint32_t idx2 = 3 * nidx + 1; + const uint32_t idx3 = 3 * nidx + 2; + + u[idx1] += omega * invD[idx1] * (b[idx1] - tmp[idx1]); + u[idx2] += omega * invD[idx2] * (b[idx2] - tmp[idx2]); + u[idx3] += omega * invD[idx3] * (b[idx3] - tmp[idx3]); + } + } +} + + +// Vcycle preconditioner. recursive function. +// temperature: medium, called (number of levels)x(number of cg iterations ~ +// 5 - 100) every design iteration. Much of the compute time is spent in +// this function, although in children functions. +void VcyclePreconditioner(const struct gpuGrid * gpu_gc, const DTYPE *x, + const int nl, const int l, MTYPE **const invD, + struct CoarseSolverData *bottomSolverData, + const struct CSRMatrix *coarseMatrices, CTYPE omega, + const int nswp, CTYPE **r, CTYPE **z, CTYPE **d) { + const struct gridContext * gc = gpu_gc->target[0].gc; + + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + + int ncell_nl,wrapx_nl,wrapy_nl,wrapz_nl; + uint_fast32_t ndof_nl; + computePadding(gc,l+1,&ncell_nl,&wrapx_nl,&wrapy_nl,&wrapz_nl,&ndof_nl); + + CTYPE *zptr = z[l]; + CTYPE *dptr = d[l]; + CTYPE *rptr = r[l]; + CTYPE * next_rptr = r[l + 1]; + CTYPE * next_zptr = z[l + 1]; + MTYPE *invDptr = invD[l]; + + #pragma omp target teams distribute parallel for schedule(static) + for (int i = 0; i < ndofc; i++) + zptr[i] = 0.0; + // smooth + if (l == 0) { + //printf("Case 1 - enter\n"); + + smoothDampedJacobi_halo(&(gpu_gc->target[0]), x, nswp, omega, invDptr, zptr, rptr, dptr); + + applyStateOperator_stencil(&(gpu_gc->target[0]), x, zptr, dptr); + //#pragma omp target update from(dptr[:ndofc]) + + } else if (l < number_of_matrix_free_levels) { + //printf("Case 2 -enter \n"); + //#pragma omp target update to(invDptr[:ndofc],rptr[:ndofc],zptr[:ndofc]) + smoothDampedJacobiSubspace_halo(&(gpu_gc->target[0]), x, l, nswp, omega, invDptr, zptr, rptr, + dptr); + + applyStateOperatorSubspace_halo(&(gpu_gc->target[0]), l, x, zptr, dptr); + + //#pragma omp target update from(zptr[:ndofc]) + } else { + //printf("Case 3 -enter \n"); + #pragma omp target update from(zptr[:ndofc],rptr[:ndofc],dptr[:ndofc]) + smoothDampedJacobiSubspaceMatrix_halo(gc, coarseMatrices[l], l, nswp, omega, + invDptr, zptr, rptr, dptr); // Updates z[l] and d[l] + applyStateOperatorSubspaceMatrix(*gc, l, coarseMatrices[l], zptr, dptr); // Updates coarseMatrices[l] and d[l] + #pragma omp target update to(zptr[:ndofc],dptr[:ndofc]) + } + + + // long for loop, as ndof is typically 300.000 or more, but also trivially + // parallel + #pragma omp target teams distribute parallel for schedule(static) + for (int i = 0; i < ndofc; i++) + dptr[i] = rptr[i] - dptr[i]; + + //#pragma omp target update from(dptr[:ndofc]) + + + // project residual down + projectToCoarserGrid_halo(&(gpu_gc->target[0]), l, dptr, next_rptr); + //printf("To coarser grid\n"); + + // smooth coarse + if (nl == l + 2) { + #pragma omp parallel for schedule(static) default(none) firstprivate(ndof_nl,l) shared(next_zptr) + for (int i = 0; i < ndof_nl; i++) + next_zptr[i] = 0.0; + + // Must run on CPU due to Cholesky factorization + #pragma omp target update from(next_rptr[:ndof_nl]) + solveSubspaceMatrix(*gc, l + 1, *bottomSolverData, next_rptr, next_zptr); + #pragma omp target update to(next_zptr[:ndof_nl]) + //printf("Solved on CPU\n"); + + } else + VcyclePreconditioner(gpu_gc, x, nl, l + 1, invD, bottomSolverData, + coarseMatrices, omega, nswp, r, z, d); + + // project residual up + projectToFinerGrid_halo(&(gpu_gc->target[0]), l, next_zptr, dptr); + //printf("To finer grid\n"); + + // smooth + if (l == 0) { + //printf("Case 1 exit\n"); + //#pragma omp target update to(dptr[:ndofc]) + + #pragma omp target teams distribute parallel for schedule(static) + for (int i = 0; i < ndofc; i++) + zptr[i] += dptr[i]; + + smoothDampedJacobi_halo(&(gpu_gc->target[0]), x, nswp, omega, invDptr, zptr, rptr, dptr); + + //#pragma omp target update from(zptr[:ndofc]) + } + else if (l < number_of_matrix_free_levels) { + //printf("Case 2 exit\n"); + + #pragma omp target teams distribute parallel for schedule(static) + for (int i = 0; i < ndofc; i++) + zptr[i] += dptr[i]; + + //#pragma omp target update to(invDptr[:ndofc]) + smoothDampedJacobiSubspace_halo(&(gpu_gc->target[0]), x, l, nswp, omega, invDptr, zptr, rptr, + dptr); + //#pragma omp target update from(zptr[:ndofc]) + } else { + //printf("Case 3 - exit\n"); + + #pragma omp target teams distribute parallel for schedule(static) + for (int i = 0; i < ndofc; i++) + zptr[i] += dptr[i]; + + #pragma omp target update from(zptr[:ndofc],rptr[:ndofc],dptr[:ndofc]) + + smoothDampedJacobiSubspaceMatrix_halo(gc, coarseMatrices[l], l, nswp, omega, + invD[l], zptr, rptr, dptr); + #pragma omp target update to(dptr[:ndofc],zptr[:ndofc]) + } +} + +// solves the linear system of Ku = b. +// temperature: medium, accounts for 95% or more of runtime, but this time is +// spent in children functions. The iter loop of this funciton is a good +// candidate for GPU parallel region scope, as it is only performed once every +// design iteration (and thus only 100 times during a program) +void solveStateMG_halo(const struct gpuGrid * gpu_gc, DTYPE *x, const int nswp, + const int nl, const CTYPE tol, + struct SolverDataBuffer *data, int *finalIter, + float *finalRes, CTYPE *b, STYPE *u) { + + const struct gridContext * gc = gpu_gc->target[0].gc; + + const uint_fast32_t ndof = 3 * gc->wrapx * gc->wrapy * gc->wrapz; + + CTYPE *r = data->r; + CTYPE *p = data->p; + CTYPE *q = data->q; + CTYPE *z = data->z; + + MTYPE **invD = data->invD; + CTYPE **dmg = data->dmg; + CTYPE **rmg = data->rmg; + CTYPE **zmg = data->zmg; + + // setup residual vector + #pragma omp target teams distribute parallel for schedule(static) nowait + for (uint_fast32_t i = 0; i < ndof; i++) + z[i] = (CTYPE)u[i]; + + for (int l = number_of_matrix_free_levels; l < nl; l++) { + // printf("assemble mat l:%i\n", l); + assembleSubspaceMatrix(*gc, l, x, data->coarseMatrices[l], invD[l]); + MTYPE *invDptr = invD[l]; + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + #pragma omp target update to(invDptr[:ndofc]) + } + + for (int l = 0; l < nl; l++) { + assembleInvertedMatrixDiagonalSubspace_halo(&(gpu_gc->target[0]), x, l, invD[l]); + int ncell,wrapxc,wrapyc,wrapzc; + uint_fast32_t ndofc; + computePadding(gc,l,&ncell,&wrapxc,&wrapyc,&wrapzc,&ndofc); + #pragma omp target update from(invD[l][:ndofc]) nowait + } + + factorizeSubspaceMatrix(*gc, nl - 1, data->bottomSolver, + data->coarseMatrices[nl - 1]); + + //const uint32_t designSize = (gc.wrapx - 1) * (gc.wrapy - 1) * (gc.wrapz - 1); + CTYPE rhoold = 0.0; + CTYPE dpr; + CTYPE alpha; + CTYPE rho; + //CTYPE *dptr = dmg[0]; + //MTYPE *invDptr = invD[0]; + +//#pragma omp target data map(to:b \ + [:ndof])//, z \ + [:ndof], r \ + [:ndof], p \ + [:ndof], q \ + [:ndof], dptr \ + [:ndof], invDptr \ + [:ndof]) map(tofrom \ + : u[:ndof],x[:designSize]) + { + + #pragma omp taskwait + + applyStateOperator_stencil(&(gpu_gc->target[0]), x, z, r); + + #pragma omp target teams distribute parallel for schedule(static) + for (uint_fast32_t i = 0; i < ndof; i++) + r[i] = b[i] - r[i]; + + // setup scalars + const MTYPE omega = 0.6; + const CTYPE bnorm = norm(b, ndof); + const int maxIter = 1000; + + // begin cg loop - usually spans 5 - 300 iterations will be reduced to 5 - + // 20 iterations once direct solver is included for coarse subproblem. + for (int iter = 0; iter < maxIter; iter++) { + + //#pragma omp target update from(r[:ndof]) + + // get preconditioned vector + VcyclePreconditioner(gpu_gc, x, nl, 0, invD, &data->bottomSolver, + data->coarseMatrices, omega, nswp, rmg, zmg, dmg); + //printf("Exit VcyclePreconditioner\n"); + //#pragma omp target update to(z[:ndof]) + + rho = innerProduct(r, z, ndof); + + if (iter == 0) { + + #pragma omp target teams distribute parallel for schedule(static) + for (uint_fast32_t i = 0; i < ndof; i++) + p[i] = z[i]; + + } else { + + CTYPE beta = rho / rhoold; + #pragma omp target teams distribute parallel for firstprivate(beta) schedule(static) + for (uint_fast32_t i = 0; i < ndof; i++) + p[i] = beta * p[i] + z[i]; + } + + applyStateOperator_stencil(&(gpu_gc->target[0]), x, p, q); + + dpr = innerProduct(p, q, ndof); + + alpha = rho / dpr; + rhoold = rho; + + #pragma omp target teams distribute parallel for firstprivate(alpha) schedule(static) nowait + for (uint_fast32_t i = 0; i < ndof; i++) + u[i] += (STYPE)(alpha * p[i]); + + #pragma omp target teams distribute parallel for firstprivate(alpha) schedule(static) + for (uint_fast32_t i = 0; i < ndof; i++) + r[i] -= alpha * q[i]; + + + CTYPE rnorm = 0.0; + + rnorm = norm(r, ndof); + + const CTYPE relres = rnorm / bnorm; + + (*finalIter) = iter; + (*finalRes) = relres; + + #pragma omp taskwait + + //printf("it: %i, res=%e\n", iter, relres); + + if (relres < tol) + break; + } + } +} + +void allocateSolverData(const struct gridContext gc, const int nl, + struct SolverDataBuffer *data) { + + allocateZeroPaddedStateField(gc, 0, &(*data).r); + allocateZeroPaddedStateField(gc, 0, &(*data).p); + allocateZeroPaddedStateField(gc, 0, &(*data).q); + allocateZeroPaddedStateField(gc, 0, &(*data).z); + + (*data).invD = malloc(sizeof(MTYPE *) * nl); + (*data).dmg = malloc(sizeof(CTYPE *) * nl); + (*data).rmg = malloc(sizeof(CTYPE *) * nl); + (*data).zmg = malloc(sizeof(CTYPE *) * nl); + + allocateZeroPaddedStateField(gc, 0, &((*data).dmg[0])); + allocateZeroPaddedStateField_MTYPE(gc, 0, &((*data).invD[0])); + (*data).rmg[0] = (*data).r; + (*data).zmg[0] = (*data).z; + + for (int l = 1; l < nl; l++) { + allocateZeroPaddedStateField(gc, l, &((*data).dmg[l])); + allocateZeroPaddedStateField(gc, l, &((*data).rmg[l])); + allocateZeroPaddedStateField(gc, l, &((*data).zmg[l])); + allocateZeroPaddedStateField_MTYPE(gc, l, &((*data).invD[l])); + } + + // allocate for all levels for easy indces + (*data).coarseMatrices = malloc(sizeof(struct CSRMatrix) * nl); + for (int l = number_of_matrix_free_levels; l < nl; l++) { + allocateSubspaceMatrix(gc, l, &((*data).coarseMatrices[l])); + } +} + +void freeSolverData(struct SolverDataBuffer *data, const int nl) { + + free((*data).r); + free((*data).z); + free((*data).p); + free((*data).q); + + free((*data).invD[0]); + free((*data).dmg[0]); + + for (int l = 1; l < nl; l++) { + free((*data).invD[l]); + free((*data).dmg[l]); + free((*data).rmg[l]); + free((*data).zmg[l]); + } + + free((*data).invD); + free((*data).dmg); + free((*data).zmg); + free((*data).rmg); + + for (int l = number_of_matrix_free_levels; l < nl; l++) { + freeSubspaceMatrix(&((*data).coarseMatrices[l])); + } + free((*data).coarseMatrices); +} diff --git a/stencil_solvers.h b/stencil_solvers.h new file mode 100644 index 0000000..eaf0e85 --- /dev/null +++ b/stencil_solvers.h @@ -0,0 +1,58 @@ +#pragma once + +#include "definitions.h" +#include "gpu_definitions.h" + +#include "stencil_assembly.h" + +void smoothDampedJacobi_halo(const struct gpuNode * gpu_node, const DTYPE *x, + const uint_fast32_t nswp, const CTYPE omega, + const MTYPE *invD, CTYPE *u, const CTYPE *b, + CTYPE *tmp); + +void smoothDampedJacobiSubspaceMatrix_halo( + const struct gridContext * gc, const struct CSRMatrix M, const int l, + const uint_fast32_t nswp, const CTYPE omega, const MTYPE *invD, CTYPE *u, + const CTYPE *b, CTYPE *tmp); + +void smoothDampedJacobiSubspace_halo(const struct gpuNode * gpu_node, + const DTYPE *x, const int l, + const uint_fast32_t nswp, + const CTYPE omega, const MTYPE *invD, + CTYPE *u, const CTYPE *b, CTYPE *tmp); + +void solveStateMG_halo(const struct gpuGrid * gpu_gc, DTYPE *x, const int nswp, + const int nl, const CTYPE tol, + struct SolverDataBuffer *data, int *finalIter, + float *finalRes, CTYPE *b, STYPE *u); + +void allocateSolverData(const struct gridContext gc, const int nl, + struct SolverDataBuffer *data); + +void freeSolverData(struct SolverDataBuffer *data, const int nl); + +// compute the norm of two vectors +// temperature: cold-medium, called 2 x number of cg iterations +__force_inline inline CTYPE norm(CTYPE *v, uint_fast32_t size) { + CTYPE val = 0.0; + // long for loop, as ndof is typically 300.000 or more, but also trivially +// parallel. +#pragma omp target teams distribute parallel for reduction(+ : val) map(always,tofrom: val) + for (uint_fast32_t i = 0; i < size; i++) + val += v[i] * v[i]; + val = sqrt(val); + return val; +} + +// compute the inner product of two vectors +// temperature: cold-medium, called 2 x number of cg iterations +__force_inline inline CTYPE innerProduct(CTYPE *a, CTYPE *b, + uint_fast32_t size) { + CTYPE val = 0.0; + // long for loop, as ndof is typically 300.000 or more, but also trivially +// parallel. +#pragma omp target teams distribute parallel for reduction(+ : val) map(always,tofrom: val) //firstprivate(size) + for (uint_fast32_t i = 0; i < size; i++) + val += a[i] * b[i]; + return val; +} diff --git a/stencil_utility.h b/stencil_utility.h new file mode 100644 index 0000000..290dbbb --- /dev/null +++ b/stencil_utility.h @@ -0,0 +1,76 @@ +#pragma once + +#include "definitions.h" + +// compute indices of displacement for a given element number +// temperature: very very hot, called as part of the hot kernels in the +// program, should be inlined always. +__force_inline inline void getEdof_halo(uint_fast32_t edof[24], const int i, + const int j, const int k, + const int wrapy, const int wrapz) { + + const int nx_1 = i; + const int nx_2 = i + 1; + const int nz_1 = k; + const int nz_2 = k + 1; + const int ny_1 = j; + const int ny_2 = j + 1; + + const uint_fast32_t nIndex1 = nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_2; + const uint_fast32_t nIndex2 = nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_2; + const uint_fast32_t nIndex3 = nx_2 * wrapy * wrapz + nz_1 * wrapy + ny_1; + const uint_fast32_t nIndex4 = nx_1 * wrapy * wrapz + nz_1 * wrapy + ny_1; + const uint_fast32_t nIndex5 = nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_2; + const uint_fast32_t nIndex6 = nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_2; + const uint_fast32_t nIndex7 = nx_2 * wrapy * wrapz + nz_2 * wrapy + ny_1; + const uint_fast32_t nIndex8 = nx_1 * wrapy * wrapz + nz_2 * wrapy + ny_1; + + edof[0] = 3 * nIndex1 + 0; + edof[1] = 3 * nIndex1 + 1; + edof[2] = 3 * nIndex1 + 2; + edof[3] = 3 * nIndex2 + 0; + edof[4] = 3 * nIndex2 + 1; + edof[5] = 3 * nIndex2 + 2; + edof[6] = 3 * nIndex3 + 0; + edof[7] = 3 * nIndex3 + 1; + edof[8] = 3 * nIndex3 + 2; + edof[9] = 3 * nIndex4 + 0; + edof[10] = 3 * nIndex4 + 1; + edof[11] = 3 * nIndex4 + 2; + + edof[12] = 3 * nIndex5 + 0; + edof[13] = 3 * nIndex5 + 1; + edof[14] = 3 * nIndex5 + 2; + edof[15] = 3 * nIndex6 + 0; + edof[16] = 3 * nIndex6 + 1; + edof[17] = 3 * nIndex6 + 2; + edof[18] = 3 * nIndex7 + 0; + edof[19] = 3 * nIndex7 + 1; + edof[20] = 3 * nIndex7 + 2; + edof[21] = 3 * nIndex8 + 0; + edof[22] = 3 * nIndex8 + 1; + edof[23] = 3 * nIndex8 + 2; +} + +// convert the node index from coordinates with halo padding to a grid without. +// requires the wrapping parameters from the grid with halo and size of the grid +// without +__force_inline inline int haloToTrue(const int index, const int wrapy, + const int wrapz, const int ny, + const int nz) { + + const int nodeNumber = index / 3; + const int dofOffset = index % 3; + + const int i_halo = nodeNumber / (wrapy * wrapz); + const int j_halo = nodeNumber % wrapy; + const int k_halo = (nodeNumber % (wrapy * wrapz)) / wrapy; + + const int i = i_halo - 1; + const int j = j_halo - 1; + const int k = k_halo - 1; + + const int newNodeNumber = i * ny * nz + k * ny + j; + + return 3 * newNodeNumber + dofOffset; +} diff --git a/top3d.c b/top3d.c new file mode 100644 index 0000000..8492a0e --- /dev/null +++ b/top3d.c @@ -0,0 +1,88 @@ +#include "getopt.h" + +#include "definitions.h" + +#include "local_matrix.h" +#include "stencil_grid_utility.h" +#include "stencil_methods.h" + +#include "stencil_assembly.h" +#include "stencil_optimization.h" +#include "stencil_solvers.h" + +// todo: accept parameters as command line arguments +int main(int argc, char *argv[]) { + + int nelx_coarse = 12; + int nely_coarse = 6; + int nelz_coarse = 6; + float volfrac = 0.2; + float rmin = 1.5; + int iters = 20; + int nl = 4; + int verbose = 0; + int write_result = 0; + int opt; + + while ((opt = getopt(argc, argv, "x:y:z:r:f:i:l:v:w:")) != -1) { + switch (opt) { + case 'x': + nelx_coarse = atoi(optarg); + break; + case 'y': + nely_coarse = atoi(optarg); + break; + case 'z': + nelz_coarse = atoi(optarg); + break; + case 'r': + rmin = atof(optarg); + break; + case 'f': + volfrac = atof(optarg); + break; + case 'i': + iters = atoi(optarg); + break; + case 'l': + nl = atoi(optarg); + break; + case 'v': + verbose = atoi(optarg); + break; + case 'w': + write_result = atoi(optarg); + break; + default: + fprintf(stderr, "Usage: %s [-xyzrfilvw]\n", argv[0]); + exit(EXIT_FAILURE); + } + } + + int sizeIncr = 2; + for (int i = 2; i < nl; i++) + sizeIncr *= 2; + + const int nelx = nelx_coarse * sizeIncr; + const int nely = nely_coarse * sizeIncr; + const int nelz = nelz_coarse * sizeIncr; + + if (verbose) { + printf( + "Running topopt with:\n number of coarse els x (-x): %i (fine els = " + "%i)\n number of coarse els y (-y): %i (fine els = %i)\n number of " + "coarse els z (-z): %i (fine els = %i)\n total number of elements: " + "%i\n volume fraction (-f): %f\n filter radius in elements (-r): %f\n " + "number of design iterations (-i): %i\n verbose (-v): %i\n write file " + "(-w): %i\n\n", + nelx_coarse, nelx, nely_coarse, nely, nelz_coarse, nelz, + nelx * nely * nelz, volfrac, rmin, iters, verbose, write_result); + } + + const float cgtol = 1e-5; + const int cgmax = 200; + + top3dmgcg(nelx, nely, nelz, volfrac, rmin, nl, cgtol, cgmax, verbose, + write_result, iters); + return 0; +}