#wolfram-mathematica #cuda #gpu #linear-algebra #numerics
#wolfram-mathematica #cuda #графический процессор #линейная алгебра #числовые
Вопрос:
Я пытаюсь использовать CUSP в качестве внешнего линейного решателя для Mathematica, чтобы использовать возможности графического процессора. Вот веб-страница проекта CUSP. Я прошу некоторые предложения о том, как мы можем интегрировать CUSP с Mathematica. Я уверен, что многим из вас здесь будет интересно обсудить это. Я думаю, что писать входную матрицу и затем передавать ее в программу CUSP — это не правильный путь. Использование Mathematica LibrarayFunctionLoad
будет лучшим способом «на лету» передавать входную матрицу в решатель на базе GPU. Каким будет способ подачи матрицы и матрицы правой части непосредственно из 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. Пожалуйста, имейте в виду, что формат StackOverflow не очень подходит для обсуждения. Это не форум. Старайтесь как можно больше придерживаться формата вопросов и ответов.
2. @belisarius я понял вашу точку зрения. Дайте мне немного времени, чтобы сформулировать конкретный вопрос. Но вопрос заключался в том, как решить эту проблему. Спасибо за напоминание..
Ответ №1:
Если вы хотите использовать LibraryLink (для которого LibraryFunctionLoad используется для доступа к динамической библиотечной функции в качестве понижающего значения Mathematica), на самом деле не так много места для обсуждения, LibraryFunctions могут получать тензоры Mathematica машинных двойников или машинных целых чисел, и все готово.
Формат Mathematica MTensor представляет собой плотный массив, такой же, как вы, естественно, используете в C, поэтому, если CUSP использует какой-либо другой формат, вам нужно будет написать некоторый связующий код для перевода между представлениями.
Обратитесь к руководству LibraryLink для получения полной информации.
Вы должны особо отметить раздел «Управление памятью MTensors» на странице взаимодействия с Mathematica и выбрать режим «Общий», чтобы просто передать тензор Mathematica по ссылке.