martes, 29 de septiembre de 2009

OpenCL... ¡lanzamiento!

Ayer mismo nVidia lanzó sus drivers con soporte para OpenCL. Sorprendentemente, de forma simultánea para windous y Linux!

OpenCL es el estándar del grupo Chronos para computación GPGPU, no sólo especializada en cálculo numérico sino también para programación de uso general. Supongo que por ser tan ambicioso, tardará en sustituir a CUDA, mucho más maduro a estas alturas. Aunque a la vez pienso que finalmente lo hará. Primero porque auna distintas técnicas de programación y, segundo y más importante, porque es el lenguaje que apoyan tanto fabricantes de GPUs, de ordenadores y desarrolladores de software importantes.

A la espera de la implementación de ATI de este estándar en sus drivers, ya son Apple--de forma nativa en su Snow Leopard--, Adobe en su potochop y ahora nVidia, las que están impulsándolo. Los de Phoronix ya han anunciado que cuando tengan los drivers de ATI definitivos, compararan ambas implementaciones... que les gusta hacer sangre, viciosillos.

En la página de descargas tenemos disponibles tanto los drivers (32 y 64 bits) como "profilers", documentación y ejemplos.

Al final me van a obligar a cambiar mi macbook con su integrada Intel...

domingo, 27 de septiembre de 2009

GNU/Linux, el sistema más usado

Eso es lo que dicen las estadísticas, concretamente las de visitas a este blog...

sábado, 26 de septiembre de 2009

Empuje

Thrust es el nuevo descubrimiento. Para los que desarrollamos en C++, CUDA se hace un poco cuesta arriba, demasiado parecido a C...

Esta biblioteca implementa algoritmos similares a la STL, con una sintaxis casi igual, pero con la ventaja de que se ejecutan en paralelo en nuestra GPU. Se tiene total control sobre la memoria del ordenador y la GPU, y el código es lo más legible que he visto para computación en gráficas.

Un ejemplo sencillo:
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/sort.h>
#include <thrust/copy.h>
#include <cstdlib>

int main(void)
{
// generate 16M random numbers on the host
thrust::host_vector<int> h_vec(1 << 24);
thrust::generate(h_vec.begin(), h_vec.end(), rand);

// transfer data to the device
thrust::device_vector<int> d_vec = h_vec;

// sort data on the device (145M keys per second on a GTX 280)
thrust::sort(d_vec.begin(), d_vec.end());

// transfer data back to host
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());

return 0;
}

viernes, 4 de septiembre de 2009

Konichiwa!

De camino al Imperio del Sol Naciente, con un Macbook en el que sólo funciona Ubuntu. El Leopard petó. Me pregunto, ¿serán más frikis que yo? y lo que me anima es que sé la respuesta... ¡y me gusta!