マルチコアで高速化処理を実現するための手法組み込みマルチコア進化論(3)(3/3 ページ)

» 2009年01月16日 00時00分 公開
[塚田 雄一 キャッツ,@IT MONOist]
前のページへ 1|2|3       

同期処理

 実際に処理実行を行う場合には、各スレッドに開始イベントなどの同期を記述する必要があります。各イベントはOSなどにより指定されているので、システムコールは各OSのシステムコールを指定してください。



起動イベントの同期タイミング検討

 より高速化を検討する場合には、スタートイベントの同期タイミングを検討します。スレッド1からスレッド4では、起動イベントが発行されるまで動作できませんので、メインスレッドで、なるべく速く起動イベントを発行する必要があります。処理1と処理2の依存関係において、処理2が処理1を待たずして動作可能な場合は、スレッドの開始イベントを処理1よりも先に移動します。

起動イベントを処理1よりも前に行った場合 図11 起動イベントを処理1よりも前に行った場合

終了イベント待ち同期タイミング検討

 また、さらに高速化を検討する場合には、終了イベント待ちの同期タイミングの検討を行います。メインスレッドは起動イベントを発行した後、終了イベント待ちになり、終了イベントが来るまで動作が行えません。よって、処理3の動作はその後に実行されます。つまり処理2と処理3について依存関係が存在しない場合には、処理3の処理を行ってから、終了イベント待ちにすることができます。

終了イベント待ちを処理3の後に行う場合 図12 終了イベント待ちを処理3の後に行う場合

並列処理

 これまで検討した結果をまとめると、各スレッドの同期タイミングは図13のようになります。各処理ともに、繰り返し処理の高速化を検討する場合には、依存関係を考慮したうえで高速化可能な部分の検討を繰り返す必要があります。

高速化可能部分の検討結果 図13 高速化可能部分の検討結果

おわりに

 現在、マルチコア環境における並列化手法はまだ確立されているとはいえません。皆さんと一緒に考え進化させていきたいと思います。ご意見、ご質問がある方は件名を「マルチコア並列化手法の件」として、メールアドレスinfo@zipc.comまでご連絡ください。また、参考ホームページはhttp://www.zipc.com/support/rre/multicore/になります。よろしくお願いいたします。

 次回もお楽しみに。(次回に続く)

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.