Выбор между телесным и душевным здоровьем
May. 27th, 2016 10:14 pmСегодня я нарушил свой режим и не пошел, как обычно делаю по пятницам, в тренажерный зал, а сидел допоздна на работе.
Внезапно оказалось, что оптимизатор в некоторых случаях ничего хорошего не оптимизирует. После трехчасовых изысканий выяснилось, что операции целочисленного сравнения на больше-меньше, у которых с обеих сторон имеются полиномообразные выражения особого вида с аддитивными константами, иногда приводятся к виду (a <= 2*b), а иногда — к виду (a < 2*b+1), а финтифлюшки-то, которая бы понимала, что эти выражения эквивалентны, и нету, а это понимание в тех самых некоторых случаях дорогого стоит. Причём дело не в операции сложения — когда гарантированно нет переноса, оно у нас совершенно бесплатное — а в том, что распознавание эквивалентности двух условий открывает дорогу дальнейшим оптимизациям.
В условиях ограниченного диапазона представления чисел в общем случае a <= b и a < b+1 неэквивалентны, потому что прибавление единицы к самому большому представимому числу может вызвать переполнение. Самое большое представимое число - нечетное, поэтому в моем случае переполнение гарантированно избегается. (Конец необходимого примечания.)
Теперь буду все выходные нетренированный, но зато довольный собой. А распознавание эквивалентности этих выражений - дело техники, на следующей неделе сбацаю.
Внезапно оказалось, что оптимизатор в некоторых случаях ничего хорошего не оптимизирует. После трехчасовых изысканий выяснилось, что операции целочисленного сравнения на больше-меньше, у которых с обеих сторон имеются полиномообразные выражения особого вида с аддитивными константами, иногда приводятся к виду (a <= 2*b), а иногда — к виду (a < 2*b+1), а финтифлюшки-то, которая бы понимала, что эти выражения эквивалентны, и нету, а это понимание в тех самых некоторых случаях дорогого стоит. Причём дело не в операции сложения — когда гарантированно нет переноса, оно у нас совершенно бесплатное — а в том, что распознавание эквивалентности двух условий открывает дорогу дальнейшим оптимизациям.
Теперь буду все выходные нетренированный, но зато довольный собой. А распознавание эквивалентности этих выражений - дело техники, на следующей неделе сбацаю.
no subject
Date: 2016-05-28 07:11 pm (UTC)