versucht herauszufinden, wie eine Klassenmethode während der Verwendung von JITClass zu überspringen.Numba, Jitclass w/nopython Modus und Wörterbücher
haben ein ziemlich großes rekursive Modell (so ziemlich eine massive for-Schleife), die - pfadabhängigen Berechnungen gegeben, kann nicht mit geraden Numpy vektorisiert werden.
Die Klasse läuft durch eine Reihe von numpy Arrays mit dem allgemein numba freundlicher Syntax aber ich habe einen Abschnitt, der einige der Verfahren, die in einer geordneten Art und Weise ruft:
def operations(self, i, ops_order_config):
ops_dict = self.ops_dict
for index in range(len(waterfall_config)):
try:
if isinstance(ops_config[index], tuple):
ops_dict[ops_config[index][0]](i, ops_config[index][1])
else:
ops_dict[ops_config[index]](i)
except KeyError:
pass
Dieser Teil des Modells ist ziemlich entscheidend für die Flexibilität - die "Config" ist eine geordnete Liste von Tupeln, die die geeignete Methode zum Aufruf enthalten, und die entsprechenden Parameter. Das ops_dict enthält das eigentliche Selbst. Das wird von der Konfig mit den richtigen Parametern aufgerufen.
Wenn ich ein jitclass machen, ist es eine Möglichkeit, jitting dieses Wörterbuch Aspekt nur überspringen?
Vielen Dank. Wenn jitclass verwendet wird und funktioniert, ist es eine sichere Annahme, dass der nopython-Modus angewendet wird? – user7038639
@ user7038639 Ja. Alle Methoden der Klasse werden im nopython-Modus kompiliert. Die [docs] (http://numba.pydata.org/numba-doc/dev/user/jitclass.html) erwähnen dies ausdrücklich: "Alle Methoden einer JITCLASS werden in NOPHONDON-Funktionen kompiliert. Die Daten einer JITCLASS-Instanz sind auf dem Heap als C-kompatible Struktur zugewiesen, so dass kompilierte Funktionen direkten Zugriff auf die zugrunde liegenden Daten haben und den Interpreter umgehen können. " :) – MSeifert
Blah, war zehnmal durch diese Dokumente gegangen und schien das verpasst zu haben. Vielen Dank! – user7038639