▲GN⁺ 2024-07-09 | parent | ★ favorite | on: 고빈도 거래를 포함한 저지연 애플리케이션을 위한 C++ 패턴(arxiv.org)Hacker News 의견 주제에 대한 간단한 소개임 학부생들은 이미 기본적인 성능 최적화 요소를 알고 있음 분기 예측, 캐시 일관성, 명령어 캐시 등의 기본 개념을 배움 성능 저하 요인인 false sharing에 대해 다루지 않은 점이 놀라움 최적화 힌트 속성([[likely]], [[unlikely]]) 등을 다루지 않은 점도 놀라움 고급 성능 최적화 요소는 다루지 않음 특정 IO API, 동기화 원시, IPC 메커니즘, 컴파일러 내장 함수 등 저지연 프로그래머에게 필요한 것은 불필요한 할당, 복사 등에 대한 경계심임 벤치마크를 통해 성능 저하 요소를 찾는 습관이 필요함 저지연 서버를 작성할 때 벡터 IO 작업이 작은 객체를 연속 버퍼에 복사하는 것보다 느리다는 것을 깨달음 무료 복사는 없다는 점을 강조함 테스트 결과는 t-통계량과 p-값을 제공함 t-통계량은 잔차의 단위근 검정 결과를 나타냄 p-값은 검정의 귀무가설이 참일 확률을 제공함 이 부분은 LLM을 사용해 작성된 것 같음 하루 한 번의 종가를 5년 동안 분석하고 65마이크로초 지연으로 스프레드를 계산하는 예시는 이상함 내부 루프에서 통계를 계산하지 않음 65마이크로초는 내부 루프에 너무 느림 최적화 기법을 연습하기 위한 예시로 보임 C++로 작성된 주식 거래소 구현체를 공유함 LMAX disruptor 패턴을 사용함 Rust로 다시 작성하려고 함 Rust에서 메모리 관리와 종속성이 더 쉬움 C++ 로깅 라이브러리를 작성함 LMAX disruptor와 유사함 HFT 커뮤니티에서 사용됨 성능 저하 없이 상세한 로깅을 가능하게 함 동료들이 성능 저하를 우려해 중요한 정보를 로깅하지 않는 문제를 해결함 컴파일 타임 디스패치의 효율성은 함수 호출 결정이 컴파일 단계에서 이루어지기 때문임 컴파일러가 호출되는 함수를 정적으로 결정할 수 있으면, 호출된 함수의 코드를 직접 인라인할 수 있음 모든 함수 호출 오버헤드를 제거하고 추가 최적화를 가능하게 함 CppCon 2017 발표 자료를 공유함 마이크로초가 영원처럼 느껴질 때라는 주제임 프로 개발자라면 전체 자료를 보는 것이 좋음 고빈도 거래가 존재해야 하는 이유가 있는지 의문을 제기함 비트코인이 에너지를 낭비한다고 불평하지만, 고빈도 거래는 사회에 순수한 부정적 영향을 미침
Hacker News 의견
주제에 대한 간단한 소개임
학부생들은 이미 기본적인 성능 최적화 요소를 알고 있음
성능 저하 요인인 false sharing에 대해 다루지 않은 점이 놀라움
최적화 힌트 속성([[likely]], [[unlikely]]) 등을 다루지 않은 점도 놀라움
고급 성능 최적화 요소는 다루지 않음
저지연 프로그래머에게 필요한 것은 불필요한 할당, 복사 등에 대한 경계심임
저지연 서버를 작성할 때 벡터 IO 작업이 작은 객체를 연속 버퍼에 복사하는 것보다 느리다는 것을 깨달음
테스트 결과는 t-통계량과 p-값을 제공함
이 부분은 LLM을 사용해 작성된 것 같음
하루 한 번의 종가를 5년 동안 분석하고 65마이크로초 지연으로 스프레드를 계산하는 예시는 이상함
C++로 작성된 주식 거래소 구현체를 공유함
C++ 로깅 라이브러리를 작성함
컴파일 타임 디스패치의 효율성은 함수 호출 결정이 컴파일 단계에서 이루어지기 때문임
CppCon 2017 발표 자료를 공유함
고빈도 거래가 존재해야 하는 이유가 있는지 의문을 제기함