문제

나는 그것을 올바르게 이해하지 못하는지 확실하지 않다 : 64 비트 OS가 같은 시스템에서 32 비트 OS보다 더 빨리 코드를 실행합니까?

우리는 내가있는 곳에 64 비트 OS를 사용하고 있으며 레거시 및 독점 소프트웨어와 관련된 호환성 문제만을 일으키는 것 같습니다. (우리는 우분투 9.04 Jaunty AMD64를 운영하고 있습니다)

도움이 되었습니까?

해결책

이 답변을 x86-32 (IA-32) 대 X86-64 (AMD64)로 제한 할 것입니다.

프로세서 수준에는 몇 가지 장점이 있습니다. 첫째, 가장 분명한 것은 프로세스 당 가상 메모리를 훨씬 더 넓은 범위의 48 비트로 확장하는 것입니다. (메모리가 제공되는 경우 64는 아키텍처에서 허용되지만 필요하지 않습니다.) 응용 프로그램은 사용 가능한 시스템의 메모리를 더 많이 사용할 수있을뿐만 아니라 작동하는 메모리 맵핑 파일과 같은 많은 공간을 열 수 있습니다. 실제 메모리에 연결되지 않은 가상 메모리. 또한 데이터에 대해 4GB 한도를 공유 할 필요가 없기 때문에 해당 OS가 작동 할 공간이 많이 열립니다. 요컨대, 애플리케이션과 OS는 기계의 자원을 더 잘 활용할 수 있습니다.

또한 AMD64 아키텍처는 IA-32의 가장 큰 문제 중 하나를 다루며, 이는 레지스터가 완전히 부족합니다. 실제로 사용 가능한 레지스터를 두 배로 늘리는데, 이는 일부 유형의 코드에서 큰 승리입니다. (실제로 거의 모든 코드에서는 승리이지만 일부 응용 프로그램은 메모리 비용이 64 비트의 증가로 고통 받고 있습니다.)

Windows 측면에서 MS는 많은 역사적 계산 성 문제를 깨뜨릴 수있는 기회로 받아 들였습니다. 구세계에서 깨끗한 휴식은 아니지만 시작입니다. 나는 Linux가 처음부터 같은 문제를 겪고 있다고 생각하지 않으며, 64 비트 이점에 대해 제공 할 관점이 많지 않습니다.

다른 팁

일반적으로 64 비트 운영 체제를 개발하거나 사용하는 것은 느리게 동일한 32 비트 운영 체제보다. 모든 포인터는 갑자기 두 배나 크기 때문에 캐시를 날려 버릴 가능성이 훨씬 높으며 RAM의 데이터를 적게 맞출 수 있습니다. 응용 프로그램이 상당히 느려집니다. 일반적으로 응용 프로그램이 2 ~ 3GB 이상의 데이터를 동시에 해결 해야하는 경우 64 비트 시스템 만 사용합니다. 이것이 Apple이 64 비트 모드에서 무조건적으로 컴파일하는 PowerPC 애플리케이션을 옹호하지 않는 이유입니다. 예 : 캐시 미스와 메모리 부족으로 인한 비용은 64 비트를 사용하는 것이 충분히 높아서 64 비트가 진정으로 이용할 수있을 때만 의미가 있습니다. 64 비트 공간.

그러나 X86 v. AMD64는 (우분투를 논의하기 때문에) 당신이 실제로 묻는 것입니다. 매우 특별한 짐승입니다. AMD64는 모든 포인터를 64 비트로 확장 할뿐만 아니라; X86 아키텍처의 많은 결함을 수정하여 GPR의 수를 두 배로 늘리고 현대 CPU 디자인에 더 친숙한 지침을 단순화하는 등을 단순화합니다. 이것 때문에, AMD64 플랫폼에서만, 당신은 자주 64 비트로 이동하여 상당한 성능 향상을 볼 수 있습니다.

소프트웨어 개발에서 64 비트로 이동하는 것이 합리적 인 다른 영역이 있습니다. 많은 VM을 실행해야합니다. 두 개의 VM을 실행하면 운영 체제의 3GB 메모리 배리어를 지나서 쉽게 날려 버릴 수 있습니다. (PAE 또는 PAGED 주소 확장 기술로 인해 작동 할 것입니다. 인텔은 32 비트 시스템과 64 비트 시스템 사이의 간격을 연결하기 위해 발명했지만 결과는 느리고 개발자로서 작업하는 것이 고통스럽고 고통 스럽습니다. 64 비트 OS로 이동하면 엄청난 이점을 제공 할 수 있습니다.

(주석가가 지적한 것처럼,이 답변은 다소 일반적이며,이 점들 중 일부는 Intel/AMD 칩에는 적용되지 않습니다.)

답은 몇 가지 이유로 다릅니다.

  • 더 큰 지침을 사용하면 더 많은 표현력 (더 다양한 지침 또는 데이터를 직접 인코딩 할 수있는 용량)을 얻게 될 것입니다. 이는 일반적으로 기계를 통해 흐르는 지침 수가 줄어 듭니다. 승리 : SO ++ 64 비트.

  • 그러나 때로는 더 큰 지침 ~할 것 같다 더 복잡 할 수 있기 때문에 더 많은주기를 사용하여 해독하고 실행하십시오. 따라서 가능한 -64 비트.

  • 또한이 지침을 CPU로 전송해야합니다. 64 비트 지침은 32 비트 지침의 두 배나 큰 메모리 및 캐시와의 트래픽을 더 많이 의미합니다. CPU는이 비용을 많이 개선하도록 구성되어 있지만 여기에는 약간의 -64 비트입니다.

  • 더 많은 레지스터는 일반적으로 더 넓은 명령어 세트로 제공되므로 스택 및 메모리와의 데이터 트래픽이 적습니다. 그래서 ++ 64 비트.

  • 그리고 의심 할 여지없이 언급 할 때, 당신은 더 많은 기억을 다룰 수있는 능력이 있습니다.

  • (거의 이것을 잊어 버렸습니다) 기본 "Long"또는 "Int"크기는 아키텍처에 따라 올라갈 수 있습니다. 더 큰 = 더 많은 메모리를 돌아 다니며, 데이터 이동에서 대기 대기가 더 가능하다는 것을 의미합니다. -64 비트 조심하지 않으면.

건축에 따라 다른 많은 우려가 적용될 수 있습니다. 프로세서와 컴파일러 공급 업체가 위의 "-"를 줄이고 "++"를 증가시키기 위해 엉덩이를 작동시키고 있음을 확신 할 수 있습니다.

변환이 필요한이 5GBYTE 데이터베이스가 있습니다. 64 비트 시스템에서는 모든 데이터를 컬렉션에 넣었습니다. 32 비트 시스템에서는로드 및 변환 순서에 대해 생각해야했습니다. 문제는 런타임이 아니라 엔지니어링 시간입니다. 64 비트로 전환하면 몇 주 동안의 개발 시간이 절약됩니다.

호환성 문제 : 그것은 버그가 아니며, 그것은 기능입니다. 깨끗한 소프트웨어를 작성한 사람을 보여줍니다.

64 비트 운영 체제를 사용하면 몇 가지 보안 상급이 있습니다. 무차별 인력에 의한 주소 공간 레이아웃 무작위 화를 우회하는 버퍼 오버 플로우 익스플로이트가있었습니다. 64 비트 OS에는 이러한 종류의 공격이 성공하기에는 너무 많은 주소가 있습니다.

컴파일 프로세스가 메모리 바운드 인 경우 컴파일 속도를 높이고 64 비트 OS를 사용하여 시스템에서 사용할 수있는 메모리의 양을 늘립니다.

나는 그것이 약간 느리게 될 것으로 기대하고, 나는 FC10에 대한 경험을 가졌다. 실제 이유는 없지만 (포인터) 문제는 확실히 아닙니다. (*)

내 직감은 단순히 최적화되지 않은 드라이버 또는 조정 된 칩셋의 문제라는 것입니다.

또한 NTFS-3G는 64 비트에서 재미 있었지만 32 비트 (동일한 배포판, 동일한 커널 같은 파티션, 일부 상황에서는 "매달린"

(*) 대부분의 컴파일은 CPU 바운드가 아닌 디스크 바운드입니다. 또한 X86_64 아키텍처에는 그 사실을 취소하는 다른 개선이 있습니다 (더 나은 그림, 더 많은 Regs, SSE2 기본값, 686 CMOV 기본값). 앱이 무작위로 작은 블록을 움직이는 것 이상을 수행하지 않는 한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top