実際に処理実行を行う場合には、各スレッドに開始イベントなどの同期を記述する必要があります。各イベントはOSなどにより指定されているので、システムコールは各OSのシステムコールを指定してください。
より高速化を検討する場合には、スタートイベントの同期タイミングを検討します。スレッド1からスレッド4では、起動イベントが発行されるまで動作できませんので、メインスレッドで、なるべく速く起動イベントを発行する必要があります。処理1と処理2の依存関係において、処理2が処理1を待たずして動作可能な場合は、スレッドの開始イベントを処理1よりも先に移動します。
また、さらに高速化を検討する場合には、終了イベント待ちの同期タイミングの検討を行います。メインスレッドは起動イベントを発行した後、終了イベント待ちになり、終了イベントが来るまで動作が行えません。よって、処理3の動作はその後に実行されます。つまり処理2と処理3について依存関係が存在しない場合には、処理3の処理を行ってから、終了イベント待ちにすることができます。
これまで検討した結果をまとめると、各スレッドの同期タイミングは図13のようになります。各処理ともに、繰り返し処理の高速化を検討する場合には、依存関係を考慮したうえで高速化可能な部分の検討を繰り返す必要があります。
現在、マルチコア環境における並列化手法はまだ確立されているとはいえません。皆さんと一緒に考え進化させていきたいと思います。ご意見、ご質問がある方は件名を「マルチコア並列化手法の件」として、メールアドレスinfo@zipc.comまでご連絡ください。また、参考ホームページはhttp://www.zipc.com/support/rre/multicore/になります。よろしくお願いいたします。
次回もお楽しみに。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.