Numba (Softwarepaket)
Numba
| |
---|---|
Basisdaten
| |
Entwickler | Travis E. Oliphant |
Erscheinungsjahr | 2012 |
Aktuelle Version | 0.55.1 (28. Januar 2022) |
Aktuelle Vorabversion | 0.56.0dev0 (5. Januar 2022) |
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
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): print(i)
Die Laufzeit dieses Programms ist mit einer in C++ programmierten Variante vergleichbar.
Siehe auch
Weblinks
- Website des Projekts
- Code auf Github