32 비트 연산 또는 64 비트 연산 (32 비트 플래그 또는 64 비트 플래그를 마스킹하는 것과 같은)은 64 비트 시스템에서 더 저렴합니다. ?32 비트 연산 대 64 비트 컴퓨터/OS에서의 64 비트 연산
답변
아키텍처를 지정하지 않으므로 작업 및 프로세서 아키텍처에 따라 일반적인 대답 만 제안 할 수 있습니다. CPU 레지스터에 데이터를 저장하면 원래 32 비트인지 64 비트인지에 관계없이 대부분의 작업에 동일한 시간이 소요됩니다.
그러나 데이터가 레지스터에 들어가는 방법에 따라 일부 아키텍처에서 약간의 차이가있을 수 있습니다.
가져 오기 데이터를 가져 오는 것보다을 빠를 수있다 "기본 크기"값을 가져 오기
: 여기에 몇 가지 상황은 "기본"값이 일부 하드웨어에 더 작은 값보다 빠를 수 있습니다 어디 더 작은 값. 즉, 프로세서는 64 비트를 가져 오지 않고 32 비트를 마스크/이동하여 32 비트 값을 "로드"해야 할 수 있습니다. 이 마스킹/시프 팅은 64 비트 값에서 작업 할 때 필요하지 않으므로 더 빨리로드 될 수 있습니다. (이는 두 배의 큰 것이로드하는 데 2 배의 시간이 걸릴 수 있다는 직관적 인 아이디어와 상반됩니다.)
또는 버스가 절반 폭의 페치를 처리 할 수있는 경우 64 비트 값과 동시에 32 비트가로드 될 수 있습니다.
더 많은 것을 혼동하면 CPU 캐시가 결과를 변경할 수도 있습니다. 일반적으로 메모리에서 하나의 값을 읽으면 여러 메모리 위치의 "라인"이 캐시로 읽혀 RAM에서 전체 페치를 요구하는 대신 고속 캐시 메모리에서 후속 읽기를 제공 할 수 있습니다. 32 비트 값을 사용하면 순차적으로 많은 값을 액세스하는 경우 캐시 값이 두 배가되므로 캐시 미스가 적어 지므로 더 빨리 작동합니다.
계산
프로세서 하드웨어는 것을 늦출 수도 따라서 그래서 더 많은 문제를 야기 할 수있다 (32) 비트를 사용하여 값을 계산하는 단계, 64 비트 값을 처리하기위한 최적화된다. 예 : double (64 비트) 값을 "자연적으로"처리 할 수 있지만 처리하기 전에 float (32 비트) 값을 double로 변환 한 다음 나중에 결과를 float로 다시 변환해야합니다.
또는 32 비트 및 64 비트 경로가 CPU를 통과하거나 CPU가 명령의 전체 실행 시간에 영향을 미치지 않는 방식으로 필요한 변환을 수행 할 수 있습니다. 그들은 동일한 속도로 계산 될 수있다.
이는 64 비트 연산이 것, 복잡한 작업을 (부동 소수점)에 영향을하지만 물론 간단한 작전 (AND, OR, 등)주의와
일반적으로 64 비트 또는 32 비트 연산의 비용은 같습니다. 32 비트 연산은 컴파일러가 64 비트 레지스터의 상위 32 비트가 지워지는지 (또는 부호 확장 된) 보장해야하는지에 따라 추가 명령을 내릴 수 있지만 일반적으로 연산은 거의 비용이 들지 않습니다.
인스트럭션 인코딩에 차이가있어 다른 것보다 많은 공간을 차지할 수는 있지만 이점은 여러 가지 요소에 따라 달라질 수 있습니다.
다릅니다 - 플래그를 마스킹하면 일반적으로 데이터가 레지스터에 저장되면 신속하게 (~ 1주기) 실행되는 AND 명령이 사용됩니다. 메모리에서 64 비트 데이터를로드하는 것은 일반적으로 32 비트 데이터를로드하는 것보다 느리지 만 32 개 이상의 플래그를 사용하는 경우 32 비트 이상의 데이터를로드해야하며 하나의 마스크를 처리해야합니다 사이클은 2 개 또는 3 개의 명령어로 속도를 향상시킵니다. 이 중 하나가 전반적인 속도에 차이를 발생시키는 지 여부는 일반적으로 주변 명령에 따라 달라집니다. 예를 들어 데이터가 이미 캐시에있는 경우 메모리에서 데이터를로드하지 않아도됩니다.
즉 일반화하기가 어렵습니다. 특정 코드 시퀀스 (하나의 명령어뿐만 아니라 전체 시퀀스)를보고 말하면됩니다. 그 시퀀스의 결과는 처음에는 거의 동일하게 보이는 다른 서열에 대해 많은 것을 의미합니다.
- 1. SHGetFolderPath() 32 비트 대 64 비트
- 2. 64 비트 대 32 비트 Windows 결정
- 3. 32 비트 64 비트 호환
- 4. 32 비트/64 비트 OS?
- 5. 32 대 64 비트 GC
- 6. Java의 비트 연산 클래스
- 7. 비트 연산
- 8. Javascript에서 48 비트 비트 연산?
- 9. 32 비트 시스템에서 64 비트 정수의 비트 연산 사용 (php_gpm 확장 없음)
- 10. 32 비트 윈도우 아래의 64 비트 레지스터
- 11. 32 비트 및 64 비트 ASP.NET 배포
- 12. 64 비트 어셈블리의 32 비트 명령어들
- 13. 32 비트/64 비트 시스템에 관한 질문
- 14. Office의 32 비트 DLL 64 비트
- 15. 64 비트 Weblogic 서버의 32 비트 JDK
- 16. * .WAR (64 비트 x 32 비트) 생성
- 17. 64 비트 Solaris에서 32 비트 포인터로 컴파일
- 18. 32 비트 64 비트 참조 라이브러리
- 19. SharePoint 64 비트 또는 32 비트
- 20. 64 비트 Windows 2008의 32 비트 cluster.exe
- 21. 32 비트 Windows XP 64 비트 VM
- 22. 32 비트 dll에서 64 비트 dll로 변환
- 23. 포트란 : 32 비트/64 비트 성능 이식성
- 24. 32 비트 라이브러리를 64 비트 프로그램에 연결
- 25. 64 비트 OS/32 비트 프로세스
- 26. 32 비트 및 64 비트 CPU/OS
- 27. 64 비트 파이썬은 32 비트 Windows
- 28. 64 비트 컴퓨터에서 32 비트 DLL 사용
- 29. C 비트 연산 질문
- 30. Perl의 비트 연산
, 문제 될 가능성이 있습니다 두 배나 많은 양의 데이터로 작동하고 있습니까? – tloflin
@tloflin - 확실하지만, 질문에 'unsigned long long x | = 0x10ULL' 대'unsigned long x | = 0x10UL'과 같은 연산이 있는지 생각하고 있다고 생각했습니다. 일반적으로 성능면에서 걱정하지 않아야한다고 생각합니다. 데이터 요구 사항에 대해 걱정해야합니다. 성과가 어떤 종류의 문제로 알려져 있지 않은 한. –