====================== Namenskonflikte und Co [TOC] ====================== Bei unseren C Implementierungen haben wir Namenskonflikte durch Namenszusätze vermieden. Zum Beispiel nannten wir verschiedene _GEMM_ Implementierungen `dgemm_var1`, `degemm_var2`, usw. oder etwas mehr aussagekräftig `dgemm_colmajor`, `dgemm_rowmajor`, usw. Konflikte bei globalen Variablen haben wir durch Sorgfalt vermieden: - Beim Benchmark wurden die globalen Arrays `A`, `B`, `C` nur in `main` benutzt. - Die globalen Arrays `A_`, `B_`, `C_` nur in einer gepufferten _GEMM_ Variante. Dass dies bei größeren Projekten nicht mehr so einfach geht, dürfte klar sein. Hier sind im Allgemeinen auch Namenszusätze bei globalen Variablen notwendig. Auch bei den Funktionsnamen wurden eventuelle Namenskonflikte durch das Prefix `d` gelöst. Dies legt fast, dass die Implementierung Matrizen multipliziert deren Elemente vom Typ `double` sind. C-Vorlage mit Namenszusätzen ============================ Wie unschön eine C-Implementierung wird, wenn so Namenskonflikte vermieden werden, soll folgendes Beispiel enthalten. Es enthält sogar Zeilen mit mehr als 80 Zeichen! Es basiert auf der Lösung von Session 6: :import: session8/gemm.c Aufgabe ======= Nutzt C++ als ein verbessertes C, indem ihr: - die Header in den Include-Direktiven anpasst, - Namensräume `bench`, `refColMajor` und `simpleBuffer` statt Namenszusätze verwendet, - bei Funktionsnamen den Buchstaben `d` streicht, wenn dieser genutzt wird, um die Funktion für `double` zu kennzeichnen, und indem ihr - Schleifenvariablen in der Schleife bei der Initialisierung definiert. Natürlich dürfen Typen für Dimensionen auch auf `std::size_t` geändert werden. :navigate: up -> doc:index next -> doc:session8/page02