Remarque: le remplacement du mode objet sera aboli après la version 0.50.0 de Numba (http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-object-mode- fall-back-behavior-when-using-jit), le contenu de cet article est limité aux versions antérieures.
Qu'est-ce que Numba? Veuillez consulter cet article pour ceux qui disent: https://qiita.com/gyu-don/items/9d223b007ca620e95abc
Numba essaie d'abord d'accélérer en mode nopython, et si cela échoue, il passe en mode objet (qui est plutôt lent) et l'exécute (retour en mode objet). Cependant, cet article dit qu'il est préférable de définir nopython = True dès le début pour des raisons de sécurité, car cela changera s'il sera ou non en mode nopython avec un changement de code relativement petit. C'est le contenu de. (La valeur par défaut est nopython = False, et si vous définissez ceci sur nopython = True, il renverra une erreur lorsque le mode nopython échoue.)
Par exemple, dans le code suivant, si vous commentez l'instruction assert, elle sera exécutée en mode nopython, et si vous ne commentez pas, elle sera exécutée en mode objet.
import numpy as np
import numba
@numba.jit
def myfunc():
for i in range(1000):
for k in range(1000):
#assert 0<1
pass
hoge = [1,2,3]
hoge = np.array(hoge)
myfunc()
Dans le cas de ce code, ce n'est pas une bonne écriture en Numba au moment d'assigner des variables de types différents (list et ndarray) au même nom de variable hoge en premier lieu, mais même dans une si mauvaise écriture, en mode nopython Il semble qu'il puisse être exécuté. Cependant, quand il y avait une instruction assert dans la boucle for, elle passait immédiatement en mode objet (je ne connais pas la cause). De plus, même si vous l'écrivez bien, si vous utilisez une fonction que le mode nopython ne prend pas en charge, vous serez en mode objet. Exemple ⇒ http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#id1
Dans les versions récentes de Numba, un message d'avertissement apparaît lorsque l'exécution du mode nopython échoue, mais dans les anciennes versions de Numba, aucun message d'avertissement n'apparaît même si le mode nopython échoue __ (version 0.48.0) J'ai reçu un avertissement, mais dans la version 0.41.0 je n'ai pas reçu d'avertissement), donc même si la vitesse d'exécution ralentit soudainement en jouant avec divers codes, il est difficile d'en remarquer la cause.
@ numba.jit (nopython = True) est sûr car il renverra une erreur si l'exécution du mode nopython échoue.
Recommended Posts