我试图在工作中展示指令级的并行性。我最初所做的是使用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的工作?在
如果你能证明cpython确实在用ILP来做这件事,那么你的教授可能是对的,你可能会证明他是错的,但我认为这不值得。在
另一方面,ILP是相当硬件绑定的,并且如果程序员确实明确地完成,那么如果你在C++或ASM中做到这一点,你最好能显示编译器(或汇编程序)是优化的。我敢打赌,你写的片段正是他想要的那种东西,但他就是不同意你的语言。在
像上面的pjc50一样,我不认为这是一个可以接受的ILP例子,但它可能只是削减它,让你的分数正确。如果你不是只看成绩,也许这会有帮助:http://developer.apple.com/hardwaredrivers/ve/software_pipelining.html。在
你的教授是对的。我认为一个可接受的演示必须用汇编程序编写,或者最多用C/C++编写,可能使用类似MMX指令集的东西。在
默认情况下,mingw不添加任何优化。所以我所做的是使用一些C代码,因为没有循环优化,所以它显示了ILP的工作原理
相关问题 更多 >
编程相关推荐