2010-12-13 18 views
11

Me gustaría comenzar a decir que no sé nada de la programación de OpenCL/GPU pero soy un programador avanzado de C# (general .Net) sin temor a C++ y me gustaría aprender la programación de OpenCL/GPU. .. mi pregunta es ... ¿por dónde empiezo?!? ¿Qué debo descargar?!? ¿Hay alguna manera de programar OpenCL/GPU en Visual Studio (en C#)!?! hola como ... cosas del mundo ... TKS todoProgramación de OpenCL y GPU Hoja de ruta

+0

¿Tienes una tarjeta ATI o nvidia? –

+0

tengo ambas en este momento ... en 1 pc tengo un ati y en otro tengo una nvidia ... – Leonardo

+0

.Net tiene XNA Framework, que es la creación de juegos xbox. Deberías dejarlo. – Bonshington

Respuesta

9

El mejor sitio que he encontrado para una clara introducción a cómo la programación de la GPU es diferente de la programación de la CPU es en este sitio:

http://www.macresearch.org/opencl

A pesar de que estos videos se hacen mostrando tarjetas NVIDIA estilo, los importantes conceptos de:

  • muchos subprocesos que se ejecutan las mismas instrucciones exactas de bloqueo de paso (incluso si algún código está escrito con construcciones if-else), y

  • acceso a la memoria coalescencia

se aplican por igual a AMD o NVIDIA y son crucial para comenzar a cambiar la forma en que piensas sobre cómo estructurar tu algoritmo para obtener una mejora en el rendimiento de la GPU.

+3

Lo siento, creo que esta pregunta se trata principalmente de comenzar a codificar en lugar de diseñar. La serie MacResearch es genial para comenzar a pensar en términos de GPU pero no es muy informativo para la codificación. También es bastante anticuado ahora. Yo recomendaría la serie, sin embargo. –

7

http://developer.amd.com/zones/OpenCLZone/pages/default.aspx

Suponiendo que quiere hacer en lugar de OpenCL CUDA entonces esto tiene un montón de tutoriales en vídeo de introducción. Hay un conjunto similar en NVidia, aunque tienen más material basado en CUDA.

Si quieres hacer la programación de GPL, obtener una aplicación de muestra que pueda convertir el código de opencl/cuda en una GPU es la parte más simple. También tiene que aprender el lenguaje opencl/cuda, entonces debe aprender a pensar en algoritmos en paralelo y cómo probar/medir los resultados.

no hay un 'utilizar la GPU' botón pulsador que al instante hace que su código 100 veces más rápido

+0

esperaba una respuesta más directa ... como ..."vaya a esa dirección y descargue eso ... si tiene una tarjeta de video ATI vaya allí ... si tiene un sitio de Geforce en ese sitio" más o menos ... – Leonardo

+0

bien ... ¿por dónde empiezo? ! ¿Qué tengo que hacer con mis programas para que usen el poder de la GPU?!? – Leonardo

+0

En una nota relacionada con lo que deseaba que fuera: en realidad, es probable que Haskell tenga ese botón. Hasta cierto punto, es posible con todos los idiomas, pero con Haskell es más a menudo posible. Y mucho más fácil de desarrollar. (La programación funcional define el comportamiento más estrictamente, ya que define los resultados, no los procedimientos) – Lodewijk

4

Yo diría que consulte OpenTK y sus enlaces C# para obtener un jumpstart en OpenCL. Mira OpenCL's website para obtener los enlaces estándar C o C++.

Aprendizaje OpenCL, hay varios recursos ... no mucho. Encontré following this útil.

1

Lo siento por ser 7 años de retraso. Pero aquí es una biblioteca # GPGPU fuente de C abierta a escribir sus propios núcleos OpenCL:

https://github.com/tugrul512bit/Cekirdekler/wiki/Beginning

y un mundo hola como la tradición:

ClNumberCruncher gpus= new ClNumberCruncher(
    ClPlatforms.all().devicesAmd().gpus(), @" 
     __constant char text[12] = {'h','e','l','l','o',' ','w','o','r','l','d',' '}; 
     __kernel void hello(__global char * arr) 
     { 
       printf(text); 
     } 
    "); 
gpus.performanceFeed = true; 
ClArray<byte> array = new ClArray<byte>(5,1); 
array.compute(gpus, 1, "hello", 5, 1); 
array.compute(gpus, 1, "hello", 5, 1); 
array.compute(gpus, 1, "hello", 5, 1); 

Ésta es la salida:

hello world 
hello world 
hello world 
hello worldhello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 29.47ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: 29.76ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

hello worldhello world 
hello world 
hello world 
hello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 1.64ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: 1.33ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

hello worldhello world 
hello world 
hello world 
hello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 1.08ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: .87ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

puede hacer un montón de cosas desde la canalización hasta la programación de grupos de tareas.

+1

jajajaja tks de todos modos! – Leonardo

Cuestiones relacionadas