Я пытаюсь понять, как можно максимизировать количество операций, которые я могу получить на своем CPU. Я делаю простую программу умножения матрицы, и у меня есть процессор Skylake. Я смотрел на страницу википедии для информации о флопе об этой архитектуре, и у меня есть знания, которые это понимают.Понимание производительности команд FMA
С моей точки зрения, инструкции FMA позволяют входить в 3-х ходовые входы FP? И позвольте смешивать между добавлениями и умножениями между ними. Но что происходит, когда я добавляю только два поплавка? Он просто умножает его на единицу? Могу ли я добавить 3 поплавки за 1 цикл, или это будет разделено? Я видел, что у Skylake есть 32 FLOPs/cycle для одноточечных входов, но в чем смысл «две 8-х сторонние инструкции FMA»?
Заранее спасибо за объяснения
Этот вопрос становится более интересным, если вы сравните Haswell и Skylake. Haswell может использовать только один добавочный AVX за такт, но две операции FMA за такт. Это означает, что вы можете удвоить свою пропускную способность путем использования двух операций FMA, умноженных на 1.0. OTH, латентность для FMA равна 5, тогда как добавление три на Haswell, поэтому вам нужно использовать 10 параллельных аккумуляторов, чтобы получить максимальную пропускную способность с FMA, тогда как вам нужно только 3 с добавлением. В дополнение к Skylake и FMA есть такая же латентность и пропускная способность, поэтому нет причин использовать FMA для добавления. –