2008-08-18 13 views
10

.NET은 응용 프로그램이 실행되기 직전에 실행중인 아키텍처로 컴파일되었지만 JIT 컴파일러는 64 비트 아키텍처를 위해 최적화되어 있습니다.64bit .NET 성능 튜닝

64bit system에서 실행되는 앱을 프로그래밍 할 때 수행해야 할 사항이 있습니까? (예 : Int64를 사용하면 성능이 향상되고 JIT 컴파일러는 32 비트 시스템에서 Int64를 자동으로 작동하게됩니까?)

답변

14

64bit JIT is different은 32 비트 용이기 때문에 출력에 약간의 차이가있을 것으로 예상됩니다.하지만 64 비트로 전환하지는 않을 것이고 CPU에서 많은 속도를 기대할 수는 없습니다. 64 비트로 전환하여

앱에서 많은 메모리를 사용하고 PC에 충분한 메모리가 있으면 성능이 크게 향상됩니다. 32 비트 .NET 응용 프로그램은 1.6GB의 메모리를 사용할 때 메모리 예외를 버리는 경향이 있지만 그 전에는 paging으로 인해 디스크가 스 래시되기 시작합니다. 따라서 I/O 바인딩이 끝납니다.

기본적으로 병목 현상이 CPU 인 경우 64 비트가 도움이되지 않습니다. 병목 상태가 메모리라면 큰 개선이 있어야합니다.

는 INT64 성능을 향상 사용하고 JIT 컴파일러는 자동으로

INT64 이미 모두 32 비트 및 64 비트 시스템에서 작동하는 32 비트 시스템에서 INT64 작업을 할 것입니다,하지만 64 비트에 빠른 실행 수 있습니다. 따라서 Int64를 사용하여 대부분 숫자를 처리하는 경우 64 비트 시스템에서 실행하면 도움이됩니다.

가장 중요한 것은 실적에 measure입니다.

0

성능 병목 현상은 아키텍처가 32 비트인지 또는 64 비트인지에 관계없이 동일합니다. 성능 문제는 차선책 알고리즘의 결과입니다. — 32 비트와 64 비트 유형 중 하나를 선택해도 성능에 큰 영향을 미치지 않습니다.

가장 중요하게는 측정하기 전에 성능을 향상시키지 마십시오. 특히 성능 병목 현상이 어디에서 발생하는지 확인하기 위해 코드를 프로파일해야합니다.

9

This은 64 비트 JIT에서 작업 한 사람들 중 한 명이이 주제에 대한 좋은 기사입니다. 기본적으로 64 비트가 제공 할 수있는 주소 공간이 필요하거나 64 비트 수학을 수행해야하는 경우가 아니면 성능이 저하 될 수 있습니다. 포인터가 클수록 캐시는 효과적으로 반감됩니다 (예 :).

6

나는 64 비트가 훨씬 느리다는 것을 알아 챘다.

위에서 언급 한 것처럼 64 비트 JIT 컴파일러는 x86 JIT 컴파일러와 다르게 동작합니다. x86 컴파일러는 x64가 아닌 일부 최적화를 이용합니다.

예를 들어 .NET 3.5에서 32 비트 JIT는 구조체를 인수로 사용하여 인라인 함수 호출을 수행하지만 64 비트 JIT는 그렇지 않습니다.나는 86를 보았다 생산 코드에서

가 64이

3

가 요약하면 (다른 변화) 구축보다 최대 20 % 빠른 실행 구축,

  1. 당신은 필요한 경우에만 64 비트를 사용 여분의 기억과 주위에 방법이 없습니다.
  2. 예를 들면 다음과 같습니다. 과학 응용 프로그램 및 증가 된 수학 정밀도가 필요합니다.

다른 모든 측면에서는 오늘 현재 .NET의 64 비트 컴파일러가 한 단계 아래에 있습니다.

.NET 컴파일러에서 수행되는 성능 최적화는 큰 문제입니다.