ImagenImagenImagenImagen
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Programando 2816 procesadores en paralelo

Foro donde postear temas generales de programación

Moderador: Junta Directiva

Avatar de Usuario
fusion
Usuario Avanzado
Usuario Avanzado
Mensajes: 384
Registrado: Mar Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Ubicación: Madrid
Contactar:

Programando 2816 procesadores en paralelo

Mensajepor fusion » Jue Abr 07, 2016 10:49 am

Consiste en comprarse una tarjeta gráfica potente y programarla en OpenCL o CUDA, para ello elegiremos una tarjeta con chipset R9-390 si empleas OpenCL o bien chipset GTX 970 si programas en CUDA (si bien ambas tarjetas soportan ambos entornos en versión 1.2). Hay varios fabricantes de este tipo de tarjetas gráficas: Gigabyte, Radeon, asus, MSI, PNY,...

Tiene su gracia que la tarjeta gráfica pase a ser la unidad principal de proceso y la CPU pase a hacer de tarjeta gráfica, con lo cual no hace falta que la CPU sea potente, eso sí, prepara como 20-30 gigas de disco duro.

Me centraré en la NVIDIA que programaremos en OpenCL, para instalarla primero instalas el visual stdio 2013 community y luego encima el CUDA, que ya trae incluido el OpenCL.

Para instalar el OpenCL:
Creamos un proyecto vacío y en las propiedades del proyecto hacemos:
Project properties:
Configuration Manager (boton arriba derecha): new x64 copy from Win32 ojo!!!!!
C/C++ -> General: Additional include Directories: $(CUDA_PATH)\include ó ..\libs\OpenCL\include
linker -> General: Additional library Directories: $(CUDA_PATH)\lib\x64 ó ..\libs\OpenCL\lib
linker -> Input : Additional Dependencies : OpenCL.lib

Para instalar el OpenCV:
Descargar y descomprimir OpenCV 2.4.12: OpenCV 2.4.12 para windows
luego copiar en D:\OpenCV2.4 los subdirecorios que nombro abajo, el resto se borra y ahorras más de 1 giga
Pegar también desde el opencv\build\include\opencv2 al D:\OpenCV2.4\include\opencv2 todos los directorios (si no saldrán error de que no se encuentra el highgui.hpp o el core_c.h)


Poner el proyecto en modo x64, para ello en Propiedades del Proyecto a la derecha dar a Configuration Manager y pinchar en Win32 y hacer new y poner en modo x64

Luego en Propiedades del proyecto (modo all configurations y x64) > properties >
C/C++ > general > Additional Include directories: D:\OpenCV2.4\include\opencv;D:\OpenCV2.4\include\opencv2; D:\OpenCV2.4\include
Linker > General > Additional Library Directories: D:\OpenCV2.4\x64\vc12\lib (ó D:\OpenCV2.4\Win32\vc12\lib si el proyecto fuera Win32)
Linker > Input > Additional dependencies: ¡¡¡editar y añadir SIN punto y coma!!! o poner el punto y coma después;

Modo release:
opencv_core2412.lib
opencv_highgui2412.lib
ó
Modo debug:
opencv_core2412d.lib
opencv_highgui2412d.lib

Para crear variable de entorno: control panel->system: advanced system settings (a la izquierda abajo) -> Advanced -> Environment variables abajo en System Variables en la variable path añadir:
D:\OpenCV2.4\x64\vc12\bin separado con ; y reiniciar visual studio!!

Si no quieres crear la variable de entorno copiar en donde el codigo fuente y/o solucion: opencv_ffmpeg2412_64.dll, opencv_highgui2412.dll, opencv_highgui2412d.dll, opencv_core2412.dll, opencv_core2412d.dll

Y ¡hala! a programar miles de procesadores en paralelo. El último programa que he hecho tarda 450 milisegundos en ejecutarse empleando la CPU y usando la GPU sólo 15 milisegundos ¡¡con una gráfica vieja!!



Avatar de Usuario
fusion
Usuario Avanzado
Usuario Avanzado
Mensajes: 384
Registrado: Mar Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Ubicación: Madrid
Contactar:

Re: Programando 2816 procesadores en paralelo

Mensajepor fusion » Vie Feb 03, 2017 12:12 pm

Con la nueva gráfica que tengo0 una radeon R9 390 de 5 teraflops, que no es la caña pero casi, programo hasta 2500 procesos en paralelo que empleo para hacer algoritmos (kanade) sobre imágenes a 30 frames/s, mientras que en CPU vá a 0.3 fps. Lo que he visto es que para que vaya bien la gráfica conviene que la trasferncia de datos sea la menor posible y que la gráfica haga muchas operaciones por pixel: por lo menos 200 operaciones por cada dato de entrada o salida, si no no merece la pena.

Por otro lado están saliendo tarjetas cpu+gpu de 30 teraflops, que equivale solo una tarjeta a toda una granja de ordenadores!: ver:
https://www.pcper.com/news/Processors/N ... nomous-Veh
Imagen


Volver a “Programación general”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado