История изменений
Исправление
ckotinko,
(текущая версия)
:
это уже перебор как они используют что-то там.
вообще зачем UB придумали? для того, чтоб сделать возможными ряд оптимизаций, например в цикле. надо понимать, для чего это делалось.
далее мамкины оптимизаторы решили, что эти оговорки дают им возможность оптимизировать нахер вообще всё и понеслось. так вот, это не так: основным бичом производительности является промах по кэшу:
http://research.cs.wisc.edu/vertical/papers/2013/isa-power-struggles-tr.pdf
http://www.slideshare.net/JosePinilla/eece528-06ilplimitationsjose
я куда-то проололил еще две работы, там еще круче графики на multi2sim делал, а симулили они например gcc, 3д-рендер и прочие сложные алгоритмы. там прямо цветные столбики с описанием где конкретно говно попёрло. L1D miss просто в усмерть бил. еще была симуляция для пней2 и пней3, там IPC~=1 как будто и не было out-of-order execution.
собсна, я свой проц делаю как раз под обход этой главной проблемы. на интеле же проблемой является отсутсвие непадающих команд чтения-записи памяти. ну просто префикс ввели бы «dontfail» и доп.регистр флагов «отказа». чтоб можно было превентивно без проверок провести вычисления а потом когда уже понятно надо оно или нет условная запись в память.
а что делают мамкины оптимизаторы? они пытаются максимально «протолкнуть» вычисление даже не значений а битов из этих значений повыше в выражениях. накуа, если CPI даже на седьмой корке в районе единицы болтается? Там запас прочности троекратный. CPI=0.7 это IPC=1/0.7=1.42 из 4х возможных. возьми да посчитай значения эти в лоб, это дешевле выходит в итоге, чем «битовую магию» дрочить а потом не мочь собрать ведро потому что gcc с ума сошёл.
Исходная версия
ckotinko,
:
это уже перебор как они используют что-то там.
вообще зачем UB придумали? для того, чтоб сделать возможными ряд оптимизаций, например в цикле. надо понимать, для чего это делалось.
далее мамкины оптимизаторы решили, что эти оговорки дают им возможность оптимизировать нахер вообще всё и понеслось. так вот, это не так: основным бичом производительности является промах по кэшу:
http://research.cs.wisc.edu/vertical/papers/2013/isa-power-struggles-tr.pdf
http://www.slideshare.net/JosePinilla/eece528-06ilplimitationsjose
собсна, я свой проц делаю как раз под обход этой главной проблемы. на интеле же проблемой является отсутсвие непадающих команд чтения-записи памяти. ну просто префикс ввели бы «dontfail» и доп.регистр флагов «отказа». чтоб можно было превентивно без проверок провести вычисления а потом когда уже понятно надо оно или нет условная запись в память.
а что делают мамкины оптимизаторы? они пытаются максимально «протолкнуть» вычисление даже не значений а битов из этих значений повыше в выражениях. накуа, если CPI даже на седьмой корке в районе единицы болтается? Там запас прочности троекратный. CPI=0.7 это IPC=1/0.7=1.42 из 4х возможных. возьми да посчитай значения эти в лоб, это дешевле выходит в итоге, чем «битовую магию» дрочить а потом не мочь собрать ведро потому что gcc с ума сошёл.