SIMD.jl์ ์กด์ฌ๋ฅผ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ SIMD ๋ฒกํฐ์ ๊ธฐ๋ณธ ์ฝ๋ ์์ฑ์ Julia ๊ธฐ๋ฐ ์์ฒด์์ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ง์๋์ด์ผ ํ๋ฉฐ ๋จ์ํ ๊ธฐ๋ณธ ์ ํ์ด ์๋ ๋ํ ํํ์์ ์ผ๋ถ ์ธ๋ถ ์ ๋ณด๋ฅผ ์จ๊ฒจ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ ๋ด ์ ์์ ๋ณธ์ง์ ์ผ๋ก ํ์ฌ NTuple{N, VecElement{T}}
์ ๋์ผํ VecTuple{N,T}
์ ํ์ ์ ์ํ๋ ๊ฒ์
๋๋ค. ์ฐจ์ด์ ์ VecElement
codegen ์์ฑ์ด ํ์ํ ๊ฒฝ์ฐ ์์์ ์ผ๋ก ์ ์ฉ๋์ง๋ง ์์๊ฐ ์๋ ํํ์ ์ฐ๊ฒฐ๋๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ฐ ์์ผ๋ก ํํ์ ๊ฐ๋ณ ์์์ ์ก์ธ์คํ๋ฉด ์ถ๊ฐ ๋ณํ T <-> VecElement{T}
์ ๊ฑฐ์น ํ์๊ฐ ์์ต๋๋ค. ํ์ฌ NTuple{N, VecElement{T}}
์ ๋จ์ผ ์์์ ์ก์ธ์คํ๋ ค๋ฉด ๋จ์ํ x[i]
๋์ x[i].value
๊ฐ ํ์ํฉ๋๋ค.
๋ํ ์ ์ฒด ์ ํ ํฌ๊ธฐ ๋ฐ ์ ๋ ฌ์ ๋ํ ์๊ตฌ ์ฌํญ ๋๋ ๊ธฐ๋ณธ ์ ํ(๋นํธ ํฌ๊ธฐ 8~64)์ด ์ ํ ํ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ ํน์ ํํ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. #20961๋ ์ฐธ์กฐํ์ญ์์ค.
SIMD ๋ฒกํฐ์ ๋ํ ๋ชจ๋ ๊ฐ๋ฅํ ์์ ์ Julia ๊ธฐ๋ฐ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋๋ค. ํ์คํ ๋๋ฌด ๋ง์ต๋๋ค(์ ํ๋ง, ์กฐ์ฎ๊น ๋๋ ๋ฐ์ ์ ๋ํด ์๊ฐํ์ญ์์ค). ์ด๊ฒ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ LLVM codegen ์์ฑ์ด ํํ์ ์ฐ๊ฒฐ๋๋ ๋ฐฉ๋ฒ์ ์ข ๋ฅ๋ง ๋ณ๊ฒฝํ๋ฉด ๋น๋ถ๊ฐ ํน์ ํจํค์ง์ ๋จ์ ์์ ์ ์์ต๋๋ค.
( VecTuple
๋ ๋ฌผ๋ก ์ด ๋ฌธ์ ์ ๋ํ ํธ๋ฆฌํ ์ด๋ฆ์ ์๋ฆฌ ํ์์์ผ ๋ฟ์
๋๋ค.)
๋ค๋ฅธ ์ฌ๋๋ค์ ์ํ ์๋ฆผ์ผ๋ก Tuple์ ์ถ์ ๋ฒกํฐ ์ ํ์ผ๋ก ์ ์๋์ง ์๊ธฐ ๋๋ฌธ์ VecTuple์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฒกํฐํ๋ ํํ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋ถ๋ถ์ ์ธ ์ฉ์ด ์ถฉ๋์ ๋๋ค.
์งํ ๋ฐฉ๋ฒ์ ๋ํ ํ ๊ฐ์ง ์์ด๋์ด๋ ๊ธฐ๋ณธ์ ํฌํจ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ๋ด์ฉ์ ์ค๋ช
ํ๋ ์ ํจํค์ง๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค. SIMDBase
ํธ์ถํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์ SIMD
๋ฅผ ํด๋น ํจํค์ง๋ก ๋ค์ ํ๊ฒํ
ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์ ์ด ์ ํํ๋ค๋ฉด SIMD
๋จ์ํํ ์ ์์ต๋๋ค. SIMDBase
์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ํด ์ฌ๋๋ค์ด ๋์ํ๋ฉด Base๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ ์์ค LLVM ํธ์ถ ์๊ณก ์ค ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ์๊ด์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์์ SIMD ๋ด์ฅ ์ ํ๋ ์์ธํ ์ค๋ช ํฉ๋๋ค. #2299
์คํ ๊ฐ๋ฅํ ๊ฐ๋ ์ ์๊ฐํด ๋ณด๋ ค๊ณ ํฉ๋๋ค... ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์งํ ๋ฐฉ๋ฒ์ ๋ํ ํ ๊ฐ์ง ์์ด๋์ด๋ ๊ธฐ๋ณธ์ ํฌํจ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ๋ด์ฉ์ ์ค๋ช ํ๋ ์ ํจํค์ง๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
SIMDBase
ํธ์ถํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์SIMD
๋ฅผ ํด๋น ํจํค์ง๋ก ๋ค์ ํ๊ฒํ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ์ ์ด ์ ํํ๋ค๋ฉดSIMD
๋จ์ํํ ์ ์์ต๋๋ค.SIMDBase
์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ํด ์ฌ๋๋ค์ด ๋์ํ๋ฉด Base๋ก ์ด๋ํ ์ ์์ต๋๋ค.์๋ฅผ ๋ค์ด, ์ ์์ค LLVM ํธ์ถ ์๊ณก ์ค ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ์๊ด์์ต๋๋ค.