MKL ускоренные математические библиотеки для Java - PullRequest
3 голосов
/ 12 июня 2010

Я посмотрел на связанные темы в StackOverflow и Googled без особой удачи.Я также очень новичок в Java (я из C # и .NET), поэтому, пожалуйста, потерпите меня.В мире Java так много всего доступного, что это просто ошеломляет.

Я начинаю новый проект Java-на-Linux, который требует некоторых тяжелых и очень повторяющихся числовых вычислений (например, статистика, БПФ, линейная алгебра,Матрицы и т. Д.).Таким образом, максимальное выполнение математических операций является обязательным требованием, так же как и обеспечение правильности математических операций.Поэтому я заинтересован в том, чтобы найти библиотеку Java, которая, возможно, использует собственное ускорение, такое как MKL, и это доказано (так что коммерческие варианты здесь вполне возможны).

В пространстве .NET существуют высокооптимизированные иMKL ускорил коммерческие математические библиотеки, такие как Centerspace NMath и Extreme Optimization.Есть ли что-нибудь сопоставимое в Java?

Большинство математических библиотек, которые я нашел для Java, либо не поддерживаются в активном режиме (например, Colt), либо не используют MKL или другое собственное ускорение (такое какApache Commons Math).

Я уже пытался использовать MKL непосредственно из Java (например, JNI), но я, будучи новичком в Java (не говоря уже о взаимодействии между Java и нативными библиотеками), выглядел более разумным, находя библиотеку Java.он уже сделал это правильно, эффективно и доказано.

Опять же, я прошу прощения, если я ошибаюсь или ошибаюсь (даже в отношении любых библиотек, которые я упомянул) и мое незнание предложений Java.Это совершенно новый мир для меня, пришедший из сильно коммерциализированного стека Microsoft, так что я могу легко ошибиться в том, где искать и в отношении библиотек Java, которые я упоминал.Буду очень признателен за любую помощь или совет.

Ответы [ 3 ]

1 голос
/ 12 июня 2010

Для таких вещей, как FFT (массовые операции над массивами), проверка диапазона в java может снизить производительность (по крайней мере, недавно). Возможно, вы захотите поискать библиотеки, которые оптимизируют доказуемость их границ индекса.

Согласно спецификации HotSpot

Язык программирования Java спецификация требует границ массива проверка должна быть выполнена с каждым доступ к массиву. Проверка границ индекса может быть устранено, когда компилятор может доказать, что индекс, используемый для доступ к массиву в пределах границ.

Я бы на самом деле посмотрел на JNI и выполнял там ваши массовые операции, если они по отдельности очень большие. Чем дольше длится операция (т. Е. Решается большая линейная система или большое БПФ), тем больше стоит использовать JNI (даже если вы должны использовать memcpy туда и обратно).

1 голос
/ 12 июня 2010

Лично я согласен с вашим общим подходом: перенести тяжелую математику из Java в коммерческую библиотеку.

Поиски для интеграции Java / MKL Я нашел это , так что то, что вы предлагаете, технически возможно.Другой вариант, который следует рассмотреть, - это библиотеки NAG .Я использую MKL все время, хотя я программирую на Фортране, поэтому проблем с интеграцией нет.Я, безусловно, могу порекомендовать их качество и производительность.Например, мы протестировали MKL-версию FFTW с версией, которую мы создали из собственных источников.Реализация MKL была быстрее на небольшое целое число.

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

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

0 голосов
/ 12 июня 2010

Думаю, вам лучше избегать их. Я могу ошибаться, я не слишком хорошо знаком с этим, так что не берите слишком много от этого, если только некоторые другие не согласятся со мной, но вызов JNI имеет довольно большие издержки, так как он должен выходить наружу JRE и всего, что нужно для этого, поэтому, если вы не сгруппируете много вещей в единую функцию для одновременного выполнения, небольшое преимущество внешних библиотек будет значительно перевешивать стоимостью их вызова. Я бы отказался от поиска библиотеки MKL и нашел бы оптимизированную библиотеку чистого Java. Я не могу сказать, что знаю что-то лучшее, чем стандартный, который я бы рекомендовал, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...