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에 따라 배포됨.
  • 개발자, 연구자, 오픈소스 용도로는 영구 무료이며, 상업적 프로덕션 사용에는 향후 출시 버전에서 상업용 라이선스가 필요함.