Frage

Ist es möglich, dass Microsoft in der Lage sein wird zu F # Programme zu machen, entweder bei VM-Ausführungszeit, oder eher zum Zeitpunkt der Kompilierung, erkennt, dass ein Programm mit einer funktionalen Sprache gebaut wurde und es automatisch besser parallelisieren?

jetzt rechts glaube ich, gibt es keine solche Anstrengung ist ein Programm, um zu versuchen und auszuführen, die als Single-Threaded-Programm als Multi-Threaded-Programm automatisch erstellt wurden.

Das heißt, würde der Entwickler ein Single-Threaded-Programm codieren. Und der Compiler würde ein kompilierte Programm ausspucken, die mit mutexes Multi-Threaded abgeschlossen ist und die Synchronisation, wo nötig.

Würden diese Optimierungen im Task-Manager im Prozess Fadenzahl sichtbar sein, oder es wäre niedrigeres Niveau als das?

War es hilfreich?

Lösung

Ich denke, dies in naher Zukunft unwahrscheinlich ist. Und wenn es geschieht, denke ich, es wäre an dem IL-Ebene (Montag Umschreiben) eher eher als Sprachniveau (zum Beispiel etwas Bestimmtes zu F # / Compiler). Es ist eine interessante Frage, und ich erwarte, dass einige feinen Köpfe bei dieser Suche wurden und werden auch weiterhin auf diesem für eine Weile sehen, aber in der nahen Zukunft, ich glaube, der Fokus es einfacher sein wird, auf was für die Menschen das lenken Einfädeln / Parallelisierung von Programmen, und nicht nur mit allen es wie von Zauberhand passieren.

(Sprache Funktionen wie F # async Workflows und Bibliotheken wie der task parallel Bibliothek und andere , sind gut Beispiele für kurzfristigen Fortschritt hier, sie die meisten schweren Heben für Sie tun können, vor allem, wenn Ihr Programm als zwingend notwendig, mehr deklarative ist, aber sie bedürfen noch den Programmierer opt-in, tun Analyse für Richtigkeit / Sinnhaftigkeit und wahrscheinlich machen leichte Veränderungen an der Struktur des Codes alles funktioniert.)

Wie auch immer, das ist alle Spekulation; wer kann sagen, was die Zukunft bringen wird? Ich freue mich auf der Suche nach (und hoffentlich machen einen Teil davon passieren). :)

Andere Tipps

ist, dass F # von Ocaml und Ocaml Compiler abgeleitet ist, können Ihre Programme viel besser als andere Compiler optimieren, ist es wahrscheinlich getan werden könnte.

Ich glaube nicht, ist es möglich, Code in eine allgemein nützlichen Art und Weise und die funktionalen Programmierung Facette F # autovectorize ist im wesentlichen irrelevant in diesem Zusammenhang.

Das schwierigste Problem Erkennung ist nicht, wenn Sie subcomputations parallel durchführen kann, ist es zu bestimmen, wenn die Leistung nicht beeinträchtigen wird, dh wenn die Teilaufgaben ausreichend lange dauern wird zu berechnen, dass es sich lohnt, die Leistungseinbußen von einer parallelen Laich nehmen.

Wir haben dies im Detail im Rahmen des wissenschaftlichen Rechnens erforscht, und wir haben einen hybriden Ansatz in unserer F # für Numerik-Bibliothek übernommen. Unsere parallele Algorithmen, basieren auf dem Microsoft Task Parallel Library, erfordern einen zusätzlichen Parameter, die eine Funktion der geschätzten Rechenkomplexität eines Unteraufgabe geben ist. Auf diese Weise können unsere Implementierung übermäßige Unterteilung zu vermeiden und eine optimale Leistung zu gewährleisten. Darüber hinaus ist diese Lösung ideal für die # Programmiersprache F, da der Funktionsparameter, die Komplexität der Beschreibung ist in der Regel eine anonyme First-Class-Funktion.

Cheers, Jon Harrop.

Ich denke, die Frage nach dem Punkt der .NET architecture-- F # fehlt, C # und VB (etc.) all IL erhalten zusammengestellt, die dann über die JIT-Compiler in Maschinencode kompiliert werden. Die Tatsache, dass ein Programm in einer funktionalen Sprache geschrieben wurde, nicht relevant-- ist, wenn es Optimierungen (wie Endrekursion, etc.) zur Verfügung, die JIT-Compiler von der IL, sollte der Compiler sie nutzt.

Natürlich bedeutet dies nicht, dass funktionellen Code zu schreiben irrelevant-- offensichtlich ist, gibt es Möglichkeiten, IL zu schreiben, das wird parallelisieren better-- aber viele diese Techniken in jeder .NET-Sprache verwendet werden könnten.

Es gibt also keine Notwendigkeit, Flagge des IL als von F #, um es kommt für mögliche Parallelität zu untersuchen, noch würde so etwas wünschenswert sein.

Es gibt aktive Forschung für autoparallelization und Auto-Vektorisierung für eine Vielzahl von Sprachen. Und man könnte hoffen, (da ich wie F # wirklich), dass sie einen Weg concive würden, um zu bestimmen, ob eine „reiner“ Nebeneffekt freie Teilmenge verwendet wurde, und dann, dass parallelisieren. Da auch Simon Peyton-Jones der Vater von Haskell ist bei Microsoft arbeiten ich habe eine harte Zeit nicht beliving gibt es einige fantastische Sachen comming.

Es ist möglich, aber unwahrscheinlich. Microsoft verbringt es ist Zeit, die meisten Unterstützung und Funktionen angehalten, ihre größten Kunden zu implementieren. Das bedeutet in der Regel C #, VB.Net und C ++ (nicht unbedingt in dieser Reihenfolge). F # scheint nicht, wie es auf der Liste der Prioritäten ist.

Microsoft entwickelt derzeit zwei Wege für die Parallelisierung von Code: PLINQ (Pararllel Linq, die viel zu funktionalen Sprachen verdankt), die ursprünglich Teil des Robotics Studio war Parallel Library (TPL) und der Task. Ein Beta von PLINQ ist verfügbar hier .

würde ich mein Geld auf PLINQ immer die Norm für die automatische Parallelisierung von .NET-Code setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top