Three Slicer: 브라우저 WASM 슬라이서의 91초를 10초로 줄이며 찾은 병렬화, V8, WebGPU 병목

1 hour ago 1

제가 개발 중인 Three Slicer 0.3.3의 성능 최적화 과정을 정리한 글입니다.

주요 내용은 다음과 같습니다.

  • OrcaSlicer 포팅 과정에서 빠졌던 CPU 병렬성을 복구해 1.13M facet tree-support plate 전체 슬라이스 시간을 91.1초에서 9.7~9.8초로 줄였습니다.
  • WebGPU polygon kernel은 단일 스레드 Clipper보다 크게 빨랐지만, 14 thread WASM baseline과 비교하면 end-to-end 성능 차이는 거의 사라졌습니다.
  • 여러 slicing worker를 동시에 실행할 때 발생하던 Chrome OOM을 추적해, Emscripten SINGLE_FILE 때문에 pthread isolate마다 불필요한 inline WASM 데이터가 JS와 함께 로드되던 문제를 수정했습니다.
  • 그 결과 pthread isolate 하나당 V8 heap 사용량이 약 60MB에서 약 1MB로 줄었고, 이전에는 crash하던 5~8 worker 실행도 가능해졌습니다.
  • 1,460만 toolpath segment를 표시하는 preview에서는 GPU가 그리는 양을 줄여 67.8ms/frame에서 34.8ms/frame으로 개선했습니다.
  • 52MB 3MF 프로젝트 로딩은 1.34초에서 약 0.37초로 줄였습니다.

단순한 릴리스 소개보다는, 브라우저에서 큰 C++/WASM workload를 최적화하면서 실제 병목이 CPU, GPU, V8 runtime 사이에서 어떻게 이동했는지를 기록한 글입니다.

특히 GPU microbenchmark에서 큰 성능 향상이 나와도 실제 애플리케이션 전체에서는 이득이 거의 사라질 수 있다는 점과, 병렬화에서는 속도뿐만 아니라 결정성과 메모리 구조가 중요한 문제가 된다는 점을 정리했습니다.

Read Entire Article