[Pour les débutants à Numba] Il est préférable de définir nopython = True pour vérifier si l'accélération est réalisée (pour la version 0.50.0 ou antérieure)

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

[Pour les débutants à Numba] Il est préférable de définir nopython = True pour vérifier si l'accélération est réalisée (pour la version 0.50.0 ou antérieure)
Comment vérifier s'il est dans le type de dictionnaire (Dictionary, Hash) en utilisant tout ou partie
Vérifiez s'il s'agit d'Unix dans le langage de script
Vérifiez s'il s'agit d'Unix dans le langage de script
Vérifiez «[Windows] Comment savoir si l'exe est x64 ou x86, partie 2» avec Go sur macOS
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
[Blender] Script pour vérifier si celui sélectionné est un mesh
Tensorflow-GPU semble être ensemble s'il s'agit de TF2.0 ou d'une version ultérieure?