Skip to content

Commit ba86fca

Browse files
update post
Signed-off-by: jonghoonpark <dev@jonghoonpark.com>
1 parent 7df66a3 commit ba86fca

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

_posts/2026-04-19-JDK-8379867.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,20 @@ Java boolean[]
6464

6565
### BVectMask가 필요한 이유
6666

67-
NVectMask와 PVectMask가 실제 연산에 사용되는 형식이라면, BVectMask는 왜 필요할까? BVectMask는 Java 메모리(`boolean[]`)와의 인터페이스 역할을 한다. Java에서 마스크 데이터를 저장하거나 로드할 때는 8비트 boolean 형태가 필요한데, 이것이 BVectMask의 역할이다.
67+
NVectMask와 PVectMask가 실제 연산에 사용되는 형식이라면, BVectMask는 왜 필요할까? BVectMask는 두 가지 역할을 동시에 한다.
68+
69+
첫째, **플랫폼 독립적인 추상화 계층**이다. Java 코드 입장에서는 아래 하드웨어가 AVX-512의 k-레지스터든, ARM SVE의 predicate 레지스터든 신경 쓸 필요 없이 항상 `boolean[]` 기반의 BVectMask로 마스크를 다루면 된다. 플랫폼별 차이는 BVectMask → NVectMask/PVectMask 변환 과정에서 JVM이 알아서 처리한다.
70+
71+
둘째, **Java 메모리와의 교환 형식**이다. Java에서 마스크 데이터를 저장하거나 로드할 때는 8비트 boolean 형태가 필요한데, 이것이 BVectMask의 역할이다.
6872

6973
반면 하드웨어는 마스크를 다른 방식으로 다룬다. 예를 들어 x86 AVX-512에는 전용 `k0~k7` mask 레지스터(64비트)가 있어서, `vaddps zmm0 {k1}, zmm1, zmm2`처럼 mask 레지스터를 직접 써서 조건부 연산을 수행한다. 이런 하드웨어 네이티브 형식이 NVectMask와 PVectMask이다.
7074

71-
비유하자면 BVectMask는 사람이 읽을 수 있는 10진수 문자열이고, NVectMask/PVectMask는 CPU가 직접 연산하는 2진수 같은 것이다. 메모리에 저장할 때는 "교환 형식"인 BVectMask를 쓰고, 실제 연산할 때는 "실행 형식"인 NVectMask/PVectMask로 변환해서 쓴다.
75+
비유하자면 BVectMask는 사람이 읽을 수 있는 10진수 문자열이고, NVectMask/PVectMask는 CPU가 직접 연산하는 2진수 같은 것이다. 메모리에 저장할 때는 BVectMask를 쓰고, 실제 연산할 때는 NVectMask/PVectMask로 변환해서 쓴다.
7276

73-
| 표현 | 역할 |
74-
| --------------------- | ------------------------------------------------------ |
75-
| BVectMask | Java 메모리와의 인터페이스 (저장/로드용) — "교환 형식" |
76-
| NVectMask / PVectMask | 실제 연산 시 하드웨어 네이티브 형식 — "실행 형식" |
77+
| 표현 | 역할 |
78+
| --------------------- | --------------------------------------------------------------------------- |
79+
| BVectMask | 플랫폼 독립적 추상화 계층 + Java 메모리와의 인터페이스 (저장/로드용) |
80+
| NVectMask / PVectMask | 실제 연산 시 하드웨어 네이티브 형식 |
7781

7882
### NVectMask vs PVectMask
7983

0 commit comments

Comments
 (0)