>백엔드 개발 >C++ >Spektre의 C 구현은 향상된 성능을 위해 모듈식 연산 및 NTT를 어떻게 최적화합니까?

Spektre의 C 구현은 향상된 성능을 위해 모듈식 연산 및 NTT를 어떻게 최적화합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-28 10:42:10524검색

How Does Spektre's C   Implementation Optimize Modular Arithmetic and NTT for Enhanced Performance?

C에서 최적화된 모듈러 연산 및 NTT(Finite Field DFT) 구현

Spektre에서 제공하는 코드는 C에서 모듈러 연산 및 NTT(Number Theoretic Transform) 최적화를 구현합니다. 다음은 제기된 질문에 대한 답변과 함께 코드에 대한 설명입니다.

주요 함수 흐름:

  1. fourier_NTT 클래스는 NTT, 역 NTT(INTT), 모듈식 산술, 및 도우미 기능.
  2. DWORD 배열에서 NTT를 수행하려면 src (부호 없는 32비트 정수), src와 원하는 요소 수 n(기본값은 0, src의 길이를 나타냄)을 사용하여 NTT()를 호출합니다.
  3. 마찬가지로 INTT()는 역 NTT를 수행합니다.
  4. 이 클래스는 mod(), modadd(), modsub(), modmul() 및 모듈러 산술 함수를 제공합니다. modpow().

최적화 질문 해결:

1. NTT 성능 최적화:

NTT 성능을 최적화하기 위해 코드는 여러 기술을 사용합니다.

  • 미리 계산된 거듭제곱 테이블: W 및 iW의 거듭제곱을 미리 계산합니다. 더 빠른 액세스를 위해 특정 임계값(NN)까지 recursion.
  • 제거된 안전 모드: 일부 불필요한 안전 모드가 제거되어 속도가 2.5% 향상되었습니다.
  • 향상된 Modmul 기능: modmul () 기능은 인라인 어셈블리를 사용하여 최적화되어 34.9%의 속도향상.

2. 모듈식 산술 최적화의 안전성:

모듈식 산술의 최적화는 0xC0000001인 모듈로 소수 p의 특정 속성을 활용합니다. 그러나 이러한 최적화는 다양한 p 값에 적합하지 않을 수 있다는 점에 유의하는 것이 중요합니다.

추가 최적화:

1. NTT 빠른 루프 재배치:

더 나은 성능을 위해 메인 NTT 루프가 재배치되었습니다.

2. 모듈식 연산에서 분기 감소:

modadd()에서 분기를 제거하기 위해 비트별 트릭이 사용되어 실행 속도가 빨라졌습니다.

3. 불필요한 If 문 제거:

불필요한 if 문과 비트 함수를 제거하여 코드를 더욱 간소화했습니다.

4. 새로운 Modmul 인라인 어셈블리:

새로운 인라인 어셈블리 구현으로 modmul() 기능이 향상되어 추가적인 속도 향상을 제공합니다.

결론:

최적화된 Spektre에서 제공하는 코드는 NTT 및 모듈러 연산의 성능을 크게 향상시킵니다. 최적화에는 알고리즘 개선, 사전 계산된 전력 테이블 및 효율적인 인라인 어셈블리가 포함됩니다.

위 내용은 Spektre의 C 구현은 향상된 성능을 위해 모듈식 연산 및 NTT를 어떻게 최적화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.