AXV2 не имеет целочисленных умножений с источниками, превышающими 32 бит. Он предлагает 32 x 32 → 32, а также 32 x 32 → 64 умножает 1 но ничего с 64-разрядными источниками.
Скажем, мне нужно, чтобы без знака умножалось с входами более 32 бит, но меньше или равно 52 бит - могу ли я просто использовать плавучую точку DP умножить или FMA, и будет ли бит быть точным, когда целые входы и результаты могут быть представлены в 52 или менее битах (т.е. В диапазоне [0, 2 ^ 52-1])?
Как насчет более общего случая, когда я хочу все 104 бита продукта? Или случай, когда целочисленный продукт занимает более 52 бит (т.е. Продукт имеет ненулевые значения в битовых индексах > 52) - но я хочу только низкие 52 бита? В этом последнем случае MUL
собирается дать мне более высокие биты и округлить некоторые из младших бит (возможно, с чем помогает IFMA?).
Изменить: на самом деле, возможно, он мог бы сделать что угодно до 2 ^ 53, на основе этого ответа - я забыл, что подразумеваемый ведущий 1
, прежде чем мантисса эффективно даст вам другой бит.
1 Интересно, что операция 64-разрядного продукта PMULDQ
имеет половину задержки и вдвое большую пропускную способность 32-разрядной версии PMULLD
, так как Mystical объясняет в комментариях.