Я не очень много Java.
Я пишу некоторый оптимизированный математический код, и я был шокирован результатами моих профилировщиков. Мой код собирает значения, перемежает данные и затем выбирает значения на основе этого. Java работает медленнее, чем мои реализации на С++ и MATLAB.
Я использую javac 1.7.0_05
Я использую Sun/Oracle JDK 1.7.05
Существует функция floor, которая выполняет соответствующую задачу в коде.
- Кто-нибудь знает о парадигматическом способе исправить это?
-
Я заметил, что моя функция
floor()
определена с помощьюStrictMath
. Есть что-то вроде-ffast-math
для Java? Я ожидаю, что должен быть способ изменить функцию пола на что-то более разумно вычислительное, не написав мои собственные.public static double floor(double a) { return StrictMath.floor(a); // default impl. delegates to StrictMath }
Edit
Итак, несколько человек предложили мне попробовать сделать бросок. Я попробовал это, и в стенах не было никаких изменений.
private static int flur(float dF)
{
return (int) dF;
}
413742 функция литого пола
394675 Math.floor
Эти тесты выполнялись без профилировщика. Было предпринято усилие для использования профилировщика, но время выполнения было радикально изменено (15 минут, поэтому я ушел).