Ресурс MegaObzor.com уже писал ранее, что через два года на рынке появятся процессоры с новой микроархитектурой от Intel и AMD - SandyBridge и Bulldozer соответственно. Одной из отличительных черт новых процессоров будет поддержка новых, так называемых трёхоперандных, наборов инструкций. Укомпании Intel это будет набор инструкций AVX, а у компании AMD – SSE5. Между ними будут как сходства, так и различия. Одной из точек соприкосновения должны были стать как раз трёхоперандные инструкции.
Это, казалось бы, маленькое, но существенное отличие ставит крест на совместимости трёхоперандных наборов инструкций от Intel и AMD. Разумеется, только в том случае, если производители не придут к единому мнению на этот счёт и реализуют свои разработки в том виде, в котором они пребывают в настоящий момент. Однако есть надежда, что AMD изменит спецификации SSE5 ради совместимости с набором трёхоперандных инструкций Intel. Но даже если это и произойдёт, между AVX и SSE5 останутся различия, которые не позволят назвать эти наборы идентичными. Скорее, оба будут иметь как общую с конкурентом часть, так и отличную. Во что это всё выльется и пойдёт ли AMD на попятную, мы узнаем уже в скором времени, когда эти задумки будут воплощены в кремнии.
Недавно AMD опубликовала шестой том руководства по программированию для процессоров собственного производства. Речь в нём идёт о будущих инструкциях, в том числе и трёхоперандных. Эти инструкции предназначены для специального исполнительного устройства – FMA (Floating Multiply-Accumulate) и производят вычисления вида D = A*B+C. Спецификации AMD предусматривают использование четырех регистров для таких операций, для хранения значений A,B,C и записи результата D. Аналогичной концепции изначально придерживалась Intel в своём наборе инструкций AVX, однако несколько месяцев назад спецификации были изменены. В новой версии спецификаций FMA от Intel использует три регистра вместо четырёх. То есть, произведя вычисления вида A*B+C, он записывает результат не в четвёртый регистр, а в один из предыдущих, которые использовались для хранения значений операндов. Причём запись может быть произведена в любой из трёх регистров – A,B или C. Такой подход вполне оправдан, так как в подавляющем большинстве случаев нет необходимости хранить значения всех трёх операндов, а такое упрощение позволит в некоторой степени повысить скорость работы.