2011-01-04 2 views
7

종종 this과 같은 pprogram이 표시됩니다. 여기에서 Int64은 32 비트 플랫폼에서 절대 성능 저하 요인입니다. 내 질문은 지금 :Int32 및 Int64에서 어떤 성능을 기대할 수 있습니까?

내 작업 (내 경우 RNG)에 특정 단어 길이가 필요하면 Int64이 64 비트 플랫폼에서 효율적입니까? 아니면 여전히 C 호출을 사용합니까? Int64Int으로 변환하는 것이 얼마나 효율적입니까? 여기에 64 비트 성능에

+0

첫 번째 시도로'Integer'를 사용하는 것이 좋습니다. – Gabe

+0

Xorshift를 구현할 때 고정 된 단어 크기가 필요하므로 Integer는 선택의 여지가 없습니다. – fuz

+4

'Int32'와'Int64' 중 어떤 것이 당신의 RNG 알고리즘에 더 잘 어울리는지 사용하겠습니다. 나중에 쉽게 테스트 할 수 있도록 유형 동의 n을 작성하십시오. 또한 Int는 Int32와 같지 않습니다 (Haskell 사양은 Int가 적어도 31 비트 만 보장합니다). –

답변

2

(64 비트 시스템) Int64 해야합니다.

크립토 또는 임의 번호 생성을 수행하는 경우 반드시은 알고리즘이 사용하는 데이터 유형을 사용하고 서명이 있는지 조심해야합니다. 그렇게하지 않으면 잘못된 결과가 나옵니다. 이는 암호화가 안전하지 않거나 임의 번호 생성기가 실제로 무작위가 아니라는 것을 의미합니다 (RNG는 어렵고 많은 것은 무작위로 보이지만 그렇지 않은 경우).

다른 유형의 작업의 경우 Integral type-class를 사용하여 프로그램을 다형성으로 만들거나 더 좋게 만들 수있는 곳이면 어디에서나 Integer를 사용하십시오. 그런 다음 프로그램 속도가 느리다고 생각하면 속도를 내고 자 할 때 집중해야 할 위치를 결정해야합니다. Integer에서 Int로 변경하는 Integral type-class를 사용하면 쉽습니다. 하스켈은 오버 헤드를 피하기 위해 다형성을 사용하는 (대부분의) 코드를 전문화 할만큼 똑똑해야합니다.

1

재미있는 기사 : 기사 상태로

Isn’t my code going to be faster on 64-bit???

는 큰 병목 현상은 캐시와 메모리 I/O의 프로세서가 아닙니다.

+2

첫째로, 나의 목적을 위해, 나는 다만 나가 원하는 단일 번호가있다 조작, 그래서 메모리 액세스는 아무런 문제가 없어야합니다. 진짜 문제는 GHC가 항상 명확하지는 않은 C 호출보다 많은 것을 수행하는 것으로 알려져 있다는 것입니다. – fuz

+0

질문은 실제로 하스켈에 특정한 것으로 보입니다. –

관련 문제