S
knivil schrieb:
Ja, aber die Indexierung waere anders. Mache dir einfach klar, was der Unterschied zwischen int a[5][5] und int a[25] ist.
Das ist es ja. Ich sehe außer in der Adressierungsart und eventuell der Speicheranordnung, keinen Unterschied. Ob ich jetzt auf a[25] einfach iteriere (mit einfacher Indexierung) oder auf a[5][5] zweifach (nested loops; mit zweifacher Indexierung), ist doch egal, letztendlich bleibt die Arbeit gleich: 25 Iterationen. Die 25 Elemente von a[25] liegen bei a[5][5]jetzt halt zeilenweise aufgeteilt im Speicher. Es geht darum, dass ich anwendungsspezifische Beispiele für Nested Loops mittels OpenMP schreiben möchte. Der Mehraufwand der dadurch aber entsteht, relativiert sich nicht, wenn ich das Ganze auch mit einem einfachen Array umsetzen kann, wo der Aufwand zur Parallelisierung mittels OpenMP sehr gering ist. Auf jeden Fall würde es mich schon interessieren, wozu mehrdimensionale Arrays dann gut bzw. gedacht sind und wie ich mehrdimensionale Vektoren eines mathematischen Raumes, mit mehrdimensionalen Arrays umsetzen kann.
knivil schrieb:
Darueber hinaus ist das Schwachsinn:
const uint64_t NVdim1 = 400000000ULL, NVdim2 = 400000000ULL;
uint64_t a[NVdim1][NVdim2] = {{0ULL}};
Wieviel Speicher belegt Array a in diesem Fall?
((((400000000*2)*16 Bytes):1024):1024):1024 = 11,92 GByte
* 3 2D-Vektoren = 35,76 GByte.
Was is daran Schwachsinn? Sicher, für die gezeigten Beispiele, ergibt das wenig Sinn. Die große Anzahl ist auch nur dazu da, um die Zeitunterschiede zwischen serieller und paralleler Ausführung deutlicher zu machen.
Faktisch schreibe ich wissenschaftliche Anwendungen für den Astrophysikalischen Bereich. An unserer Forschungseinrichtung ist ein solch großer Input an Daten der Regelfall. CPU- und Speicher (RAM, SDD/HDD) steht mehr als genug zur Verfügung. Von daher kratzen mich die rund 36 GByte RAM-Belegung nicht.
Natürlich könnte ich weitere Berechnungen in die Schleifen einbauen, um das ganze zu verzögern oder eine weitere Schleife drumherum kapseln, sodass das öfters ausgeführt wird, aber ich wollts so wie es ist, dabei belassen. Es dient ja nur zu Demonstrationszwecken.