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.