2012-09-08 38 views
0

說我有兩個固定長度的無符號整數數組。
我如何明智地總結這些數組(首先)沒有循環或較少的數字循環?元素明智的總和兩個固定長度整數陣列

 
uint64_t foo[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
uint64_t bar[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
... // funky code without loop so that 
    // foo now is {0, 2, 4, 6, 8, 10, 12, 14, 16, 18} 

的相關問題:是可以總結多個uint64_t中整數在一個操作?。 (我敢打賭,這可以用sse完成)

問題總的來說是:什麼是最快的方式來總結兩個整數類型的固定長度數組(就地到第一個)?

+0

你可以信任你的編譯器自動引導代碼... –

+0

如果數組的長度不僅是固定的,而且你也知道,你可以展開循環。這就是說,我真的沒有看到任何傷害,像這樣一個簡單的循環。 –

+0

似乎是功課,因此約束不使用循環:) – Vikdor

回答

0

您可以使用_mm_add_epi64在每次迭代中添加兩個64位整數。儘管如此,我不希望在直接標量代碼上有顯着的改進。如果你不想要一個明確的循環,那麼你可以將其展開爲5個操作。