Прошу знатоков подсказать, что будет работать быстрее на современных интеловских процессорах:
1. Работа с рациональными числами, представленными в виде числителя и знаменателя - Java int.
2. Работа с плавающей точкой - Java double.
Оба примитивы.
Второй день сижу читаю интернет и не могу определиться и начать делать. Каких-то экстремально больших или экстремально малых значений не предполагается. Точность тоже не сильно критична, весь упор на производительность. Планируемые операции - только сложение, вычитание, деление и умножение. Никаких степеней, логорифмов и корней не будет.
C/C++ и CUDA пока не рассматриваю. Просто я не думаю, что оверхед перекроется выигрышем от параллелизма. А пробовать запилить два варианта решения, чтоб просто попробовать, нет ни сил, ни задора. У меня, конечно, большая часть логики SIMD, но размеры D примерно ~400'000 чисел на одну Инструкцию. Еще у меня данные хорошо скалируются, т.е. я просто могу взять еще железа и запусить тот же вычислятор за забором из Nginx. Тоже как-то не мотивирует идти с сторону C.
Короче, в раздумьях я...
Производительность кода с floating point vs integers
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Производительность кода с floating point vs integers
Да, позволяет. Я могу нормализовать свои данные, затолкав их, скажем, в пространство значений 0-1. Про точность арифметики с плавающей точкой я в курсе, она для меня приемлема и я знаю как минимизировать побочки, подогнав исходные данные к разумному виду. Да, кстати, если у меня вход в диапазоне, 0-1, то он в этих пределах так и останется. Т.е. вероятность получить решение за пределами этого диапазона практически отсутствует.
-
- Уже с Приветом
- Posts: 8485
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Производительность кода с floating point vs integers
Сделал простой ненаучный тест.
Взял первую попавшуюся библиотеку - https://introcs.cs.princeton.edu/java/9 ... .java.html
Перемножил в цикле 100 миллионов чисел.
floating point в 100 раз быстрее.
Взял первую попавшуюся библиотеку - https://introcs.cs.princeton.edu/java/9 ... .java.html
Перемножил в цикле 100 миллионов чисел.
floating point в 100 раз быстрее.
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Производительность кода с floating point vs integers
По поводу Жабы. Я понимаю, что Жаба уступит в производительности С. И мысль написать кусок вычислений на С у меня пока только крепнет, т.к. вариант использовать в перспективе CUDA тоже очень интересен.
По поводу задачи - обычная линейная алгебра. Складываем матрицы, перемножаем матрицы, обращаем матрицы. В целом, в моем случае, это серия итераций над несколькими иммутабельными объектами, в результате которых получается новый вектор. Т.е. самые тяжелые объекты, после создания, я могу не двигать и ни что не мешает их держать в процессорном кеше.
По поводу задачи - обычная линейная алгебра. Складываем матрицы, перемножаем матрицы, обращаем матрицы. В целом, в моем случае, это серия итераций над несколькими иммутабельными объектами, в результате которых получается новый вектор. Т.е. самые тяжелые объекты, после создания, я могу не двигать и ни что не мешает их держать в процессорном кеше.
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Производительность кода с floating point vs integers
Итерационные методы (аля сопряженных градиентов или что-то в этом роде)? Пользовать double и не париться с дробным представлением. Еще стоит перепроверить, что все минимизировано на уровне алгоритма, типа только одно умножение на матрицу на одну итерацию.tessob wrote: ↑01 Aug 2018 09:40 По поводу задачи - обычная линейная алгебра. Складываем матрицы, перемножаем матрицы, обращаем матрицы. В целом, в моем случае, это серия итераций над несколькими иммутабельными объектами, в результате которых получается новый вектор. Т.е. самые тяжелые объекты, после создания, я могу не двигать и ни что не мешает их держать в процессорном кеше.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Производительность кода с floating point vs integers
Не, по сути ближе к обычному симплексу. Мне нужно реализвовать некий тензор состояний (смены базисов), что-бы уметь по нему возвращаться к последнему живому sub-оптимуму и начинать из него, а не из исходного базиса. Короче, в рамках моей логики, я еще не досчитав текущее решение могу создать новый тред и начинать в нем считать следующее. Короче, я хочу решейпать свой политоп за меньшее время, чем из нуля целевой функции. Ну и варианты как политоп может измениться, в моем случае, ограничены, т.е. я предполагаю, что в 90% случаях смогу находить новый оптимум за очень малое число итераций (десятки-сотни). Именно по этой причине я пока и не решаюсь на С. Я могу себе позволить просто запустить несколько серверов, которые будут это считать и мне даже не нужно париться по поводу консистентности данных внутри.
-
- Уже с Приветом
- Posts: 8485
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Производительность кода с floating point vs integers
Об арифметике и производительности.
Я тут на днях столкнулся с куском кода (JavaScript, правда, не Java), где RSA ключи генерируются без использования native библиотеки.
На последнем айфоне пара ключей две минуты генерируется... Переключил на WebCrypto - теперь за секунду.
Я тут на днях столкнулся с куском кода (JavaScript, правда, не Java), где RSA ключи генерируются без использования native библиотеки.
На последнем айфоне пара ключей две минуты генерируется... Переключил на WebCrypto - теперь за секунду.
-
- Уже с Приветом
- Posts: 8485
- Joined: 02 Aug 2003 01:32
- Location: SPb->SFBA
Re: Производительность кода с floating point vs integers
Поиск простых чисел - чистая арифметика.
Если именно производительность критична, то джава, скорее всего, не оптимальный вариант.
Если именно производительность критична, то джава, скорее всего, не оптимальный вариант.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Производительность кода с floating point vs integers
Джависты довольно грамотно аргументируют что таки производителен как C++. Последний проигрывает на управлении памятью.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 4379
- Joined: 20 Jun 2001 09:01
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: Производительность кода с floating point vs integers
При неправильном управлении можно ещё не то сломать.
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 3000
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: Производительность кода с floating point vs integers
Не совсем понятно, о каком "проигрывании на управлении памятью" идет речь. С++ может проигрывать в легкости управления памятью (в том смысле, что в garbage collected языке управлением памятью можно не занимать вообще). Но С++ без разговоров и с большим отрывом выигрывает в производительности управления памятью.
Best regards,
Андрей
Андрей