Sehen wir uns kurz an, wie Lambdafunktionen mit dem Intel Parallel Comppser ausgeführt werden können, der Bestandteil des Parallel Studios ist. Die Lambdafunktionen sind eine neue Funktionalität des C++0x Normenentwurfs, der durch den Intel C++ Compiler unterstützt wird. Er ist vor allem in Kombination mit Bibliotheken nützlich, wie Intel Threading Building Blocks oder anderen Bibliotheken von Mustervorlagen, die eine Funktionsdefinition verwenden können. Sehen wir uns das also näher an. Wenn wir im Visual Studio, in dem das Intel Parallel Studio installiert ist, die Hilfefunktion aufrufen, können wir hier mehr über die Lambdafunktionen erfahren. Wir sehen hier einige Informationen über die Lambdafunktionen, undsehen, dass Lambda-Ausdrücke hauptsächlich Funktionsobjekte umschreiben. Diese dienen in Verbindung mit den Threading Building Blocks zur vereinfachten Verwendung von Algorithmus Vorlagen, die in den Threading Building Blocks eingebaut sind. Wenn wir auf die Funktionsweise der C++ Lambdafunktionen klicken, erhalten wir Informationen darüber, wie sie eingefügt werden. Die Lambdafunktionen werden in einer Reihe mit eckigen Klammern eingefügt und es können Ampere oder ähnliche Zeichen dazwischengesetzt werden. In jedem Fall definieren diese eckigen Klammern eine Lambda-Erfassungsfunktion. Wir sehen hier, dass der Lambda- Erfassung Parameter folgen können. Es ist hier zwar nicht zu sehen, aber Sie erhalten einen Ergebnistyp und können dann den Inhalt der Funktion selbst fertig stellen. Sie können problemlos eingefügt werden. Sie schreiben auf diese Weise eine Lambdafunktion inline in Ihren Code und erstellen so ein Funktionsobjekt. Sehen wir uns jetzt eine der Beispielanwendungen an, die mit dem Intel Parallel Composer und N-Queens mitgeliefert werden. Wir haben es bereits in verschiedenen Videos gesehen. Die setQueen Funktion ist hier eigentlich ein Kandidat für das Einbauen einer Parallelität. setQueen wird jedoch eigentlich durch Solve beansprucht. Wenn wir uns die Funktion ansehen, von der sie beansprucht wird, können wir sehen, dass wir hier sehr einfach Threading Building Blocks einfügen können. Um Threading Building Blocks einzufügen müssen wir nur eine Klasse erstellen, die einen Operator mit dem Code enthält, den wir parallel ausführen möchten. Wir beginnen also damit, eine Klasse zu erstellen, die wir dann aus dem setQueen Parallel.for parallel ausführen. Sie sehen hier die definierte Klasse für setQueen. Wir haben die Iterationen definiert und einen Operator erstellt, der den Text des Codes enthält. Jetzt ist es nur noch ein kleiner Schritt, den Parallel.For einzufügen, der die blockierte Reihe enthält, mit der Sie operieren möchten, den Iterater leiten Sie dann auf setQueen weiter. Dieser Code arbeitet ausgezeichnet, und bringt gute Performance, aber mir gefällt daran nicht, dass dieser Code für setQueen in einer Klassendefinition angelegt ist. Er liegt nicht im Text des Parallel.For das macht es schwieriger ihn zu lesen, lesen,denn wenn Sie sich den Parallel.For ansehen, können Sie eigentlich nicht den Ausführungscode sehen, da dieser in eine Klassenfunktion verschoben wurde. Ich habe hier eine andere Crop-Version des Programms, die wir für Lambdafunktionen verwendet haben. Sie sehen, dass in diesem Fall der gesamte Code in einem Inhalt ist. Wir haben die Parallele für die Ausführung, den Iterater wie zuvor, aber wir haben die Lambdafunktion und eckigen Klammern hier definiert, die den Code darstellen, den wir im Original-Ablaufprogramm hatten. In diesem Fall sieht das Parallelprogramm dem ursprünglichen Ablaufprogramm wesentlich ähnlicher. Wir haben hier nur mit Parallel.For gearbeitet, anstatt mit dem For, das wir zuvor benutzten und der Code bleibt hier so bestehen. Dies ist einer der Gründe, warum wir Lamdafunktione wirklich gern verwenden und ein gutes Beispiel dafür, wie man Lambdafunktionen im TBB kombiniert um besser lesbare Parallelcodes zu erstellen. Lambdafunktionen werden also voll durch den Intel C++ Compiler unterstützt, der Bestandteil des Intel Parallel Composers in unserem Intel Parallel Studio ist. Erfahren Sie mehr über das Intel Parallel Studio unter intel.com/go/parallel.
Dieses fünf Minuten lange Video umschreibt, wie Lambdafunktionen gemeinsam mit Threaded Building Blocks dafür sorgen, dass Parallelcodes leichter lesbar sind.
