c - 使用缓存局部性改进加法函数

标签 c arrays performance for-loop optimization

我有一个函数,它从用户接收一个一维数组和一个数字,并将这两个值相加。

示例:

0 1 2 3 4 5 6 7 8

用户:9

9 10 11 12 13 14 ...

我一直在使用以下代码:

for(int i =0; i < arr; i++){
   arr[i] = arr[i] + usrNumber;
}

现在这看起来效率非常低,因为我基本上必须遍历数组的每个位置并将值添加在一起。

我从 previous post 中读到了 block 方法但我的印象是它必须至少是二维的才能发挥作用。有什么方法可以改进这个功能?

最佳答案

您的代码已经具有出色的空间局部性。空间局部性定义为

If a particular memory location is referenced at a particular time, then it is likely that nearby memory locations will be referenced in the near future. (Wikipedia)

做得更好的最简单方法是使用处理器的 vector 指令,假设处理器有它们并且编译器不会为您做这件事。例如,x86 处理器具有 SSE 指令,可以加快您正在执行的操作。

如果数组足够大,那么您可以在处理器支持的情况下进行缓存预取。请注意,过去几年生产的英特尔处理器会自动执行此操作。

关于c - 使用缓存局部性改进加法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366371/

相关文章:

c++ - 即使没有明确定义为内联,一个非常短的函数也可以内联吗?

尝试使数组溢出时崩溃

performance - 使用过滤器,查询或两者结合来优化Elasticsearch查询

java - 如何使用 Hibernate Criteria 选择一个巨大的列表并在 IN 子句中传递 ids

c - 逐字节读取串口数据

c - 从原始目录探索子目录

c - scanf和getchar一起读取字符串

arrays - **在C语言中是做什么的?

arrays - Mips 二维数组函数

sql - 从 PL/SQL 插入到临时表 GTT 非常慢