안녕하세요.
furiosa-opt-std v0.3.0 API로 작성한 커널 코드를 v0.6.0 API를 반영하여 수정 및 보완하고 있습니다.
이전 버전에서 테스트 진행했던 대부분 커널(contraction, elementwise 등)은 API 변경 사항(to_hbm 시그니처 변경, contract_outer Acc 추가 등)에 맞춰 수정한 후 v0.6.0 emulation 백엔드에서 정상 동작하는 것을 확인했습니다.
다만, v0.3.0 simulation 백엔드에서 정상 동작하던 2개 커널이 v0.6.0에서 실패하여 문의드립니다.
테스트 환경
- furiosa-opt-std : v0.6.0
- cargo-furiosa-opt : v0.6.0 (cargo binstall로 설치)
- rust-toolchain : nightly-2026-05-01
- 백엔드 : emulation
- OS : Ubuntu 24.04 (Docker 컨테이너)
Docker 컨테이너를 사용하는 이유는 기존 v0.3.0 호스트 환경을 보존하면서 v0.6.0을 격리 환경에서 테스트하기 위함이며, Rust toolchain과 furiosa-opt-std 설치는 공식 문서 절차를 따랐습니다.
1. transpose 커널
v0.3.0 simulation에서 정상 동작하던 f32 transpose (M×N → N×M)가 v0.6.0 emulation에서 lowering 단계 에러가 발생합니다.
다양한 축 조합(M=2/8/2048, N=8/32, f32/bf16)을 시도했으나 모두 lowering 에러 또는 "fatal runtime error: foreign exceptions"가 발생했습니다.
질문: v0.6.0에서 transpose의 권장 구현 패턴이 변경되었는지요? 또는 별도의 접근 방법이 필요한지 알려주시면 감사하겠습니다.
2. gelu 커널
v0.3.0에서 Stash API를 사용하여 구현한 GELU 커널이 v0.6.0에서 API 변경으로 빌드에 실패하는 것 같습니다. Stash 관련 API의 v0.6.0 대응 방법이 있는지 문의드립니다.
참고
contraction(gemm, gemv), elementwise(add, mul, silu, rsqrt, xnorm) 등 다른 커널 유형은 v0.6.0 API에 맞춰 수정 후 emulation에서 정상 동작합니다.