„Numba (Softwarepaket)“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
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. |
| AktuelleVersion = 0.60.0 |
||
| AktuelleVersionFreigabeDatum = |
| 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- |
| 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- |
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]] |
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=" |
<syntaxhighlight lang="python"> |
||
import numba |
|||
import math |
|||
# |
# Sogenannter decorator; teilt mit, dass diese Funktion |
||
# kompiliert werden soll - mit Angabe |
# 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): |
def isprime(n): |
||
⚫ | |||
return False # 0 und 1 sind keine Primzahlen. |
|||
⚫ | |||
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)) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
# Primzahl sein --> Abbruch |
|||
⚫ | |||
break; |
|||
# Nur ungerade Zahlen als Teiler testen. |
|||
return(True) |
|||
⚫ | |||
if (n % divisor) == 0: |
|||
⚫ | |||
⚫ | |||
return True # Kein Teiler gefunden, n ist prim. |
|||
for i in range(1, 500000): |
for i in range(1, 500000): |
||
if isprime(i) |
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 |
* [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 |
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.