gpt4 book ai didi

c# - 加速嵌套 for 循环并提高性能

转载 作者:行者123 更新时间:2023-11-30 20:23:46 24 4
gpt4 key购买 nike

我正在编写一个程序,它的执行时间很长。我正在尽我所能提高性能,但我在这方面的知识有限。谁能推荐一种加速以下方法的方法?

public static double DistanceBetween2Points(double[,] p1, double[,] p2, int patchSize)
{
double sum = 0;
for (int i = 0; i < patchSize; i++)
{
for (int j = 0; j < patchSize; j++)
{
sum += Math.Sqrt(Math.Pow(p1[i, j] - p2[i, j], 2));
}
}
return sum;
}

该方法通过计算两幅图像上两点之间的所有距离之和来计算两幅图像之间的距离

最佳答案

  1. 想想你的算法。像素距离可能不是获得准确图像距离的最佳选择。

  2. sqrt(x^2) 替换为 abs(x) 或更快:

    if(x < 0) x = -x;
  3. 将您的例程重命名为 OverallImageDistance 或类似名称(不会提高性能);)

  4. 使用不安全指针,并使用这些指针在单个循环中计算您的距离:

    unsafe
    {
    sum = 0.0;
    int numPixels = patchsize*patchsize;
    fixed(int *pointer1 = &p1[0])
    {
    fixed(int* pointer2 = &p2[0])
    {

    while(numPixels-- > 0)
    {
    double dist = *pointer1++ - *pointer2++;
    if(dist < 0) dist = -dist;
    sum += dist;
    }
    ...

这应该比原来快几倍。

关于c# - 加速嵌套 for 循环并提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125495/

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