diff --git a/branches/ParadisEO-GPU/src/problems/eval/EvalOneMax.h b/branches/ParadisEO-GPU/src/problems/eval/EvalOneMax.h index 1922369ec..a177b447a 100644 --- a/branches/ParadisEO-GPU/src/problems/eval/EvalOneMax.h +++ b/branches/ParadisEO-GPU/src/problems/eval/EvalOneMax.h @@ -32,8 +32,8 @@ Contact: paradiseo-help@lists.gforge.inria.fr */ -#ifndef __EvalOneMax -#define __EvalOneMax +#ifndef __EvalOneMax_H +#define __EvalOneMax_H /** * Full Evaluation of the solution diff --git a/branches/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h b/branches/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h index 9aded1889..7af4dc890 100644 --- a/branches/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h +++ b/branches/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h @@ -1,90 +1,91 @@ /* - - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Karima Boufaras, Thé Van LUONG + Karima Boufaras, Thé Van LUONG - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr -*/ + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ #ifndef __OneMaxIncrEval_H #define __OneMaxIncrEval_H -#include +#include /** * Incremental Evaluation of OneMax */ template -class OneMaxIncrEval: public moCudaEvalFunc { +class OneMaxIncrEval: public moGPUEvalFunc { - public: +public: - typedef typename Neighbor::EOT EOT; - typedef typename EOT::Fitness Fitness; + typedef typename Neighbor::EOT EOT; + typedef typename EOT::Fitness Fitness; + typedef typename EOT::ElemType T; - /** - * Constructor - */ + /** + * Constructor + */ - OneMaxIncrEval() { - } + OneMaxIncrEval() { + } - /** - * Destructor - */ + /** + * Destructor + */ - ~OneMaxIncrEval() { - } + ~OneMaxIncrEval() { + } - /** - * Incremental evaluation of the solution(function inline can be called from host or device) - * @param _bitVector the solution to evaluate - * @param _fitness the fitness of the current solution - * @param _index the index of solution neighbor - */ + /** + * Incremental evaluation of the OneMax solution(bit vector),function inline can be called from host or device + * @param _bitVector the solution to evaluate + * @param _fitness the fitness of the current solution + * @param _index an array that contains a set of indexes corresponding to the current thread identifier neighbor the last element of this array contains neighborhood size + */ - inline __host__ __device__ Fitness operator() (EOT & _bitVector,Fitness _fitness, unsigned int * _index) { +inline __host__ __device__ Fitness operator() (T * _bitVector,Fitness _fitness, unsigned int * _index) { - Fitness tmp; + Fitness tmp=_fitness; + for(unsigned i=0;i - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Boufaras Karima, Thé Van Luong + Boufaras Karima, Thé Van Luong - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr -*/ + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ -#ifndef __PPPEval -#define __PPPEval +#ifndef __PPPEval_H +#define __PPPEval_H #include template - class PPPEval: public eoEvalFunc { +class PPPEval: public eoEvalFunc { - public: +public: - /** - * Constructor - * @param _qapData the specific data problem useful to evalute solution(flow & distance matrices of QAP problem) - */ + /** + * Constructor + * @param _qapData the specific data problem useful to evalute solution(flow & distance matrices of QAP problem) + */ - PPPEval(PPPData & _pppData) { - pppData = _pppData; - } + PPPEval(PPPData & _pppData) { + pppData = _pppData; + } - /** - * Destructor - */ + /** + * Destructor + */ - ~PPPEval() { - } + ~PPPEval() { + } - /** - * Full evaluation of the solution - * @param _sol the solution to evaluate - */ + /** + * Full evaluation of the solution + * @param _sol the solution to evaluate + */ - void operator()(EOT & _sol) { - - int *H; - int *S; - int tmp_1=0; - int tmp_2=0; + void operator()(EOT & _sol) { - H=new int[Nd+1]; - S=new int[Md]; - - for (int i=0; i=0) - H[S[i]]++; - } + H = new int[Nd]; + S = new int[Md]; - for (int j=0; j<=Nd; j++){ - tmp_2+=abs(pppData.H_h[j]-H[j]); - } + for (int i = 0; i < Md; i++) { + S[i] = 0; + for (int j = 0; j < Nd; j++) { + S[i] += pppData.a_h[i * Nd + j] * _sol[j]; + } - _sol.fitness(ca*tmp_1+cb*tmp_2); + tmp_1 += abs(S[i]) - S[i]; + if (S[i] > 0) + H[S[i]-1]++; + } - delete[] H; - delete[] S; - } + for (int j = 0; j < Nd; j++) { + tmp_2 += abs(pppData.H_h[j] - H[j]); + } - protected: + _sol.fitness(ca * tmp_1 + cb * tmp_2); - PPPData pppData; + delete[] H; + delete[] S; + } + +protected: + + PPPData pppData; }; diff --git a/branches/ParadisEO-GPU/src/problems/eval/PPPIncrEval.h b/branches/ParadisEO-GPU/src/problems/eval/PPPIncrEval.h index 283b4a6dc..3728e86b5 100644 --- a/branches/ParadisEO-GPU/src/problems/eval/PPPIncrEval.h +++ b/branches/ParadisEO-GPU/src/problems/eval/PPPIncrEval.h @@ -1,103 +1,107 @@ /* - - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Karima Boufaras, Thé Van LUONG + Karima Boufaras, Thé Van LUONG - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr -*/ + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ #ifndef __PPPIncrEval_H #define __PPPIncrEval_H -#include +#include /** * Incremental Evaluation of PPP */ template -class PPPIncrEval: public moCudaEvalFunc { +class PPPIncrEval: public moGPUEvalFunc { - public: +public: - typedef typename Neighbor::EOT EOT; - typedef typename EOT::Fitness Fitness; + typedef typename Neighbor::EOT EOT; + typedef typename EOT::Fitness Fitness; + typedef typename EOT::ElemType T; - /** - * Constructor - */ + /** + * Constructor + */ - PPPIncrEval() { - } + PPPIncrEval() { + } - /** - * Destructor - */ + /** + * Destructor + */ - ~PPPIncrEval() { - } + ~PPPIncrEval() { + } - /** - * functor of incremental evaluation of the solution(function inline can be called from host or device) - * @param _sol the solution to evaluate - * @param _fitness the fitness of the current solution - * @param _index the set of information to compute fitness neighbor - */ + /** + * Incremental evaluation of the PPP solution,function inline can be called from host or device + * @param _bitVector the solution to evaluate + * @param _fitness the fitness of the current solution + * @param _index an array that contains a set of indexes corresponding to the current thread identifier neighbor the last element of this array contains neighborhood size + */ - inline __host__ __device__ Fitness operator() (EOT & _sol,Fitness _fitness, unsigned int *_index) { + inline __host__ __device__ Fitness operator() (T* _sol,Fitness _fitness, unsigned int *_index) { - int H[Nd+1]; - int S[Md]; - int tmp_1=0; - int tmp_2=0; - - for (int i=0; i=0) - H[S[i]]=H[S[i]]+1; - } + for (unsigned i=0; i0) + H[S[i]-1]=H[S[i]-1]+1; + } + + for (unsigned j=0; j - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Boufaras Karima, Thé Van Luong + Boufaras Karima, Thé Van Luong - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr -*/ + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ -#ifndef __QAPEval -#define __QAPEval +#ifndef __QAPEval_H +#define __QAPEval_H #include template - class QAPEval: public eoEvalFunc { +class QAPEval: public eoEvalFunc { - public: +public: - /** - * Constructor - * @param _qapData the specific data problem useful to evalute solution(flow & distance matrices of QAP problem) - */ + /** + * Constructor + * @param _qapData the specific data problem useful to evalute solution(flow & distance matrices of QAP problem) + */ - QAPEval(QAPData & _qapData) { - qapData = _qapData; - } + QAPEval(QAPData & _qapData) { + qapData = _qapData; + } - /** - * Destructor - */ + /** + * Destructor + */ - ~QAPEval() { - } + ~QAPEval() { + } - /** - * Full evaluation of the solution - * @param _sol the solution to evaluate - */ + /** + * Full evaluation of the solution + * @param _sol the solution to evaluate + */ - void operator()(EOT & _sol) { - int cost = 0; - unsigned int size = qapData.getSize(); - for (unsigned int i = 0; i < size; i++) - for (unsigned int j = 0; j < size; j++) { - cost += qapData.a_h[i * size + j] * qapData.b_h[_sol[i] * size - + _sol[j]]; - } + void operator()(EOT & _sol) { + int cost = 0; + unsigned int size = qapData.getSize(); + for (unsigned int i = 0; i < size; i++) + for (unsigned int j = 0; j < size; j++) { + cost += qapData.a_h[i * size + j] * qapData.b_h[_sol[i] * size + + _sol[j]]; + } - _sol.fitness(cost); - } + _sol.fitness(cost); + } - protected: +protected: - QAPData qapData; + QAPData qapData; }; diff --git a/branches/ParadisEO-GPU/src/problems/eval/QAPIncrEval.h b/branches/ParadisEO-GPU/src/problems/eval/QAPIncrEval.h index 2e90585a4..95afcc500 100644 --- a/branches/ParadisEO-GPU/src/problems/eval/QAPIncrEval.h +++ b/branches/ParadisEO-GPU/src/problems/eval/QAPIncrEval.h @@ -1,120 +1,123 @@ /* - - Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 - Karima Boufaras, Thé Van LUONG + Karima Boufaras, Thé Van LUONG - This software is governed by the CeCILL license under French law and - abiding by the rules of distribution of free software. You can use, - modify and/ or redistribute the software under the terms of the CeCILL - license as circulated by CEA, CNRS and INRIA at the following URL - "http://www.cecill.info". + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". - As a counterpart to the access to the source code and rights to copy, - modify and redistribute granted by the license, users are provided only - with a limited warranty and the software's author, the holder of the - economic rights, and the successive licensors have only limited liability. + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. - In this respect, the user's attention is drawn to the risks associated - with loading, using, modifying and/or developing or reproducing the - software by the user in light of its specific status of free software, - that may mean that it is complicated to manipulate, and that also - therefore means that it is reserved for developers and experienced - professionals having in-depth computer knowledge. Users are therefore - encouraged to load and test the software's suitability as regards their - requirements in conditions enabling the security of their systems and/or - data to be ensured and, more generally, to use and operate it in the - same conditions as regards security. - The fact that you are presently reading this means that you have had - knowledge of the CeCILL license and that you accept its terms. + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. - ParadisEO WebSite : http://paradiseo.gforge.inria.fr - Contact: paradiseo-help@lists.gforge.inria.fr -*/ + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + */ #ifndef __QAPIncrEval_H #define __QAPIncrEval_H -#include +#include /** * Incremental Evaluation of QAP */ template -class QAPIncrEval: public moCudaEvalFunc { +class QAPIncrEval: public moGPUEvalFunc { - public: +public: - typedef typename Neighbor::EOT EOT; - typedef typename EOT::Fitness Fitness; + typedef typename Neighbor::EOT EOT; + typedef typename EOT::Fitness Fitness; + typedef typename EOT::ElemType T; - /** - * Constructor - */ + /** + * Constructor + */ - QAPIncrEval() { - } + QAPIncrEval() { + } - /** - * Destructor - */ + /** + * Destructor + */ - ~QAPIncrEval() { - } + ~QAPIncrEval() { + } - /** - * functor of incremental evaluation of the solution(function inline can be called from host or device) - * @param _sol the solution to evaluate - * @param _fitness the fitness of the current solution - * @param _index the set of information to compute fitness neighbor - */ + /** + * Incremental evaluation of the QAP solution,function inline can be called from host or device + * @param _bitVector the solution to evaluate + * @param _fitness the fitness of the current solution + * @param _index an array that contains a set of indexes corresponding to the current thread identifier neighbor the last element of this array contains neighborhood size + */ - inline __host__ __device__ Fitness operator() (EOT & _sol,Fitness _fitness, unsigned int *_index) { +inline __host__ __device__ Fitness operator() (T * _sol,Fitness _fitness, unsigned int *_index) { - Fitness tmp; + Fitness tmp=_fitness; + //int id = blockIdx.x * blockDim.x + threadIdx.x; + T tmp_sol[1]; + /** + * dev_a & dev_b are global device variable, data specific to QAP problem (flow & distance matices) + * _index[i] the first position of swap + * _index[i+1] the second position of swap + */ +/* for(unsigned i=0;i