Алгоритм коротко описан
http://www.netlib.org/lapack/lug/node66.html
в конце страницы и затем можно просто открыть код соответствующей
подпрограммы с использованием BLAS уровня 3. Скажем факторизация матрицы
это dgetrf
http://www.netlib.org/lapack/double/dgetrf.f
> - чтобы разместить в кэше блочную матрицу и далее проводить операции
> с
> ней нужно использовать специализированные функции работы с кэш
> памятью.
> Или можно использовать стандартную new которая размещает данные в
> куче.
> Функция new выделяет память в кэше , если памяти в кэше не достаточно
> то
> остальная информация помещается в кучу, правильно думаю или нет?
Я бы сказал, что использование кэш процессора происходит автоматически.
Процессор в любом случае перед чтением данных переносит их из обычной
памяти в свой кэш. Здесь просто надо организовать алгоритм так, чтобы
данные из небольшого блока повторно использовались.
> - Как определять размеры блоков, чтобы блочная матрица полностью
> размещалась в кэше процессора? ( Ведь у разных процессоров разный
> объем кэша).
Совершенно верно. Оптимизированный BLAS разный для разных процессоров.
ATLAS определяет это автоматически. Во время компиляции он запускает
огромное количество тестов, чтобы определить наилучший набор параметров.
Также можно представить себе ситацию, когда оптимизированный BLAS
поставляется с базой данных параметров для разных процессоров. Далее,
когда он просыпается, он проверяет, какой процессор в наличии и
загружает соотвествующие параметры.
> - Реально ли реализовать всё это на Java?
Запуск в Google java optimized blas дал некоторые ссылки, например
http://www.netlib.org/blas/faq.html#6
> - Как вы сказали Евгений, такая идея была придумана специально для
> плотных матриц, а как быть с разряженными матрицами?
> Если использовать фронтальный метод - то тут всё
> понятно, поскольку фронтальная матрица обычно всегда получаеться
> плотной и её можно факторизовать блоками с использованием этого
> подхода.
> К разряженным матрицам, имеющим чётко выраженную блочную структуру
> также
> можно применить этот подход.
> А что делать с остальными разряженными матрицами, которые не имеют
> ярко
> выраженной блочной структуры, с хаотичным разбросом ненулевых
> элементов
> по портрету. Как к ним применить этот подход?
В multifrontal методах также получаюся небольшие плотные матрицы.
Поэтому эффективность всех решателей, скажем TAUCS, UMFPACK, MUMPS,
сильно зависит от использования оптимизированного BLAS. На всех трех
серверах можно найти статьи с описанием алгоритмов, где можно найти
детали.
Я должен сказать, что знаю Java только по наслышке. Здесь некоторая
проблема в том, что компилятор, который генерит байт-код, не может
проводить оптимизацию под конкретный процессор. Может быть технология
JIT внесет какое-нибудь улучшение.
Результаты по блочным алгоритмам показывают, что по какой-то причине не
происходит повтороного использования данных в кэш процессора. Может быть
это связано с особенностью работы виртуальной машины Явы, а может быть
что-то не так сделано в JLapack.
По-идее, надо сделать на одном компьютере обращение к LAPACK напрямую -
это даст вам точку отсчета. Далее, если разница слишком большая, лучше
всего спросить на форумах Явы, как это делают остальные.
Вообще, мне кажется, что преобразовать фортрановские циклы на Яву и там
компилировать - это не очень хорошая идея. Чтобы сравнить эффективность
самих циклов (более точно эффективность оптимизации циклов
компилятором), можете взять умножение матриц. Программы для Фортрана и С
здесь
http://matrixprogramming.com/MatrixMultiply/index.html#Direct
Интересно, что покажет Ява в этом случае.
--
Вы получили это сообщение, так как подписаны на группу "matrixprogramming_ru".
Чтобы отменить подписку на эту тему, перейдите по ссылке https://groups.google.com/d/topic/matrixprogramming_ru/jy_nlpvfNws/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес matrixprogrammin...@googlegroups.com.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу matrixprog...@googlegroups.com.
Перейдите в группу по ссылке https://groups.google.com/group/matrixprogramming_ru.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.