Ответ 1
Существуют разные функции, поскольку они соответствуют различным инструкциям.
Существуют разные инструкции по загрузке, потому что Intel хочет сохранить свободу для разработки процессора, на котором векторы двойной точности поддерживаются другим файлом физического регистра, чем векторы с одной точностью или целочисленные векторы, или используют разные исполнительные блоки. Любой из них может добавить дополнительную задержку, если не было способа указать, что данные должны быть загружены в соответствующий файл регистра или переадресацию.
Один из способов подумать о том, что разные инструкции выполняют "одно и то же", но дополнительно дают подсказку процессору, рассказывающему, как загружаемые данные будут использоваться в будущих инструкциях. Это может помочь процессору убедиться, что данные находятся в нужном месте, чтобы их можно было использовать как можно эффективнее или они могут быть проигнорированы процессором.
Обратите внимание, что это не просто гипотетическое. Существуют процессоры, на которых использование векторной нагрузки с целым числом (MOVDQA) для загрузки данных, потребляемых операцией с плавающей запятой, требует больше времени, чем использование нагрузки с плавающей запятой для получения данных для операции с плавающей запятой (и наоборот), См. Руководство по оптимизации Intel или примечания Agner Fog для получения более подробной информации о предмете. Используйте нагрузку, которая соответствует тому, как вы будете использовать данные, чтобы избежать риска таких угроз производительности в будущем.