Fdtd3d: ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์— ๋Œ€ํ•œ ์งˆ๋ฌธ

์— ๋งŒ๋“  2020๋…„ 01์›” 08์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zer011b/fdtd3d

์•ˆ๋…•ํ•˜์„ธ์š” ๊ธ€๋ ™

์ €๋Š” ์ฒญ์ด์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. FDTD์™€ ๊ทธ ๋™์‹œ์„ฑ์„ ์—ฐ๊ตฌํ•˜๋Š” ๋ฐ ์ •๋ง ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MPI/GPU ์ปดํ“จํŒ…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ fdtd3d ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ
    ./Release/Source/fdtd3d --cmd-from-file ./Examples/vacuum3D_test.txt
    ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ "vacuum3D.txt"๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ "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

  1. ๋˜ํ•œ MPI๋กœ "vacuum3D.txt"๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ–ˆ์„ ๋•Œ fdtd3d๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ์„ฑ์€ ๊ทธ๋‹ค์ง€ ์ด์ƒ์ ์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ๋Š” 40 x 40 x 40์œผ๋กœ 64000๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  18๊ฐœ์˜ ์ฝ”์–ด๊ฐ€ ์žˆ๋Š” ์นฉ์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์ง„ํ–‰ํ•˜๋ฉด 67.74์ดˆ๊ฐ€ ์†Œ์š”๋˜๋ฉฐ 8๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์•ฝ 11.34์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ์†๋„ ํ–ฅ์ƒ์€ ์•ฝ 6์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  18๊ณผ ๊ฐ™์€ ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ ์šฉํ•  ๋•Œ ์‹œ๊ฐ„ ๊ฐ์†Œ๋Š” 11.34์ดˆ์—์„œ 9.6์ดˆ๋กœ ์‚ฌ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ? ๋ณ‘๋ ฌ ์ปดํ“จํŒ… ์„ฑ๋Šฅ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ตฌ์„ฑ์ด ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ด๋„ ๋ ๊นŒ์š”?

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ๋” ํ•„์š”ํ•˜๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐ์‚ฌ์™€ ์†Œ์›์„ ๋‹ด์•„
์ฒญ์ด

Question

๋ชจ๋“  9 ๋Œ“๊ธ€

  1. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ถ™์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  RelWithDebInfo ๋ชจ๋“œ์—์„œ๋„ ํ›จ์”ฌ ๋Š๋ฆฐ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Cuda๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰์ด ๋๋‚  ๋•Œ ์ „์ฒด ๋กœ๊ทธ๊ฐ€ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

์ž‘์€ ํŒ: ์‚ฌ์šฉํ•  ๋ชจ๋“œ๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด -DSOLVER_DIM_MODES ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด (์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ ์ธก๋ฉด์—์„œ) ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋ชจ๋“œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ปดํŒŒ์ผ๋˜์–ด Cuda ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ -DSOLVER_DIM_MODES=DIM3 ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

  1. ์—ฌ๊ธฐ์—์„œ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ฐ ํƒ€์ž„์Šคํ…์˜ ์ „์ฒด ์‹คํ–‰์‹œ๊ฐ„์€ ์—ฐ์‚ฐ์‹œ๊ฐ„๊ณผ ๊ณต์œ ์‹œ๊ฐ„์˜ ํ•ฉ์ด๋‹ค. ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ๊ฒฝ์šฐ ๊ณต์œ  ์‹œ๊ฐ„์ด ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(fdtd3d๋Š” ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์ง€์ •๋œ ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ตœ์ƒ์˜ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค).

๊ทธ๋Ÿฌ๋‚˜ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ณต์œ  ์ž‘์—…์ด ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ์ œ์™ธ). ์ด๊ฒƒ์ด OpenMP๊ฐ€ MPI๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  MPI ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ตœ๊ณ ์˜ ์†๋„ ํ–ฅ์ƒ์„ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ OpenMP๋Š” fdtd3d์—์„œ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์„ ์—ผ๋‘์— ๋‘๊ณ  fdtd3d์—์„œ ์กฐ์ •ํ•  ์‚ฌํ•ญ์ด ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ Ox ์ถ•๋งŒ ๊ณ„์‚ฐ ๋…ธ๋“œ ์‚ฌ์ด์— ํผ์ ธ ์žˆ์ง€๋งŒ -DPARALLEL_BUFFER_DIMENSION=xyz ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ์ฐจ์›์˜ ์ฒญํฌ ์‚ฌ์ด์— ๊ทธ๋ฆฌ๋“œ๊ฐ€ ๋ถ„ํ• ๋ฉ๋‹ˆ๋‹ค. ์ตœ์ ์˜ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๋ฅผ ์กฐ์–ธํ•˜๋ฏ€๋กœ fdtd3d ์ถœ๋ ฅ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋Š” --buffer-size B ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ B ๋‹จ๊ณ„๋งˆ๋‹ค ๊ณต์œ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ fdtd3d์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์ตœ์ ์˜ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๊ฐ€ ์ตœ์ ์ด๋ผ๊ณ  ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ --manual-topology --topology-sizex X --topology-sizey Y --topology-sizez Z ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ˆ˜๊ฐ€ ์ „์ฒด ๊ทธ๋ฆฌ๋“œ ํฌ๊ธฐ์˜ ๊ตฌ๋ถ„์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ fdtd3d์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์ตœ์ ์˜ ๊ฐ€์ƒ ํ† ํด๋กœ์ง€๋„ ์ตœ์ ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ ์‹œ์— ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹จ์ผ GPU ์ปดํ“จํŒ…์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ๋กœ 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์ด์–ด์•ผ ํ•จ)

  1. ๋ฉ€ํ‹ฐ GPU ์ปดํ“จํŒ…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    mpiexec --mca btl ^openib -n 2 ./Release/Source/fdtd3d --cmd-from-file ./Examples/vacuum3D_test.txt
    CUDA cmds
--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 ๋ชจ๋‘์—์„œ ํ™•์žฅ์„ฑ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฝค ๋ฉ‹์ง€๋„ค์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!!

๋” ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ฌ์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰