ARM NEON: Какие пары инструкций должны ждать обратной записи? - PullRequest
4 голосов
/ 03 декабря 2011

В документации ARM NEON написано:

[...] некоторым парам команд, возможно, придется подождать, пока значение не будет записано обратно в файл регистров.

Я не сталкивался со списком, в котором определены пары команд, которые могут использовать перенаправленные результаты, и пары команд, которые должны ждать обратной записи.

Кто-нибудь знает таблицу или документацию, в которой перечислены эти пары?

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

В общем, то, что вы разумно ожидаете, вперед, вперед.vmul.f32 перенаправляет в vadd.f32 и т. п.

Я не верю, что точные пути пересылки точно задокументированы в любом месте так, как вы ищете.Во всяком случае, я их не нашел.Если вы их найдете, обязательно сообщите нам, где.Конечно, для любой данной пары инструкций не слишком сложно определить, происходит ли переадресация, но это не общее решение.К сожалению.

1 голос
/ 20 июля 2012

Целочисленное умножение накапливается.

Полезно сечение в конце http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/ch16s06s03.html:

Если умножение-накопление следует за умножением или другим умножением-накоплениеми зависит от результата этой первой инструкции, тогда, если зависимости между обеими командами имеют одинаковый тип и размер, процессор использует специальную пересылку с накопителем множителей.Эта специальная пересылка означает, что команды умножения могут выдаваться последовательно, потому что результат первой команды в N5 передается в аккумулятор второй команды в N4.Если размер и тип инструкций не совпадают, то в N3 требуется Dd или Qd.Это относится к комбинациям команд умножения-накопления VMLA, VMLS, VQDMLA и VQDMLS и команд умножения VMUL и VQDMUL

Не предполагайте, что умножение с плавающей запятой накапливает работу одинаковым образом.Я не использовал инструкции NEON с плавающей запятой для чего-то критически важного для производительности, поэтому я не могу предложить здесь никакого опыта, но убедитесь, что вы прочитали и поняли примечание в конце http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/BCGDCECC.html

1 голос
/ 07 декабря 2011

Кто-нибудь знает таблицу или документацию, в которой перечислены эти пары?

Эти пары более 9000 , и все они не могут быть перечислены.
Например:

VADD.F32 q0,q0,q1
VMUL.F32 q3,q0,q2

первая инструкция записывает результат в 4-м цикле, в то время как вторая команда требует его (q0) в качестве источника во 2-м цикле, так как источник еще не готов, но между ним есть остановка (или конвейерная "дыра") это две инструкции.

Для расчета этих киосков вы можете использовать следующий онлайн-инструмент:
http://pulsar.webshaker.net/ccc/result.php?lng=us

...