32bit cpu VS 64bit cpu
글쓴이: ssehoony / 작성시간: 수, 2007/03/14 - 11:42오전
프로그래머 입장에서 32비트로 플그램 개발하는 것과 64비트로 플그램을 개발하는 것의 차이가 궁금하네요.
제가 알고 있는 이론을 바탕으로 잠작해 보면
32비트시퓨에서나 64비트시퓨에서 32비트 정수 계산을 한다면 같은 성능이 나올 듯 합니다.
더블 같은 타입역시 fpu 가 계산해줄테니 큰 차이가 없을 듯 하고요.
아마 성능이 차이가 난다면 int64 같은 64비트 정수가 아닐까 하는 짐작을 해봅니다.
만약 64비트 시퓨는 레지스터가 64비트 이상으로 구성되어 있다면
컴파일러가 옵티마이징을 할때 32비트 두개의 변수를 64비트 리지스터 하나에 저장하는 옵티마이징 정도는
짐작해 볼 수 있가 있는데요.
위와 같이 프로그래머 입장에서 시퓨간의 차이를 알고 싶습니다.
그리고 자료형이 32비트 이내인 데이터를 프로세싱하는 프로그램 같은 경우 64비트용으로 컴파일해서
작동시켜도 성능상의 이점이 없을 듯 한데, 맞나요?
이런것에 대한 성능 벤치마크 자료가 있다면 알려주시면 감사하겠습니다.
내부 처리 정수가 32비트로 충분한 프로그램을 ILP64 스펙의 64비트 프로그램으로 컴파일 한다면
int형과 long형과 포인터의 사이즈 증가로 인해, 메모리 사용량이 증가하여 1,2차 캐쉬의 hit율도 떨어지고,
메모리 입출력 사이즈도 증가하여 오히려 성능저하가 발생할 수도 있겠다는 생각도 해봅니다.
Forums:
instruction set.
instruction set이 차이가 나지 않을까요?
더 효율적인 instruction이 64bit에 준비되어있다면
같은 일을 더 적은 cpu cycle에 할 수 있을거라고 조심히 생각해봅니다.
------------------------------------------
------------사진은 제가 아님----------------
------------------------------------------
음
시스템 프로그래머가 그에 따른 instruction set 등을 추가하겠지요.
제 생각에는 arm이 thumb명령어를 지원하여 32bit와 16bit를 지원하는 것 처럼
64bit와 32bit 명령어를 둘다 지원할 수 있게 추가할 것 같습니다.
여러가지가 있지만
여러가지가 있지만 64비트로 넘어가면서 레지스터수가 많이 증가하였습니다.
기존에는 함수를 호출할려면 스택에 인자를 푸시하고 호출을 하였지만 64비트에서는
함수호출에 사용되는 레지스터가 마련되어있어서 어느정도 개수의 인자의 경우에는(물론 레지스터 크기만큼의 인자)
레지스터에 푸시가 되어 호출이 되므로 좀더 빠르게 함수 호출이 가능합니다.
대부분 인자로 넘기는 데이터의 경우에는 정수형이나 포인터가 많기 때문에(함수 인자로 넘기는데 클래스 인스턴스를 넘기지는 않죠:) )
많은 성능 향상이 있습니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
음...약간의 차이가
음...약간의 차이가 있지요...64비트 모드일 경우에만 extend register들을 사용가능하거든요 ^^ 그래서 계산이 워낙 많은 프로그램들은 64비트 모드일 때 더 빠릅니다.
그외에 일반적인 프로그램들은 별 차이 없어요. ILP64도 어차피...따로 키워드로 지정할 때나 사용되거든요.
------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/
그렇군요.
일반적으로 메모리 어드레싱 영역이 커지기 때문에 메모리 주소 찾아가는 시간이 아주 미미하게 더 드는 것으로 얘기되나 (그래서 쓸데없이 64비트 기반으로 가지 말라고도 하더군요), 그 보다 더 중요한 것은 메모리 영역이 커지면서 많은 데이터를 메모리 상에서 처리할 수 있도록 프로그래밍이 가능하기 때문에 성능향상을 꽤할 수 있다.. 정도로 얘기가 되지 않을까요 ?
프로세스 하나의 메모리
64bit mode에서는 프로세스 하나가 4G 이상의 메모리를 쓸 수 있습니다.
4G라면 예전에는 "아유 그 메모리를 언제 다 써..." 했지만 요즘 서버 급은 16G 정도는 쉽게 볼 수 있죠. 여기에 DB나 웹서버 같은 걸 돌린다고 쳤을 때 이 메모리를 프로세스가 다 볼 수 있느냐 없느냐는 성능에 상당한 차이를 가져오게 되죠.
반면 일상적으로 사용하는 gcc, vim, shell 같은 프로그램은 아마도 거의 성능 차이가 없을 겁니다. (레지스터 갯수가 늘어난 건 x86_64에 국한된 얘기고 사실 32/64bit를 가르는 일반적 차이는 아니죠.) 오히려 포인터가 8바이트가 되어 메모리 사용량만 늘어날 수도...
댓글 달기