Мохнатые уроды и моральные пёзды. Войти !bnw Сегодня Клубы

http://ideone.com/NlMluL
Умножение двух 16-битных беззнаковых чисел с получением 32-битного беззнакового, без условных переходов

#CQFUUP / @j123123 / 3957 дней назад

http://ideone.com/9kH1J6 вот такой вариант с ифами работает заметно быстрее
#CQFUUP/6XF / @j123123 / 3957 дней назад
Использование деления, инкременты-декременты переменных когда можно подставить константу - отстой. Неудивительно что оно тормозит. Сделай ещё чтобы оно выводило сколько тактов в среднем требуется для умножения, это интересно.
#CQFUUP/CC8 / @engineer / 3957 дней назад
@engineer >Использование деления Компилятор переведет деление signed числа на 2^n в арифметические сдвиги. Использование ">>" применительно к signed типам - implementation defined http://stackoverflow.com/questions/4009885/arithmetic-bit-shift-on-a-signed-integer/4009922#4009922 >когда можно подставить константу GCC так и делает. Он там много где подставляет константы, если вчитаться в ассемблерный выхлоп. >Сделай ещё чтобы оно выводило сколько тактов в среднем требуется для умножения Каким образом?
#CQFUUP/RN0 / @j123123 --> #CQFUUP/CC8 / 3957 дней назад
@j123123 Проведи 100000 операций, замерь время, подели на 100000, умножь на скорость CPU [такты\время] >GCC так и делает. Вот эти вот n++ n-- ? Подозрительно.
#CQFUUP/D5P / @engineer --> #CQFUUP/RN0 / 3957 дней назад
@engineer n++; n2--;
#CQFUUP/SZC / @j123123 --> #CQFUUP/D5P / 3957 дней назад
@engineer От того что я подставил константу, оно стало на 2 секунды быстрее работать, только и всего. Разница несущественна. Компилятору хватает мозгов использовать константы. Там в цикле оно делает кучу сравнений обычного умножения и сдвигового http://ideone.com/zmAVpd с константами time ./multiply2_upd_const; time ./multiply2_upd 0* 0 Done! real 2m17.531s user 2m17.174s sys 0m0.272s 0* 0 Done! real 2m19.608s user 2m19.227s
#CQFUUP/BWV / @j123123 --> #CQFUUP/CC8 / 3957 дней назад
@engineer Вот если такое: result += (a & ( (int16_t)( ( b & (1 << n) ) << n2 ) ) / ( 1 << 15) ) << n; Позаменять на такое: result += (a << n) & ( ( (int16_t)( ( b & (1 << n) ) << n2 ) ) / ( 1 << 15) ) ; То оно на целых 2 секунды медленней
#CQFUUP/L2R / @j123123 --> #CQFUUP/CC8 / 3957 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.