>백엔드 개발 >C++ >Intel Sandybridge 제품군 CPU에서 실행 속도를 크게 낮추기 위해 몬테카를로 시뮬레이션을 추가로 최적화 해제하려면 어떻게 해야 합니까?

Intel Sandybridge 제품군 CPU에서 실행 속도를 크게 낮추기 위해 몬테카를로 시뮬레이션을 추가로 최적화 해제하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-29 00:57:101007검색

How Can a Monte Carlo Simulation Be Further Deoptimized to Significantly Slow Down Execution on an Intel Sandybridge-Family CPU?

Intel Sandybridge 제품군 CPU의 파이프라인에 대한 프로그램 최적화 해제

목표: 다음 지식을 활용하여 프로그램이 더 느리게 실행되도록 비관하는 것입니다. 인텔 i7 파이프라인.

문제:

과제는 Whetstone 또는 Monte-Carlo 프로그램의 두 가지 옵션을 제공했습니다. 학생은 Monte-Carlo 시뮬레이션 프로그램을 선택했지만 비관적인 노력으로 인해 코드 실행 시간이 1초만 늘어났습니다.

질문:

학생이 어떻게 비관을 더 할 수 있습니까? 더 중요한 목표를 달성하기 위한 코드 속도가 느려지나요?

답변:

일반 전략:

  • 예측할 수 없는 분기를 도입하여 잘못된 예측 페널티를 높입니다.
  • 루프 전달 종속성 체인 연장 명령 수준 병렬 처리를 줄입니다.
  • 느린 FP 작업과 div, 특히 exp와 log 기능을 사용하세요.

Uarch 관련 아이디어:

내장 함수 포함 ():

  • 캐시에서 데이터를 제거하려면 movnti를 사용하세요.
  • FP 수학 연산 사이에 정수 셔플을 사용하면 우회 지연이 발생합니다.
  • 사용하지 않고 SSE와 AVX 명령어를 혼합하지 마세요. vzeroupper.

(인라인) asm 사용:

  • 정렬 문제를 강제로 실행하여 uop 캐시를 중단합니다.
  • self- 사용 파이프라인을 트리거하도록 코드 수정

캐시 누락 및 메모리 속도 저하 유발:

  • 좁은 매장을 수행하여 매장 전달 지연을 유발합니다.
  • 교체 메모리를 제어하기 위한 큰 구조체의 멤버가 있는 로컬 변수 레이아웃.
  • 캐시 누락과 페이지 분할 로드를 늘리려면 메모리 레이아웃을 배열하세요.
  • 캐시 라인이나 페이지 경계를 확장하려면 잘못 정렬된 변수를 사용하세요.
  • 비 배열에서 루프를 반복하세요. -연속적인 순서.
  • 대신 연결 목록 사용을 고려하세요.

기타 기술:

  • std::atomic 느린 원자 연산을 위한 루프 카운터.
  • -m32 또는 -march=i386으로 컴파일하여 코드 생성 속도를 늦춥니다.
  • 속도를 더 높이기 위해 정밀도가 낮은 긴 이중 계산을 강제합니다.
  • CPU 선호도를 다른 CPU로 자주 설정합니다.
  • 컨텍스트 전환을 위해 과도한 시스템 호출을 구현합니다.

최종 참고 사항:

  • 이러한 기술은 코드 속도를 효과적으로 저하시키지만 "악마 같은 무능력" 수준은 주어진 정당성에 따라 다릅니다. .
  • 과제 강사는 학생들이 단순히 이러한 기술을 적용하는 것이 아니라 파이프라인 위험 및 종속성에 대해 배우도록 의도했을 수 있습니다. 맹목적으로.

위 내용은 Intel Sandybridge 제품군 CPU에서 실행 속도를 크게 낮추기 위해 몬테카를로 시뮬레이션을 추가로 최적화 해제하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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