Intel Sandybridge 제품군 CPU의 파이프라인용 프로그램 비최적화
이 과제의 목표는 다음과 같습니다. 특정 프로그램을 수정하여 성능을 낮추는 것을 역최적화라고 합니다. 이 작업을 수행하려면 Intel i7 파이프라인 아키텍처와 위험을 유발하기 위해 지침 경로를 재정렬하는 방법에 대한 이해가 필요합니다.
1. 거짓 공유:
비원자 변수가 동일한 캐시 라인에 저장되도록 준비하여 스토어 포워딩 지연을 초래합니다.
2. Store-forwarding 지연:
"-" 연산자를 사용하는 대신 XOR을 사용하여 double의 부호 비트를 뒤집어 좁은 저장소를 double의 1바이트로 강제합니다.
3. 메모리 명확성:
데이터 4096B를 따로 배치하여 저장소에 대한 잘못된 종속성을 다른 페이지로 트리거합니다.
4. 잘못 정렬된 데이터:
__attribute__((packed))를 사용하면 캐시 라인이나 페이지 경계에서 변수를 잘못 정렬하여 캐시 누락이 증가합니다.
5. Stride:
4096바이트의 stride로 배열을 반복하여 비연속적인 메모리 액세스를 발생시키고 캐시 활용도를 줄입니다.
6. 연결 목록:
결과를 연결 목록에 저장하여 포인터 추적 로드 종속성과 잠재적으로 메모리에 분산된 노드를 도입합니다.
1. 원자 변수:
std::atomic
2. Long double:
SSE2 지원 CPU에서도 x87 에뮬레이션을 강제하려면 long double 변수를 사용하세요.
3. 정수 변환:
정수형과 부동소수점 유형 간을 반복적으로 변환하여 지연 시간이 긴 변환 지침을 도입합니다.
4. 시스템 호출:
컨텍스트 전환 및 캐시/TLB 누락을 강제하기 위해 불필요한 시스템 호출을 자주 도입합니다.
이러한 기술을 사용하면 주어진 상황을 크게 비관하는 것이 가능합니다. 프로그램을 원래 버전보다 훨씬 느리게 실행하도록 만듭니다. 성공적인 역최적화의 핵심은 악의적인 의도가 아닌 "악마적인 무능력"으로 각 단계를 정당화하는 것입니다.
위 내용은 Intel Sandybridge CPU용 프로그램을 의도적으로 비최적화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!