2010-10-11 10 views
9

¿Alguien puede recomendar una buena referencia o tutorial para la interfaz de cblas? No aparece nada en Google, todas las páginas man que encontré corresponden a la interfaz de Fortran Blas, y el PDF que venía con MKL literalmente tardó diez segundos en buscarse y no fue útil.¿Alguna buena documentación para la interfaz de cblas?

En particular, tengo curiosidad de por qué hay un parámetro adicional para la fila frente a la columna principal; ¿No se pueden lograr las mismas operaciones con los indicadores de transposición? Parece que el parámetro adicional solo agrega complejidad a una interfaz ya propensa a errores.

Respuesta

1

En este artículo se muestra cómo utilizar cblas (y otros) en C con un ejemplo sencillo: http://www.seehuhn.de/pages/linear

He citado el parte relevante a continuación en caso de que el sitio se caiga.

Usando BLAS

Para probar las rutinas BLAS que queremos realizar una simple multiplicación matriz-vector. Leyendo el archivo blas2-paper.ps.gz encontramos que el nombre de la función Fortran correspondiente es DGEMV. El texto blas2-paper.ps.gz también explica el significado de los argumentos para esta función. En cblas.ps.gz encontramos que el nombre de la función C correspondiente es cblas_dgemv. El ejemplo siguiente utiliza esta función para calcular el producto matriz-vector

/ 3 1 3 \ /-1 \ 
| 1 5 9 | * | -1 |. 
\ 2 6 5/ \ 1/

archivo Ejemplo testblas.c:

#include <stdio.h> 
#include <cblas.h> 

double m[] = { 
    3, 1, 3, 
    1, 5, 9, 
    2, 6, 5 
}; 

double x[] = { 
    -1, -1, 1 
}; 

double y[] = { 
    0, 0, 0 
}; 

int 
main() 
{ 
    int i, j; 

    for (i=0; i<3; ++i) { 
    for (j=0; j<3; ++j) printf("%5.1f", m[i*3+j]); 
    putchar('\n'); 
    } 

    cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, m, 3, 
      x, 1, 0.0, y, 1); 

    for (i=0; i<3; ++i) printf("%5.1f\n", y[i]); 

    return 0; 
} 

Para compilar este programa usamos el siguiente comando.

cc testblas.c -o testblas -lblas -lm

La salida de este programa de prueba es

3.0 1.0 3.0 
1.0 5.0 9.0 
2.0 6.0 5.0 
-1.0 
3.0 
-3.0 

lo que demuestra que todo funcionaba bien y que nos Ni siquiera usó la matriz transpuesta por error.

Cuestiones relacionadas