LINUX.ORG.RU

Как распараллелить данный код openmp?

 ,


0

1

Помогите пожалуйста распараллелить задачу n ферзей. Код работает правильно, осталось только распараллелить

#include<iostream>
#include<stdio.h>
#include <sys/time.h>
#include <cmath>
#include "omp.h"
using namespace std;
//Размерность доски NхN (Количество ферзей - N)
   const int N=12;  int X[N];  int Count;

  bool P(int X[N],int k,int y){  // Поиск позиции для ферзя
	int i=0;
	while ((i<k)&&(y!=X[i])&&(abs(k-i)!=abs(y-X[i]))) {i++;}
	if(i==k)
	return true;
	else return false;  
	}

  void Backtracking(int k){ // Поиск с возвратом позиций
		int i,y;
		for (y=0;y<N;y++)
		if (P(X,k,y)){ 
				X[k]=y;
				if (k==N-1){
					Count++; 
				}
			Backtracking(k+1); 		
		} 
	}	
	
 int main(){ 
	double iv;
	struct timeval st, et;
	gettimeofday(&st, NULL); 
	Count=0;
	cout<<"Doska "<<N<<" na "<<N<<endl;
	omp_set_num_threads(1);
	
	Backtracking(0);
	
   	gettimeofday(&et, NULL);
    iv = (et.tv_sec * 1.0e6 + et.tv_usec) - (st.tv_sec * 1.0e6 + st.tv_usec);
	cout<<"Vsego "<<Count<<" rasstanovok";
   	cout<<"Time: "<< iv / 1e6 <<"sec." << endl;
   }

<редукция по глобальным переменным>

<выравнивание побоку>

if(i==k)
return true;
else return false;

Код работает правильно, осталось только распараллелить

Какой «осталось только распараллелить», ты его даже выровнять не смог.

Выровняй, сократи, избавься от общей памяти в параллельном блоке, потом может и сможешь.

t184256 ★★★★★
()
Ответ на: комментарий от ADamCarraway

Наверное у меня профдеформация, но код я за тебя писать не буду. План предварительных действий я тебе накидал, каждое из них много проще уже написанного, да и само распараллеливание наружнего цикла после них делается бездумно. Давай, напрягайся и пиши.

t184256 ★★★★★
()

Ну варианта 2 тупой OpenMP Тасками по первому уровню backtrackingа И переписывания твоего аналога dfsа в циклы по вершинам, что потребует рефакторинга

lberserq
()

Если i изменяется мало или каждый из шагов выполняется очень-очень быстро, то параллелить openmp нет смысла. Совсем.

grem ★★★★★
()

у заочников начались лабы?

это бакланотура или магистратура?

всетаки openmp

какой вузик?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.