LINUX.ORG.RU

Оптимизация умножения

 ,


0

2

Если скомпилировать int a=5*10 через javac на выходе будет инструкция add или сдвиг? Занимается ли javac оптимизацими? Стоит ли заниматься оптимизацией в исходном коде, если все равно будет jid компиляция?

★★

Если скомпилировать int a=5*10 через javac на выходе будет инструкция add или сдвиг?

Будет инструкция умножения.

Занимается ли javac оптимизацими?

Нет. Этим занимается JIT.

Стоит ли заниматься оптимизацией в исходном коде

Если ты про замену умножения на сдвиг и сложение - нет, не стоит.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

Занимается ли javac оптимизацими?

Нет. Но выражение:

int a=5*10

будет вычислено в момент компиляции и в байткоде будет уже 50.

Стоит ли заниматься оптимизацией в исходном коде

Смотря что, если операции выполняются над массивами целочисленных чисел, то можно писать так, чтоб jit использовал SIMD расширения в процессоре.

Aber ★★★★★
()

у вас преждевременная оптимизация. рекомендую провериться у профайлера.

Avial ★★★★★
()
Ответ на: комментарий от no-such-file

Сколько лет было потрачено разработчиками процессоров, чтобы заоптимизировать сравнение и умножение до нынешнего уровня…

anonymous
()
Ответ на: комментарий от anonymous

Кстати да. Царь много тут времени и сил потратил чтобы разъяснить местным «экспертам» как сильно они ошибаются с их познаниями об оптимизации, и когда эксперты стали приводить цитаты из руководства Intel времён P6, то царь отметил что их знания устарели и их нужно освежить. Жаль что модеры всё потёрли :(

По теме, не нужно оптимизировать умножение, и менять на сдвиги, в современных X86 сдвиги работают медленнее, чем умножение.

Вот просто посмотри, gcc не оптимизирует умножение:

(Кто не в курсе, haswell это haswell, nocona это Pentium 4, меньше архитектуру нельзя выставить для X86-64)

https://gcc.godbolt.org/z/nEM-ds

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Более того, clang даже пытается назад оптимизировать сдвиги до умножений, gcc к сожалению пока до этого не додумался:

https://gcc.godbolt.org/z/AZ6xge

В общем будь умным как gcc и clang, и прежде чем что-то оптимизировать прочитай самый новый optimization reference manual от Intel, не полагайся на старые знания…

fsb4000 ★★★★★
()
Ответ на: комментарий от Aber

Нет. Но выражение: int a=5*10 будет вычислено в момент компиляции и в байткоде будет уже 50. Это понятно.

tyamur ★★
() автор топика
Ответ на: комментарий от fsb4000

Хватит уже сосать царю, задолбал. Иди к нему в блог и наяривай там.

anonymous
()

тру пацаны говорят, что надо писать ++i, а не i++ в цикле. Значительно ускоряется выполнение!

anonymous
()
Ответ на: комментарий от anonymous

А что предполагается сдвигать при операции 5*10?

если рассмотреть функцию умножения на 10, то её можно реализовать как-то так:

int mult_by_10(int a)
{
    int b = a << 2; // 4 * a;
    int c = b + a; // 5 * a
    int d = b << 1; // 10 * a
    return d;
}

Не нужно так делать, но когда-то такая чушь была быстрее…

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 2)
Ответ на: комментарий от fsb4000

Нашел информацию что в арм вообще нет умножения а там сдвиг и сдожение. В том плане что инструкции есть но работает она так.

tyamur ★★
() автор топика
Ответ на: комментарий от tyamur

Совневаюсь, что это верно от кучи совсем разных арм ядер от разных компаний. IPC какого-нибудь проца из айфона и микроконтроллера различаются кардинально.

anonymous
()

У тех, кто программирует на Java что-то полезное, этого вопроса не возникает. Им приходится думать о более важных вещах, а если об оптимизации - то не о том, что быстрее, i++ или ++i.

В общем, забейте.

Partisan ★★★★
()
Ответ на: комментарий от tyamur

Если только в совсем древних. Умножение есть даже в Cortex-M0.

anonymous
()
Ответ на: комментарий от tyamur

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337h/CHDDIGAC.html

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/CHDCICDF.html

В таблице смотреть столбец Cycles. В Cortex-M0 «Cycle count depends on core and debug configuration», а в Cortex-M3 уже всегда полноценный умножитель. И это всего лишь микроконтроллеры.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.