1. 연산 개요
두 입력의 대응하는 원소를 곱하여 출력하는 연산이다.
각 출력은 같은 위치에 있는 두 입력에만 의존한다.
다른 위치의 입력은 사용하지 않는다.
마찬가지로 Elementwise Multiply 는 원소별 독립성을 가지며 GPU thread 단위로 병렬화하기 쉽다.
- Scaler scaling
- Channel-wise scale
- Gating
- Attention probability and value combine
- Dropout maks adapt
- LayerNorm and RMSNorms scale parameter
- Gradient scaling
- Loss weighting
- Optimizer update
- Polynomials calcul
- Dot product and matrix multiplications multiple level
- Quantization scale adapt
2. 기본 수학적 정의
동일한 shape 을 가진 두 입력 텐서를 생각
입력과 출력의 shape 은 일반적으로 동일
3. Scalar Multiply
입력 텐서의 모든 원소에 동일한 상수 a 를 곱하는 연산
Scalar Multiply 에서는 두 번째 텐서의 원소를 매번 global memory 에서 읽을 필요가 없다.
4. Broadcasting Multiply
두 입력의 shape 이 완전히 같지 않아도 broadcasting 을 통해 곱셈할 수 있다.
여기서는 곱셈 자체뿐 아니라 다음 구조가 중요해진다
- broadcast operand 의 반복 사용
- broadcast index 계산
- parameter 의 cache locality
- memory layout
- 같은 값을 사용하는 thread 범위
5. 입력과 출력 domain
입출력의 dtype 이 항상 같은 것은 아니다.
6. 데이터 의존성
기본 Elementwise Multiply 는 다음과 같다
출력 원소 사이에는 의존성이 없다.
따라서 임의의 순서로 계산하거나 동시에 실행할 수 있다.
7. Elementwise Multiply 와 Dot Product 의 구분
같은 곱셈 명령이 사용되더라도 elementwise multiply 와 dot porduct 는 의미가 다르다.
Dot Product
출력은 텐서 형태를 유지
Elementwise Multiply
곱셈 결과가 reduction 을 통해 하나의 값으로 합쳐진다
8. 의미 불변성
다른 실행 형태로 변경해도 다음 조건은 유지되어야 한다.
8.1 위치 대응 관계
다른 위치의 값을 곱하면 일반적으로 Elementwise Multiply 가 아니다
Braodcasting 이나 permutation 이 있다면 index mapping 을 별도로 명시해야 한다.
8.2 두 입력에 대한 의존성
일반적인 출력은 두 입력 모두에 의존
다만 한 입력이 특별한 값이면 의존성이 단수화될 수 있다.
8.3 출력 cardinality
일반적인 Multiply 는 입력 위치 하나당 출력 위치 하나를 생성한다.
원소 수를 축소하는 reduction 이나 확장하는 broadcast 와 구분된다.
8.4 Broadcasting domain
어떤 축에 paramter 가 적용되는지가 의미에 포함된다.
축을 바꾸면 다른 연산이 된다.
9. 대수적 성질
9.1 교환법칙
실수와 일반적인 정수 곱셈에서는 성립
compiler 는 필요에 따라 operand 순서를 바꿀 수 있다.
9.2 결합 법칙
여러 Multiply 를 tree 형태로 재배치할 수 있다.
부동소수점의 ㅣ경우에는 정확한 결합법칙이 성립하지 않고 수치 오차를 동반 가능
9.3 항등원
곱셈의 항등원은 1,
단순화 가능, 불필요한 Multiply 제거의 근거가 된다.
9.4 흡수원
곱셈에서 0은 흡수원
0과의 곱셈을 상수 0 으로 바꿀 수 있을 것처럼 보이지만
부동소수점에서 예외가 존재,
NaN, Inf 의 조건
9.5 역원
0이 아닌 값 x 에 대해 곱셈의 역원은 1/x
부동 소수점에서는 다음 문제가 있다.
- x = 0
- overflow
- underflow
- reciprocal approximation
- rounding
- NaN, Inf
수학적으로는 같은 의미지만 실제 명령과 수치 결과는 달라질 수 있다.
9.6 분배법칙
수학적 자유돌르 제공하지만 실행 비용은 달라질 수 있다.
따라서 대수적으로 같은 표현 중 연산량과 memory traffic 이 적은 방향을 선택해야 한다.
10. Scale 연산의 의미
단순 곱셈뿐 아니라 값의 크기를 조절하는 scale 연산으로 해석할 수 있다.
- 크기 확대
- 크기 축소
- 유한 입력 0으로 변환
- identity
- 부호 반전과 크기 조절
Compiler 는 일반 Multiply 대신 부호 비트 변경이나 negate modifier 를 사용할 수 있다.
11. Sign 과 크기의 변화
실수 곱셈에서는 출력 부호가 두 입력 부호의 조합으로 결정된다.
Multiply 는 값의 크기를 확대하거나 축소 가능
연속 Multiply 에서는 overflow, underflow 위험이 Add 보다 크게 나타날 수 있다.
12. 부동소수점 곱셈의 의미
- 두 입력의 sign 결합
- exponent 덧셈
- significand 곱셈
- normalization
- 목표 precision 으로 반올림
실수 곱셈과 달리 결과를 정확히 표현할 수 없는 경우 반올림된다.
13. Overflow 와 Underflow
13.1 Overflow
두 값의 크기가 크면 곱셈 결과가 표현 가능한 범위를 넘을 수 있다.
13.2 Underflow
두 값의 절댓값이 매우 작으면 결과가 normal 범위보다 작아질 수 있다.
이 경우 수학적으로 0이 아닌 결과가 실제 실행에서는 0이 될 수 있다.
13.3 연산 순서의 영향
각 순서가 바뀜에 overflow, underflow 될 수 있음,
14. 특수값 처리
- NaN
- Infinity
- Infinity and zero
- Signed Zero
- Subnormal
15. 정수 곱셈
결과가 고정된 정수 범위를 벗어나면 다음 중 하나가 발생할 수 있다.
- wraparound
- saturation
- wider accumulator
- undefined behavior
- exception
quantized 연산에서는 더 넓은 accumulator 를 사용한다.
16. Boolean 및 Mask Multiply
0과 1 로 구성된 mask 를 곱하면 선택 연산처럼 사용할 수 있다.
Dropout 의 기본 구조가 이와 관련된다.
하지만 특수값에서는 그 역할이 다를 수 있음
17. Gating 연산
Gating 은 한 입력이 다른 입력의 전달 크기를 조절하는 구조다
- LSTM gate
- GRU gate
- GLU
- attention probability
- mixture weight
수학적으로는 Elementwise Multiply 지만 의미적으로는 다음 관계를 가진다
- gate 값
- value 전달량 제어
Gate 가 0이면 차단, 1이면 통과, 중간값ㅅ이면 일부 전달
18. Dropout Mask 적용
Dropout 의 Multiply 부분만 보면 Elementwise Multiply 지만 전체 연산은 난수 생성과 상태 갱신을 포함한다.
순수한 Multiply 와 달리 다음 의미가 추가된다.
- random state
- seed
- deterministic replay
- mask observability
- backward 에서 mask 재사용
19. 정규화 Scale
LayerNorm 와 RMSNorm 에서는 정규화된 값에 학습 가능한 scale 을 곱한다.
20. Attention Probability 와 Value
Attentnion 의 weighted sum 은 단순 Elementwise Multiply 가 아니라
- Multiply + Reduction
구조다
21. 추상 실행 모티프
Tensor-Tensor Elementwise Multiply 의 기본 실행 모티프는 다음과 같다
- Index
- Load X
- Load Z
- Multiply
- Store Y
구체적인 단계는
- current threads output index cal
- index boundary check
- x_i address cal
- z_i address cal
- x_i load
- z_i load
- multiply
- y_i address cal
- result store
22. 비용 구조
산술 집약도가 매우 낮기 때문에 일반적으로 memory-bound 되기 쉽다.
'SASS_Probe' 카테고리의 다른 글
| 기본 연산 의미 명세 05 - Comparison (0) | 2026.06.22 |
|---|---|
| 기본 연산 의미 명세 04 - Fused Multiply Add, FMA (0) | 2026.06.22 |
| 기본 연산 의미 명세 02 - Elementwise Add (0) | 2026.06.21 |
| 기본 연산 의미 명세 01 - Elementwise Map (0) | 2026.06.21 |
| 연산 의미 명세와 불변성 기반 실행 구조 분석 방법론 (0) | 2026.06.21 |