Предполагается одна машина с 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
относится к «уровню параллелизма», который в основном устанавливает количество сгенерированных задач, поэтому может использоваться для изменения степени детализации.