Java-матричное умножение (FAST) - PullRequest
7 голосов
/ 15 января 2010

Я должен умножить 2 (в большинстве случаев) разреженной матрицы. Эти матрицы довольно маленькие (около 10k * 10k), и у меня есть два ядра Xeon Quad и один поток для этой работы?

есть ли быстрая библиотека для многопоточной молтипликации? любой другой совет?

Ответы [ 5 ]

4 голосов
/ 15 января 2010

Я бы попробовал Кольт , из ЦЕРН. Сейчас он немного стар, но все еще предоставляет отличные библиотеки для того, что вы пытаетесь.

Для параллельной обработки попробуйте более новый Parallel Colt .

3 голосов
/ 29 июня 2010

При должном уважении к Кольту и Параллельному Кольту они не очень быстрые. Если вы настаиваете на использовании Java и ожидаете быстрых числовых вычислений, используйте JBLAS. JBLAS использует ATLAS. Я скомпилировал JBLAS для использования многопоточного ATLAS - по умолчанию он этого не делает. Вам нужно будет изменить несколько параметров конфигурации. Однако даже однопоточный JBLAS работает быстрее, чем многопоточный Colt и Parallel Colt. Я тестировал Colt, Parallel Colt, JAMA и JBLAS. JBLAS является лучшим на милю страны.

Кольт и Параллельный Кольт очень медленные. Так же, как и JAMA. Лучшая библиотека на Java для таких вещей - JBLAS.

1 голос
/ 15 января 2010
0 голосов
/ 29 октября 2015

Вы смотрели на Java Matrix Benchmark ? Он сравнивает производительность между несколькими наиболее распространенными пакетами Java-линейной алгебры - включая пару, которые используют / вызывают собственный код. Умножение матриц - это, конечно, одна из проверенных / сравненных вещей, и последнее тестирование производительности было выполнено на двухъядерном процессоре Intel Xeon.

Чего вы не видите, так это того, как эти библиотеки работают с разреженными матрицами (или поддерживают ли они это вообще).

Можно добиться очень хорошей производительности с помощью чистой реализации Java, но если вы хотите максимально возможной производительности с матрицами такого большого размера, вам нужно "оставить JVM".

0 голосов
/ 15 января 2010

Да, есть библиотеки для многопоточного умножения матриц; пусть Google будет твоим другом Хотя, если у вас только один поток, многопоточность может не потребоваться. Почему у вас только один поток на 8-ядерном компьютере? Одна из рассматриваемых библиотек - это интерфейс Java BLAS.

Вы определенно выбираете правильный подход, ищите библиотеку, а не пытаетесь написать это самостоятельно.

...