2016-06-28 5 views
4

Ich führe ein Programm, das numerische ODE-Integration in Julia durchführt. Ich verwende Windows 10 (64bit) mit Intel Core i7-4710MQ @ 2.50Ghz (8 logische Prozessoren).Julia verwendet nur 20-30% meiner CPU. Was soll ich machen?

Ich bemerkte, dass, wenn mein Code auf Julia lief, nur maximal 30% der CPU verwendet wurden. Ich ging in die parallelization Dokumentation, begann Julia mit: C:\Users\*****\AppData\Local\Julia-0.4.5\bin\julia.exe -p 8 und erwartet, Verbesserungen zu sehen. Ich habe sie jedoch nicht gesehen.

Deshalb meine Frage ist die folgende: Gibt es eine besondere Art, die ich meinen Code schreiben muss, damit es CPU effizienter verwendet? Ist das vielleicht eine Einschränkung meines Betriebssystems (Windows 10)?

Ich übermittle meinen Code in der Julia-Konsole mit dem Befehl: include("C:\\Users\\****\\AppData\\Local\\Julia-0.4.5\\13. Fast Filesaving Format.jl"). In diesem Code verwende ich einige zusätzliche Pakete mit: using ODE; using PyPlot; using JLD.

Ich messen die CPU-Auslastung mit Windows "Task-Manager".

+3

Sie müssen Ihren Code manuell für die Parallelverarbeitung anpassen. Hier ist die Referenz für die Parallelverarbeitung http://docs.julaulang.org/en/release-0.4/manual/parallel-computing/. Ich bin kein Experte, aber Sie können in der Regel berechnen geladene Schleifen parallel mit @ @ parallel Makro und es gibt "pmap" für Gleichgewichts für Karte in Parallellage. –

+1

Ja, mein Beispiel war nur ein vergeblicher Versuch zu sehen, ob es eine "Abkürzung" für die Erhöhung der CPU-Nutzung gibt. Ich werde irgendwann in der Zukunft meinen Code parallelisieren müssen. Vielen Dank. –

+1

Sie können auch diese zwei SO Beiträge [hier] (http://stackoverflow.com/questions/37287020/how-and-when-to-use-async-and-sync-in-julia/37287021#37287021) und [hier] (http://stackoverflow.com/questions/37846838/what-exactly-is-the-difference-between-parallel-and-pmap/37849587#37849587) für einige zusätzliche Anleitung zur Parallelität in Julia –

Antwort

12

Die -p 8 Option julia beginnt 8 Arbeitsprozesse und deaktiviert Multithreading in Bibliotheken wie BLAS und FFTW so dass die Arbeiter überzeichnen nicht die physischen Threads auf dem System - da diese Leistung tötet in gut ausgewogen verteilte Workloads . Wenn Sie mehr Geschwindigkeit aus bekommen möchten, dann müssen Sie Arbeit zwischen diesen Arbeitern verteilen, z. indem jeder von ihnen eine unabhängige Berechnung durchführt oder indem er an einer Berechnung über SharedArrays mitarbeitet. Sie können nicht einfach nur Mitarbeiter hinzufügen und das Programm nicht ändern. Wenn Sie BLAS (viele Matrix-Multiplikationen) oder FFTW (viele Fourier-Transformationen) verwenden, erhalten Sie automatisch Multithreading aus diesen Bibliotheken, wenn Sie nicht das -p-Flag verwenden. Ansonsten gibt es in Julia noch kein (nicht experimentelles) Threading auf Benutzerebene. Es gibt experimentelle Threading-Unterstützung und Version 1.0 unterstützt Threading, aber ich würde es nicht empfehlen, es sei denn, Sie sind ein Experte.

+0

Ah, vielen Dank für die gute Antwort noch einmal. Ich benutze einige FFTs, deshalb sollte ich nicht das '-p' Flag verwenden. Aber dann bleibt meine Frage: Ist es möglich, die CPU-Auslastung zu erhöhen? Oder hat das nicht etwas mit Julia zu tun, so wie der Prozessor strukturiert ist? p.s .: Ich bin natürlich kein Experte, also wenn die Prozesse, die "mehr CPU-Nutzung" ermöglichen, zu kompliziert sind, dann werde ich es lassen. Vielen Dank noch mal! –

+2

@George: Das ist eine gute Antwort. Wenn ich nur eine Allgemeinheit hinzufügen kann, da ich Julia nicht kenne, dient der Parallelismus zwei verschiedenen Zwecken. Eine davon ist die Leistung, wenn Sie herausfinden können, wie Sie Ihr Programm so strukturieren, dass es mehr als eine CPU gleichzeitig nutzen kann. Der andere hat nichts mit Leistung zu tun.Wenn Ihr Programm unabhängige E/A von mehreren verschiedenen Streams verarbeiten muss, kann es die Dinge vereinfachen, jedem Stream einen eigenen Thread zuzuweisen. Ob dies mit mehreren CPUs oder einer CPU geschieht, ist völlig nebensächlich. –

+0

Okay, gut. Ich denke, Ihre Antworten sind ziemlich zufriedenstellend: Ich muss lernen, ein Programm so zu strukturieren, dass es "paralleles Rechnen" verwendet. Ich danke Ihnen beiden, ich werde mit der Dokumentation auf der Julia Website beginnen. –

Verwandte Themen