문제

나는 어떤 정수 또는 플로트 유형이 가장 빠른지 궁금했습니다 ..
나는 바이트가 정수보다 빠르다고 생각하고있었습니다.
어떤 사람들은 나에게 말했다 .. 어떤 경우에는 정수가 바이트보다 빠르다.

두 번째 질문 :
GPU는 세계 지배로가는 길에 ..
그래서 나는 나 자신에게 물었다 : 더블은 정수보다 "더 빠른"것입니다 .. FPU 때문에
그렇다면 전문가는 어디에 있습니까? :)

도움이 되었습니까?

해결책

산술을 수행하려면 시계 사이클 이상을 생각해야합니다. 두 개의 int를 추가하는 데는이 많은 사이클이 걸리면 두 개의 복식을 추가하는 데 많은 사이클이 필요하다고 말할 수 있습니다. 그러나 관련이 없을 수도 있습니다. 모든 데이터가 동시에 캐시에 맞는 경우 타이밍 개별 작업이 의미가 있습니다. 그러나 그렇지 않은 경우 캐시 미스로 인한 추가 시간은 개별 작업의 차이를 지배합니다. 때로는 작은 데이터 유형으로 작업하는 것이 더 빠르기 때문에 캐시에서 무언가를 가져 오거나 디스크로 이동 해야하는 것 사이의 차이가 있기 때문에 더 빠릅니다.

요즘 컴퓨터는 대부분의 시간을 산술을 수행하지 않고 숫자 크 런칭 애플리케이션에서도 데이터를 이동합니다. 전자 대 후자의 비율이 증가하고있다. 예를 들어 반바지와 복식을 곱하는 데 필요한 시간을 간단히 비교할 수는 없습니다. 두 가지 버전의 프로그램이 주어지면 작은 문제에서 하나의 버전이 더 빨리 실행되며 다른 버전은 더 큰 프로그램에서 더 빠르게 실행됩니다.

다른 팁

나는 바이트가 정수보다 빠르다고 생각하고있었습니다.

내가 경험 한 것 : a short AN을 사용하는 동안 성능 히트를 주었다 int 괜찮 았어요. 이는 반바지가 일반적으로 아키텍처에 존재하지 않기 때문입니다. 편의 유형입니다. 프로세서는 실제로 단어 크기로 작동합니다. 제 경우에는 크기가 int의 단어 크기였습니다. 따라서 짧게 액세스 할 때 int 값을 먼저 포장하고 작업 한 다음 포장을 풀고 결과를 짧게 만들어야했습니다. 이 모든 것이 성능을 기록했습니다. 따라서 짧은 것이 반드시 더 나은 것은 아닙니다.

아키텍처에서 데이터베이트가 없습니다. 플로팅 포인트 프로세서는 계산을 수행 할 때 플로트와 두 배를 동일하게 처리합니다. 그들은 모두 80 비트 정밀도로 평가되므로 같은 시간이 걸립니다. FPU 레지스터에 값을로드하고 저장하면 차이가 생길 수 있습니다. Double은 RAM에서 공간의 두 배를 차지하므로 캐시 미스로 인해 느리게 느릴 수 있습니다. 무작위로 색인하는 경향이있는 큰 배열이있는 경우 눈에.니다.

CPU 수준에는 바이트와 32 비트 또는 64 비트 인 단어 만 없습니다. 산술 단위는 일반적으로 단어 크기의 숫자 (또는 부동 소수점의 경우)를 다루기 위해 하드링됩니다.

따라서 산술 작업과 관련하여 단어보다 작은 유형을 사용하는 데있어 속도 이점이 없으며, CPU가 기본적으로 가지고 있지 않은 유형을 시뮬레이션하기 위해 추가 작업을 수행해야하기 때문에 속도 페널티가있을 수 있습니다. 바이트에서 메모리에서 먼저 단어를 읽고 수정 한 다음 다시 작성해야합니다. 이를 피하기 위해 대부분의 컴파일러는 실제로 모든 작은 변수에 대해 전체 메모리 단어를 사용하므로 부울 변수조차도 32 또는 64 비트를 차지합니다.

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

숫자 유형의 바이트 길이는 언어와 때로는 사용하는 플랫폼에 따라 다릅니다. 예를 들어 Java에서 int와 float는 4 바이트를 사용하므로 처리 시간이 동일해야합니다. 더 긴 유형이 더 빨리 처리되었다는 것은 놀라운 일입니다. 그 증거가 있다면 그것에 대해 읽고 싶습니다.

어느 것이 더 빠르고, 정수 또는 바이트인지, 둘 다 레지스터에 맞는 한, 동일하게 작동하거나 적어도 측정 가능한 차이없이 작동합니다.

Integer vs.Double : GPU 일 수 있습니다. GPU는 두 배의 CPU와 더 빠른 산술을 수행 할 수 있지만, 정수 산술은 단지 레지스터 산술이기 때문에 두 배의 산술이 더 빨리 정수를 할 수 있습니다.

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

글쎄, 벡터 최적화를하지 않는 한 실제 성능에 맞지 않고 레지스터 (32/64 비트)만큼 큰 정수를 사용할 수 있습니다.

부동 소수점 번호는 약간 다릅니다. CPU는 복식에 최적화되지만 GPU는 일반적으로 플로트와 함께 작동합니다.

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