Как выполнить измерения F#, чтобы получить ускорение

Предположим, что имеется одна машина с 8 ядрами. В Haskell вы можете скомпилировать с помощью параметра threaded, а затем во время выполнения использовать +RTS -Nx, чтобы указать количество используемых ядер. например

$ myprg args // sequential run
$ myprg args +RTS -N1 // parallel run on 1..8 cores
$ myprg args +RTS -N2
$ myprg args +RTS -N4
$ myprg args +RTS -N8

Из этого вы получаете время выполнения с использованием увеличивающегося количества ядер, которое затем можно использовать для ускорения и построения графика.

Как бы вы сделали это на F#, предполагая, что у меня есть параллельная программа, например используя параллельную карту в коде?

РЕДАКТИРОВАТЬ: Я обнаружил, что есть ParallelOptions, например. MaxDegreeOfParallelism, который можетбыть тем, что мне нужно, но я не уверен в его точном поведении, и мне придется использовать его программно, что нормально, пока он ведет себя так, как ожидалось, т.е. MaxDegreeOfParallelism = количество ядер, которое должна использовать программа, а не параллельные «задачи» или потоки.

РЕДАКТИРОВАТЬ: ProcessorAffinityдействительно ограничивает количество используемых ядер, но кажется, что это неправильно реализовано в Mono. Я проверил на Windows, и это, кажется, работает. Хотя это не очень хорошая идея для использования. Система времени выполнения должна иметь возможность лучше решать, как управлять задачами и планировать их. Кроме того, MaxDegreeOfParallelismотносится к «уровню параллелизма», который в основном устанавливает количество генерируемых задач, поэтому его можно использовать для изменения степени детализации.

5
задан vis 17 March 2012 в 15:01
поделиться