Medium에서 자극적이라 생각되는 글을 추천받았습니다. 제목처럼 파이썬이 C++보다 빠를 수도 있다는 글인데요. 오늘은 그 Medium의 글을 한국어로 전달드려볼게요.
파이썬(Python)은 다재다능한 프로그래밍 언어입니다. 파이썬은 라이브러리와 고수준의 언어이기 때문에 기계 학습 문제 해결에 가장 많이 사용되지만, 다른 언어보다 속도가 느린 것으로 알려져 있어요. 그래서 많은 사람들은 C++과 같은 다른 옵션들로 문제를 해결하려합니다. 하지만 이 아티클에서 파이썬이 C++보다 얼마나 빠른지 보여드리겠습니다.
- 기본 스피드
파이썬과 C++의 일반적인 스피드를 테스트하기 위해 Generation of primes 알고리즘을 실행해보겠습니다. 두 언어에서 모두 짧고 간단하고 명료하게 만들 수 있습니다.
- 파이썬 실행
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 True
def 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++이 파이썬보다 25배 빠른 속도를 보여줬습니다. 그렇기 때문에 일반적으로 C++이 파이썬보다 빠른 것은 사실이었습니다. 논리적으로는 파이썬이 C++과는 달리 동적 타입의 언어이며, GIL(Python Global Interpreter)은 병렬 프로그래밍을 허용하지 않기 때문입니다.
하지만 파이썬은 유연하고 다재다능한 프로그래밍 언어이기 때문에 고칠 수 있습니다. 스피드 문제에 대해 해결할 수 있는 최고의 솔루션 중 하나는 Numba를 사용하는 것이에요.
- Numba : 파이썬 및 Numpy 코드의 일부를 컴퓨터 코드로 빠르게 변환시켜주는 오픈소스 JIT 컴파일러
즉, Numba는 Python을 빠르게 만들어주는 라이브러리입니다. 사용하기에도 쉽고 코드 스피드를 빠르게 바꿀 수 있습니다. Numba을 사용하기 위해서는 설치가 필요합니다.
pip install numba
- Numba를 사용한 파이썬 실행
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)
결과는 파이썬은 1.401초, C++는 3.174초가 나왔습니다. 그래서 Python은 C++보다 더 빠르게 만들 수 있으며 Python으로 알고리즘 속도를 C++보다 빠르게 낼 수 있습니다.
* 원문: medium.com/swlh/python-can-be-faster-than-c-2372c627068
이 글이 여러분께 도움되셨으면 좋겠습니다 :)
'Growth Hacking > Python' 카테고리의 다른 글
판다스(Pandas)에서 map과 apply의 차이점 (1) | 2021.02.03 |
---|