Will multi threading provide any performance boost?

Ich bin neu in der Programmierung im Allgemeinen, bitte denken Sie daran, wenn Sie meine Frage beantworten.

Ich habe ein Programm, das ein großes 3D-Array (1 Milliarde Elemente) verwendet und Elemente entlang der verschiedenen Achsen summiert, um ein 2D-Array einer Projektion jeder Seite der Daten zu erstellen. Das Problem hierbei ist, dass es sehr RAM-intensiv ist, da das Programm ständig Informationen vom RAM abruft, sowohl beim Lesen als auch beim Schreiben.

Die Frage ist, ob ich Leistungssteigerungen erhalte, wenn ich das Programm multithreade, oder ob ich am Ende auf einen RAM-Zugriffsengpass stoße. Wenn ich Multithreading sage, meine ich Multithreading nur für 2 oder 4 Kerne, nicht mehr.

Wenn es hilft, ist meine aktuelle Computerkonfiguration 2,4 GHz Core2 Quad, 1033 fsb, 4 GB RAM bei 667 MHz.

Danke im Voraus,

-Fake

Bearbeiten:

Mir scheint, die Leute hier interessieren sich viel mehr für diese Frage, die ich zuerst erwartet hatte. Ich werde die Frage erweitern und einen Code für diejenigen veröffentlichen, die interessiert sind.

Zuallererst ein wenig Hintergrundwissen über mich, damit Sie verstehen, woher ich komme. Ich bin ein Maschinenbaustudent, der es irgendwie geschafft hat, ein Thema auszuwählen, das so ziemlich nichts mit Maschinenbau zu tun hat. Ich habe vor ungefähr 5 Jahren einen Kurs in einführendem Java (erzwungen) belegt und habe die Programmierung erst vor ungefähr einem Monat angefasst, als ich meine Diplomarbeit ernsthaft begann. Ich habe auch einen Kurs in Elektronik und Computertechnik belegt (erneut erzwungen, ich weiß immer noch nicht warum), wir haben uns mit Mikrocontrollern (8-Bit), ihrem Innenleben und einigen ASM-Codierungen befasst. Ansonsten weiß ich so gut wie nichts über Programmierung.

Hier ist der Code:

int dim = 1000;
int steps = 7 //ranges from 1 to  255

for (int stage = 1; stage < steps; stage++)
for (int j = 0; j < dim; j++)
    for (int i = 0; i < dim; i++)
    {
        sum = 0;
        for (int k = 0; k < dim; k++)
            if (partMap[(((i * dim) + k) * dim) + j] >= stage)
                sum++;

        projection[(j*dim) + i] = sum;
    } 

Dieser Codeabschnitt wird nur auf der Z-Achse ausgeführt. Die Hauptdaten haben aufgrund ihres Aufbaus ein seltsames Adressierungssystem, über das Sie sich jedoch keine Gedanken machen müssen. Es gibt auch einen anderen Code für die Projektionen anderer Seiten des Würfels, aber diese machen ganz andere Dinge.

Antworten auf die Frage(19)

Ihre Antwort auf die Frage