Julia: N๊ฐœ์˜ `VecElements{T}`๋ฅผ ๋ณด์œ ํ•˜๊ธฐ ์œ„ํ•ด `VecTuple{N,T}`๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์— ๋งŒ๋“  2017๋…„ 03์›” 14์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

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 ๋Š” ๋ฌผ๋ก  ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•œ ์ด๋ฆ„์˜ ์ž๋ฆฌ ํ‘œ์‹œ์ž์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.)

simd speculative types and dispatch

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋Š” ๊ธฐ๋ณธ์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SIMDBase ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ SIMD ๋ฅผ ํ•ด๋‹น ํŒจํ‚ค์ง€๋กœ ๋‹ค์‹œ ํƒ€๊ฒŸํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ€์ •์ด ์ •ํ™•ํ•˜๋‹ค๋ฉด SIMD ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SIMDBase ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ๋“ค์ด ๋™์˜ํ•˜๋ฉด Base๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ €์ˆ˜์ค€ LLVM ํ˜ธ์ถœ ์™œ๊ณก ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

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

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์•Œ๋ฆผ์œผ๋กœ Tuple์€ ์ถ”์ƒ ๋ฒกํ„ฐ ์œ ํ˜•์œผ๋กœ ์ •์˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— VecTuple์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒกํ„ฐํ™”๋œ ํŠœํ”Œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋ถ„์ ์ธ ์šฉ์–ด ์ถฉ๋Œ์ž…๋‹ˆ๋‹ค.

์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋Š” ๊ธฐ๋ณธ์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SIMDBase ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ SIMD ๋ฅผ ํ•ด๋‹น ํŒจํ‚ค์ง€๋กœ ๋‹ค์‹œ ํƒ€๊ฒŸํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ€์ •์ด ์ •ํ™•ํ•˜๋‹ค๋ฉด SIMD ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SIMDBase ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ๋“ค์ด ๋™์˜ํ•˜๋ฉด Base๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ €์ˆ˜์ค€ LLVM ํ˜ธ์ถœ ์™œ๊ณก ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์—ฌ๊ธฐ์—์„œ SIMD ๋‚ด์žฅ ์œ ํ˜•๋„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. #2299

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋…์„ ์ƒ๊ฐํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค... ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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