Cincom SmalltalkのプロダクトマネジャであるArden Thomas は、ネバダ州ラスベガスで開催されたSmalltalk Solutions 2011 において、Polycephaly について講演しました。
Cincom SmalltalkのプロダクトマネジャであるArden Thomas は、ネバダ州ラスベガスで開催されたSmalltalk Solutions 2011 において、Polycephaly について講演しました。下記は、Arden のブログの投稿です。
今月 Polycephaly について、Smalltalk Solutions でプレゼンテーションを行います。これは、マルチコアプロセッサを利用するためのCincom Smalltalk フレームワークです。もし、ご参加いただければ、Polycephaly に関する詳細情報や試行結果をご覧いただけます。
Polycephaly は、多くの顧客に恩恵をもたらすことを確信しております。それを実践できるよう、簡単なサンプルを公開します。
すべての顧客のプロセスを毎日記録していると仮定します。(一般的な例なので、いろいろな処理を実行しています)。
まず、顧客のセグメント分けが必要です。顧客グループの同時処理の基本になります。顧客を単純に、名前の最初の文字で分割します。1つのグループとして、”A”、別グループとして“B” … “Z”で始まる名前のすべての顧客を処理します。
“A” から “Z”のコレクションを作成するメソッドから始めます。
aToZ“A から Z の文字”"SharedQueue は、同時発生アクセスを管理します"| queue |queue := SharedQueue new: 26.(10 to: 35) do:[:ea | queue nextPut: (String with: (Character digitValue: ea)) ].^queue次に、処理を制御して、振り分けるメソッドを作成します。processAToZ をコールします。
processAToZ"self processAToZ""これは、マルチコアを使用した問題を解決するために、Polycephaly を 使用する一般例です。この例では、文字ごとにばらばらにプロセスを取り出します。 例えば、'A'で始まる名前、すべての'B'というように別々にすべての顧客の 処理を行います。"| letterQueue done results vms | "A .. Z文字のコレクション(SharedQueue)" letterQueue := self aToZ. "続行する前にすべての処理が完了するまで待ちます" done := Semaphore new. "安全な同時アクセスにSharedQueues を使用" results := SharedQueue new. "3つのヘッドレス処理イメージを作成 - 動作確認用に異なったサイズのベンチマークにします" vms := Polycephaly.VirtualMachines new: 3. "マシン(ヘッドレスイメージ)同様に多くのプロセスをフォークします。 各プロセスは文字を取り込み、処理するためにマシンに送ります。 結果は戻され、追加され、そして別の文字を無くなるまで取り込みます。 処理する文字が無くなった後、マシンをリリース(イメージをクローズ)して、 完了を通知します" vms machines do: [:machine | [ | letter | [letter := letterQueue nextAvailable. letter isNil] whileFalse: [results nextPut: (machine do: [:ch | ProcessAtoZ processLetter: ch ] with:letter)]. machine release. "Shut down the vm" done signal] fork]. "Signal that the machine has completed its work" vms machines size timesRepeat: [done wait]. "Wait until each machine has reported in as completed" ^ results最後に、#processLetter: を下記のように実装します。
processLetter: letter| letters |letters := OrderedCollection new: 100.1 to: 100 do:[:n | letters add: letter ].^lettersこのコードのパーセルがほしい場合には、athomas@cincom.com にご連絡ください。
このコードを使用するには、イメージを起動して、Polycephaly をロードして、このパーセルをロードして、イメージの保存です。(起動されたヘッドレスイメージは、このメインイメージのコピーなので、最初にイメージを保存するまで、Polycephaly (#processLetter:)は動作しないでしょう。)#test メソッドを実行して、Polycephaly が動作していることを確認して、#processAToZ の結果をインスペクトします。
おめでとうございます。これで、アプリケーションの性能をアップするための方法を手に入れました。
この結果があなたに恩恵をもたらすことを願っております。
– Arden
ここに Smalltalk Solutions 2011 でArden が使用したプレゼンテーションがあります。