Я новичок в программировании в целом, поэтому имейте это в виду, когда вы отвечаете на мой вопрос.
У меня есть программа, которая принимает большой 3D-массив (1 миллиард элементов) и суммирует элементы вдоль различной оси, чтобы создать 2D-массив проекции каждой стороны данных. Проблема здесь в том, что она очень интенсивна, поскольку программа постоянно извлекает информацию из бара, как чтение, так и запись.
Вопрос в том, будет ли я увеличивать производительность, если я многопоторую программу, или я в конечном итоге столкнулся с узким местом доступа к ОЗУ? Когда я говорю многопоточность, я имею в виду многопоточность для 2 или 4 ядер, не более.
Если это помогает, моя текущая конфигурация компьютера - 2.4ghz core2 quad, 1033 fsb, 4gb ram на 667mhz.
Спасибо заранее,
-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. Основные данные, связанные с тем, как он был построен, имеют странную систему адресации, но вам не нужно об этом беспокоиться. Существует также другой код для выполнения проекций других сторон куба, но они делают совсем другие вещи.