У меня есть программа следующая программа C++, которая не использует никакой связи, и то же тождественны работа делается на всех ядрах, я знаю, что это не использует параллельную обработку на всех:Стоимость OpenMPI в C++
unsigned n = 130000000;
std::vector<double>vec1(n,1.0);
std::vector<double>vec2(n,1.0);
double precision :: t1,t2,dt;
t1 = MPI_Wtime();
for (unsigned i = 0; i < n; i++)
{
// Do something so it's not a trivial loop
vec1[i] = vec2[i]+i;
}
t2 = MPI_Wtime();
dt = t2-t1;
Я запускаю эту программу в одном узле с двумя процессором Intel® Xeon® E5-2690 v3, поэтому у меня есть 24 ядра. Это выделенный узел, и никто его не использует. Поскольку нет связи, и каждый процессор выполняет одинаковое количество (одинаковой) работы, запуск его на нескольких процессорах должен давать одинаковое время. Тем не менее, я получаю следующие разы (в среднее время, в течение всех ядер):
1 ядро: 0,237
2 жилы: 0,240
4 ядра: 0,241
8 ядер: 0,261
16 ядер: 0,454
Что Коула d приведет к увеличению времени? Особенно для 16 ядер. У меня есть callgrind, и я получаю примерно одинаковое количество промахов данных/команд на всех ядрах (процент пропусков одинаковый).
Я повторил тот же тест на узле с двумя процессорами Intel® Xeon® E5-2628L v2 (16 ядер вместе), я наблюдаю такое же увеличение времени выполнения. Это как-то связано с реализацией MPI?
Я не совсем понимаю, что вы делаете - вы используете отдельный экземпляр одной и той же программы на каждом ядре отдельно? Кроме того, вы говорите о Cores (24), а затем о процессорах - что это? – MikeMB
Да, я бегу, я запускаю отдельный экземпляр одной программы на каждом ядре. Извините за смешение слов, я отредактировал его. – user302157