在C语言中,如何在一个指令周期内添加100个整数元素的数组?
我有一个100个元素的数组,我想添加所有这100个元素。我使用的C代码与贝娄相同在C语言中,如何在一个指令周期内添加100个整数元素的数组?,c,assembly,profiling,simd,mmx,C,Assembly,Profiling,Simd,Mmx,我有一个100个元素的数组,我想添加所有这100个元素。我使用的C代码与贝娄相同 for(i=0;i<100;i++) { sum+= a[i]; } 假设处理器需要100条指令周期来添加100个元素,这将降低应用程序的速度。因此,我想知道是否有任何指令可以在一个指令周期内添加100个元素来加速应用程序。没有指令可以在一个硬件指令周期内添加100个数字。至少在我知道的任何硬件中都没有 但是如果你想从台式计算机中获得最大的计算性能,你应该考虑使用图形卡编程。如今,顶级图形卡拥有3000多个
for(i=0;i<100;i++)
{
sum+= a[i];
}
假设处理器需要100条指令周期来添加100个元素,这将降低应用程序的速度。因此,我想知道是否有任何指令可以在一个指令周期内添加100个元素来加速应用程序。没有指令可以在一个硬件指令周期内添加100个数字。至少在我知道的任何硬件中都没有 但是如果你想从台式计算机中获得最大的计算性能,你应该考虑使用图形卡编程。如今,顶级图形卡拥有3000多个核心 加法对于并行算法并不完美,因为结果不是独立的。但是如果你有超过N个核,那么时间复杂度是Olog N 建议的互联网搜索词: GPU程序 GPU编程
并行算法无法在一个周期内求和100个元素。您可以使用SIMD指令来加速,但这取决于a的数据类型,该数据类型只能使用因子2-4或类似的东西来加速;你不能只获得100倍!您的计算CPU受限吗?数据是否适合缓存?在添加所有100个元素之后,您还将对数据做什么?CPU已经比内存快很多倍了,在我看来,如果你有一个CPU能够做到这一点,你的内存带宽就会受到限制。。。记忆是无法保持的。当然,这完全取决于你在做什么,但这是我的直觉。你能在纸上想出一个算法来做到这一点吗?我想在一个指令周期内运行我的整个程序。但我的搜索还在继续。。。