Metodos de realizar los calculos con varios nodos.

Publicado en PFC el 9 Noviembre 2009 por macudapfc

Los métodos que he implementado para poder repartir el costoso cálculo en varios ordenadores, con sus respectivas tarjetas graficas, son los siguientes:

Varios ordenadores compartiendo los cálculos cada vez que realizan un subset:

versionparalela

Un servidor que coordina todos los calculos que realiza cada nodo:

 

versionsolapada

 

Primeras imagenes

Publicado en 1 el 5 Noviembre 2009 por macudapfc

Las imágenes resultado de la experimentación de una primera experimentación con el algoritmo nuevo son las siguientes:

Imagen de la versión secuencial:

imagensecuencial

Imagen de la versión paralela sincronizada con 2 nodos sin variar la semilla:

imagennodossincronizados

 

Imagen de la versión paralela sincronizada con 2 nodos variando la semilla:

imagennodossincronizadosaleatorios

Estoy teniendo problemas que me impiden ir al laboratorio pero continúo trabajando.

Procesamiento de imagenes 3d (Estadisticas)

Publicado en PFC el 4 Noviembre 2009 por macudapfc

He estado trabajando con el algoritmo osem3d secuencial y adaptado a Cuda y me he dado cuenta de que en cada subset se trabajaba con partes del espacio de la imagen aleatorias. Pero siempre los mismos no varía la semilla en cada ejecución. Al crear una versión con varios nodos como se generan automáticamente los índices aleatorios los subsets que se calculan en cada nodo hacen referencia exactamente a los mismos lors por ello se calculan datos sobre el mismo espacio y se exploran exactamente los mismos datos. Como consecuencia las imágenes anteriores con varios nodos eran de muy baja calidad, ahora con la generación aleatoria obtengo imágenes de una calidad muy similar a la versión secuencial y apenas influye el numero de nodos ya que cada uno explora un área totalmente aleatoria.

Las primeras estadísticas que dejo son de la versión secuencial ya que en las versiones con nodos sigo realizando modificaciones constantemente. Pronto tendré las estadísticas de la versión paralela sincronizada y finalizare la versión solapada para poder comprobar tiempos y resultados en las imágenes.

Todas las ejecuciones son sobre el mismo vector aleatorio.

Estadísticas versión secuencial 50 subsets.

Lors calculados en cada subset

50subsets

Grafico comparativo tiempo medio por lor en cada subset dependiendo de la tarjeta grafica.

tiempolor50sub

Estadisticas version secuencial 25 subsets.

Lors calculados en cada subset

numero de lors calculados en cada subset 25

Grafico comparativo tiempo medio por lor en cada subset dependiendo de la tarjeta grafica.

tiempolor25sub

Compilar las librerias de MPI en los archivos cu de Cuda

Publicado en PFC el 30 Abril 2009 por macudapfc

Los archivos con código en cuda suelen llevar la extensión .cu, para estos archivos la SDK que nos aporta cuda trae ya las dependencias de los archivos solucionadas y las reglas de compilación personalizada configuradas el problema es al querer introducir funciones de la librería de MPICH en un archivo .cu.

Pues bien una vez instalado MPICH2 crea una serie de carpetas con todas las librerías y binarios necesarios lo único que debemos hacer es configurar nuestro Visual Studio para que busque las librerías de MPI siempre de esos directorios. Para ello debemos añadir una serie de líneas con los directorios donde tenemos el código y binarios.

1) Nos dirigimos al menú herramientas y posteriormente al submenú opciones.

2) Buscamos “proyectos y soluciones” y “Directorios de VC++”

3) Aquí es donde tendremos que agregar los directorios de Mpich:

  • Plataforma win32 (en mi caso) Mostrar directorios para: archivos ejecutables:

En este menú he insertado 3 carpetas pero creo que solo es necesario una si fuera así lo modificare en el futuro.

C:\Archivos de programa\MPICH2\lib

C:\Archivos de programa\MPICH2\bin

C:\Archivos de programa\MPICH2\include

(Todo esto es relativo a donde instalaras MPICH2)

  • Plataforma win32 (en mi caso) Mostrar directorios para: archivos de inclusión:

C:\Archivos de programa\MPICH2\include

  • Plataforma win32 (en mi caso) Mostrar directorios para: archivos de referencia:

C:\Archivos de programa\MPICH2\lib

  • Plataforma win32 (en mi caso) Mostrar directorios para: archivos de biblioteca:

C:\Archivos de programa\MPICH2\lib

4) Aceptamos y listo. Cada vez que compilemos y utilicemos la librería mpi.h visual studio sabrá donde puede encontrar los archivos para la compilación.

Helloword con MPICH2

Publicado en PFC el 22 Abril 2009 por macudapfc

Si se realiza una búsqueda en internet sobre MPICH2 es difícil encontrar un código que te ayude en la tarea de configuración de la librería, por ello he decidido crear un código de ejemplo que sirva para confirmar que nuestro proyecto compila en VS2008 y que la solución generada puede ejecutarse en varios nodos mediante MPI.

El código del programa sencillo es el siguiente:

#include <stdio.h>

#include <mpi.h>

int main (int argc, char **argv)

{

int rank;

int size;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COMM_WORLD, &rank);

MPI_Comm_size (MPI_COMM_WORLD, &size);

printf (“Hola Mundo, Soy el nodo %d de un cluster de %d\n”, rank, size);

MPI_Finalize ();

return 0;

}

Iniciandome con MPICH2

Publicado en PFC el 21 Abril 2009 por macudapfc

Después de mi iniciación con cuda durante unas cuantas semanas, debo continuar con el desarrollo de mi pfc centrándome ahora en el desarrollo del clúster con MPICH2, bajo Windows xp.

Para realizar la instalación de mpich2 en windows xp es necesario descargar los binarios del siguiente enlace:

http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads

Tras la instalación, el directorio por defecto de los archivos necesarios que necesitaremos en nuestros proyectos estará bajo la dirección C:/Archivos de programa/MPICH2. Viene incluido un proyecto de prueba para el cual necesitarías visual studio 2003 (7) o uno superior.

Visual Studio 2008 y proyectos con MPICH2

Para crear nuestros propios proyectos será necesario seguir los siguientes pasos:

1)  Crear un proyecto en visual studio para utilizar MPICH2

Crear un proyecto nuevo visual C++ -> Win32 -> aplicacion de consola

Le damos un nombre y aceptamos. En configuración de la aplicación elegimos crear proyecto vacio.

2)  Realizar la configuración de las librerías necesarias.

Pestaña Proyecto -> propiedades de <nombre de proyecto>

Las siguientes instrucciones dependen del directorio elegido para la instalación de MPICH2

  • Propiedades de configuración -> c/c++ -> general

Añadimos en directorios adicionales de inclusión la ruta donde tenemos los include de mpich2, en mi caso es : “C:\Archivos de programa\MPICH2\include”

  • Propiedades de configuración -> vinculador ->general

Añadimos en directorios adicionales de bibliotecas la ruta donde tenemos las bibliotecas de mpich2, en mi caso es: “C:\Archivos de programa\MPICH2\lib”

  • Propiedades de configuración -> vinculador ->entrada

Escribimos en dependencias adicionales lo siguiente: mpi.lib

Con esto dejamos el proyecto listo para realizar la compilación de nuestro programa mediante generar solución.

Transposicion de matrices en cuda

Publicado en PFC el 24 Marzo 2009 por macudapfc

Despues de estudiar los ejemplos mas simples de la sdk de cuda, me he dado cuenta de que no son tan simples. Por ello decidi realizar la misma funcion, aunque quizas menos eficiente, pero de forma mas simplificada y empeze por la transposicion de matrices.

Aqui expongo mi codigo, el de nvidia pueden encontrarlo en la sdk como “transpose”, ambos realizan la transposicion de una matriz pero es diferente la forma de realizacion.

Mi funcion de transposicion utilizando solo la memoria global.

__global__ void
testKernel( int* g_idata, int* g_odata, int size_x, int size_y)
{
const unsigned int threadx =blockIdx.x*blockDim.x + threadIdx.x;
const unsigned int thready = blockIdx.y*blockDim.y + threadIdx.y;
unsigned int index= thready*size_y+threadx;
int valor = g_idata[index];
unsigned int indexdestino= threadx*size_y+thready;
g_odata[indexdestino]=valor;
}
#endif

En ocasiones las cosas no tienen que complicarse demasiado para que funcionen.

Los primeros pasos en cuda…

Publicado en PFC el 10 Marzo 2009 por macudapfc

Despues de perder considerables ratos leyendo codigo en cuda. He descubierto que no solo basta con leer el codigo de cuda, sino leerlo con el manual delante… Que el compilador no te avise de que el numero maximo de thread por bloque es 512 puede darte un ratito amargo.

Es muy recomendable leer el apendice A de la guia de cuda siempre que vayamos a colocar parametros en nuestras dimensiones de variables. No todos los valores estan permitidos.

Resaltado de la sintaxis de cuda en visual studio 2008

Publicado en PFC el 5 Marzo 2009 por macudapfc

La sintaxis de cuda es una extension de la sintaxis de C. En ocasiones es util ver resaltadas palabras clave en los programas que escribimos para localizar posibles errores en la escritura de alguna palabra.

Nvidia proporciona junto a su sdk un archivo para resaltar la sintaxis en visual studio 7 y 8 llamado usertype.dat. Para visual studio 9.0 que tiene por defecto vs2008 podemos utilizar el mismo que para visual studio 8.

Los pasos que yo he seguido son los siguientes:

1) Una vez instalado vs2008 y cuda 2.1 nos dirigimos a dos directorios dependiendo del lugar de instalacion de ambos.

El primero en el directorio de visual studio 9.0  en mi caso:

C:\Archivos de programa\Microsoft Visual Studio 9.0\Common7\IDE

El segundo en el directorio de la sdk de cuda en mi caso:

C:\Documents and Settings\All Users\Datos de programa\NVIDIA Corporation\NVIDIA CUDA SDK\doc\syntax_highlighting\visual_studio_8

2) En ambos localizamos el archivo usertype.dat

  • Si en el directorio de visual studio 9.0 no esta copiamos directamente el archivo proporcionado por nvidia en la carpeta anteriormente mencionada.
  • Si existe lo abrimos con un editor de texto y concatenamos el contenido del archivo  aportado por el archivo de  nvidia y lo guardamos.

3) Abrimos visual studio 2008 y nos dirigimos a

herramientas -> opciones ->Editor de texto->extension de archivo

En extension añadimos:  cu

En editor seleccionamos microsoft visual  c++

sintaxis_cuda

4) Lo agregamos cerramos visual studio 2008 al volver a abrirlo todos los archivos con extension cu tendran el resaltado de sintaxis de CUDA.

NOTA: El resaltado de sintaxis en otras versiones de visual studio es muy similar.

Integracion de CUDA 2.1 y Visual Studio 2008

Publicado en PFC el 4 Marzo 2009 por macudapfc

Despues de numerosas busquedas en diversos foros he encontrado la forma de dejar visual studio 2008 funcionando con CUDA 2.1 Beta.

He instalado todo siguiendo los siguientes pasos:

1)  Necesitamos instalar vs2008 con sus MSDN.

2) Descargamos el driver con soporte cuda 2.1 (180.60 o superior) y lo instalamos.

3) Descargamos las herramientas y los codigos de ejemplo de la SDK de cuda 2.1  y lo instalamos en ese orden.

Para descargar tanto el driver propuesto por nvidia como las herramientas y los codigos de ejemplo tenemos la siguiente web:   http://www.nvidia.es/object/cuda_get_es.html

Recomendacion:

Realizar todos los pasos y utilizar como plantilla un proyecto creado por en la sdk que proporciona cuda. Copiandolo en la misma carpeta con distinto nombre para que no haya problemas con archivos que necesita.

O realizar los mismos pasos con Visual Studio 2005 y una version de cuda inferior a la 2.1 y los proyectos creados desde 0 compilaran y ejecutaran por lo que no sera necesario utilizar una plantilla ya creada. En su lugar utilizaremos un programa que integra en visual studio un nuevo tipo de proyecto con las reglas para compilar.

Podemos descargarla desde la web del autor:  http://www.comp.hkbu.edu.hk/~kyzhao/

En la zona de proyectos.

NOTA: esta aplicacion es externa a nvidia.

Y ya podemos generar nuestros proyectos en visual studio 2005.

Problemas:

Con la version que esta puesta en la web oficial de kyzhao solo seria compatible con versiones anteriores de cuda en la actualidad esta trabajando para compatibilizar su ejecutable con la version 2.1 de cuda.

Uno de los foros de referencia es el propio de envida y podemos encontrarlo en esta web:

http://forums.nvidia.com/index.php?showforum=62