Когда выгодно переносить вычисления с Java на собственный метод? [закрыто] ⇐ JAVA
Когда выгодно переносить вычисления с Java на собственный метод? [закрыто]
Я написал довольно успешную программу на Java для создания и отображения фрактальных изображений Мандельброта. Хотя меня это вполне устраивает, в краевых областях графика, где требуются тысячи итераций, чтобы определить, находится ли точка (пиксель) в наборе или близко к нему, время выполнения вычислений для изображения 1440x960 может превышать 20 секунд. Итак, в любом случае нуждаясь в практике C++, я решил перенести большую часть из более чем 7 миллионов операций с плавающей запятой, необходимых в таких ситуациях, в собственный метод, реализованный на C++, ожидая значительного увеличения производительности. К моему удивлению, когда я это сделал, оказалось, что реализация на C++ была примерно на 5 % медленнее, чем реализация всего этого на Java.
Моя выбранная реализация заключалась в том, чтобы выполнять вычисления для одного столбца за раз в C++, поэтому остается 1440 вызовов/изображений метода C++, которые включают по одному вызову GetDoubleArrayElements() и ReleaseDoubleArrayElements() с любыми накладными расходами Java, которые влекут за собой передать обратно значения счетчика 960.
Мне было бы очень интересно услышать мнения о том, что здесь происходит. Действительно ли компиляция или оптимизация Java на лету настолько эффективны? Достаточно ли велики накладные расходы на передачу обратно массивов из 960 элементов? Что-то еще?
Спасибо
Я написал довольно успешную программу на Java для создания и отображения фрактальных изображений Мандельброта. Хотя меня это вполне устраивает, в краевых областях графика, где требуются тысячи итераций, чтобы определить, находится ли точка (пиксель) в наборе или близко к нему, время выполнения вычислений для изображения 1440x960 может превышать 20 секунд. Итак, в любом случае нуждаясь в практике C++, я решил перенести большую часть из более чем 7 миллионов операций с плавающей запятой, необходимых в таких ситуациях, в собственный метод, реализованный на C++, ожидая значительного увеличения производительности. К моему удивлению, когда я это сделал, оказалось, что реализация на C++ была примерно на 5 % медленнее, чем реализация всего этого на Java.
Моя выбранная реализация заключалась в том, чтобы выполнять вычисления для одного столбца за раз в C++, поэтому остается 1440 вызовов/изображений метода C++, которые включают по одному вызову GetDoubleArrayElements() и ReleaseDoubleArrayElements() с любыми накладными расходами Java, которые влекут за собой передать обратно значения счетчика 960.
Мне было бы очень интересно услышать мнения о том, что здесь происходит. Действительно ли компиляция или оптимизация Java на лету настолько эффективны? Достаточно ли велики накладные расходы на передачу обратно массивов из 960 элементов? Что-то еще?
Спасибо
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Когда выгодно переносить вычисления с Java на собственный метод? [закрыто]
Anonymous » » в форуме C++ - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как заставить Scaffold TopAppBar переносить высоту содержимого своих дочерних элементов?
Anonymous » » в форуме Android - 0 Ответы
- 51 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нужно ли переносить аргументы виртуальной машины javax.net.ssl.* в jakarta.net.ssl.*?
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нужно ли переносить аргументы виртуальной машины javax.net.ssl.* в jakarta.net.ssl.*?
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-