NR(N-dimensional Ruby Array) 개요 및 특징
NR은 루비를 위한 다차원 숫자 배열 라이브러리로, C 언어 기반의 효율적인 메모리 관리를 통해 루비의 VALUE 타입 배열 대비 메모리 효율이 높습니다. 차원 수, 배열 형태, 요소 타입(정수, 부동소수점, 복소수, 루비 객체)을 명시적으로 관리하며, IDL의 영향을 받아 포트란 순서(행 우선)로 데이터를 정렬합니다. 배열 생성 시 다양한 초기화 방법(예: NArray.float(shape), indgen, 루비 배열 변환)을 제공하며, 인덱스 배열을 이용한 서브 배열 추출 등 과학 계산에 특화된 기능을 지원합니다. 연산자는 요소별로 작동하며, NMath 모듈을 통해 과학 계산 함수를 제공합니다.
성능 및 한계
NR은 루비 1.9.2 대비 연산 속도에서 28배(대규모 데이터 처리 시 최대 50배) 빠르며, 코드 작성도 8배 이상 간결합니다. 그러나 CPU 캐시를 효율적으로 활용하기 어렵다는 한계가 있습니다. NR은 메인 메모리에 직접 접근하여 대규모 데이터 처리 시 캐시 미스가 빈번하게 발생하며, 이는 루비 언어의 특성상 네이티브 코드 수준의 캐시 제어가 어렵기 때문입니다.
과학 분야 활용 및 미래 방향
NR은 지구물리학(GFD, DCL, NetCDF 라이브러리, GAVE, GFD-Navi), 물질과학(가상 샘플 라이브러리), 분자생물학(Ruby Helix), 역학(시뮬레이션 프로그램) 등 다양한 과학 분야에서 활용되고 있습니다. 발표자는 루비의 쉬운 코드 작성 장점을 살리면서 멀티코어, GPU, 클러스터와 같은 복잡한 아키텍처를 추상화하고 데이터 분산 처리를 자동화하는 방향으로 NR의 발전을 모색하고 있습니다. 현재는 Rake 기반의 병렬 분산 워크플로우 시스템인 Prake를 개발하며 이러한 비전을 구현하고 있습니다.