1P by neo 2023-07-07 | favorite | 댓글 1개
  • 클랑에서 생성된 C 코드 루프의 최적화 기회를 탐구하는 기사
  • 루프는 문자열의 문자에 기반하여 숫자를 증가 또는 감소시킵니다.
  • 저자는 루프를 재배치하여 null 종료자 대신 'p'와 's' 문자에 최적화합니다.
  • 저자는 산술 및 조건부 이동을 사용하여 조건 분기를 제거합니다.
  • 최적화된 코드는 원래 코드와 비교하여 6.73배의 상당한 속도 향상을 달성합니다.
  • 저자는 또한 다른 최적화 기술을 시도하지만 코드를 느리게 만드는 것으로 발견합니다.
  • 벤치마킹 설정에는 AMD Ryzen 5 5625U CPU와 최신 버전의 클랑 및 GCC가 포함됩니다.
  • 결론은 어셈블리에서의 수작업 및 최적화가 특정 경우에 상당한 속도 향상을 이끌 수 있다는 것입니다.
Hacker News 의견
  • 원래 코드는 스위치 문 대신 if 문을 사용하여 최적화할 수 있습니다.
  • 코드의 다른 최적화 버전은 분기 없는 sete/cmov 명령어를 사용하며 최적화된 어셈블리 코드와 동일한 속도를 달성할 수 있습니다.
  • 벡터화된 코드 버전은 AVX-512 명령어를 사용하여 가능하다면 더 빠를 수 있습니다.
  • 다른 프로세서는 분기에 따라 성능 특성이 다를 수 있습니다.
  • C 언어는 원래 시스템 수준의 코드를 플랫폼 간에 쉽게 번역할 수 있도록 설계되었으며, 이를 위해 일부 기능을 희생했습니다.