Страницы

Поиск по вопросам

четверг, 6 июня 2019 г.

Как на Java параллельно сложить два массива?

Например, есть два огромных (длина 2-3 млн.) массива float[] или double[] без разницы. Нужно их очень быстро сложить. Как это сделать? Есть ли какие-нибудь библиотеки для этого?


Ответ

Я про 8 Java и LambdaJ написал скорее для общего ознакомления и для ответа на коммент про аналоги LINQ. Если отвечать в рамках вопроса, то ни LINQ, ни Java 8 и ни LambdaJ не является быстрым решением вопрооса сложения (с точки зрения производительности). Сложение слишком простая операция и накладные расходы на вского рода вкусности, вроде функционального стиля, будут слишком велики. Согласно докам по LambdaJ она в два раза медленее в среднем чем просто циклы. (В некоторых местах доходит до 4х раз). Новая Java все еще не в релизе, и пользоваться ей в продакшене не стоит. Остается только ручная многопоточность (мне кажется что 2-3 миллиона это не такие уж и огромные данные для операции сложения). На своем дряхленьком нетбуке я смог ускоритсья на двух тредах. Выложил код на гитхаб, надеюсь ктонить попробует и выложит информацию с нормального железа. Насчет использования с++ и SSE, следующий код: for (int i = 0; i < a.length; i++) c[i] = a[i] + b[i]; Компилится в SSE инструкции JIT'ом. Насколько будет выйгрыш, если вручную написать на SSE - не знаю. Возможно не стоит заморачиваться с нативным кодом.

Комментариев нет:

Отправить комментарий