8つのコアを持つ1台のマシンを仮定します。 Haskellでは、threaded
オプションを使用してコンパイルし、実行時に+RTS -Nx
を使用して、使用するコア数を指定できます。例えばスピードアップを得るためにF#測定を行う方法
$ 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
which may私はその正確な振る舞いについては必要なものだと思っていますが、私はそれをプログラム的に使用しなければなりません。つまり、期待通りに動作する限りです。MaxDegreeOfParallelism
= numのコアプログラムは、 'またはスレッド。
EDIT: ProcessorAffinity
が実際に使用するコアの数を制限するが、適切にモノに実装されていないようです。私はWindows上でチェックし、それは動作するようです。実際に使うのは良い考えではありませんが。ランタイムシステムは、タスクの管理方法とスケジュール方法をよりよく決定できる必要があります。また、MaxDegreeOfParallelism
は、基本的に生成されたタスクの数を設定する「並列レベル」に近いため、粒度を変更するために使用できます。
Windowsを使用している場合は、タスクマネージャでCPU数を設定するだけです。http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an -application-in-windows/ –
私はLinux/monoを使用しています。 Linuxで同じことをする方法はありますか? – vis
F#はネイティブ.NETアセンブリを作成します。アセンブリは、実行時に指定されたルール(CLR)に従います。このルールは、デフォルトですべてのCPUコアにアフィニティがあります。 System.Diagnostics.Process.GetCurrentProcess()。ProcessorAffinity'を設定することで、_fewer_数のコアのCLRを制限することができます。 – bytebuster