-
cuda๋ฅผ visual studio ํ๊ฒฝ์์ ์คํํ ์ผ์ด ์๊ฒจ์ ์ ๋ฆฌ๊ฒธ ์์ฑํฉ๋๋ค.
๋น ๋ฅธ ์ฝ๋ ์ ์ฉ์ ์ํด nvidia์์ ์ ๊ณตํ๋ ๋ค์ ์์ ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
https://github.com/NVIDIA/cuda-samples?tab=readme-ov-file
์ ๋ Windows 10 ํ๊ฒฝ์ NVIDIA TITAN RTX, Visual Studio 2022 ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
1. Visual studio 2022์ C++ ํ๊ฒฝ ์ค์น
C++์ ์ฌ์ฉํ ๋ฐ์คํฌํฑ ๊ฐ๋ฐ์ด ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
2. CUDA/CuDNN ์ค์น
ํ์ฌ cuda-sample์์๋ CUDA 12.5๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ ์ฌ๊ธฐ์ ๋ง์ถฐ CUDA 12.5๋ฅผ ์ค์นํ์์ต๋๋ค.
CUDA/CuDNN ์ค์นํ๋ ๋ฒ์ ์ธํฐ๋ท์ ๋ง์ด ๋์ค๋๊น ์๋ต...
https://lonaru-burnout.tistory.com/16
3. Visual studio project ์์ฑ
Visual studio๋ฅผ ์คํํ๊ณ "์ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ" ํด๋ฆญ
๋ชจ๋ ์ธ์ด์์ CUDA ๋ฅผ ์ ํํ๋ฉด ์ค์นํ ๋ฒ์ ์ ๋ฐ๋ฅธ ํ ํ๋ฆฟ์ด ๋์ต๋๋ค. ์ ๋ 11.8๋ฒ์ ๋ ๊ฐ์ด ๊น๋ ค์์ด์ ๋๋ค ๋์ค๋ค์. ์ผ๋จ 12.5๋ฅผ ์ ํํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋ผ ๊ธฐ๋ณธ ํ๋ฉด์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
4. ์ํ๋ sample์ main.cpp๋ฅผ ์ฎ๊ฒจ์ฃผ๊ธฐ
kernel.cu๋ฅผ ์ญ์ ํ๊ณ , ์๋ฃจ์ ํ์๊ธฐ์์ ์ผ์ชฝํด๋ฆญ -> ์ถ๊ฐ -> ์ ํญ๋ชฉ ์ผ๋ก main.cpp๋ฅผ ์ถ๊ฐํ๊ณ , ์ํ๋ ์ํ์ main.cpp๋ฅผ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ํฉ๋๋ค. ์ ๋ conjugateGradient ์์ ๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
์ด๋ฅผ ์คํ ํน์ ๋น๋ํ๋ฉด ์๋ฌ๊ฐ ๋ฉ๋๋ค.
cuda-sample์ ์ํด ์ฌ์ฉํ๋ ์ถ๊ฐ ์ข ์์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์ ์ด๋ฅผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
5. Common ๋ฃ์ด์ฃผ๊ธฐ (ํค๋ํ์ผ) ๋ฐ ํค๋ ์ฐ๊ฒฐ
์์ ๋ ธ๋ฒ ์ด์ค๋ก ์ฟ ๋ค ์ฝ๋ฉ์ ์์ํ๋๊ฑด ๋๋ฌด ์ด๋ ต๊ธฐ ๋๋ฌธ์, sample์ ์ ์ ํ ํ์ฉํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์ cuda-sample ํ๊ฒฝ๊ณผ ๋๊ฐ์ด ๋ง๋ค์ด ์ค ํ์๊ฐ ์์ต๋๋ค. ์ด๋ค์ ํ๊ฒฝ๊ณผ ๋ง์ถฐ์ฃผ๋ ค๋ฉด, ์ธ๋ถ ์ข ์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋จผ์ , Cuda-sample ์ "common" ํด๋๋ฅผ ์๋ก ๋ง๋ ํ๋ก์ ํธ ํ๊ฒฝ ํด๋๋ก ์ฎ๊ฒจ์ค๋๋ค.
์ฌ๊ธฐ์๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํค๋๋ค์ด ์์ต๋๋ค.
ํ๋ก์ ์ ์ ์ธ๋ถ ์ข ์์ฑ์ ๋ฃ์ด์ฃผ๋ ค๋ฉด ์ถ๊ฐ ํฌํจ ๋๋ ํฐ๋ฆฌ์ ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
๋จผ์ , sample์ solution ํ์ผ์ ์ด๊ณ , ํ๋ก์ ํธ -> ์์ฑ์ ์ด์ด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ C/C++ -> ์ผ๋ฐ์ ์ด๋ฉด ๋ค์๊ณผ ๊ฐ์ "์ถ๊ฐ ํฌํจ ๋๋ ํฐ๋ฆฌ" ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ ์๋ก ๋ง๋ ํ๋ก์ ํธ์ ๊ฐ์ ์์น์ ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋!!! Common์ ๊ฒฝ๋ก์์ ์์ ์๋ "../../../"์ "./"๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
sample ์์ ๋ค์์๋ common์ ์์ ์๋ฃจ์ ์ ์์/์์ ํด๋์ ๋ฌ์ ์ ๋ ๊ฒ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋๋ฐ, ์ฐ๋ฆฌ๋ ์๋ฃจ์ ๊ณผ ๊ฐ์ ์์น์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋์ ๊ธฐ์กด์ ์ด๋ฐ ์ํ์์
์ด๋ ๊ฒ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
๊ฐ์ ๋ฐฉ์์ผ๋ก CUDA C/C++ -> Common์์ Additional Include Directories์ ๊ฒฝ๋ก๋ ๋ฃ์ด์ค๋๋ค.
์ํ ์๋ฃจ์ ์ ์ด ๊ฒฝ๋ก๋ฅผ ์ฐธ๊ณ ํ์ฌ
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ด๋ ๊ฒ ๋ฐ๊ฟ์ค๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด header๊ฐ ํฌํจ๋๋ฉด์ ์ธ๋ถ ์ข ์์ฑ์ Common์ ํค๋๋ค์ด ๋ชจ๋ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
๊ทผ๋ฐ ์ด๋ ๊ฒ ํ ๋ค ์คํํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
LNK2019 ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ header๊ฐ ํฌํจ๋ ๊ฒ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ๋งํฌํ๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ stackoverflow๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์จ๋ ๊ทธ๋์ ์ด๊ฑด ์ด๋ป๊ฒ ํด๊ฒฐํ๋ ๋ณด๋ฉด, ์๊น ์ด์ฌ๋ ์์ฑ ํ์ด์ง์์ ๋ง์ปค -> ์ ๋ ฅ์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ถ๊ฐ ์ข ์์ฑ์ ์๋ ๊ฐ๋ค์ด ๋ณด์ด๋๋ฐ, ์ด๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌ -> ๋ถ์ฌ๋ฃ๊ธฐ ํด์ค๋๋ค.
์ํ์ ์ด ๊ฐ์
์๋ ๊ฒ ๋ถ์ฌ๋ฃ์ด์ค๋๋ค.
๊ทธ๋ฌ๊ณ ์ ์ฉํ๊ณ ์คํํ๋ฉด
์ง์~ ์ด๋ ๊ฒ ์คํ๋ฉ๋๋ค.
๋๊ธ