아꿈사 스터디에서 지난주까지 공부했던 교재.

전부터 막연하게 하드웨어에 대해서 공부를 하고 싶다는 생각만 있었는데 이번에 기회가 되어 즐거운 마음으로 공부했다. 하드웨어는 워낙에 문외한 이었던 지라 ISA, CISC, RISC, SIMD, SSE, MMX, AVX 같은 단어들도 무슨 말인지 정확하게 모르고 있던 참이었는데 이 책이 개념을 정리하는데 아주 큰 도움이 되었다. 하이퍼 스레딩과 듀얼코어가 어떤 차이점을 가지는 지도 이번에 좀 더 명확하게 정리하게 됐다. 프로그램 짜다가 외부 오픈소스 툴 같은거 다운받을 때 AMD64라고 적혀있으면 이게 인텔에서 안 돌아간다는 뜻인가 싶어서 헷갈렸는데… 칩 제조사와 호환 여부는 상관 없는 거였구나 ㅋㅋㅋ

작업하다가 dmp 파일을 열어볼 때 가끔씩 어셈블리 코드를 보게 되는데, 그럴 때마다 울렁증이 있어서(…) 지레 겁을 많이 냈는데 이 책 공부하고 나니 ISA 명령어 울렁증도 사라졌다. x86 ISA 명령어들은 직접 코딩 할 수준만큼 익숙해 지려면 꽤나 어렵겠지만 사실 주욱 읽고 흐름을 이해할 정도면 그렇게 어렵지도 않은데 괜히 겁을 먹었다. 연이어서 중상급 디버깅 책을 하나 읽어둬야 되겠다는 생각이 든다.

책 얘기 하다가 갑자기 딴 이야기긴 하지만… 오늘은 어셈블리 울렁증을 벗어낸 기념으로 평소에 궁금해 하던 내용을 어셈블 코드로 한 번 확인해 봤다. 정수형 증가 연산자의 전위/후위 방식이 컴파일 했을 때 속도차가 어떻게 나는지. 후위 연산자의 경우는 이전의 값을 유지하고 나중에 값을 갱신하기 위해 별도의 공간이 필요하고 어쩌고 저쩌고… 이러쿵 저러쿵 해서 더 느리다는데, 정확하게 어떤 차이가 있는 건지 어셈블 코드를 확인해봤다.

   1:  
   2:     volatile int i = 0;
   3: 00893EA5  mov         dword ptr [ebp-4Ch],0  
   4:  
   5:     int a = ++i;
   6: 00893EAC  mov         eax,dword ptr [ebp-4Ch]  
   7: 00893EAF  add         eax,1  
   8: 00893EB2  mov         dword ptr [ebp-4Ch],eax  
   9: 00893EB5  mov         ecx,dword ptr [ebp-4Ch]  
  10: 00893EB8  mov         dword ptr [ebp-58h],ecx  
  11:  
  12:     int b = i++;
  13: 00893EBB  mov         eax,dword ptr [ebp-4Ch]  
  14: 00893EBE  mov         dword ptr [ebp-64h],eax  
  15: 00893EC1  mov         ecx,dword ptr [ebp-4Ch]  
  16: 00893EC4  add         ecx,1  
  17: 00893EC7  mov         dword ptr [ebp-4Ch],ecx  

이럴수가. 확인해보니 작업 순서만 다르고 내용은 똑같다. 후위 연산자가 뭔가 이러쿵 저러쿵 해서 더 느리다고 했는데… 뭐지? 그래서 인터넷 검색도 해보고 More Effective C++을 다시 한 번 뒤져봤다. (Chapter 2, 항목 6). 이게 primitive type에서는 아무 차이도 안 나는구나. 직접 정의한 클래스의 객체일 경우 후위 연산자가 더 복잡하게 구현되므로 주의하라.. 이런 거였구나. 이렇게 또 한번 잘못된 기억을 align 하고 넘어간다.

SSE와 GPGPU도 공부해 보고 싶다는 생각이 들고, __assume, __restrict, volatile 같은 키워드 들도 이번 기회에 재정리 하게 되었다. (이 녀석들은 별도로 정리해 블로깅할 예정… 이지만 어디까지나 예정일 뿐.) 병렬 프로그래밍이 중요해 진다는 이야기는 요즘 숱하게 많이 세상이니 따분한 이야기는 생략하고 주위 개발자들에게 모두 이 책 1독을 추천해 주고 싶다.

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요


[아꿈사/110528] 멀티코어cpu이야기 5,6장
View more presentations from sung ki choi
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요




Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요