在工作中展示指令级并行性

时间:2010-08-04 12:52:20

标签: python parallel-processing

我正试图在工作中显示指令级并行性。我最初做的是使用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?

3 个答案:

答案 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工作