AVX512 имеет несколько / большинство инструкций с плавающей запятой, доступных в замаскированной форме, где вы можете выбрать, какие результаты будут изменены / обнулены.Действительно ли ЦП используют этот информационный график, в котором говорится, что умножения должны быть выполнены, или это просто устанавливает, какие результаты перезаписываются, а немаскированные вычисляются в любом случае, а затем отбрасываются?
На практике это может быть полезно для обработки дляЭкземпляр:
for (int i=0; i<27; i++) a[i] *= b[i];
27 не делится на 8, поэтому будут некоторые оставшиеся элементы.Можно создать отдельный цикл обработки один за другим.Или используйте AVX, если есть хотя бы 4, а затем обработайте оставшиеся один за другим.Множество возможностей.
Этот специальный цикл хорошо бы векторизовал хороший компилятор, но это всего лишь пример для более сложных случаев, когда я хочу векторизовать вручную, но есть еще неиспользуемые элементы или, например,Я знаю, что некоторые результаты умножения бесполезны.
Редактировать: Проверено экспериментально, и кажется, что маскированные операции на самом деле медленнее.