確率分布からサンプルを描きたいとします。以下のケースでは、10000回にわたって一様に分布したrvを0と1の間で描画します。私は無作為であるにもかかわらず、ベクトル内のランダムサンプルの順序については気にしません。一般的なLispのサンプリングを並列で行う
(setf my-vec (make-sequence 'vector 10000 :initial-element 0))
(loop :for i :from 0 :to 9999 :do
(setf (svref my-vec i) (random 1.0)))
私はマルチコアマシンを持っており、上記のコードを並列に実装したいと考えています。 (すなわち、私は4つのコアを持っていると仮定して、1つのコアに2500をサンプリングし、最後にすべてのサンプルを1つのベクトルに追加することを前提としています)。この問題に対する私のアプローチですか?私は並列化の高度な特性を必要としません、私はちょうどサンプリングの計算負荷を均等に機械コアに分配したいです。あなたが並列化やオンラインチュートリアルのために行うべきいくつかのステップを指摘することができますそれは本当にいいだろうから恩恵を受けることができます。どうもありがとう事前に。
これは素晴らしい例です。質問:各スレッドが同じ配列に書き込みを行っている減速b/cはありますか?スレッドごとに別々の配列を作成し、最後に結合した方が速いでしょうか? –
@claytontstanley:間違いなく、試してみると意味があります。私はそれについて考えましたが、コードをあまりにも複雑にしたいとは考えていませんでした。この例では、作業を分割し、作業のスレッドを開始し、同期のための障壁を使用するという基本的な考え方が既に存在しています。 –
@RainerJoswig、私はCCLを使用しています。 LispWorksと比較した場合、特に不利な点はありますか? CCLでの記述は、上記のコードと同じくらいコンパクトになりますか?どうもありがとう。 – YBE