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
Programmier­sprache 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

  • Website des Projekts
  • Code auf Github