Das Softwarepaket numba ist ein Just-in-time-Compiler für Python, der numerische Funktionen in Maschinencode übersetzt, was die Ausführung dieser Funktionen beschleunigt. Ebenso ermöglicht es die parallele Verarbeitung von NumPy-Objekten auf mehreren Kernen des Prozessors wie auch der Grafikkarte.
numba baut auf LLVM und dem Python-Paket llvmlite auf.
Das numba-Projekt wurde durch Travis Oliphant, Mitgründer von Anaconda Inc., angestoßen. Anaconda gibt die gleichnamige Python-Distribution heraus; von der Anaconda Inc. wird numba hauptsächlich entwickelt. DARPA, Intel, nvidia und AMD fördern das Projekt.
Beispiel Dieses Programm zeigt alle Primzahlen zwischen 1 und 500.000 an. Die einzige Veränderung gegenüber normalem Python-Code sind die Zeilen für den Import des numba-Pakets, und der Dekorator.
import numba import math
# Sogenannter decorator; teilt mit, dass diese Funktion # kompiliert werden soll - mit Angabe des Funktionsprototypen (die Funktion ist # vom Typ boolean und erhält als Aufrufparameter einen uint32). @numba.jit(numba.boolean(numba.uint32)) def isprime(n): if n < 2: return False # 0 und 1 sind keine Primzahlen. if n == 2: return True # 2 ist prim if (n % 2) == 0: return False # Modulo 2 wird gesondert behandelt.
# Es genuegt, Teiler bis Wurzel(n) zu testen. divMax = math.floor(math.sqrt(n))
# Nur ungerade Zahlen als Teiler testen. for divisor in range(3, divMax, 2): if (n % divisor) == 0: # Ein Teiler wurde gefunden, n kann keine Primzahl sein --> Abbruch return False return True # Kein Teiler gefunden, n ist prim.
for i in range(1, 500000): if isprime(i): pass # nur 'pass', da ein 'print' keine Vergleichbarkeit mehr erlaubt
Die Laufzeit dieses Programms ist mit einer in C++ programmierten Variante vergleichbar.
Siehe auch PyPy nuitka Cython
Weblinks Website des Projekts Code auf Github Kategorie:Python (Programmiersprache)