操纵2D阵列的可能优化

possible optimizations for manipulating a 2d array

本文关键字:优化 2D 阵列 操纵      更新时间:2023-10-16

我有一个由2D chars表示的图像,我需要对此图像执行一些操作,并将结果存储在另一个2D阵列中,这些操作因计算邻居的平均值而异单元重新排序行。我可以采取哪些优化来获得更好的性能?欢迎任何可能的技术(例如参考的局部性,内联汇编,...)

我在Linux X86_64机器上使用c

ps:我有一个原始的颜色图像,每个像素由一组RGB值表示。

  • 首先,分配每个RGB的4个字节。
  • 有一个针对每一行的开头的指针,然后可以使用指针Exchange进行改组
  • 将您的API计划为void process_row(int *out_row, int *in_row, int *row_above, int *row_below);

  • 可以与正常整数算术并行计算一些RGB计算。

    • 例如。一个人可以添加4个没有溢出的人,然后只需将结果右移2位
      带有00111111111111111111111111111B的面具b
      (当然,这需要预处理和后处理)
    • 00 rr 00 gg 00 bb 00 aa的64位处理器包装上也是可行的方法
  • 可能更容易的方法是使用__sse Internics,从中只有一小步...
  • 内联汇编器
  • 还有一个软件包兽人,它实现了便携式Simd。

您可以使用1D数组而不是2D数组,这将大大提高高速缓存命中率。这将优化程序运行时间。