코돈은 런타임 오버 헤드없이 기본 기계 코드로 컴파일하는 고성능 파이썬 구현입니다. 바닐라 파이썬의 일반적인 속도는 단일 스레드에서 10-100 배 이상의 순서입니다. 코돈의 성능은 일반적으로 C/C ++의 성능과 동등합니다 (때로는 때로는 더 좋습니다). Python과 달리 Codon은 기본 멀티 스레딩을 지원하므로 스케줄 업이 몇 배나 높아질 수 있습니다.
코돈을 Python을 Python을 정적, 미리 정시 컴파일을 위해 재구성 한 것으로 생각하십시오.
CPYTHON의 드롭 인 교체 : 코돈은 CPYTHON의 드롭 인 교체가 아닙니다. 정적 컴파일에 적합하지 않은 파이썬에는 몇 가지 측면이 있습니다. 코돈에서는이를 지원하지 않습니다. JIT 데코레이터 또는 파이썬 확장 백엔드를 통해 더 큰 파이썬 코드베이스에서 코돈을 사용하는 방법이 있습니다. 코돈은 또한 파이썬 상호 운용성을 통해 모든 파이썬 모듈을 호출하는 것을 지원합니다. 문서에서 "파이썬의 차이" 도 참조하십시오.
새로운 구문 및 언어 구성 : 우리는 새로운 구문, 키워드 또는 기타 언어 기능을 가능한 한 추가하지 않으려 고 노력합니다. 코돈은 몇 곳에 새로운 구문을 추가하지만 (예 : 평행을 표현하기 위해) 가능한 한 친숙하고 직관적으로 만들려고 노력합니다.
Linux (x86_64) 및 MACOS (x86_64 및 ARM64)의 사전 구축 된 이진은 각 릴리스와 함께 제공됩니다. 다음과 같이 다운로드하고 설치합니다.
/bin/bash -c " $( curl -fsSL https://exaloop.io/install.sh ) "
또는 소스에서 빌드 할 수 있습니다.
코돈은 파이썬 호환 언어이며, 많은 파이썬 프로그램은 수정 된 경우 몇 사람과 함께 작동합니다.
def fib ( n ):
a , b = 0 , 1
while a < n :
print ( a , end = ' ' )
a , b = b , a + b
print ()
fib ( 1000 )
codon
컴파일러에는 여러 가지 옵션과 모드가 있습니다.
# compile and run the program
codon run fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile and run the program with optimizations enabled
codon run -release fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile to executable with optimizations enabled
codon build -release -exe fib.py
./fib
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile to LLVM IR file with optimizations enabled
codon build -release -llvm fib.py
# outputs file fib.ll
더 많은 옵션과 예는 문서를 참조하십시오.
코돈에서 모든 파이썬 패키지를 가져오고 사용할 수 있습니다. 예를 들어:
from python import matplotlib . pyplot as plt
data = [ x ** 2 for x in range ( 10 )]
plt . plot ( data )
plt . show ()
(문서에서 설명한대로 CODON_PYTHON
환경 변수를 Cpython 공유 라이브러리로 설정하는 것을 잊지 마십시오.)
이 주요 카운팅 예제는 코돈의 OpenMP 지원을 보여 주며 한 줄을 추가 할 수 있습니다. @par
주석은 컴파일러에게 -loop for
다음을 병렬화하도록 지시합니다.
from sys import argv
def is_prime ( n ):
factors = 0
for i in range ( 2 , n ):
if n % i == 0 :
factors += 1
return factors == 0
limit = int ( argv [ 1 ])
total = 0
@ par ( schedule = 'dynamic' , chunk_size = 100 , num_threads = 16 )
for i in range ( 2 , limit ):
if is_prime ( i ):
total += 1
print ( total )
코돈은 GPU 커널 작성 및 실행을 지원합니다. 다음은 Mandelbrot 세트를 계산하는 예입니다.
import gpu
MAX = 1000 # maximum Mandelbrot iterations
N = 4096 # width and height of image
pixels = [ 0 for _ in range ( N * N )]
def scale ( x , a , b ):
return a + ( x / N ) * ( b - a )
@ gpu . kernel
def mandelbrot ( pixels ):
idx = ( gpu . block . x * gpu . block . dim . x ) + gpu . thread . x
i , j = divmod ( idx , N )
c = complex ( scale ( j , - 2.00 , 0.47 ), scale ( i , - 1.12 , 1.12 ))
z = 0j
iteration = 0
while abs ( z ) <= 2 and iteration < MAX :
z = z ** 2 + c
iteration += 1
pixels [ idx ] = int ( 255 * iteration / MAX )
mandelbrot ( pixels , grid = ( N * N ) // 1024 , block = 1024 )
@par(gpu=True)
사용하여 @par
구문을 사용하여 GPU 프로그래밍을 수행 할 수도 있습니다.
심층 문서는 Docs.exaloop.io를 참조하십시오.