티스토리 뷰

Metal

[Metal] Data Types - Scalar Data Types

Hani_Levenshtein 2022. 2. 18. 17:00

Metal은 아래 표에 있는 스칼라 데이터 타입을 지원하는데

double, long long 등의 타입은 지원하지 않습니다. 🥺

 

 

 

Metal은 스칼라 데이터 타입에 사용할 수 있는 몇 가지 리터럴 접미사를 제공합니다.

 

F 단정밀도 부동 소수점을 지정하기 위한 리터럴

H 반정밀도 부동 소수점을 지정하기 위한 리터럴

U 부호가 없는 정수를 위한 리터럴

L 부호가 있는 long 정수를 위한 리터럴

 

각 리터럴 접미사는 대소문자를 구별하지 않아요. ☺️

 

여기서 음? 하는 포인트

 

단정밀도 + 반정밀도 + 부동 소수점.... 🥺

이를 이해하기 위해 컴퓨터가 실수를 표현하는 방식을 알아야 합니다.

 

 

 

사람은 0.75를 그대로 받아들일 수 있지만

컴퓨터는 0.75를 2진수로 0.11로 표현합니다.

 

그런데 0.3같은 경우는 2진수로 나타내기엔 0.01001......

즉 컴퓨터는 정확히 표현할 수 없는 실수를 표현해야 하는 상황이 발생합니다.

 

수를 나타내기 위한 bit는 한정되어 있기 때문에

어쩔 수 없이 소수점 뒷부분을 톡 잘라서 수를 근사치로 표현하게 되는데

정수 부분을 위한 bit, 소수 부분을 위한 bit, 부호를 위한 bit가 모두 고려되어야 해요.

 

여기서 소수점을 어디에 찍어줄지 결정하는 방식에 따라

고정 소수점과 부동 소수점 방식으로 나뉩니다.

 

고정 소수점으로 표현한다면

일정 크기 이상의 수를 표현하지 못하고

일정 수준 이상의 '정밀'한 숫자를 표현할 수 없게 됩니다.

 

이 문제를 해결하기 위해 부동 소수점 방식이 널리 쓰이는데

여기서 소수점이 어디에 찍히는지 구하는 과정은 생략하겠습니다. 🙏

 

암튼 부동 소수점 방식의 목적은 수를 유효 숫자와 지수 부분으로 나눠서 표현하는 거예요.

대충 표현하면 (-1)^s * (1.m)* x^n   ..?

 

32bit로 표현한다 치면 부호 1bit(s) + 지수 8bit(n) + 가수 23bit(m) 로 나타낼 수 있는 겁니당.

지수로 표현하기 때문에 표현할 수 있는 수의 폭이 완전 커져요 😎

 

단정밀도는 32비트가 기준이고

반정밀도는 16비트가 기준입니다.

 

아항 이래서 단정밀도 F가 float의 32비트고 반정밀도 H가 half의 16비트구낭

 

 

 

 

흠흠.. 스칼라 데이터 타입의 리터럴에 대하여 알아봤습니다.

 

 

 

 

다음은 스칼라 데이터 타입에 대한 Alignment와 Size가 주어진 표입니다.

똑같아 보이는데..

Alignment와 Size의 차이는 무엇이고, 항상 같은 값을 갖는지 궁금해지네요. 🧐

 

 

 

 

모든 객체는 Alignment와 Size를 가지고 있습니다.

 

Alignment는 객체의 주소를 2의 거듭제곱 수로 나눌 때

나눠 떨어지는 수 중 가장 큰 수를 나타냅니다.

 

half 스칼라 데이터 타입을 예로 들면 

2 bytes를 차지하니까 2의 0 제곱 혹은 2의 1 제곱으로 나눌 수 있는데

그중 더 큰 2의 1 제곱이 Alignment가 되는 거예요.

(half 뿐 아니라 다른 원시 자료형도 이런 이유로 Size와 Alignment가 동일하게 됩니다.)

 

더 큰 것을 기준으로 하는 이유는 CPU가 메모리의 데이터를 읽고 쓸 때

1byte씩 접근하는 것보단 크게 크게 접근하는 편이 더 빠르기 때문입니다.

 

(그렇다고 아예 2의 4 제곱으로 Alignment하지 않는 이유는 원하지 않는 데이터가 결합되기 때문이에요. 🥺)

 

데이터의 Alignment가 중요한 이유는

다음과 같이 misalign된 데이터를 읽기 위해 작업을 추가적으로 해야 하기 때문입니다.

 

 

 

스칼라 데이터 타입은 원시 자료형이기 때문에 Size와 Alignment가 동일하지만

구조체나 클래스 등의 참조 자료형은 Size와 Alignment가 일치하지 않을 수도 있게 됩니다. (다음 챕터에 바로 나옴 ㅎ)

 

 

 

 

 

Metal 공부하려 했는데 뭔가 컴퓨터에 대해서 공부하는 기분..

 

오히려 조아

 


References

http://www.songho.ca/misc/alignment/dataalign.html

 

'Metal' 카테고리의 다른 글

[Metal] Data Types - SIMD-group Matrix Data Types  (0) 2022.02.18
댓글