programing

빠른(낮은) 코드 쓰는 법?

goodsources 2023. 11. 7. 20:50
반응형

빠른(낮은) 코드 쓰는 법?

저는 낮은 수준의 코드 최적화와 기본적인 머신 아키텍처의 이점을 활용하는 방법에 대해 더 알고 싶습니다.이 주제에 대해 어디서 읽어야 할지 좋은 조언을 찾고 있습니다.

자세한 내용:

저는 C/C++와 같은 낮은 수준의 언어로 과학적 컴퓨팅(숫자 크런치가 많지만 이뿐만 아니라)의 맥락에서 최적화에 관심이 있습니다.저는 특히 기계가 어떻게 작동하는지에 대해 잘 이해하지 않는 한 명확하지 않은 최적화 방법에 관심이 있습니다(아직은 그렇지 않습니다.

예를 들어, 실행 중인 기계에 대해 아무것도 알지 못한 채 더 나은 알고리즘이 더 빠르다는 것은 분명합니다.행렬의 열이나 행을 먼저 통과하는 것이 중요하다는 것은 전혀 명백하지 않습니다.(인접한 위치에 저장된 요소가 연속적으로 읽히도록 행렬을 순환하는 것이 좋습니다.)

주제에 대한 기본적인 조언이나 기사에 대한 조언을 가장 환영합니다.

답들

많은 훌륭한 조언들로 답을 얻었어요 제가 읽을 시간보다 훨씬 더 많은 것들을요다음은 그들 모두의 목록입니다.

어느 것을 사용할지 결정하기 위해서는 약간의 스킴 시간이 필요할 것입니다(모두를 위한 시간이 없습니다).

Drepper의 모든 프로그래머가 메모리에 대해 알아야사항 [pdf]는 저수준 최적화의 한 측면을 잘 참조한 것입니다.

Intel 아키텍처의 경우 이는 매우 귀중합니다.Software Optimization Cookbook, 2판

읽은 지 몇 년이 지났지만, 훌륭한 코드를 써라, 2권: 낮은 수준을 생각하다, 높은 수준을 써라, 랜달 하이드가 쓴 글은 꽤 괜찮았습니다.C/C++ 코드가 어떻게 어셈블리로 변환되는지에 대한 좋은 예를 제공합니다. 예를 들어, 큰 코드가 있을 때 실제로 발생하는 것입니다.switch진술.

또한, altdevblogaday.com 은 게임 개발에 초점을 맞추고 있지만, 프로그래밍 기사들이 여러분에게 몇 가지 아이디어를 줄 수도 있습니다.

낮은 수준의 일을 하는 비트 조작과 현명한 방법에 대한 흥미로운 책은 해커의 딜라이트입니다.

이것은 낮은 수준의 코딩에 관심이 있는 모든 사람들이 읽을 가치가 있습니다.

확인: http://www.agner.org/optimize/

C와 C++는 일반적으로 속도 때문에 사용되는 언어입니다( 언급하지 않은 포트란 무시).icc 컴파일러가 많이 하는 이점은 많은 부동 소수점 숫자 크런치를 위한 SSE 명령어 세트입니다.또 다른 가능한 것은 CPU가 남은 작업을 자유롭게 할 수 있도록 하면서 그래픽 카드에서 매우 빠른 부동 소수점 작업을 수행하기 위해 Nvidia/Ati용 CUDA와 Stream API를 각각 사용하는 것입니다.

이에 대한 또 다른 접근법은 실제 비교입니다.Blitz++(http://www.oonumerics.org/blitz/) 같은 라이브러리에서 수치/과학 컴퓨팅에 대한 공격적인 최적화를 구현한 다음 관심 있는 연산(예: 행렬 곱셈)을 수행하는 간단한 프로그램을 작성할 수 있습니다.Blitz++를 사용하여 작업을 수행할 때 동일한 작업을 수행하는 클래스를 작성하고 Blitz++가 더 빠르다는 것을 입증하면 그 이유를 깨달을 때까지 구현 방법을 조사하기 시작합니다. (만약 당신의 클래스가 훨씬 더 빠르다면 Blitz++ 개발자에게 알릴 수 있습니다!)

당신은 결국 많은 것들에 대해 배워야 합니다. 예를 들어:

  • 메모리 캐시 액세스 패턴
  • 식 템플릿(Google 검색 결과 재식 템플릿 위에는 몇 가지 잘못된 링크가 있습니다. - 논의하고자 하는 핵심 시나리오/속성은 데이터 세트에 대한 하나의 루프 동안 모두 적용되도록 일련의 연산에서 많은 연속적인 단계를 인코딩할 수 있다는 것입니다.)
  • 몇 가지 CPU별 지침(비휴대용 기술을 사용했는지 확인하지는 않았지만)...

저는 이너 루프스라는 책을 통해서 많은 것을 배웠습니다.지금은 컴퓨터 용어로 보면 아주 오래되었지만, 아주 잘 쓰여져 있고 Rick Booth는 자신의 주제에 대해 너무나 열정적이어서 CPU를 날리는 데 필요한 사고방식을 보는 것이 여전히 가치가 있다고 말할 것입니다.

언급URL : https://stackoverflow.com/questions/6852670/how-to-write-fast-low-level-code

반응형