============== Vorbereitungen ============== Für diese Session gibt es eine neue Fassung der Vorlesungsbibliothek, die unter _/home/numerik/pub/hpc/session13/hpc_ öffentlich auf unseren Rechnern zur Verfügung steht. Auf den Rechnern in unserem Pool in E.44 und auf der Thales können Sie die Bibliothek unmittelbar verwenden, wenn beim Übersetzen zusätzlich die Option `-I/home/numerik/pub/hpc/session13` angegeben wird. Da die Vorlesungsbibliothek nur aus Header-Dateien besteht, muss keine Bibliothek beim Zusammenbau des Programms angegeben werden. In dieser Fassung der Vorlesungsbibliothek stehen bereits einige Erweiterungen zur Verfügung. Ein Beispiel hierfür sind die `apply`-Template-Funktionen aus ``: :import: /home/numerik/pub/hpc/session13/hpc/matvec/apply.h Nun muss nicht jedes mal erneut entschieden werden, ob es für den Cache günstiger ist, zuerst die Zeilen oder die Spalten zu durchlaufen. Den beiden `apply`-Methoden wird nur eine Matrix übergeben und ein Funktionsobjekt und letzteres wird dann auf allen Elementen zusammen mit den jeweiligen Indizes aufgerufen. Die Template-Funktion `apply` kommt hier in zwei Varianten, die sich nur in der `const`-ness von des Matrix-Parameters unterscheiden. Wie üblich erfolgt die Auswahl automatisch durch den Übersetzer in Abhängigkeit der `const`-ness der übergebenen Matrix. Aufgabe ======= In der beigefügten Vorlage nutzt `randomInit` noch nicht die `apply`-Template-Funktion. Stattdessen durchläuft es selbst die Matrix in der jeweils günstigeren Weise. Vereinfachen Sie die Funktion, indem Sie `apply` verwenden. So können Sie die Vorlage übersetzen: ---- SHELL (path=session13) -------------------------------------------------------- g++ -O3 -std=c++11 -o random_init1 -I/home/numerik/pub/hpc/session13 random_init1.cpp ./random_init1 ------------------------------------------------------------------------------------ Vorlage ======= :import: session13/random_init1.cpp :navigate: up -> doc:index next -> doc:session13/page02