小编Mar*_*rco的帖子

整数与双算术性能?

我正在编写一个C#类来使用整数执行2D可分卷积,以获得比双对应更好的性能.问题是我没有获得真正的性能提升.

这是X过滤器代码(对于int和double两种情况都有效):

foreach (pixel)
{
      int value = 0;
      for (int k = 0; k < filterOffsetsX.Length; k++)
      {
          value += InputImage[index + filterOffsetsX[k]] * filterValuesX[k];  //index is relative to current pixel position
      }
      tempImage[index] = value;
 }
Run Code Online (Sandbox Code Playgroud)

在整数情况"值"中,"InputImage"和"tempImage"是"int","Image <byte>"和"Image <int>"类型.
在双重"值"中,"InputImage"和"tempImage"是"double","Image <double>"和"Image <double>"类型.
(filterValues在每种情况下都是int [])
(类Image <T>是extern dll的一部分.它应该类似于.NET Drawing Image类..).

我的目标是通过int + =(byte*int)vs double + =(double*int)实现快速性能

以下时间是200次重复的平均值.
滤波器大小9 = 0.031(双精度)0.027(int)
滤波器大小13 = 0.042(双精度)0.038(int)
滤波器大小25 = 0.078(双精度)0.070(int)

性能提升很小.这可能是由管道停滞和次优代码引起的吗?

编辑:简化删除不重要的变量的代码.

编辑2:我认为我没有与缓存未命中相关的问题,因为"索引"遍历相邻的存储单元(逐行方式).此外,"filterOffstetsX"仅包含相对于同一行上的像素的小偏移,并且在滤波器大小/ 2的最大距离处.该问题可以存在于第二可分离滤波器(Y滤波器)中,但时间不是那么不同.

c# double performance integer

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

double ×1

integer ×1

performance ×1