У меня есть генетический код, и я хочу его параллельно на 12 ядер, первая часть - это цикл, который я хочу его параллельно, но после параллели и запуска я вижу, что серийный код быстрее, чем параллельный код, пожалуйста, скажите мне, где я ошибаюсь. Есть ли способ, которым openmp быстрее, чем serrial?Почему последовательный запуск быстрее параллельный openmp
int main() {
srand(time(0));
srand(rand() % 10000007);
G.vertex_degrees();
int step = 0, n_pop = 100;
G.initial_population(n_pop);//parallel shod
G.full_random_array();//movazi shod
clock_t start = clock();
int i = 0,tid,nthreads;
#pragma omp parallel for
for (i = 0; i < n_pop; i++) {
G.Chromosome_Repairing_Method(i);
G.Fitness(i);
}
//cout << "MC Size :" << G.current_Bc_size << " with Time (precise) = " << ((double)(clock() - start))/CLOCKS_PER_SEC << "found it" << endl;
omp_set_num_threads(4);
G является объектом генетического алгоритма и G.Chromosome_Repairing_Method (I); - функция, которая восстанавливает хромосому и G.Fitness (i); - функция, которая вычисляет пригодность каждой хромосомы
Как долго Chromosome_Repairing_Method(), Fitness()? Им нужно потратить много времени на 100 итераций. – coincoin
Мне интересно, если * i * должен быть объявлен в цикле for: for (int i = 0, ...). Поскольку i существует вне области цикла for, возможно, это вызывает проблему. – rcgldr
Возможно, проблема связана с тем, как вы используете свой код ... См. [This] (http://stackoverflow.com/a/10674970/5239503) или [это] (http://stackoverflow.com/a/10736858/5239503) – Gilles