ReLU 구현 속도 비교

김명섭·2024년 8월 27일

timeit

stmt : 실행 측정할 코드나 함수명
setup : 실행에 필요한 변수를 선언하는 등의 코드(측정 시간 포함 X)
timer : 시간 측정 타이머 함수 설정(굳이 안해도 된다.)
number : 반복 실행 횟수(default : 1)
globals : timeit 함수의 네임스페이스 설정. default는 None이고 빈 네임스페이스를 사용한다. 보통 globals=globals()를 통해 현재 모듈의 전역 네임스페이스를 넘겨줄 수 있다.

Jupyter Notebook에선 %%timeit 으로 사용할 수 있다.
(% : 한 줄 실행, %% : cell 실행)

시간 측정



동적 방식으로 함수를 실행하는 것이 아니라, x만을 바꾸고 실행하면 x값이 바뀐것이 적용되지 않는다.
따라서, x를 바꾼 후 다시 timeit.timeit 을 다시 써줘야한다.

JIT(Just In Time)

결과를 보면, 대부분 235인 30배가 늘어났지만, relu6은 오히려 속도가 줄어든 것을 볼 수 있다.
이는 jit compile 방식의 특징 때문인데, jit compiler는 실행 시점에서는 인터프리터와 같이 기계어 코드를 생성하면서 해당 코드가 컴파일 대상이 되면 컴파일하고 그 코드를 캐싱한다.
컴파일 대상이란 얼마나 자주 코드가 실행됐는지로 결정되고, 메서드가 호출된 횟수와 메서드의 루프를 빠져나오기까지 돈 반복 횟수 2개를 기반으로 임계치를 설정하고, 임계치를 넘으면 자주 코드가 실행된다고 판단하여 컴파일 대상이 된다.
(컴파일 대상이 되면, 큐에서 대기하다 이후에 컴파일 스레드에 의해 컴파일 된다.)

profile
ML Engineer

0개의 댓글