Will multi threading provide any performance boost?

Jestem nowy w programowaniu w ogóle, więc pamiętaj o tym, kiedy odpowiesz na moje pytanie.

Mam program, który pobiera dużą tablicę 3D (1 miliard elementów) i sumuje elementy wzdłuż różnych osi, tworząc dwuwymiarową tablicę rzutu każdej strony danych. Problem polega na tym, że jest on bardzo intensywny, ponieważ program stale pobiera informacje z pamięci RAM, zarówno do odczytu, jak i do zapisu.

Pytanie brzmi, czy osiągnę jakikolwiek wzrost wydajności, jeśli wielowątkowię program, czy też skończę na wąskim gardle dostępu do pamięci RAM? Kiedy mówię wielowątkowość, mam na myśli tylko wielowątkowość dla 2 lub 4 rdzeni, nie więcej.

Jeśli to pomoże, moja obecna konfiguracja komputera to 2.4 gHz core2 quad, 1033 fsb, 4 gb RAM przy 667 MHz.

Z góry dziękuję,

- Zrobione

Edytować:

Wydaje mi się, że ludzie tutaj są znacznie bardziej zainteresowani tym pytaniem, którego po raz pierwszy się spodziewałem. Rozwinę pytanie i opublikuję kod dla zainteresowanych.

Przede wszystkim trochę tła, żebyś zrozumiał, skąd pochodzę. Jestem studentem studiów magisterskich w dziedzinie inżynierii mechanicznej, który jakoś zdołał wybrać temat, który prawie nie miał nic wspólnego z inżynierią mechaniczną. Odbyłem 1 kurs we wstępnej java (wymuszony) około 5 lat temu i nigdy nie dotknąłem programowania do około miesiąca temu, kiedy zacząłem pracę na poważnie. Wziąłem też (ponownie zmuszony, wciąż nie wiem dlaczego) kurs elektroniki i inżynierii komputerowej, zajmowaliśmy się mikrokontrolerami (8-bitowymi), ich wewnętrznym działaniem i kodowaniem ASM dla nich. Poza tym nie wiem prawie nic o programowaniu.

Oto kod:

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;
    } 

Ta sekcja kodu działa tylko na osi Z. Główne dane, ze względu na sposób, w jaki zostały skonstruowane, mają dziwny system adresowania, ale nie musisz się tym martwić. Jest też inny kod do wykonywania rzutów innych stron sześcianu, ale robią one bardzo różne rzeczy.

questionAnswers(19)

yourAnswerToTheQuestion