gpt4 book ai didi

performance - 可以使用SIMD或其他方法加快Delphi 6位图修改代码的速度吗?

转载 作者:行者123 更新时间:2023-12-03 17:36:13 26 4
gpt4 key购买 nike

我有一个Delphi 6应用程序,可以实时修改位图。目前,我正在使用下面显示的代码来快速调整亮度和对比度。如果该操作只是加法或乘法,我可以看到如何使用SIMD,但是由于涉及加法和乘法,并且因为还有Trunc()运算将其限制在a的范围内字节,我不确定是否可以在这里使用SIMD。这是我的问题:


SIMD可以与此代码一起使用吗?您知道我可以使用的良好代码示例吗?我可以期望什么样的速度提升?
扫描线的(潜在)填充是否会成为问题?
关于加速代码的任何常规优化技巧?


;

// A fast version of this function would be to only allow range reductions
// as a power of 2 and then use shl operations instead of divisions.
procedure doBrightnessAndContrast(var clip: tbitmap; compressionRatio: double; shiftValue: Byte);
var
p0: PByte;
x,y: Integer;
begin
for y := 0 to clip.Height-1 do
begin
p0 := clip.scanline[y];

// Can't just do the whole buffer as a big block of bytes since the
// individual scan lines may be padded for CPU alignment.
for x := 0 to clip.Width - 1 do
begin
// Red
p0^ := IntToByte(Trunc(p0^ * compressionRatio) + shiftValue);
Inc(p0);
// Green
p0^ := IntToByte(Trunc(p0^ * compressionRatio) + shiftValue);
Inc(p0);
// Green
p0^ := IntToByte(Trunc(p0^ * compressionRatio) + shiftValue);
Inc(p0);
end;
end;
end;

最佳答案

当然,可以使用SSE或MMX。

但是,根据您的情况,如果使用方程式预先计算256个条目表,则可能会获得几乎相同的速度提高。

然后,用简单的表查找替换所有计算。我最好的选择是,在现代处理器上,这将提供与MMX / SSE几乎相同的速度。

关于performance - 可以使用SIMD或其他方法加快Delphi 6位图修改代码的速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com