2009-02-27 6 views
4

어떤 정수 또는 부동 유형이 가장 빠른지 궁금합니다.
더 작은 범위가 있기 때문에 바이트가 정수보다 빠르다고 생각했습니다.
일부 사람들은 어떤 경우 정수가 바이트보다 빠릅니다라고 나에게 이야기했습니다.수치 최적화

초 질문 :
GPU는 세계 지배에 그의 방법에 ..
그래서 나는 나 자신에게 물었다 다음 FPU의
그래서 전문가가 어디에 때문에 두 번에 .. 정수보다 "더 빨리"수 ? :)

답변

6

산술 연산을 수행하는 데 클록주기 이상을 고려해야합니다. 두 개의 정수를 더하는 것은이 많은 사이클을 필요로한다고 말할 수 있습니다. 두 개의 복식을 추가하면이 많은 사이클이 걸릴 수 있지만 그와 관련이 없을 수 있습니다. 모든 데이터가 동시에 캐시에 저장되면 개별 작업 타이밍을 조정하는 것이 좋습니다. 그러나 그렇지 않은 경우 캐시 미스로 인해 필요한 추가 시간이 개별 작업의 차이를 지배합니다.때로는 작은 데이터 유형으로 작업하는 것이 더 빠릅니다. 왜냐하면 캐시에서 무언가를 가져 오지 않거나 디스크로 이동하지 않아도된다는 차이점이 있기 때문입니다.

요즘 컴퓨터는 숫자 계산 응용 프로그램에서도 계산을하지 않고 데이터를 이동하는 데 대부분의 시간을 소비합니다. 그리고 후자에 대한 전자의 비율이 증가하고 있습니다. 예를 들어 단식과 복식을 곱하는 데 필요한 시간을 단순히 비교할 수는 없습니다. 프로그램의 두 버전이 주어지면 작은 종류의 문제에서는 한 가지 버전이 더 빨리 실행되고 큰 프로그램에서는 다른 버전이 더 빨리 실행된다는 것을 알 수 있습니다.이 모든 것은 메모리 종류의 상대적 효율성 때문입니다.

0

숫자 유형의 바이트 길이는 언어 및 때로는 사용중인 플랫폼에 따라 다릅니다. 예를 들어 java에서 int와 float는 모두 4 바이트를 사용하므로 처리 시간은 동일해야합니다. 긴 타입이 더 빨리 처리 되더라도 놀랄 것입니다. 만약 내가 그것에 대해 읽고 싶다는 증거가 있다면.

0

정수, 또는 바이트 중 어느 것이 둘 다 레지스터에 들어 맞는 지, 동일한지 또는 적어도 측정 가능한 차이는 없는지에 대해 설명합니다.

integer 대 double에 대해 : GPU는 일반 CPU보다 두 배 빠른 연산을 더 빨리 수행 할 수 있지만 정수 산술 연산 만 레지스터 arithmetics이므로 double 연산이 더 빠르다는 것은 의심 스럽습니다.

0

루프 최적화 된 스칼라 계산을 사용하여 벡터 계산을 사용하는 것이 가장 큰 최적화입니다. 그런 다음 GPU 또는 CPU의 SSE를 활용하십시오.

0

음, 벡터 최적화를 수행하지 않는 한 실제로 성능이 저하되지 않고 레지스터 (32/64 비트)만큼 큰 정수를 사용할 수 있습니다.

부동 소수점 숫자는 약간 다릅니다. CPU가 double에 최적화되어 있지만 일반적으로 GPU는 부동 소수점을 사용합니다.

4

나는 더 작은 범위를 가지고 있기 때문에 바이트가 정수보다 빠르다고 생각했습니다.

내가 경험 한 것 : short을 사용하면 int을 사용하는 것이 성능에 좋았습니다. 반바지는 일반적으로 아키텍처에 존재하지 않기 때문입니다. 이들은 편의 유형입니다. 프로세서는 실제로 워드 크기로 작동합니다. 필자의 경우 단어 크기는 int의 크기입니다. 그래서 단시간에 접근 할 때 int 값을 먼저 포장하고 그 값으로 포장을 풀고 그 결과를 짧게 얻어야했습니다. 이 모두가 성능에 영향을 미쳤습니다. 따라서 짧을수록 반드시 좋은 것은 아닙니다.

+0

그래, 특히 PowerPC 아키텍처에서 쇼트가 엄청나게 느릴 수 있습니다. – Crashworks

1

아키텍처에 databits가 없음에 따라 다릅니다. 부동 소수점 프로세서는 계산을 수행 할 때 부동 소수점 및 부동 소수점을 동일하게 처리합니다. 둘 다 80 비트 정밀도로 평가되므로 동일한 시간이 소요됩니다. 값을로드하여 FPU 레지스터에 저장하면 차이가 발생할 수 있습니다. Double은 RAM에서 두 배의 공간을 차지하므로 캐시 누락으로 인해 속도가 느려질 수 있습니다. 무작위로 색인을 생성하는 대형 배열이있는 경우 눈에 띄게됩니다.

+0

실제로 float에서 double 및 back으로 변환하는 추가 단계 때문에 float에 시간이 더 걸릴 수 있습니다. –

+0

하지만 여전히 아키텍처가 변환 필요 여부에 따라 다릅니다. 어떤 이들은 개종 할 필요가없는 곳에서 스트리핑을합니다. – lakshmanaraj

1

CPU 수준에서 요즘에는 32 비트 또는 64 비트 인 바이트 만 있습니다. 산술 연산 단위는 일반적으로 워드 크기의 숫자 (또는 부동 소수점의 경우 큰 값)를 처리하기 위해 고정 배선되어 있습니다.

산술 연산과 관련하여 단어보다 작은 유형을 사용할 때 속도가 유리하지 않으며 CPU가 기본적으로 가지고 있지 않은 유형을 시뮬레이트하기 위해 추가 작업을해야하기 때문에 속도가 저하 될 수 있습니다. 예 단일 바이트를 메모리에 쓰려면 먼저 그 단어가 포함 된 단어를 읽고 수정 한 다음 다시 작성해야합니다. 이를 피하기 위해 대부분의 컴파일러는 모든 작은 변수에 대해 전체 메모리를 실제로 사용하므로 부울 변수도 32 비트 또는 64 비트를 차지합니다.

그러나 큰 배열과 같이 많은 양의 데이터가있는 경우 작은 유형을 사용하면 캐시 손실이 적기 때문에 일반적으로 성능이 향상됩니다.