Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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 ó ..libsOpenCLinclude
linker -> General: Additional library Directories: $(CUDA_PATH)libx64 ó ..libsOpenCLlib
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 opencvbuildincludeopencv2 al D:OpenCV2.4includeopencv2 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.4includeopencv;D:OpenCV2.4includeopencv2; D:OpenCV2.4include
Linker > General > Additional Library Directories: D:OpenCV2.4x64vc12lib (ó D:OpenCV2.4Win32vc12lib 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.4x64vc12bin 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!!
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/NVIDIA-Teases-Low-Power-High-Performance-Xavier-SoC-Will-Power-Future-Autonomous-Veh