[furiosa-opt v0.6.0] v0.3.0 에서 동작하던 transpose/gelu 커널이 v0.6.0 emulation에서 실패 - 권장 패턴 문의

안녕하세요.

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에서 정상 동작합니다.