我正试图在工作中显示指令级并行性。我最初做的是使用python(愿意改变)并执行以下操作:
def test():
for i in range(5000):
j = 0
k = 0
l = 0
def test2():
for i in range(5000):
j = i * i
k = j * 2
l = k * i
if __name__=='__main__':
from timeit import Timer
t = Timer("test()", "from __main__ import test")
print t.timeit()
t2 = Timer("test2()", "from __main__ import test2")
print t2.timeit()
然而,一位教授告诉我,这并没有演示ILP,而是表明python解释器是否已经优化。
我可以做些什么来演示有效的ILP?
答案 0 :(得分:3)
你的教授是对的。我认为一个可接受的演示必须用汇编语言编写,或者最多用C / C ++编写,可能使用像MMX指令集这样的东西。
答案 1 :(得分:1)
你的教授有可能是正确的 - 你可能证明他错了,如果你能证明cpython实际上是用ILP来做那件事,但我认为这不值得。
另一方面,ILP是相当硬件限制的,并且很少(如果有的话)实际上由程序员明确地完成,所以如果你在C ++或ASM中做到了,你可以展示的最好的是编译器(或者汇编程序)进行了优化。我敢打赌,你写的片段是他正在寻找的东西,但他只是不同意你的语言。
与上面的pjc50一样,我认为这实际上并不是ILP的可接受的例子,但它可能会削减它并使你的成绩正确。如果您实际上并不只是考虑成绩,也许这可能会有所帮助:http://developer.apple.com/hardwaredrivers/ve/software_pipelining.html。
答案 2 :(得分:0)
mingw不会添加任何优化。所以我所做的是使用一些C代码,因为没有循环优化,它显示ILP工作