2016-08-02 38 views
1

Ich höre sehr widersprüchliche Informationen über Octaves experimentelle JIT-Compiler-Funktion, von "es war ein Spielzeugprojekt, aber es funktioniert im Grunde nicht" bis "Ich habe es benutzt und ich habe einen signifikanten beschleunigen".Octave JIT-Compiler. Aktueller Status und minimales Beispiel, das den Effekt zeigt

Ich bin mir bewusst, dass, um es zu benutzen erfolgreich muss man

  • Compile Oktave mit den --enable-jit bei configure Zeit
  • Starten Oktave mit der --jit-compiler Option
  • JIT-Kompilierung Präferenz zur Laufzeit angeben mit jit_enable und Befehle

aber ich konnte nicht reproduzieren die Effekte überzeugend; Ich bin mir nicht sicher, ob dies daran liegt, dass ich irgendwelche anderen Schritte verpasst habe, die mir unbekannt sind, oder es hat einfach keinen großen Einfluss auf meinen Computer.

F: Kann jemand, der das Feature erfolgreich verwendet hat, ein minimales funktionierendes Beispiel liefern, das seine ordnungsgemäße Verwendung und die Wirkung, die es (falls vorhanden) auf seiner Maschine hat, demonstriert?

Antwort

7

Kurz:

  • Sie brauchen nichts zu tun JIT zu verwenden, sollte es einfach funktionieren und Ihren Code beschleunigen, wenn er kann;
  • ist es meistens nutzlos, weil es nur für einfache Schleifen funktioniert;
  • es ist wenig mehr als ein Beweis für ein Konzept;
  • gibt es keine Zeit zu sich auf die Verbesserung daran zu arbeiten, weil:
    • es ist ein kompliziertes Problem;
    • ist es meistens ein Fix für schlampigen Octave-Code;
    • verwendet LLVM, die zu instabil ist.

F: Kann jemand, der verwendet wird bietet die Funktion erfolgreich ein minimales Arbeitsbeispiel den richtigen Gebrauch zeigt und die Wirkung, die sie (falls vorhanden) auf ihrer Maschine hat?

Es gibt nichts zu zeigen. Wenn Sie Octave mit JIT-Unterstützung erstellen, verwendet Octave automatisch schneller Code für einige Loops. Der einzige Unterschied ist auf die Geschwindigkeit, und Sie müssen Ihren Code nicht ändern (obwohl Sie jit zur Laufzeit deaktivieren):

octave> jit_enable (1) # confirm JIT is enabled 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.00490594 seconds. 
octave> jit_enable (0) # disable JIT 
octave> tic; x = 0; for i=1:100000, x += i; endfor, toc 
Elapsed time is 0.747599 seconds. 

## but you should probably write it like this 
octave> tic; x = sum (1:100000); toc 
Elapsed time is 0.00327611 seconds. 

## If Octave was built without JIT support, you will get the following 
octave> jit_enable (1) 
warning: jit_enable: support for JIT was unavailable or disabled when Octave was built 

Dies ist ein einfaches Beispiel, aber Sie können bessere Beispiele und weitere Details siehe die blog der einzigen Person, die daran arbeitete, sowie his presentation at OctConf 2012. Weitere Details zum (veralteten), Octave's JIT wiki page

Beachten Sie, dass Octaves JIT nur für sehr einfache Loops funktioniert. So einfache Schleifen, die niemand, der mit der Sprache vertraut ist, schreiben würde.Das Feature ist als Beweis für das Konzept und als Ausgangspunkt für jeden, der es erweitern möchte (ich persönlich bevorzuge es, vektorisierten Code zu schreiben, dafür ist die Sprache bestimmt).

Octaves JIT hat ein anderes Problem, das ist, dass es LLVM verwendet. Oktaventwickler haben es für diesen Zweck als zu unzuverlässig empfunden, da es die Abwärtskompatibilität immer wieder unterbricht. Jede kleine Version von LLVM hat Octave-Builds kaputt gemacht, so dass Octave-Entwickler nicht mehr reparieren konnten, als LLVM 3.5 veröffentlicht und standardmäßig deaktiviert wurde.

+2

Vielleicht sollten wir http://wiki.octave.org/FAQ#Just-InTime_compiler aktualisieren und/oder auf diese Antwort verlinken – Andy