Pregunta

He estado trabajando con algunos amigos para convertir una Matlab del Algoritmo Genético para C++ y funciona en un orden secuencial en la actualidad.Matlab no es ya una parte de nuestro código actual.

Estamos buscando a utilizar en un clúster, pero han sido un poco seco en recursos.Tenemos un clúster disponible en la Universidad y está equipado con Rocas y OpenMPI, pero no estoy muy seguro de por dónde empezar a trabajar con ella.

Actualmente tenemos en 2D y 3D de las Matrices de configuración con los datos en ellos y cuando el sistema está haciendo crossover o el intercambio entre los modelos que sólo trata de intercambio de partes de la 2D y 3D de la matriz.¿Cuáles son algunas buenas maneras de separar estas estructuras a través de múltiples nodos?

¿Fue útil?

Solución

Si estás haciendo cálculos matriciales, entonces si hay incluso una buena forma de partición de los cálculos depende en gran medida del propio cálculo.

Lo recomiendo mucho el libro Golub y Van Loan, "Matrix cálculos, 3ª Ed.". En ella hay un capítulo entero dedicado a paralelo cálculos (Ch. 6).

OpenMPI es un middleware muy bien utilizar para este problema. Puesto que usted está haciendo esto en C ++, también puede echar un vistazo a zeromq. Los dos tienen una semántica diferente, y uno podría favorecer a su problema de espacio o de su conjunto de habilidades más que el otro.

Además, usted debe saber que los cálculos matriciales en paralelo (por lo general el procesamiento de señales, pero hay un montón de otras aplicaciones) es una zona muy, muy activa de investigación.

Otros consejos

La Aptitud De Cálculo:

Normalmente sólo necesita saber acerca de una persona, para calcular su idoneidad, así que usted puede trabajar a través de la población por medio de la repartición de los individuos para cada núcleo.Cuando la física de un individuo, se ha calculado que, de la mano que el núcleo de un nuevo individuo.

Crossover:

Divide y vencerás enfoque podría ser muy adecuado para este problema.Romper las matrices en bloques que son procesados por cada núcleo de la CPU, entonces tal vez agregar un global de cruce de paso (de apareamiento de un subconjunto de pares) para asegurarse de que tiene la capacidad de moverse a través del espacio multidimensional de forma adecuada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top