3 Stimmen

Ist diese Java-Projektidee praktisch? (Thread-Scheduler und Schwarmoptimierung)

Auf einem Multicore-Box, die Java-Thread-Schedulers Entscheidungen sind ziemlich willkürlich, es weist Thread-Prioritäten basierend darauf, wann der Thread erstellt wurde, von welchem Thread er erstellt wurde usw.

Die Idee ist, einen Abstimmungsprozess mithilfe von pso laufen zu lassen, der zufällig Thread-Prioritäten setzt und schließlich optimale Prioritäten erreicht, bei denen die Fitnessfunktion die Gesamtausführungszeit des Programms ist?

Natürlich würden es mehr Parameter geben, wie die Prioritäten sich während des Laufs verschieben würden, um eine optimale Prioritätsfunktion zu finden.

Wie praktisch und interessant klingt die Idee? und irgendwelche Vorschläge. Nur etwas Hintergrund, ich programmiere seit einigen Jahren in Java/C/C++ mit verschiedenen Projekten, eine weitere Alternative könnte sein, einen Thread-Scheduler basierend darauf in C zu erstellen, wobei der Standard-Thread-Scheduler das Betriebssystem ist.

2voto

wds Punkte 30993

Ihr Ansatz, wie beschrieben, ist ein statischer Ansatz, d.h. Sie müssen das Programm mehrmals ausführen, dann eine Zeitplanlösung erstellen und schließlich Ihre Zeitplaninformationen mit dem Programm versenden.

Das Problem ist, dass bei den meisten nicht-trivialen Programmen die Leistung teilweise von den spezifischen Daten abhängt, mit denen sie arbeiten. Selbst wenn Sie einen optimalen Weg finden, Threads für einen Datensatz zu planen, gibt es absolut keine Garantie dafür, dass dies die Geschwindigkeit bei einem anderen Datensatz verbessern wird. In den meisten Fällen lohnt es sich nicht für Entwickler, bei jedem neuen Release eine lange und mühsame Optimierung durchzuführen, es sei denn vielleicht für große Berechnungsaufgaben (bei denen die Programme wahrscheinlich manuell abgestimmt werden und sowieso nicht in Java geschrieben sind).

Ich würde sagen, ein selbstlernender Thread-Scheduler ist eine nette Idee, aber Sie können ihn nicht als klassisches Optimierungsproblem behandeln. Entweder müssen Sie sicher sein, dass Ihre Zeitplanreihenfolge optimal bleibt (unwahrscheinlich) oder eine Optimierungsmethode finden, die zur Laufzeit funktioniert. Das Problem hier könnte jedoch sein, dass es nicht viel braucht, damit der Overhead Ihres Schedulers jeglichen Leistungsgewinn zerstört, den Sie erhalten könnten.

Ich denke, dies ist eine eher subjektive Frage, aber insgesamt nein, ich glaube nicht, dass es funktionieren würde.

0voto

kizzx2 Punkte 18127

Der beste Weg, um es herauszufinden - starten Sie ein Open-Source-Projekt und sehen Sie die Nutzung/Reaktion der Leute.

Es klingt für mich sehr interessant - aber ich finde es persönlich nicht besonders nützlich. Vielleicht sind wir einfach noch nicht an dem Punkt, an dem nebenläufige Programmierung so verbreitet und einfach ist, wie es sein könnte.

Mit der Förderung der funktionalen Programmierung glaube ich, dass die Welt dazu tendieren würde, Thread-Synchronisation so weit wie möglich zu vermeiden (wodurch die Auswirkung der Threadplanung auf die Gesamtleistung verringert würde).

Aus meiner persönlichen subjektiven Erfahrung können die meisten Leistungsprobleme in Software durch Verbesserung eines einzigen Engpassbereichs gelöst werden, der für 90% des Leistungsabfalls verantwortlich ist. Dieser Optimierer könnte dabei helfen, das herauszufinden. Ich bin mir jedoch nicht sicher, inwieweit die Planungsstrategie die Gesamtleistung tatsächlich verbessern könnte.

Lassen Sie sich jedoch nicht entmutigen! Ich spreche nur ins Blaue hinein. Es macht Spaß, also warum nicht einfach damit spielen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X