성능 최적화 - ChoDragon9/posts GitHub Wiki

메모리

데이터는 HDD -> RAM -> Register 순서로 읽는 다. 데이터가 Register에 없게 되면 RAM 또는 HDD에서 읽게 되는 데 이 때는 Cache fault라고 한다. RAM 또는 HDD로부터 데이터를 읽는 데 많은 시간을 소요 하게 된다.

하드 디스크

하드디스크 디스크 캐시가 있다. CPU와 물리적인 하드 디스크 사이의 버퍼 역할을 하는 하드 디스크의 내장 메모리이다.

임시 데이터를 RAM과 HDD에 저장하는 것의 차이점은 성능, 비용 및 CPU 근접성이다. 램은 응답 시간이 수십 나노초인 반면에 HDD는 수십 밀리초의 응답 시간을 갖는다.

CPU 캐시(레지스터)

캐시 메모리는 RAM과 CPU 사이의 버퍼 역할을 하는 매우 빠른 메모리 타입이다. 이는 필요시 CPU가 즉시 사용할 수 있도록 자주 요청되는 데이터와 명령어들을 저장한다.

CPU는 적은 양의 고속 스토리지로 구성된 레지스터(Register)라고 하는 특수한 온칩 메모리(On-chip memory)를 내장하고있다. 레지스터는 가장 가깝고, 가장 작으며 가장 빠른 메모리이다.

속도

코드로부터 만들어지는 어셈블리의 수를 줄임으로써 속도를 향상시킨다.

Loop Unrolling

Loop Unrolling은 프로그램의 루프 로직을 수정하여 속도를 향상 시키는 방법이다. 루프 안의 내용을 일부 수작업으로 늘어놓는 일을 해야 한다. 루프는 루프 조건문을 검사하고 점프를 하는 오버헤드가 있다. 이 과정의 어셈블리 코드를 줄이는 대신 바이너리 코드를 늘리는 것이다. 메모리를 좀 더 사용하는 대신 시간을 절약하는 것이다.

// Normal
for (let i = 0; i < 100; i++) {
  delete(i)
}

// Loop Unrolling
for (let i = 0; i < 100; i += 5) {
  delete(i)
  delete(i + 1)
  delete(i + 2)
  delete(i + 3)
  delete(i + 4)
}

참고자료