2012-09-08 42 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个操作。