concurrency como - ¿Cómo puedo hacer que un programa simultáneo ya escrito se ejecute en una matriz de GPU?





importar archivo (3)


No, usar CUDA no es un asunto trivial.

El modelo de programación CUDA básicamente usa C (con algunas adiciones), pero para aprovechar al máximo las capacidades de la GPGPU, debe asegurarse de que sus algoritmos sigan las pautas de CUDA. (ver la Guía de programación NVidia CUDA )

Por ejemplo, para obtener el mejor rendimiento de la memoria (alrededor de 70 Gbps) necesita acceder a la memoria en modo de transmisión con coalescencia, también las ramificaciones son muy costosas en las GPU, por lo que debe evitar condicionales tanto como sea posible. Consulte la guía y las muestras proporcionadas con el SDK, que proporcionarán un excelente punto de partida

Tengo una red neuronal escrita en Erlang, y acabo de comprar una tarjeta GeForce GTX 260 con una GPU de 240 núcleos. ¿Es trivial usar CUDA como pegamento para ejecutar esto en la tarjeta gráfica?




Desearía poder decirte cómo hacer esto con Erlang ... ;-), pero al menos, Satnam Singh en MS Research ha realizado un trabajo muy interesante con Haskell (Lava) y F #. Tal vez este artículo puede darle una intuición de cómo se podría hacer:

http://research.microsoft.com/en-us/people/satnams/




Cuando envía un Runnable o un Callable a un ExecutorService , recibe un Future a cambio. Haga que los hilos que dependen de a1 pasen a Future de a1 y llame a Future.get() . Esto bloqueará hasta que el hilo se complete.

Asi que:

ExecutorService exec = Executor.newFixedThreadPool(5);
Runnable a1 = ...
final Future f1 = exec.submit(a1);
Runnable a2 = new Runnable() {
  @Override
  public void run() {
    f1.get();
    ... // do stuff
  }
}
exec.submit(a2);

y así.





concurrency erlang cuda parallel-processing gpu