Simulizer

Tensors & matrices

큰 텐서나 행렬을 다루는 작업은 일반 배열 블록과는 다른 경로로 실행됩니다. TensorFlow.js가 이 작업을 받아 GPU(WebGPU)에서 처리하는 경우가 많고, 메모리 모델도 일반 배열과 다릅니다.

Shape and dtype

텐서는 두 가지 메타 정보로 정의됩니다.

  • shape — 각 차원의 길이입니다. 예를 들어 (10, 10)은 10×10 행렬, (64, 64, 3)은 64×64 RGB 이미지를 뜻합니다.
  • dtype — 원소의 타입입니다. 보통 float32 또는 float64이며, Simulizer는 대부분 float64를 씁니다.

shape 불일치는 가장 흔한 에러입니다. 행렬 곱 (m, k) × (k, n)에서 가운데 k가 맞지 않으면 곧바로 에러가 발생합니다.

Available operations

관련 블록은 모두 텐서 카테고리에 모여 있습니다.

  • 생성 — 0이나 1로 채우기, 랜덤(정규/균등), Perlin 노이즈, 단위 행렬, 주어진 모양과 값으로 만들기.
  • 원소별 — 더하기·빼기·곱하기·나누기·스케일링, 절댓값, 지수, 로그, 삼각함수.
  • 행렬 전용 — 행렬 곱, 전치, 역행렬, 행렬식, trace, 고유값, 단위 행렬.
  • 인덱싱 — 원소 하나 가져오기와 설정하기, 일부 차원을 잘라서 가져오기.

Check GPU usage

워크스페이스 위쪽의 백엔드 표시(WebGPU/WebGL/CPU)에서 현재 백엔드를 확인할 수 있습니다. 큰 텐서 작업에서는 백엔드 종류에 따라 속도가 수십 배 차이 납니다.

WebGPU를 지원하지 않는 브라우저에서는 자동으로 WebGL, CPU 순으로 폴백됩니다.

Memory management

큰 텐서를 매 반복마다 새로 만들면 메모리가 빠르게 찹니다. 가능하면 제자리(in-place) 연산을 쓰거나, 한 번 만든 텐서를 재사용하세요.

  • 텐서를 한 번만 만들고 매 반복에서 값만 채우는 방식은 메모리가 안정적입니다.
  • 매 반복마다 새 텐서를 만드는 방식은 가비지 컬렉션 부담을 키웁니다.

Pitfalls

  • WebGPU 백엔드는 큰 연산에서 빠르지만, 작은 연산은 오히려 CPU가 더 빠른 경우가 있습니다. 텐서가 작으면(예: 10×10 이하) GPU로 데이터를 전송하는 오버헤드가 연산 자체보다 커지기 때문입니다.
  • 텐서를 일반 배열로 변환해 그래프 패널로 보내는 비용은 무시할 수 없습니다. 큰 텐서를 매 반복마다 시각화하지 마세요.
  • 단정도와 배정도의 혼합은 자동으로 처리되지 않습니다. shape뿐 아니라 dtype도 맞춰야 합니다.

See also