0

성능에 CPU 사양의 영향을받는 방법에 대한 지식이 부족합니다. 나는 다음과 같은 매개 변수를 사용하여 Windows 플랫폼에서 잉여 연산 (DH 키 교환)을 수행하는 응용 프로그램을 실행 해요 :모듈 식 계산 32 비트 대 64 비트 OS

모듈 : 소수 = 4096 비트

발전기 : 2

지수 : 256 비트

응용 프로그램을 2.4GHz 프로세서 및 4G RAM이있는 32 비트 Windows 7에서 실행하면 3-4 초가 소요됩니다. 그러나 64 비트 Windows 7에서 동일한 프로세서 속도와 8G RAM으로 동일한 응용 프로그램을 실행하면 1-2 초가 걸립니다.

이해하기 위해 노력하고있어하지만 잉여 연산 속도가 ARM의 크기 나 CPU 지원에 의해 영향을 받는지 내가 혼란있어 (64 비트 대 32 비트)

답변

2

64 개 비트 CPU가 큰 정수에 훨씬 빠르다 32 비트 CPU보다 연산. 내 경험은 동일한 코드의 요소 2이고 특수 코드의 요소 4입니다.

  • x86을 염두에두고 작성된 코드에는 많은 중간 값이 64 비트 있습니다. 예를 들어, 두 개의 32 비트 정수를 곱하면 64 비트를 얻게되며,이 때 64 비트가 더해지면서 ​​마침내 32 비트 정수로 나뉩니다.

    AMD64 (64 비트) CPU는 x86 (32 비트) CPU에 비해 ​​레지스터가 많으며 그 중 많은 수가 있습니다. 따라서 이러한 중간 값은 단일 레지스터에 들어가고 컴파일러는 두 개의 32 비트 레지스터를 함께 스티칭 할 필요가 없으므로 c에서 64 비트 정수를 나타낼 수 있습니다. 추가 레지스터는 스택을 덜 자주 사용해야 함을 의미합니다.

    이렇게하면 32 비트 모드에서 동일한 CPU에 비해 ​​약 2 배의 성능 향상을 얻을 수 있습니다.

  • 또 다른 중요한 차이점은 AMD64 (64 비트)는 64x64-> 128 비트 곱하기를 지원하고 x86 (32 비트)은 32x32-> 64 비트 곱하기 만 지원한다는 것입니다. 이 큰 곱셈은 약 2 배나 비싸지 만 4 배는 더 큽니다.

    중간 값을 저장하기 위해 128 비트 정수를 사용하는 코드를 작성하는 경우 다른 속도가 2 배 빨라집니다.

+0

답변 주셔서 감사합니다. BigInteger 데이터 형식을 사용하고 있기 때문에 RAM 크기가 모듈 계산에서 중요한지 궁금합니다. – user3019794

+0

RAM의 크기는 중요하지 않습니다. 몇 킬로바이트의 RAM으로 계산할 수 있습니다. – CodesInChaos