나는 여기서 결정에 반대하는 사람이 될 것이며, 최적화, 특히 어셈블리 최적화 및 더 중요하게는 어셈블리 디버깅에 대해 배우기 에는 너무 이르지 않습니다 . 나는 당신이 학생이라면 (즉, 시간 / 돈을 현명하게 잃을 것이 거의 없기 때문에) 그리고 얻을 수있는 모든 것이라면 최대의 이익을 얻을 것이라고 믿습니다.
업계에 있고 조립 과정에서 땜질 작업을하지 않은 경우하지 마십시오. 그렇지 않으면, 당신이 학생이거나 일반적으로 시간이 있다면, 프로그램을 분해하는 법을 배우고 컴파일러보다 더 나은 해결책을 찾을 수 있는지 알아볼 시간이 있습니다. 내가 할 수 없다면 누가 신경 쓰겠 어! 방금 컴파일러뿐만 아니라 작성하는 방법을 배웠으며 릴리스 코드의 버그 (디버그 기호가 없음)에 직면하고 디스 어셈블리를 쳐다 보았을 때 볼 수있는 유일한 것이기 때문에 큰 장점입니다.
대답
이것은 최적화에 대해 배우기 위해 찾은 최고의 리소스 중 하나입니다.
http://www.agner.org/optimize/
그랜트
주요 개발자가 작성한 기사를 읽는 경우 (예를 들어, EASTL 작성의 근거가 있고 코드를 면밀히 검사하면 GCC 가이 if 문 을 인라인하는 것이 끔찍하기 때문에 이와 같은 주석으로 이어질 것 입니다. 사람들 은 컴파일러 가 게임 개발에서 항상 옳지 않다고 신뢰하고 업계에 발을 들여 놓으면 최적화가 일상적인 일이며 어셈블리 출력의 의미가 무엇인지를 알 수 있습니다. 또한 사람들은 게임을 프로파일 링하는 것이 매우 어렵고 항상 정확한 것은 아니라는 사실을 깨닫지 못하는 것 같습니다 (특히 스택 오버플로에서).
그래도 경고가 있습니다. 무언가를 최적화하는 데 시간을 할애하고 나중에는 시간이 낭비되었음을 깨달을 수 있습니다. 그러나 무엇을 배웠습니까? 비슷한 상황에서 같은 실수를 반복하지 않는 법을 배웠습니다.
무엇 SO 지금 복용하는 것은 내 생각에 문을 종교적 입장이다 최적화 프로파일 링하지 않습니다 때까지 하고 걱정을하지, 컴파일러는 더 나은 당신보다 알고있다 . 학습을 방해합니다. 나는 컴파일러가 게임에 나쁘거나 단순히 당신을 도울 수 없기 때문에 게임을 최적화하고 디버깅하기 위해 어셈블리에서 바이올린을 다루는 아주 좋은 돈 (그리고 나는 아주 좋은 돈을 의미 함)을 알고있는 업계의 전문가를 알고 있습니다. (GPU 관련 충돌, 관련된 데이터를 디버거 등에서 읽을 수없는 충돌 등) 불가능!
그렇게하는 것을 좋아하는 사람이 아직 그것을 완전히 깨닫지 못하고 여기에 질문을하고 많은 답변 컴파일러가 당신보다 더 잘 알고있는 답변을 끄거나 끄면 어떻게 될까요? 그리고 돈이 많이 드는 프로그래머가되지 않습니까?
하나의 마지막 생각. 이 작업을 일찍 시작하면 곧 최악의 코드를 작성하기 시작합니다. 컴파일러가 동일한 방식으로 또는 최상의 방식으로 최적화했기 때문에 성능 향상이 전혀 없으며 이제 컴파일러가 최적화 할 수 있기 때문에 성능이 약간 향상되었습니다. . 두 경우 모두 습관이되었으며, 이전보다 코드 작성 속도가 느리지 않습니다. 몇 가지 예는 다음과 같습니다 (더 많은 것이 있습니다).
- 사후 증분을 원하지 않는 한 사전 증분
- 루프 내의 컨테이너에서 size ()를 호출하는 대신 상수 로컬 크기 변수를 사용하여 컨테이너에 대한 루프를 작성합니다.
편집 : 업계에서 8 년 후에 업데이트하십시오. 조립을 배우십시오. 옵티마이 저가 작동하는 방식과 이들이 생성하는 어셈블리에 대해 알아보십시오 (CompilerExplorer는이를위한 훌륭한 도구입니다). 디버그 빌드로도 디버거에 의존 할 수없는 테스트 빌드 (내부 테스트에 최적화 된 빌드)에서 수많은 충돌을 겪었습니다. 컴파일러가 너무 많은 것들을 최적화했으며 크래시 덤프에서 버그를 찾는 유일한 정보 소스는 어셈블리입니다. 운이 좋으면 빌드 큐에서 먼저 각 빌드는 30-40 분이 걸리므로 버그를 격리하기 위해 일부 전통적인 기술에 의존 할 수 없습니다. 멀티 플레이어는 상황을 악화시킵니다. 어셈블리를 알고 최적화 된 어셈블리를 읽는 방법은 팀에게 더 나은 결과를 가져다 줄 것입니다.