2010-04-06 5 views

답변

3

아키텍처를 지정하지 않으므로 작업 및 프로세서 아키텍처에 따라 일반적인 대답 만 제안 할 수 있습니다. 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, 등)주의와

2

일반적으로 64 비트 또는 32 비트 연산의 비용은 같습니다. 32 비트 연산은 컴파일러가 64 비트 레지스터의 상위 32 비트가 지워지는지 (또는 부호 확장 된) 보장해야하는지에 따라 추가 명령을 내릴 수 있지만 일반적으로 연산은 거의 비용이 들지 않습니다.

인스트럭션 인코딩에 차이가있어 다른 것보다 많은 공간을 차지할 수는 있지만 이점은 여러 가지 요소에 따라 달라질 수 있습니다.

+2

, 문제 될 가능성이 있습니다 두 배나 많은 양의 데이터로 작동하고 있습니까? – tloflin

+0

@tloflin - 확실하지만, 질문에 'unsigned long long x | = 0x10ULL' 대'unsigned long x | = 0x10UL'과 같은 연산이 있는지 생각하고 있다고 생각했습니다. 일반적으로 성능면에서 걱정하지 않아야한다고 생각합니다. 데이터 요구 사항에 대해 걱정해야합니다. 성과가 어떤 종류의 문제로 알려져 있지 않은 한. –

2

다릅니다 - 플래그를 마스킹하면 일반적으로 데이터가 레지스터에 저장되면 신속하게 (~ 1주기) 실행되는 AND 명령이 사용됩니다. 메모리에서 64 비트 데이터를로드하는 것은 일반적으로 32 비트 데이터를로드하는 것보다 느리지 만 32 개 이상의 플래그를 사용하는 경우 32 비트 이상의 데이터를로드해야하며 하나의 마스크를 처리해야합니다 사이클은 2 개 또는 3 개의 명령어로 속도를 향상시킵니다. 이 중 하나가 전반적인 속도에 차이를 발생시키는 지 여부는 일반적으로 주변 명령에 따라 달라집니다. 예를 들어 데이터가 이미 캐시에있는 경우 메모리에서 데이터를로드하지 않아도됩니다.

즉 일반화하기가 어렵습니다. 특정 코드 시퀀스 (하나의 명령어뿐만 아니라 전체 시퀀스)를보고 말하면됩니다. 그 시퀀스의 결과는 처음에는 거의 동일하게 보이는 다른 서열에 대해 많은 것을 의미합니다.