2017-01-04 4 views
-2

У меня есть генетический код, и я хочу его параллельно на 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); - функция, которая вычисляет пригодность каждой хромосомы

+1

Как долго Chromosome_Repairing_Method(), Fitness()? Им нужно потратить много времени на 100 итераций. – coincoin

+0

Мне интересно, если * i * должен быть объявлен в цикле for: for (int i = 0, ...). Поскольку i существует вне области цикла for, возможно, это вызывает проблему. – rcgldr

+1

Возможно, проблема связана с тем, как вы используете свой код ... См. [This] (http://stackoverflow.com/a/10674970/5239503) или [это] (http://stackoverflow.com/a/10736858/5239503) – Gilles

ответ

0

Задачи параллелизации требуют времени.

У вас когда-либо была задача в реальной жизни и 3 работника, и я подумал: «Я просто сделаю это очень быстро, это будет быстрее, чем объяснить, что нужно сделать с этими тремя парнями»?

Что ж, это могло произойти здесь. Один парень, «просто делающий это», был быстрее, чем несколько парней, которые его организовали, делали это и снова организовывали, чтобы объединить результаты.

Выполнение штуки параллельно не является серебряной пулей. Задачи должны быть подходящими для него или вы только добавите накладные расходы.