操作二维数组的可能优化

时间:2012-11-05 08:34:48

标签: c++ c linux optimization

我有一个由二维数组字符表示的图像,我需要对该图像执行一些操作并将结果存储在另一个二维数组中,这些操作从计算相邻单元的平均值到重新排序行不等。 为了获得更好的性能,我可以采取哪些可能的优化措施? 任何可能的技术都是受欢迎的(例如参考地点,内联汇编......)

我在linux x86_64机器上使用c

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

2 个答案:

答案 0 :(得分:2)

  • 首先,为每个rgb -triplet分配4个字节。
  • 指定每行的开头,然后使用指针交换进行随机播放
  • 将您的API计划为void process_row(int *out_row, int *in_row, int *row_above, int *row_below);

  • 某些RGB计算可以与普通整数运算并行计算。

    • e.g。 00rrrrrrrr 00bbbbbbbb 00gggggggg适合单个32位整数。
      可以添加4个没有溢出的,然后简单地将结果右移2位 和面膜用0011111111 0011111111 0011111111 b
      (这当然需要预处理和后处理数据)
    • 00 rr 00 gg 00 bb 00 aa的64位处理器打包上也是可行的方法
  • 可能更简单的方法是使用__sse intrinsics,从中只需要一小步......
  • 内联汇编程序
  • 还有一个包ORC,它实现了portable SIMD

答案 1 :(得分:0)

您可以使用1D阵列代替2D阵列,这将大大提高缓存命中率。这将优化程序运行时间。