Слева - результат компенсации движения здорового человека. Справа - результат компенсации движения курильщика.

Не, на самом деле слева - результат компенсации движения, полученный при компиляции программы интеловским компилятором (в Release) или MSVC в режиме Debug, а справа - результат на тех же данных той же программы, собранной MSVC в Release. Глюк исчезает, и результат становится в точности как слева, если в исходнике убрать одно единственное слово. Угадаете, какое?

Не, на самом деле слева - результат компенсации движения, полученный при компиляции программы интеловским компилятором (в Release) или MSVC в режиме Debug, а справа - результат на тех же данных той же программы, собранной MSVC в Release. Глюк исчезает, и результат становится в точности как слева, если в исходнике убрать одно единственное слово. Угадаете, какое?
no subject
Date: 2013-11-23 07:22 pm (UTC)no subject
Date: 2013-11-23 07:42 pm (UTC)no subject
Date: 2013-11-23 07:46 pm (UTC)no subject
Date: 2013-11-23 07:49 pm (UTC)Интересно, что баг в дебаге, а не в релизе, причем на компиляторе который, оптимизирует хуже, ОБС.
no subject
Date: 2013-11-23 07:51 pm (UTC)no subject
Date: 2013-11-23 07:51 pm (UTC)бинго!
Date: 2013-11-23 08:00 pm (UTC)Совершенно верно, это был __restrict! Небольшой массив float'ов на стеке, который в одном месте использовался как массив float'ов, а рядом - как массив F32vec4 через указатель, на который по ошибке был навешен модификатор __restrict. Нарушение обещания не алиасить вызывает UB, который в данном случае привел к мусору в результирующем буфере.
таки restrict
Date: 2013-11-23 08:04 pm (UTC)Я вот на жалобы ICC про то, как потенциальный алиасинг ему жить мешает, купился, попробовал использовать, за что в одном месте и поплатился, поставив его там, где не следовало.
Re: таки restrict
Date: 2013-11-23 08:12 pm (UTC)Не знают и не умеют? Но это всё мои наблюдения, действительности не соответствующие
Re: бинго!
Date: 2013-11-23 08:33 pm (UTC)typedef float __m128 __attribute__ ((vector_size (16)));
Вобще самобытное восприятие типов в MSVC доставляет. Я как-то обнаружил, что MSVC считает, что int64_t из stdint.h это не то же самое, что long long int (размер совпадает).
Re: бинго!
Date: 2013-11-23 09:55 pm (UTC)Re: бинго!
Date: 2013-11-23 10:01 pm (UTC)Re: таки restrict
Date: 2013-11-23 11:25 pm (UTC)говорят что пиши не пиши register, компилятор это не фига не смотрит.. он типа умнее всех, умнее нас, и сам всё знает.
А на самом деле как бы и смотрит, просто самим проверять это всем лень.
no subject
Date: 2014-01-27 01:50 pm (UTC)no subject
Date: 2014-01-27 03:22 pm (UTC)