我试图编写一种排序算法来重新排序双问题处理器(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