缓存线程以避免初始化

时间:2017-02-17 00:03:14

标签: c# multithreading

我有一个很大的优化问题,我正在使用我编写的BFGS优化器来解决。优化器会对目标函数进行多次调用,这需要一些时间。我想加快速度。现在在目标函数内部,我可以利用并行性,因为目标函数是100次独立计算之和。

但问题是,如果我在目标函数中添加并行性,程序将必须为优化器中的每个调用构造销毁每个线程。

有没有办法初始化多线程机制?

示意图如下:

public class Optimizer
{
    public static double[] Minimize(Func<double[],double> objective, double[] guess)
    {
        while(condition) 
        {
            update_guess(guess);
            var value = objective(guess);
        }
        return guess;
    }
}

public class Problem
{
    public void Solve()
    {
        var guess = new double[50];
        Func<double[],double> objective = x => 
        {
            // this is not the best way because it will be called many times
            return x.AsParallel().Select(x => ExpensiveStuff(x)).Sum()
        }

        var results = Optimizer.Minimize(objective, guess);
    }
}

0 个答案:

没有答案