Arrayfire es una biblioteca de tensor de uso general que simplifica el proceso de desarrollo de software para las arquitecturas paralelas que se encuentran en las CPU, GPU y otros dispositivos de aceleración de hardware. La biblioteca atiende a los usuarios en todos los mercados de computación técnica.
Varios de los beneficios de Arrayfire incluyen:
Arrayfire proporciona a los desarrolladores de software una abstracción de datos de alto nivel que reside en el acelerador, el objeto af::array . Los desarrolladores escriben código que realiza operaciones en matrices de Arrayfire, que, a su vez, se traducen automáticamente en núcleos casi óptimos que se ejecutan en el dispositivo computacional.
Arrayfire se ejecuta en dispositivos que van desde teléfonos móviles de baja potencia hasta supercomputadoras habilitadas para GPU de alta potencia. Arrayfire se ejecuta en CPU de todos los principales proveedores (Intel, AMD, ARM), GPU de los fabricantes prominentes (AMD, Intel, Nvidia y Qualcomm), así como una variedad de otros dispositivos de aceleradores en Windows, Mac y Linux.
Se pueden encontrar instrucciones para instalar o construir Arrayfire a partir de la fuente en el wiki.
Visite la página de Wikipedia para obtener una descripción del juego de la vida de Conway.

static const float h_kernel[] = { 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 };
static const array kernel ( 3 , 3 , h_kernel, afHost);
array state = (randu( 128 , 128 , f32) > 0.5 ).as(f32); // Init state
Window myWindow ( 256 , 256 );
while (!myWindow.close()) {
array nHood = convolve (state, kernel); // Obtain neighbors
array C0 = (nHood == 2 ); // Generate conditions for life
array C1 = (nHood == 3 );
state = state * C0 + C1; // Update state
myWindow. image (state); // Display
}El código fuente completo se puede encontrar aquí.

array predict ( const array &X, const array &W) {
return sigmoid ( matmul (X, W));
}
array train ( const array &X, const array &Y,
double alpha = 0.1 , double maxerr = 0.05 ,
int maxiter = 1000 , bool verbose = false ) {
array Weights = constant ( 0 , X. dims ( 1 ), Y. dims ( 1 ));
for ( int i = 0 ; i < maxiter; i++) {
array P = predict (X, Weights);
array err = Y - P;
if (mean< float >( abs (err) < maxerr) break ;
Weights += alpha * matmulTN (X, err);
}
return Weights;
}
...
array Weights = train(train_feats, train_targets);
array test_outputs = predict(test_feats, Weights);
display_results< true >(test_images, test_outputs,
test_targets, 20 );El código fuente completo se puede encontrar aquí.
Para obtener más ejemplos de código, visite los examples/ directorio.
Puede encontrar la documentación completa aquí.
Enlaces rápidos:
Arrayfire tiene varias API de idiomas oficiales y comunitarias:
† †
† Envolturas mantenidas por la comunidad
Envoltorios en progreso
La comunidad de desarrolladores de Arrayfire lo invita a construir con nosotros si está interesado y puede escribir funciones de tensor de alto rendimiento. Juntos podemos cumplir con la misión Arrayfire para la computación científica rápida para todos.
¡Las contribuciones de cualquier tipo son bienvenidas! Consulte el wiki y nuestro código de conducta para obtener más información sobre cómo puede involucrarse con la comunidad Arrayfire a través del patrocinio, las comisiones del desarrollador o la gobernanza.
Si redistribuye ArrayFire, siga los términos establecidos en la licencia. Si desea citar Arrayfire en una publicación académica, utilice el siguiente documento de cita.
El desarrollo de Arrayfire está financiado por Accelereyes LLC y varios terceros, consulte la lista de reconocimientos para una expresión de nuestra gratitud.
La marca literal "Arrayfire" y los logotipos de Arrayfire son marcas registradas de Accelereyes LLC (DBA Arrayfire). Si desea utilizar cualquiera de estas marcas en su propio proyecto, consulte la Política de marca registrada de Arrayfire