유전 코드가 있고 12 코어에 병렬로 쓰고 싶습니다. 첫 번째 부분은 병렬 처리하기를 원하지만 병렬 및 실행 후 직렬 코드가 병렬보다 빠릅니다. 코드, 내가 틀린 곳을 말해줘. sermp보다 openmp가 더 빠른 방법이 있습니까?왜 직렬 실행이 더 빠릅니다 병렬 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()의 기간은 얼마나됩니까? 그들은 더 나은 반복을 위해 많은 시간을 필요로합니다. – coincoin
for 루프에서 * i *를 선언해야하는지 궁금합니다. for (int i = 0, ...). for 루프의 범위 밖에 있기 때문에 이것이 문제의 원인 일 수 있습니다. – rcgldr
어쩌면 코드 시간을 측정하는 방법으로 인해 문제가 발생할 수 있습니다. [this] (http://stackoverflow.com/a/10674970/5239503) 또는 [that] (http://stackoverflow.com/a/10736858)/5239503) – Gilles