Numba (Softwarepaket)
Numba
| |
---|---|
Basisdaten
| |
Entwickler | Travis E. Oliphant |
Erscheinungsjahr | 2012 |
Aktuelle Version | 0.60.0 (13. Juni 2024) |
Betriebssystem | Windows, macOS, Linux |
Programmiersprache | Python, C |
Kategorie | Just-in-time-Compiler |
Lizenz | BSD 2-Clause Simplified |
https://github.com/numba/numba |
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
[Bearbeiten | Quelltext bearbeiten]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.