Будет ли многопоточность повышать производительность?
Я новичок в программировании в целом, поэтому, пожалуйста, имейте это в виду, когда отвечаете на мой вопрос.
У меня есть программа, которая берет большой трехмерный массив (1 миллиард элементов) и суммирует элементы вдоль различной оси, чтобы создать двумерный массив проекции каждой стороны данных. Проблема здесь в том, что он очень интенсивный, потому что программа постоянно получает информацию от оперативной памяти, как для чтения, так и для записи.
Вопрос в том, получу ли я какое-либо увеличение производительности, если буду использовать многопоточность программы, или я столкнусь с узким местом доступа к ОЗУ? Когда я говорю многопоточность, я имею в виду многопоточность только для 2 или 4 ядер, не более.
Если это помогает, моя текущая конфигурация компьютера - 2,4 ГГц Core2 Quad, 1033 FSB, 4 ГБ оперативной памяти на 667 МГц.
Заранее спасибо,
-Faken
Редактировать:
Мне кажется, что люди здесь гораздо больше интересуются этим вопросом, который я впервые ожидал. Я расширю вопрос и опубликую некоторый код для тех, кто заинтересован.
Прежде всего, немного обо мне, чтобы вы понимали, откуда я. Я аспирант по машиностроению, который каким-то образом сумел выбрать тему, которая не имела никакого отношения к машиностроению. Я прошел 1 курс начального Java (принудительно) примерно 5 лет назад и никогда не занимался программированием, пока около месяца назад я не начал свою диссертацию всерьез. Я также прошел (опять-таки вынужденный, все еще не знаю, почему) курс по электронике и компьютерной инженерии, мы изучили микроконтроллеры (8-битные), их внутреннюю работу и некоторое кодирование ASM для них. Кроме этого, я почти ничего не знаю о программировании.
Вот код:
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;
}
Этот раздел кода работает только по оси Z. Основные данные из-за способа их построения имеют странную систему адресации, но вам не нужно об этом беспокоиться. Существует также другой код для выполнения проекций других сторон куба, но они делают совершенно разные вещи.