Python은 매우 다재다능한 프로그래밍 언어입니다. 파이썬은 라이브러리와 고수준 언어 덕분에 머신러닝 문제 해결에 가장 많이 사용되지만, 다른 언어에 비해 속도가 느린 것으로 알려져 있습니다. 이러한 평판 때문에 많은 사람들이 이 언어를 포기하고 프로그램 해결을 위해 C++와 같은 다른 옵션을 선택하기도 합니다.
기본 속도 테스트
파이썬과 C++의 일반적인 속도 차이를 테스트하기 위해 소수 생성 알고리즘의 실행 시간을 테스트해 보겠습니다. 두 언어 모두에서 명확한 짧은 단계가 있는 간단한 알고리즘입니다.
소수 생성 순서도
Python 실행
import math
from time import per_counter def is_prime(num):
if num == 2:
return True;
if num <= 1 or not num % 2:
return False
for div in range(3,int(math.sqrt(num)+1),2):
if not num % div:
return False
return Truedef run program(N):
for i in range(N):
is_prime(i)if __name__ == ‘__main__’:
N = 10000000
start = perf_counter()
run_program(N)
end = perf_counter()
print (end — start)
C++ 실행
#include <iostream>
#include <cmath>
#include <time.h>using namespace std;bool isPrime(int num)
{
if (num == 2) return true;
if (num <= 1 || num % 2 == 0) return false;
double sqrt_num = sqrt(double(num));
for (int div = 3; div <= sqrt_num; div +=2){
if (num % div == 0) return false;
}
return true;}int main()
{
int N = 10000000;
clock_t start,end;
start = clock();
for (int i; i < N; i++) isPrime(i);
end = clock();
cout << (end — start) / ((double) CLOCKS_PER_SEC);
return 0;}
결과
- Python: 80.137 초
- C++ : 3.174 초
예상대로 기본 테스트에서 C++는 Python보다 25배 더 빨랐습니다.
Python은 C++와 달리 동적 언어입니다.
GIL(Python Global Interpreter)은 병렬 프로그래밍을 허용하지 않습니다.
Numba를 사용하면 속도 문제를 해결할 수 있습니다.
Numba
Numba는 Python 및 NumPy 코드의 하위 집합을 빠른 머신 코드로 변환하는 오픈 소스 JIT 컴파일러입니다. ~ 위키백과
간단히 말해, Numba는 파이썬을 빠르게 만드는 라이브러리입니다. 사용하기 매우 쉬우며 코드 속도를 획기적으로 바꿔줍니다. Numba를 사용하려면 콘솔을 사용하여 설치하세요.
pip install numba
numba설치후 Python 실행
import math
from time import per_counter
from numba import njit, prange@njit(fastmath=True, cache=True)
def is_prime(num):
if num == 2:
return True;
if num <= 1 or not num % 2:
return False
for div in range(3,int(math.sqrt(num)+1),2):
if not num % div:
return False
return True@njit(fastmath=True, cache=True,parallel=True)
def run program(N):
for i in prange(N):
is_prime(i)if __name__ == ‘__main__’:
N = 10000000
start = perf_counter()
run_program(N)
end = perf_counter()
print (end — start)
결과
Python: 1.401 초
C++ : 3.174 초
파이썬이 C++보다 빠릅니다. 파이썬에서 알고리즘의 속도를 C++보다 빠르게 할 수 있습니다.
출처: https://medium.com/swlh/python-can-be-faster-than-c-2372c627068