์๋ ํ์ธ์ ๊ธ๋
์ ๋ ์ฒญ์ด์ ๋๋ค. ์ด ๋ฉ์ง ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. FDTD์ ๊ทธ ๋์์ฑ์ ์ฐ๊ตฌํ๋ ๋ฐ ์ ๋ง ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ MPI/GPU ์ปดํจํ ์ ์ฌ์ฉํ๋ ๋ฐ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
./Release/Source/fdtd3d --cmd-from-file ./Examples/vacuum3D_test.txt
--use-cuda
--cuda-buffer-size 1
--cuda-gpus 0
--num-cuda-threads-x 4
--num-cuda-threads-y 4
--num-cuda-threads-z 4
ํ๋ก๊ทธ๋จ์ "./Examples/vacuum3D_test.txt ํ์ผ์์ ๋ช
๋ น์ค ๋ก๋ ์ค" ๋ก๊ทธ๋ง ํ์ํฉ๋๋ค.
" ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ฃฝ์ผ ๋๊น์ง ๊ณ์ ๊ธฐ๋ค๋ฆฌ์ญ์์ค. ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ์ง ์์ ๊ตฌ์ฑ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ด๊ฒ์ ํ์ํ ๋๋ฅผ ๋๋นํ์ฌ ๋ด cmake ํ๋๊ทธ์
๋๋ค.
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DVALUE_TYPE=f -DPRINT_MESSAGE=ON -DCUDA_ENABLED=ON -DCUDA_ARCH_SM_TYPE=sm_60 -DCXX11_ENABLED=ON -DPARALLEL_GRID=ON -DPARALLEL_GRID_DIMENSION=3
์๋ฎฌ๋ ์ด์ ์ธ๋ถ ์ ๋ณด๊ฐ ๋ ํ์ํ๋ฉด ์๋ ค์ฃผ์ญ์์ค. ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค.
๋ง์ ๊ฐ์ฌ์ ์์์ ๋ด์
์ฒญ์ด
RelWithDebInfo
๋ชจ๋์์๋ ํจ์ฌ ๋๋ฆฐ ๊ณ์ฐ์ ์ํํฉ๋๋ค. ๋ํ Cuda๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ ์คํ์ด ๋๋ ๋ ์ ์ฒด ๋ก๊ทธ๊ฐ ์ธ์๋ฉ๋๋ค.์์ ํ: ์ฌ์ฉํ ๋ชจ๋๋ฅผ ์ ํํ ์๊ณ ์๋ค๋ฉด -DSOLVER_DIM_MODES
๋ฅผ ์ง์ ํ๋ ๊ฒ์ด (์ปดํ์ผ ๋ฐ ์คํ ์ธก๋ฉด์์) ๋ ๋น ๋ฆ
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ชจ๋๋ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผ๋์ด Cuda ๋น๋์ ๊ฒฝ์ฐ ์ปดํ์ผ ์๊ฐ์ด ํฌ๊ฒ ๋์ด๋ฉ๋๋ค. ๊ทํ์ ๊ฒฝ์ฐ -DSOLVER_DIM_MODES=DIM3
์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ์์คํ ์์๋ ๊ณต์ ์์ ์ด ์ ํ ํ์ํ์ง ์์ต๋๋ค(์ค๋ ๋ ๋๊ธฐํ ์ ์ธ). ์ด๊ฒ์ด OpenMP๊ฐ MPI๋ณด๋ค ํจ์ฌ ๋ ์ ์ฉ ๊ฐ๋ฅํ๊ณ MPI ๊ธฐ๋ฐ ํ๋ก๊ทธ๋จ์ด ์ต๊ณ ์ ์๋ ํฅ์์ ๋ณด์ฌ์ฃผ์ง ์๋ ์ด์ ์ ๋๋ค. ๋ถํํ๋ OpenMP๋ fdtd3d์์ ์์ง ์ง์๋์ง ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์ผ๋์ ๋๊ณ fdtd3d์์ ์กฐ์ ํ ์ฌํญ์ด ์ฌ์ ํ ์์ต๋๋ค.
-DPARALLEL_BUFFER_DIMENSION=xyz
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์ฐจ์์ ์ฒญํฌ ์ฌ์ด์ ๊ทธ๋ฆฌ๋๊ฐ ๋ถํ ๋ฉ๋๋ค. ์ต์ ์ ๊ฐ์ ํ ํด๋ก์ง๋ฅผ ์กฐ์ธํ๋ฏ๋ก fdtd3d ์ถ๋ ฅ์ ํ์ธํ์ญ์์ค.--buffer-size B
๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ B
๋จ๊ณ๋ง๋ค ๊ณต์ ์์
์ ์ํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ fdtd3d์์ ๊ถ์ฅํ๋ ์ต์ ์ ๊ฐ์ ํ ํด๋ก์ง๊ฐ ์ต์ ์ด๋ผ๊ณ ๋ณด์ฅ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ --manual-topology --topology-sizex X --topology-sizey Y --topology-sizez Z
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ํด๋ก์ง๋ฅผ ์๋์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.ํ๋ก์ธ์ค ์๊ฐ ์ ์ฒด ๊ทธ๋ฆฌ๋ ํฌ๊ธฐ์ ๊ตฌ๋ถ์๊ฐ ์๋ ๊ฒฝ์ฐ fdtd3d์์ ๊ถ์ฅํ๋ ์ต์ ์ ๊ฐ์ ํ ํด๋ก์ง๋ ์ต์ ์์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ ์์ ๋ต๋ณํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DVALUE_TYPE=f -DPRINT_MESSAGE=ON -DCUDA_ENABLED=ON -DCXX11_ENABLED=ON -DPARALLEL_GRID=ON -DPARALLEL_GRID_DIMENSION=3 -DSOLVER_DIM_MODES=DIM3 -DPARALLEL_BUFFER_DIMENSION=x
๋ด ์ํฌ์คํ ์ด์ ์์ ์๋ํ์ต๋๋ค. (BTW, ๋ด ์ํฌ์คํ ์ด์ ์๋ 4๊ฐ์ Tesla P100์ด ์์ผ๋ฉฐ ๊ทธ ์ค ์์น๋ SM_60์ด์ด์ผ ํจ)
mpiexec --mca btl ^openib -n 2 ./Release/Source/fdtd3d --cmd-from-file ./Examples/vacuum3D_test.txt
--use-cuda
--cuda-buffer-size 2
--buffer-size 2
--cuda-gpus 0,1
--num-cuda-threads-x 4
--num-cuda-threads-y 4
--num-cuda-threads-z 4
๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Calculating time step 0...
Calculating time step 1...
Fatal error: an illegal memory access was encountered at /home/t00540502/fdtd3d/Source/Scheme/InternalScheme.inc.h:912
*** FAILED - ABORTING
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๊ด์ฐฎ์์ง๋ง ๋ ๋ฒ์งธ ๋จ๊ณ์์ ํธ์ถํ๋ InternalSchemeKernelHelpers::calculateFieldStepIterationKernel
ํจ์์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. MPI+CUDA๋ฅผ ์ฌ์ฉํ ๋ ์ค์๊ฐ ์์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ๋ถ๋ฅด๋ ๋ฒ์ ๊ฐ๋ฅด์ณ ์ฃผ์๊ฒ ์ต๋๊น?
์ ๋ง ๊ฐ์ฌํฉ๋๋ค.
์ต์์
์๋ง๋ sm_60 ์์น์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. ํ
์คํธํ์ง ์์์ต๋๋ค. ๊ธฐ๋ณธ ์์น๋ sm_20์ด๋ฏ๋ก ์นด๋์์ ์๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋๋ก cuda ์์น๊ฐ GPU์ ์ปดํจํ
๋ฅ๋ ฅ๊ณผ ์ผ์นํ์ง ์์ ๋ illegal memory access
๋ฅผ ๋ณด์์ต๋๋ค.
๋ค์ค GPU ๊ณ์ฐ์ ์ ์ฉ ๊ฐ๋ฅ์ฑ์ด ์ ํ์ ์ ๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋จ์ผ GPU์ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ ๊ฒฝ์ฐ ๋จ์ผ ๊ณ์ฐ ๋ ธ๋์ ์ด ๋จ์ผ GPU์์ ๊ณ์ฐ์ ์ํํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋น ๋ฆ ๋๋ค(CPU/GPU ๋ฐ ๋ค๋ฅธ ๊ณ์ฐ ๋ ธ๋ ๊ฐ์ ์ค๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์๊ธฐ ๋๋ฌธ).
๊ทธ๋ฌ๋ ๊ทธ๋ฆฌ๋๊ฐ ๋งค์ฐ ์ปค์ ๋จ์ผ ๊ณ์ฐ ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์์นํ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ ๋
ธ๋์ GPU๊ฐ ์์ ์ ์๋ ์ฌ๋ฌ ๊ณ์ฐ ๋
ธ๋๋ฅผ ์ฌ์ฉํ ์ ๋ฐ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ CPU-GPU ๋ฐ CPU-CPU ๋ฐ์ดํฐ ๊ณต์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก $ B
๋จ๊ณ๋ง๋ค ์ํ๋๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก B=1
์
๋๋ค. ์ด๊ฒ์ ๋จ์ผ GPU์์ ๋ชจ๋ ์๊ฐ ๋จ๊ณ์ ์ผ๋ฐ ๊ณ์ฐ๋ณด๋ค ํจ์ฌ ๋๋ฆฝ๋๋ค.
๋ค์ค GPU ๊ณ์ฐ์ fdtd3d์์ ์์ง ์์ ํ ์ง์๋์ง ์์ต๋๋ค. ํ์ฌ fdtd3d๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ง๋ ์์น์ ๋ง๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ์์๊ฒ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋๋ค(๋ํ CPU ์ ์ฉ ๋ชจ๋์์๋). ๋ฐ๋ผ์ ์ด๋ฌํ ์ ํ์ด ์์ผ๋ฉด ์๋ํด์ผ ํฉ๋๋ค.
@solotcy ์์น๊ฐ ์ค์ ๋์ง ์์ ๋ฒ๊ทธ๊ฐ ์์์ต๋๋ค(#140 ์ฐธ์กฐ). ํด๋น PR์ ๋ํด์๋ sm_60์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค.
Illegal memory access
๋ ์ฅ์น ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ ์ญ ๋ณ์ cudaSolverSettings์ ๋ํ ์ก์ธ์ค์ ๊ด๋ จ์ด ์์ต๋๋ค( INTERNAL_SCHEME_BASE<Type, TCoord, layout_type>::calculateFieldStepIteration
์ฐธ์กฐ).
if (SOLVER_SETTINGS.getDoUseTFSF ())
fdtd3d๋ฅผ ํ
์คํธํ ๋์ผํ ์ปดํจํ
๊ธฐ๋ฅ sm_35๋ฅผ ๊ฐ์ง 3๊ฐ์ GPU ์ค 2๊ฐ์์ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค(๋ชจ๋ GPU๋ ๋ค๋ฅธ ๋ชจ๋ธ์). ๊ทธ๋ฌ๋ ์ด๋ค ์ด์ ๋ก cudaSolverSettings๋ getDoUseTFSF
๋ฉ์๋๋ฅผ ์
๋ ฅํ ๋ NULL์ด ๋ฉ๋๋ค(์ฆ, ์ด ptr์ NULL์
๋๋ค). ์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๋์ง ์ดํดํ ์ ์์์ง๋ง, ๋ด๊ฐ ๋ฐ๊ฒฌํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ ์ฅ์น ์ค์๋์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ์ด๋ 4๊ฐ์ GPU ์ค ํ๋์์ fdtd3d๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํ ์ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ GPU์์ ๊ฐ๋ณ์ ์ผ๋ก GPU ์ ์ฉ ๋ชจ๋๋ฅผ ์๋ํ์ญ์์ค. 4๊ฐ์ GPU๊ฐ ๋ชจ๋ ์ ํํ ๋์ผํ๊ธฐ ๋๋ฌธ์ fdtd3d ๋์์ ์ฐจ์ด๊ฐ ์ ํ ์์ด์ผ ํฉ๋๋ค. ์ฐจ์ด๊ฐ ์์ ์๋ก ๊ธฐ๊ธฐ ์ค์๋์ ์์ธ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
๋ต์ฅ์ ๋ณด๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
PR #140์ ํ์ธํ๊ณ ํ๋๊ทธ -DCUDA_ARCH_SM_TYPE=sm_60์ด ์ถ๊ฐ๋ fdtd3d๋ฅผ ๋ค์ ๋น๋ํ์ต๋๋ค. ๋ถํํ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ธ๊ธํ๋ฏ์ด ๋จ์ผ GPU ๋ชจ๋์์ ๋ค๋ฅธ GPU ๊ฐ์ ์ ํํ ๋ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๊ณผ ๊ฐ์ด ์ฒซ ๋ฒ์งธ ๋จ๊ณ๊ฐ ์๋๋ผ ๋ ๋ฒ์งธ ๋จ๊ณ์์
Estimated current size: 1437644553 byte.
Setup blocks:
blockCount:
Coord (X : 1.000000, Y : 1.000000, Z : 1.000000).
blockSize:
Coord (X : 200.000000, Y : 200.000000, Z : 200.000000).
Calculating time step 0...
Calculating time step 1...
Fatal error: an illegal memory access was encountered at ~/fdtd3d/Source/Scheme/InternalScheme.inc.h:912
๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ GPU์์๋ง ์๋ํ๊ธฐ ๋๋ฌธ์ ์ํฉ์ด ์ด์ํด์ก์ต๋๋ค. ๋ค๋ฅธ 3๊ฐ์ ๊ฒฝ์ฐ ๋ชจ๋ ์คํจํ๊ณ ๋์ผํ ์ค๋ฅ ์ ๋ณด๊ฐ ์์์ต๋๋ค.
ํ ์คํธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๋ง์นจ๋ด ์ด ๋ฌธ์ ์ ํต์ฌ ์์ธ์ ์์๋ผ ์ ์์๋ค. PR #141์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด์ fdtd3d๊ฐ ๋ชจ๋ GPU์์ ์๋ํด์ผ ํฉ๋๋ค. ๋ฉํฐ GPU ๋ชจ๋๋ ์ด์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทํ์ ๋ต๋ณ๊ณผ ์์ ๋ ์ฝ๋์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. GPU๊ฐ ์๋ ์ํฌ์คํ
์ด์
์์ ์ํ๋ ๋งํผ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ CPU์ GPU ๋ชจ๋์์ ํ์ฅ์ฑ์ ํ
์คํธํ ์ ์์ต๋๋ค.
๊ฝค ๋ฉ์ง๋ค์, ๊ฐ์ฌํฉ๋๋ค!!!
๋ ๊ถ๊ธํ ์ฌํญ์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ฌ์ญ์์ค.