2011-05-16 33 views

回答

8

「矢量化」的代碼通常快於解釋的環境,如Matlab和numpy的是因爲經常向量化版本(但不總是)運行用C或FORTRAN預編譯和優化代碼。並行執行可能會或可能不會在此中發揮作用。

在numpy中使用矢量化通常會導致性能改進,因爲這個原因 - 通常這些例程是C或FORTRAN編譯的,運行速度比必須在解釋器上運行的本地Python代碼快得多。同樣numpy,主要用C編寫,可以避開python全局解釋器鎖,這可以極大地提高使用線程的python代碼的響應速度。

+0

如何使用的uBLAS,矢量和普通版有什麼區別的程序?或者,根據你的說法,uBLAS(C++)在沒有矢量化的情況下已經很快了? – zhanwu 2011-05-16 09:30:24

+0

對不起,我沒有使用uBLAS的經驗。它的行爲應該與Matlab或numpy完全不同。在那些方面,矢量化的大幅提速大多繞過了解釋者。 uBLAS是一個模板庫,它總是被編譯成它所包含的C++的可執行代碼。 – talonmies 2011-05-16 09:37:41

+4

對於uBLAS庫,我想他們指的是「量化」這個詞比由矢量化代碼,MATLAB或numpy的意思的不同的含義。對於uBLAS,矢量化版本使用所謂的矢量指令,一次處理多個數據的CPU指令。在Intel處理器上,這些是SSE指令。 – 2011-05-16 13:35:39

2

我想的是什麼使矢量速度更快的那部分是,它減少了與多個函數調用相關的開銷。將矢量傳遞給函數對應於單個調用,而單獨將該矢量的每個元素傳遞給該函數對應於多個調用。

+0

這絕對是真的,但它可能不是最重要的原因。 – Nzbuu 2011-10-08 17:34:43