Устройство Даффа все еще полезно? - PullRequest
0 голосов
/ 08 февраля 2019

Я вижу, что устройство Даффа просто выполняет развертывание цикла в C.

https://en.wikipedia.org/wiki/Duff%27s_device

Я не уверен, почему оно все еще полезно в наше время.Разве этот компилятор не должен быть достаточно умным, чтобы выполнять циклическое развертывание?

1 Ответ

0 голосов
/ 08 февраля 2019

Компиляторы хороши в развертывании цикла, но иногда «очевидные» оптимизации могут быть подавлены, когда компилятор не может доказать, что это правильно.В случае устройства Даффа целью был регистр с отображением в памяти, а источником был произвольный указатель.Сегодня регистр с отображением в памяти, вероятно, должен быть помечен как volatile, и неясно, сможет ли компилятор определить, могут ли указатели источника и назначения когда-либо иметь псевдоним.Любой из них может препятствовать оптимизации.

Такие вещи, как memcpy (который похож на устройство Даффа, но отличается от него), часто являются «специальными» функциями, известными компилятору, которые могут иметь несколько встроенных оптимизированных вручную вариантов.Ожидание того, что компилятор сгенерирует memcpy из «первых принципов», может не дать столь оптимизированной версии, как вы могли бы ожидать.

Устройство Даффа - это не просто развертывание циклов, а способ обработки избыточных копий без дополнительного цикла.Это экономит место на коде, что, вероятно, теперь не так важно.Будут ли компиляторы делать то же самое при развертывании цикла - я не знаю.

Это полезно?Возможно, в некоторых редких случаях.Возможно, это было правдой, когда устройство Даффа также было изобретено изначально.

...