2011-09-28 16 views
9

Estoy tratando de usar CUSP como un solucionador lineal externo para que Mathematica use la potencia de la GPU. Aquí está el CUSP Project webpage. Estoy pidiendo sugerencias sobre cómo podemos integrar CUSP con Mathematica. Estoy seguro de que muchos de ustedes estarán interesados ​​en discutir esto. Creo que escribir una matriz de entrada y luego alimentarlo al programa CUSP no es el camino a seguir. Usar el LibrarayFunctionLoad de Mathematica será una mejor manera de canalizar la matriz de entrada al solucionador basado en GPU sobre la marcha. ¿Cuál será la forma de suministrar la matriz y la matriz del lado derecho directamente desde Mathematica?Capacidades de función de biblioteca de Mathematica

Aquí hay algunos fragmentos de código CUSP.

#include <cusp/hyb_matrix.h> 
#include <cusp/io/matrix_market.h> 
#include <cusp/krylov/cg.h> 

int main(void) 
{ 
// create an empty sparse matrix structure (HYB format) 
cusp::hyb_matrix<int, float, cusp::device_memory> A; 

// load a matrix stored in MatrixMarket format 
cusp::io::read_matrix_market_file(A, "5pt_10x10.mtx"); 

// allocate storage for solution (x) and right hand side (b) 
cusp::array1d<float, cusp::device_memory> x(A.num_rows, 0); 
cusp::array1d<float, cusp::device_memory> b(A.num_rows, 1); 

// solve the linear system A * x = b with the Conjugate Gradient method 
cusp::krylov::cg(A, x, b); 

return 0; 
} 

Esta pregunta nos da la posibilidad de discutir las capacidades de recopilación de Mathematica 8. También es posible invocar el tema de la interfaz de MathLink de MMA. Espero que la gente aquí encuentre este problema digno y lo suficientemente interesante como para reflexionar.

BR

+1

Tenga en cuenta que el formato de StackOverflow no es muy adecuado para las discusiones. No es un foro Trate de mantenerse en el formato de preguntas y respuestas tanto como sea posible. –

+1

@belisarius Tengo tu punto. Dame algo de tiempo, enmarca una pregunta concreta. Pero la pregunta era cómo atacar este problema. Gracias por recordar.. – PlatoManiac

Respuesta

1

Si desea utilizar LibraryLink (para los que LibraryFunctionLoad se utiliza para acceder a una función de biblioteca dinámica como downvalue Mathematica) hay realmente no hay mucho espacio para la discusión, LibraryFunctions pueden recibir tensores Mathematica de dobles de la máquina o máquina enteros y listo.

El formato MTensor de Mathematica es una matriz densa, tal como se usaría naturalmente en C, por lo que si CUSP utiliza algún otro formato, necesitará escribir algún código de cola para traducir entre representaciones.

Consulte LibraryLink tutorial para obtener más información.

Deseará tener especialmente en cuenta la sección "Administración de memoria de MTensors" en la página Interaction with Mathematica, y elegir el modo "Compartido" para pasar un tensor de Mathematica por referencia.

Cuestiones relacionadas