Как этот линейный решатель может быть связан с Mathematica?

Вот хороший линейный решатель с именем GotoBLAS. Он доступен для загрузки и работает на большинстве вычислительных платформ. Мой вопрос: есть ли простой способ связать этот решатель с ядром Mathematica, чтобы мы могли называть его как LinearSolve? Одна вещь, с которой большинство из вас может согласиться наверняка, заключается в том, что если у нас есть очень большая линейная система, нам лучше решить ее с помощью какого-нибудь стандартного линейного решателя. Встроенный решатель не предназначен для действительно больших задач.

Теперь, когда Mathematica 8 предлагает улучшенные возможности компиляции и связывания библиотек, мы можем ожидать использования некоторых из этих решателей внутри Mathematica. Вопрос в том, требует ли это небольшой настройки исходного кода, или для этого нужно быть продвинутым мастером. Здесь, на этом форуме, мы можем начать связывать некоторые отличные программы с открытым исходным кодом, такие как GotoBLAS, с Mathematica и обмениваться мнениями. Менее опытные люди могут получить некоторую информацию от профессиональных пользователей, и в итоге мы получим гораздо более сильную Mathematica. Это будет открытый проект для постоянно растущего сообщества Mathematica и платформа, на которой новые возможности Mathematica 8 могут быть прозрачно задокументированы для будущих пользователей.

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


person PlatoManiac    schedule 05.08.2011    source источник
comment
Посмотрите Матлинк. Этому легко научиться.   -  person Szabolcs    schedule 05.08.2011
comment
Я не припомню какого-либо массового недовольства LinearSolve. Используя SparseArray, он может легко обрабатывать миллионы уравнений. В чем именно ваша проблема?   -  person Sjoerd C. de Vries    schedule 05.08.2011
comment
Меня ничуть не удивило бы, если бы Mathematica уже связалась с линейным решателем в той или иной форме. На самом деле, меня бы удивило, если бы они этого не сделали. Неважно, внутренние или внешние версии LAPACK и BLAS, если они проверены. Просмотр сообщений показывает, что они уже Поддержка ЛАПАКА. Однако я не использовал его.   -  person rcollyer    schedule 08.08.2011
comment
@rcollyer (очень) кратко обсуждается в The Internals of Mathematica. Он также использует некоторую версию ARPACK для разреженных матриц (или, в любом случае, что-то, что принимает по существу те же параметры, что и ARPACK — кстати, эти параметры не документированы в версии 8, поэтому нужно покопаться, чтобы найти их).   -  person acl    schedule 13.08.2011


Ответы (2)


Короткий ответ, я думаю, заключается в том, что это не то, чем вы действительно хотите заниматься.

GotoBLAS, насколько я понимаю, является конкретной реализацией BLAS, что означает основные подпрограммы линейной алгебры. «Базовый» на самом деле означает здесь довольно простой — например, умножить матрицу на вектор. Таким образом, BLAS не является решателем, который вызывала бы такая функция, как LinearSolve. LinearSolve будет (в зависимости от точной формы аргументов) вызывать команду LAPACK, которая представляет собой пакет более высокого уровня, созданный поверх BLAS. Таким образом, чтобы действительно связать GotoBLAS (или любой BLAS) с Mathematica, нужно было бы перекомпилировать все ядро.

Конечно, можно написать программу на C/Fortran, скомпилированную с помощью GotoBLAS, а затем связать ее с Mathematica. Полученная программа будет использовать GotoBLAS только при выполнении любых конкретных команд, которые вы связали с Mathematica, однако, что скорее упускает из виду весь смысл BLAS.

person Mark McClure    schedule 05.08.2011

Ядро Wolfram (Mathematica) уже связано с оптимизированной библиотекой Intel Math Kernel Library и распространяется вместе с Mathematica. MKL является многопоточным и векторизованным, поэтому я не уверен, что GotoBLAS улучшит.

person Eric Brown    schedule 05.04.2015