Как выбрать между использованием PLINQ и LINQ во время выполнения? - PullRequest
3 голосов
/ 11 июня 2010

Или выберите между параллельной и последовательной операциями в целом.Без проверки трудно понять, является ли параллельная или последовательная реализация наилучшей из-за накладных расходов.Очевидно, потребуется некоторое время, чтобы обучить «решателя», какой метод использовать.Я бы сказал, что этот метод не может быть идеальным, поэтому он вероятностный по своей природе.x,y,z влияет на «решающий фактор».Я думаю, что очень наивной реализацией было бы дать шанс как 1002 * в начале, а затем начать отдавать предпочтение им в соответствии с прошлой производительностью.Это не учитывает x,y,z, во всяком случае, пожалуйста, поделитесь своей эвристикой, своим опытом, если таковые имеются, ваши советы по этому вопросу.

Пример кода:

public interface IComputer {
    decimal Compute(decimal x, decimal y, decimal z);
}

public class SequentialComputer : IComputer {
    public decimal Compute( ... // sequential implementation
}

public class ParallelComputer : IComputer {
    public decimal Compute( ... // parallel implementation
}

public class HybridComputer  : IComputer {
    private SequentialComputer sc;
    private ParallelComputer pc;
    private TheDecider td;  // Helps to decide between the two.

    public HybridComputer() {
        sc = new SequentialComputer();
        pc = new ParallelComputer();
        td = TheDecider();
    }

    public decimal Compute(decimal x, decimal y, decimal z) {
        decimal result;
        decimal time;
        if (td.PickOneOfTwo() == 0) {
            // Time this and save result into time.
            result = sc.Compute(...);
        } else {
            // Time this and save result into time.
            result = pc.Compute();
        }
        td.Train(time);
        return result;
    }
}

1 Ответ

1 голос
/ 11 июня 2010

Я бы удалил специализации компьютера и использовал WithDegreeOfParallelism в вашем коде PLINQ.Просто пусть ваш решающий элемент возвращает 1, если он узнал, что параллелизм не является оптимальным.

...