为什么串行运行更快并行openmp

时间:2017-01-04 06:58:31

标签: c++ parallel-processing openmp genetic-algorithm

我有一个遗传密码,我希望它在12个内核上并行,第一部分是我要并行的循环,但是在并行和运行之后,我看到串行代码比并行代码更快,请告诉我在哪里我我错了。有没有办法让openmp比serrial更快?

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(ⅰ); 是修复染色体的功能 和G.Fitness(i); 是计算每条染色体适合度的函数

1 个答案:

答案 0 :(得分:0)

并行化任务需要时间。

你有没有在现实生活和3名工人中完成任务并自己思考“我会快速做到这一点,这比解释那些需要对这三个人做什么更快”?

嗯,同样的事情可能发生在这里。一个人“正在做这件事”比组织它的多个人要快,并且再次组织合并结果。

并行做事并不是银弹。任务需要适合它,否则你只会增加开销。