„Numba (Softwarepaket)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
KKeine Bearbeitungszusammenfassung
Vorher stand in der "for"-Schleife ein "print". Diese IO-Operation hat nichts mit Numerik zu tun und daher ist für einen numerischen Vergleich ein "pass" sinnvoller.
 
(16 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt)
Zeile 7: Zeile 7:
| Hersteller =
| Hersteller =
| Erscheinungsjahr = 2012
| Erscheinungsjahr = 2012
| AktuelleVersion = 0.43.1
| AktuelleVersion = 0.60.0
| AktuelleVersionFreigabeDatum = 2019-03-26
| AktuelleVersionFreigabeDatum = 13. Juni 2024
| AktuelleVorabVersion =
| AktuelleVorabVersion =
| AktuelleVorabVersionFreigabeDatum =
| AktuelleVorabVersionFreigabeDatum = 5. Januar 2022
| Betriebssystem = [[Microsoft Windows|Windows]], [[macOS]], [[Linux]]
| Betriebssystem = [[Microsoft Windows|Windows]], [[macOS]], [[Linux]]
| author=<!--Not stated-->
| website= https://github.com/numba/numba
| Programmiersprache = Python, [[C (Programmiersprache)|C]]
| Programmiersprache = Python, [[C (Programmiersprache)|C]]
| Kategorie = [[Just-in-Time-Compiler]]
| Kategorie = [[Just-in-time-Kompilierung|Just-in-time-Compiler]]
| Lizenz = [[BSD-Lizenz|BSD]] 2-Clause Simplified
| Lizenz = [[BSD-Lizenz|BSD]] 2-Clause Simplified
| Deutsch =
| Deutsch =
| Website =
| Website = https://github.com/numba/numba
}}
}}


Das Softwarepaket '''numba''' ist ein Just-in-Time-Compiler für [[Python (Programmiersprache)|Python]], welcher numerische Funktionen in [[Maschinencode]] übersetzt, was die Ausführung dieser Funktionen deutlich beschleunigt. Ebenso ermöglicht es die [[Parallelrechner|parallele Verarbeitung]] von [[NumPy]]-Objekten auf mehreren Kernen des Prozessors wie auch der Grafikkarte.
Das [[Programmpaket|Softwarepaket]] '''numba''' ist ein [[Just-in-time-Kompilierung|Just-in-time-Compiler]] für [[Python (Programmiersprache)|Python]], der [[numerische Funktion]]en in [[Maschinencode]] übersetzt, was die Ausführung dieser Funktionen beschleunigt. Ebenso ermöglicht es die [[Parallelrechner|parallele Verarbeitung]] von [[NumPy]]-[[Objekt (Programmierung)|Objekten]] auf mehreren Kernen des [[Prozessor]]s wie auch der [[Grafikkarte]].


numba baut auf [[LLVM]] und dem Python-Paket <code>llvmlite</code> auf.
numba baut auf [[LLVM]] und dem Python-Paket <code>llvmlite</code> auf.


Das numba-Projekt wurde durch [[Travis Oliphant]] angestoßen. Die hauptsächliche Entwicklung erfolgt durch Mitarbeitende der Firma Anaconda Inc., welche auch die [[Anaconda (Python-Distribution)|gleichnamige Python-Distribution]] herausgibt. numba wird durch [[DARPA]], [[Intel]], [[nvidia]] und [[AMD]] gefördert.
Das numba-Projekt wurde durch [[Travis Oliphant]], Mitgründer von Anaconda Inc., angestoßen. Anaconda gibt die [[Anaconda (Python-Distribution)|gleichnamige Python-Distribution]] heraus; von der Anaconda Inc. wird numba hauptsächlich entwickelt. [[DARPA]], [[Intel]], [[nvidia]] und [[AMD]] fördern das Projekt.


== Beispiel ==
== Beispiel ==
Dieses Programm zeigt alle [[Primzahl|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.
Dieses Programm zeigt alle [[Primzahl|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.


<syntaxhighlight lang="Python">
<syntaxhighlight lang="python">
# importiere numba
import numba
from numba import *
import math


# sogenannter decorator; teilt mit, dass diese Funktion
# Sogenannter decorator; teilt mit, dass diese Funktion
# kompiliert werden soll - mit Angabe der Variablen-Typen
# kompiliert werden soll - mit Angabe des Funktionsprototypen (die Funktion ist
@jit(boolean(uint32))
# vom Typ boolean und erhält als Aufrufparameter einen uint32).
@numba.jit(numba.boolean(numba.uint32))
def isprime(n):
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.
for divisor in range(2, n):
divMax = math.floor(math.sqrt(n))
if n % divisor == 0:
# ein Teiler wurde gefunden, n kann keine
# Primzahl sein --> Abbruch
return(False);
break;


# Nur ungerade Zahlen als Teiler testen.
return(True)
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):
for i in range(1, 500000):
if isprime(i) == True:
if isprime(i):
pass # nur 'pass', da ein 'print' keine Vergleichbarkeit mehr erlaubt
print(i)

</syntaxhighlight>
</syntaxhighlight>


Zeile 59: Zeile 65:
* [[PyPy]]
* [[PyPy]]
* [[nuitka]]
* [[nuitka]]
* [[Cython]]


== Weblinks ==
== Weblinks ==
* [http://numba.pydata.org Webseite des Projekts]
* [http://numba.pydata.org/ Website des Projekts]
* [https://github.com/numba/numba Code auf Github]
* [https://github.com/numba/numba Code auf Github]
[[Kategorie:Python (Programmiersprache)]]
[[Kategorie:Python (Programmiersprache)]]

Aktuelle Version vom 15. Oktober 2024, 14:02 Uhr

Numba

Basisdaten

Entwickler Travis E. Oliphant
Erscheinungsjahr 2012
Aktuelle Version 0.60.0
(13. Juni 2024)
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.

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.