Функциональные возможности библиотеки Mathematica - PullRequest
9 голосов
/ 28 сентября 2011

Я пытаюсь использовать CUSP в качестве внешнего линейного решателя для Mathematica для использования мощности графического процессора. Вот веб-страница проекта CUSP . Я прошу несколько предложений о том, как мы можем интегрировать CUSP с Mathematica. Я уверен, что многим из вас здесь будет интересно обсудить это. Я думаю, что написать входную матрицу и затем передать ее в программу CUSP - не самый лучший способ. Использование Mathematica LibrarayFunctionLoad будет лучшим способом передачи входной матрицы в решатель на основе графического процессора на лету. Каким будет способ поставки матрицы и правой матрицы непосредственно из Mathematica?

Вот фрагмент кода 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;
}

Этот вопрос дает нам возможность обсудить возможности компиляции Mathematica 8. Также можно вызвать тему интерфейса mathlink MMA. Я надеюсь, что люди здесь находят эту проблему достойной и достаточно интересной, чтобы обдумать.

BR

1 Ответ

1 голос
/ 25 октября 2011

Если вы хотите использовать LibraryLink (для которого LibraryFunctionLoad используется для доступа к функции динамической библиотеки в качестве понижающего значения Mathematica), на самом деле не так много места для обсуждения, LibraryFunctions может получить тезисы Mathematica о машинных двойниках или целых числах машин, и все готово .

Формат Mathematica MTensor представляет собой плотный массив, который вы, естественно, используете в C, поэтому, если CUSP использует какой-то другой формат, вам потребуется написать некоторый связующий код для преобразования между представлениями.

Обратитесь к учебнику LibraryLink для получения полной информации.

Вам нужно особенно обратить внимание на раздел «Управление памятью MTensors» на странице Взаимодействие с Mathematica и выбрать режим «Общий доступ», чтобы просто передать тензор Mathematica по ссылке.

...