Я попытался написать алгоритм сортировки для инструкций по переупорядочению для процессора с двумя проблемами (Cell SPU). Один из способов получить двойную задачу обработки инструкции не должен зависеть от предшествующей ей инструкции (другой - отдельные конвейеры, но я сосредоточен на инструкциях в том же конвейере). Я понимаю, что это было бы слишком сложно для компилятора, и я не нашел то, что мне нужно при поиске. Это может быть сделано вручную в большинстве случаев, но алгоритм сортировки должен обеспечивать самый низкий «счет последовательности» (число или зависимые инструкции, которые следуют друг за другом).Инструкции по сортировке/переупорядочению для обработки двойных выпусков
У меня вопрос, было ли это или что-то подобное сделано раньше? Существует ли оптимизированный подход?
Простого примера время инструкции псевдокод сращивание (входы: i1, i2, i3
):
v1 = i1^i2; - #single-issued
v2 = v1 | i2; \ #v2,v3 dual-issued
v3 = i1 & i3;/#v2,v3 dual-issued
v4 = v3 & i2; - #single-issued
можно записать в виде:
v1 = i1^i2; \ #v1,v3 dual-issued
v3 = i1 & i3;/#v1,v3 dual-issued
v2 = v1 | i2; \ #v2,v4 dual-issued
v4 = v3 & i2;/#v2,v4 dual-issued
Вот реализация Python Я создал рекурсивно сортирует инструкцию к достичь наименьшего "количества последовательностей".
reorder.py
http://pastebin.com/dt8eWy3H
образец t8-1.h
http://pastebin.com/w0DYg8ff
NOPS не проблема, БПК компилятор (CC = сп-ССАГПЗ/AS = сп-а) не были достаточно умны, чтобы изменить порядок инструкций. – frankiek3