2010-12-07 3 views
4

Ich habe ein Programm, das waaaay unter Par durchführt, und ich möchte es profilieren. Es ist jedoch Multithreading, so dass ich keinen guten Weg finde, dieses Ding zu profilieren. Irgendein Rat?Wie kann ich ein Multithread-Programm profilieren?

Ich habe Yappi versucht, aber es Segfaults auf OS X :(

EDIT: Das ist in Python, sorry dafür unter Profilierung setzen ...

Antwort

2

Sind Sie Multithreading oder Multiprocessing? Wenn Sie nur Multithreading sind, dann ist das das Problem. Python hat derzeit aufgrund des Global Interpreter Lock (GIL) Probleme mit Multithreading auf einem Multiprozessorsystem. Sie arbeiten daran, es für Python 3.2 zu reparieren - zumindest so, dass Ihr Programm auf einem einzelnen Kern genauso schnell läuft wie auf mehreren Kernen.

Wenn Sie nicht überzeugt sind, werfen Sie einen Blick auf die Schießergebnisse für das Thread-Ring-Programm. Mit single core läuft es schneller als mit quad cores.

Wenn Sie stattdessen Multiprocessing verwenden, kann das Profiling ebenfalls schwierig sein, da Sie dann den CProfiler von jedem einzelnen Prozess ausführen müssen. Es gibt some questions dass point you in die richtige Richtung obwohl.

+0

Thread-Ring ist kein gutes Beispiel, da es bei Thread-Ring nur um Task-Switching geht - also ist Java Single Core auch schneller als Java Quad Core. http://shootout.alioth.debian.org/u32/program.php?test=threadring&lang=java&id=4 – igouy

2

Je nachdem, wie weit Sie gekommen sind, in die Problembehandlung, gibt es einige Tools, die Sie in die richtige Richtung zeigen könnte.

  • „top“ ein hilfreicher Start ist um Ihnen zu zeigen, wenn Ihr Problem CPU-Zeit brennt oder einfach für Sachen wartet.

  • "dtruss -c" kann Ihnen zeigen, wo Sie Zeit verbringen und welche Systemaufrufe die meiste Zeit beanspruchen.

Beide können Ihnen einen Hinweis geben, ohne etwas über Python zu wissen.

Wenn Sie nur yappi verwenden möchten, ist es nicht zu viel Arbeit, eine virtuelle Box einzurichten und irgendeine Art von Linux auf Ihrem Rechner zu installieren. Ich merke, dass ich das von Zeit zu Zeit mache, wenn ich etwas ausprobieren möchte.

Es könnte natürlich Dinge geben, die ich nicht kenne, die es unmöglich machen oder nicht die Mühe wert sind. Das Profiling auf einem anderen Betriebssystem, das virtualisiert ausgeführt wird, liefert möglicherweise nicht die exakt gleichen Ergebnisse, kann aber dennoch hilfreich sein.

+0

Wie es passiert, ich Yappi auf einer virtuellen Maschine eingerichtet, und tatsächlich, yappi schlägt fehl. – Alex

Verwandte Themen