Re[10]: Где Борланд свернул не туда?
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.06.25 10:58
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>В 2011 вышла XE2, у которой в 64-битном режиме плавучка на SSE2.

там проблема была не в SSE2, а в отвратительном кодогенераторе. Грубо говоря, он все операции с плавучкой проводил через память, включая временные переменные.
То есть код вида S := Sqrt(a*a+b*b+c*c) компилировался в последовательность из
FLD a
FMUL a
FST t1
FLD b
FMUL b
FST t2
FLD t1
FADD t2
FST t1
FLD c
FMUL c
FST t2
FLD t1
FADD t2
FST t1
FLD t1
FSQRT
FST s

Когда вот такое чудо выполняется в цикле, то можно охренеть от тормозов. Поэтому даже самые безрукие разработчики вроде меня, столкнувшись с таким поведением, вкрячивали ассемблерные вставки при работе с плавающей запятой.
Ну, то есть может быть переход на SSE2 у них совпал с более вменяемым распределением локалов по регистрам — тогда, возможно, результат был чуть менее плачевным. А если нет — то увы, вот это вот тасование значений туда-сюда убивает всю производительность.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.