Post

다중 스레드 성능 방해


컴퓨터 구조

컴퓨터 구조를 공부하면서 알게된 내용을 요약해서 작성해보자.

캐시 라인

  • 해당 데이터가 있는 곳의 묶음 데이터를 캐시에 저장한다. 이를 캐시 라인이라 한다.
  • 캐시와 메모리 상호 작용의 기본 단위는 캐시 라인이다.
  • 캐시 라인은 일반적으로 64바이트고, 캐시가 적중하지 못하면 캐시 라인 데이터가 캐시에 저장된다.

캐시 튕김 문제

  • 다중 스레드를 사용할 경우 다중 코어 컴퓨터에서 운영체제는 두 코어에 각각 스레드 할당할 확률이 높다.
  • C1 캐시와 C2 캐시는 끊임없이 서로 캐시를 무효화하면서 튕겨 낸다.
    • C1 캐시 -> C2 캐시 무효화 -> C2 캐시 -> C1 캐시 무효화 …
  • 빈번하게 캐시 일관성을 유지하면 캐시가 자신의 역할을 하지 못하고 프로그램 성능이 저하된다.
  • 이것을 캐시 튕김 또는 캐시 핑퐁이라고 한다.
  • 다중 스레드의 공유 리소스로 발생한다.

거짓 공유 문제

  • 두 스레드가 어떤 변수도 공유하지 않지만, 동일한 캐시 라인에 있을 경우를 말한다.
  • 스레드 두 개가 어떤 데이터도 공유하지 않는 것처럼 보이더라도 캐시의 동작 방식에 따라 캐시 라인을 공유할 가능성이 있다.
  • 두 변수 사이에 사용되지 않는 데이터를 채우면 같은 캐시 라인에 위치하지 않는다.
  • 캐시 튕김 문제를 발생한다.