윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT

AMD 불도저 코어의 FPU는 FgMT로 작동

- 인터넷에서 불도저 코어의 FPU는 FgMT로 작동된다는 글을 봤다.

- 스레드 처리 기법 중 하나가 FgMT(Fine-grained multithreading)다. 가장 좋은 기법은 SMT(Simultaneous multithreading)나 SpMT 인데, 이걸 사용하지 않은게 좀 아쉽다.

- 불도저는 1개의 모듈에 2개의 정수 연산 유닛과 1개의 부동소수점유닛(FPU)이 있다. 정수연산 도중 부동소수점 연산 명령이 들어오면 부동소수점 유닛을 사용해 연산해야 하는데, FgMT를 사용한 경우 (특별한 스케줄링을 하지 않으면) 단일 스레드의 부동소수점 연산능력이 반으로 줄어든다.

- FgMT는 FPU를 하나의 정수연산유닛에서 2번 연속 점유할 수 없다는 의미. 1번정수유닛이 FPU를 점유하고 부동소수점연산을 하다가 일정시간이 지나면 2번 정수유닛에 FPU를 넘겨야 한다. 2번 정수유닛이 FP연산을 하던지 말던지 상관 없다. 무조건 점유권을 넘기고 만약 2번유닛이 사용하지 않는다면 FPU는 유휴상태가 된다. 싱글 스레드에서는 비효율적인 셈이다.

- 이 현상을 해결하기 CPU가 FgMT를 사용한 경우 스케줄러를 바꾼다. 쉽게 말해 단일 스레드만 부동산유닛을 사용하는 경우에는, 컨텍스트 스위치와 동시에 사용하는 정수유닛을 바꾸면 된다. 배럴 프로세싱이라고 한다.

※ [부동소수점연산을 하는 프로세스 P1 abcde]과 [정수연산만 하는 프로세스 P2 12345]의 경우, 쓰레드 처리기 T1, T2 가 있는 경우에 대해

         123456789 (시간)
FgMT-T1: a b c d e
FgMT-T2: 12345

SMT-T1:  abcde
SMT-T2:  12345

∴ FgMT를 사용하면 부동소수점 연산시 2배의 시간이 소모된다.

※ FgMT 기술을 사용한 CPU에서 배럴(Barrel) 프로세스 스케줄러를 적용한 경우

FgMT-T1: a2c4e
FgMT-T2: 1b3d5

∴ FgMT를 사용해도 OS의 스케줄러를 조절하면 SMT와 같은 효과를 가진다. FgMT를 사용했기 때문에 싱글스레드에서 SMT보다 성능이 나쁘다는건 결코 아니다.

- 문제는 윈도에서는 아직 이런식의 스케줄러가 구현되지 않았다고 한다. 모듈을 사용한 불도저를 정확히 인식해야 이런식의 스케줄링이 가능하다. 이는 윈도8부터 구현된다라고. AMD에서 괜히 윈도8 얘기가 나온게 아닌듯.