TL;DR
- Enki는 안정판 Rust 함수 하나를 CPU와 GPU에서 실행하고 GPU용으로 적시 컴파일하는 이기종 컴퓨트 플랫폼임.
- Vulkan 1.3과 64비트 버퍼 디바이스 주소(BDA)를 사용해 디스크립터 풀·세트·바인딩 테이블 없이 GPU 메모리에 접근함.
- 런타임 BorrowEngine과 의존성 분석기로 데이터 경합을 감지하고 필요한 Vulkan 파이프라인 배리어를 자동으로 산출함.
#[nam]함수는 CPU와 GPU 양쪽에서 실행할 수 있으며, GPU 없이도 일반 테스트와 CPU 실행 결과를 검증할 수 있음.- 현재 알파 단계(v0.1)이며, 안정판 Rust 1.80 이상과 Vulkan 1.3 지원 그래픽 드라이버가 필요하고 상업적 프로덕션 사용에는 향후 별도 라이선스가 필요할 수 있음.
대화형 쇼케이스: 실시간 3D 레이마칭
- 쇼케이스는 부드러운 조명, 앰비언트 오클루전, 마우스로 조작하는 궤도 카메라를 갖춘 절차적 3D 레이마칭을 단일 Rust 함수에서 적시 컴파일해 실행함.
- 데모는 GPU 성능이 낮은 환경에서도 실행되며, 스페이스바를 누르면 Enki GPU 실행과 Rayon 멀티스레드 CPU 실행 사이를 실시간으로 전환함.
- 데모 실행 절차는 Enki SDF 저장소를 복제한 뒤
enki_sdf디렉터리에서cargo run을 실행하는 방식임.
빠른 시작
- 프로젝트에
enki-gpu와glam을 추가하고,#[nam]으로 표시한 표준 Rust 함수에서 입력 벡터에 배율을 곱해 출력 벡터를 생성함. Enki::init()으로 헤드리스 GPU 런타임을 초기화하고,gpu_vec!를 사용해 GPU VRAM에 입력·출력 데이터를 할당함.enki.flow안에서Space::gpu_x로 작업 공간을 지정하고 커널을 GPU에 디스패치하며,GpuParam으로 스칼라 인자를 전달함.- 같은 함수를 CPU에서도 항목별로 실행하고, CPU 결과와 GPU 결과가 비트 단위로 일치하는지
assert_eq!로 검증함. - 애플리케이션은
cargo run으로 실행함. 첫 빌드에서 Enki는.cargo/config.toml에--emit=llvm-bc와 최적화 프로파일을 자동 설정하도록 안내함. - 설정 파일을 직접 변경하지 않으려면 공식 CLI 러너를
cargo install cargo-enki로 설치하고cargo enki run을 사용할 수 있음.
아키텍처 주요 특징
- 안정판 Rust 실행: Rust 1.80 이상에서 작동하며 나이틀리 컴파일러 포크, 사용자 지정 툴체인, 실험적 컴파일러 플러그인이 필요하지 않음.
- 물리 메모리 주소 지정: Vulkan 1.3과 64비트 버퍼 디바이스 주소(BDA)를 기반으로 하며 디스크립터 풀, 디스크립터 세트, 바인딩 테이블을 제거함.
- 2단계 대여 검사: 호스트에서
rustc의 컴파일 시점 대여 검사기를 사용하고, 런타임BorrowEngine으로 공간 슬라이스 충돌, 도메인 경계 부족, 시간적 프레젠테이션 위험을 감지함. - 자동 동기화(TTRD): 내부 전이적 축약 의존성 해결기가 방향성 위험 그래프를 구성하고, 필요한 최소 Vulkan 파이프라인 배리어 집합을
Synchronization2를 통해 자동으로 도출함. - CPU·GPU 이중 검증:
#[nam]함수는 일반 Rust 함수이며, 물리 GPU 없이도 호스트 CPU 스레드에서rayon과 표준#[test]어설션을 사용해 테스트할 수 있음.
프로젝트 상태와 실용적 안전성
- Enki는 알파 단계(v0.1)의 프로젝트이며, 통합 언어 실행을 탐구하는 진행 중인 시스템 연구임.
BorrowEngine은 디스패치 경계에서 컴파일러 수준의 실용적 안전망으로 작동하며, 하드웨어 큐에 제출하기 전에 구체적인 공간·시간 데이터 경합 위험을 감지함.- 임의의 병렬 접근 패턴에 대해 형식적인 수학적 건전성 증명을 제공한다고 주장하지 않음.
- 런타임 API, 컴파일러 하향 변환 단계, 내부 데이터 구조는 시스템이 성숙함에 따라 변경될 수 있음.
Enki 책
- 공식 문서는 아키텍처, 메모리 레이아웃, 고급 그래픽 파이프라인을 상세히 다룸.
- 다루는 주제는 Rust 참조와 물리적 64비트 GPU 가상 주소의 대응 방식,
GpuVec, 무비용 부분 슬라이싱Slice, 값으로 전달하는 유니폼 패킹GpuParam, 온칩 스크래치패드 메모리GpuTileMem임. - GPU 하드웨어 제약인 분기 발산, 힙 할당, 패닉과 GPU BorrowEngine의 공간적 비중첩 및 시간적 프레젠테이션 수명 주기도 설명함.
- GLFW와 스왑체인을 사용한 실시간 대화형 디스플레이 애플리케이션 구축도 다룸.
시스템 요구 사항
- Rust 툴체인: 안정판 Rust 1.80 이상.
- 그래픽 드라이버: 다음 기능을 포함하는 Vulkan 1.3 지원 공식 GPU 드라이버: 64비트 버퍼 디바이스 주소(
VK_KHR_buffer_device_address), 타임라인 세마포어(VK_KHR_timeline_semaphore),Synchronization2(VK_KHR_synchronization2), 64비트 셰이더 정수(shaderInt64). - 지원 운영체제: Linux(X11/Wayland), Windows 10·11.
라이선스
- Enki는 오픈 코어 구조임.
- Enki 프레임워크(
enki-gpu,anu,apsu,utu,enki_macros)는 MIT 라이선스 또는 Apache License 2.0에 따라 완전한 오픈소스로 제공됨. - 사전 컴파일된 Parsu GPU 컴파일러 백엔드는 Parsu License 및 Commercial Notice에 따라 배포됨.
- 개발자, 연구자, 오픈소스 용도로는 영구 무료이며, 상업적 프로덕션 사용에는 향후 출시 버전에서 상업용 라이선스가 필요함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요