본문 바로가기

Growth Hacking/Python

파이썬이 C++보다 빠를 수 있다(번역글)

 Medium에서 자극적이라 생각되는 글을 추천받았습니다. 제목처럼 파이썬이 C++보다 빠를 수도 있다는 글인데요. 오늘은 그 Medium의 글을 한국어로 전달드려볼게요.

Photo by Jake Givens on Unsplash

 파이썬(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