在此之前,請(qǐng)嘗試更改編譯器設(shè)置以生成更快的代碼。有一般的優(yōu)化,編譯器可能會(huì)進(jìn)行自動(dòng)矢量化。
你要做的就是嘗試幾種方法,并檢查什么是最快的。作為一個(gè)目標(biāo),嘗試達(dá)到一個(gè)周期每增加或更好。
每個(gè)循環(huán)的迭代次數(shù):同時(shí)加10次和??赡苁悄奶幚砥鳑]有足夠的寄存器,或者它有更多的寄存器。我會(huì)測(cè)量4,5,6,7,8,9,10,11,12,13,14.每個(gè)循環(huán)的總和。
和數(shù):有一個(gè)以上和意味著延遲不會(huì)咬你,只意味著吞吐量。但超過四六個(gè)可能沒有幫助。嘗試四個(gè)和,每個(gè)循環(huán)有4,8,12,16次迭代?;?和,6,12,18次迭代。
緩存:您正在運(yùn)行一個(gè)80,000字節(jié)的數(shù)組??赡懿恢筁1緩存。將數(shù)組分成2或4個(gè)部分。對(duì)兩個(gè)或四個(gè)子數(shù)組進(jìn)行外部循環(huán)迭代,下一個(gè)循環(huán)從0到N_倍-1,以及內(nèi)環(huán)加值。
然后您可以嘗試使用向量操作,或者多線程您的代碼,或者使用GPU來完成這項(xiàng)工作。
如果您被迫使用任何優(yōu)化,那么“注冊(cè)”關(guān)鍵字可能實(shí)際上是有效的。