ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
実は記事のタイトルはでたらめで,僕の腐敗神話を延々と書くのが今日の記事の内容です.
・・・まあ,そんな誰が得するか分からない嘘は置いといて,今回は前回作成した実行コンテキストをいぢってみます.
今回のサンプルはここからダウンロード出来ます.
サンプルでは,OpenMPを使って複数のRTCを並列かつ同期的に処理するようにしています.
複合コンポーネントでは,ひとつのECで複数のRTCが駆動できるようになってます.
普通に複合コンポーネントを作成したら,直列実行になるみたいですね,多分,
でも,論文読んでみた感じ,同期的かつ並列実行もできるみたいに書いてますけど,今その機能があるのか,あってもどこで設定するのかを僕は知らないのでOpenMPで自作しました.
駆動するRTCの処理をするスレッドの開始時刻は同じになるので,同期的かつ並列になるはずです.
・・・・RTCの数が少ないときはですけど.
おそらく,複合するRTCが多すぎると同一スレッドで複数のRTCを処理すると思います.
VC2008EEでOpenMPを使用したプログラムを作成するにはWindows SDK for Windows Server 2008 and .NET Framework 3.5が必要です.Proffesionalとかなら要らないみたいです.
プロジェクトの作成の際は,プロパティ→C/C++→言語のOpenMPサポートをはいに変更してください.
今回作成したサンプルの使用方法を説明します.
まず,MPExecutionContextManagerのReleaseフォルダに入っているMPExecutionContextManager.exeを起動してください.
すると,マネージャが登録されます.
そして,今回はTest1とTest2のフォルダのcomponentsフォルダにテスト用RTCを用意したので,Test1CompとTest2Compを起動してください.
そして,複合コンポーネント作成時に出てくるダイアログのManagerを先ほど起動したマネージャに設定して複合コンポーネントを作ってください.
これで完了です.複合コンポーネントを作成すると,マネージャのコンソール画面に処理時間が表示されます.
非アクティブの時は0.00となるはずです.
ここで,アクティブにしてみます.
すると,経過時間が変化するはずです.
ちなみに,僕の環境では0.3秒ぐらいかかります.
これでは比較ができないので,一旦マネージャとRTCを終了させてから「並列処理無し」という名前のフォルダに入ってるMPExecutionContext.dllというDLLをマネージャのフォルダにコピーしてから実行してください.
・・・・としようと思ったのですが,複合コンポーネントを解除しようとするとバグりますね.
あまりよろしくないですが,コンソールの×を押して消しましょう.
一体,どこがおかしいんでしょうね?
実行コンテキストではないようですが.
それで実行するとさっきより遅くなると思います.
ちなみに僕の環境では0.6秒近くかかります.
元に戻すときはMPExecutionContextのフォルダのReleaseにあるMPExecutionContext.dllをさらに上書きしてください.
さて,今回のソースを見てみます.
以下はMPExcutionContextのMPExecutionContext.cppのソースの一部です.
#include <omp.h> //OpenMPを使うためのヘッダー
int MPExecutionContext::svc(void)
{
do{
clock_t start,end; //時間測定のための変数
start = clock(); //開始時間
#pragma omp parallel //この指示文以降のブロックをマルチスレッドで実行
#pragma omp for //forループをスレッド間に分割
for(int i=0;i < m_comps.size();i++)
{
invoke_worker()(m_comps[i]); //i番目のRTCの処理実行
}
end = clock(); //終了時間
printf("%.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); //時間表示
}while (m_running);
return 0;
}
といった感じです.
今回のサンプルでは実行周期を指定できないので,できるようにすべきがどうかは考え中です.
需要があればやろうと思いますけど,僕が見逃してるだけで実は並列にも設定できるとかだったら怖い.
あ,そうそう.
卒論発表の終わる25日まで更新できません.
1日1回更新すると言っといて無責任ですが,25日からは更新するつもりなので勘弁してください.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
・・・まあ,そんな誰が得するか分からない嘘は置いといて,今回は前回作成した実行コンテキストをいぢってみます.
今回のサンプルはここからダウンロード出来ます.
サンプルでは,OpenMPを使って複数のRTCを並列かつ同期的に処理するようにしています.
複合コンポーネントでは,ひとつのECで複数のRTCが駆動できるようになってます.
普通に複合コンポーネントを作成したら,直列実行になるみたいですね,多分,
でも,論文読んでみた感じ,同期的かつ並列実行もできるみたいに書いてますけど,今その機能があるのか,あってもどこで設定するのかを僕は知らないのでOpenMPで自作しました.
駆動するRTCの処理をするスレッドの開始時刻は同じになるので,同期的かつ並列になるはずです.
・・・・RTCの数が少ないときはですけど.
おそらく,複合するRTCが多すぎると同一スレッドで複数のRTCを処理すると思います.
VC2008EEでOpenMPを使用したプログラムを作成するにはWindows SDK for Windows Server 2008 and .NET Framework 3.5が必要です.Proffesionalとかなら要らないみたいです.
プロジェクトの作成の際は,プロパティ→C/C++→言語のOpenMPサポートをはいに変更してください.
今回作成したサンプルの使用方法を説明します.
まず,MPExecutionContextManagerのReleaseフォルダに入っているMPExecutionContextManager.exeを起動してください.
すると,マネージャが登録されます.
そして,今回はTest1とTest2のフォルダのcomponentsフォルダにテスト用RTCを用意したので,Test1CompとTest2Compを起動してください.
そして,複合コンポーネント作成時に出てくるダイアログのManagerを先ほど起動したマネージャに設定して複合コンポーネントを作ってください.
これで完了です.複合コンポーネントを作成すると,マネージャのコンソール画面に処理時間が表示されます.
非アクティブの時は0.00となるはずです.
ここで,アクティブにしてみます.
すると,経過時間が変化するはずです.
ちなみに,僕の環境では0.3秒ぐらいかかります.
これでは比較ができないので,一旦マネージャとRTCを終了させてから「並列処理無し」という名前のフォルダに入ってるMPExecutionContext.dllというDLLをマネージャのフォルダにコピーしてから実行してください.
・・・・としようと思ったのですが,複合コンポーネントを解除しようとするとバグりますね.
あまりよろしくないですが,コンソールの×を押して消しましょう.
一体,どこがおかしいんでしょうね?
実行コンテキストではないようですが.
それで実行するとさっきより遅くなると思います.
ちなみに僕の環境では0.6秒近くかかります.
元に戻すときはMPExecutionContextのフォルダのReleaseにあるMPExecutionContext.dllをさらに上書きしてください.
さて,今回のソースを見てみます.
以下はMPExcutionContextのMPExecutionContext.cppのソースの一部です.
#include <omp.h> //OpenMPを使うためのヘッダー
int MPExecutionContext::svc(void)
{
do{
clock_t start,end; //時間測定のための変数
start = clock(); //開始時間
#pragma omp parallel //この指示文以降のブロックをマルチスレッドで実行
#pragma omp for //forループをスレッド間に分割
for(int i=0;i < m_comps.size();i++)
{
invoke_worker()(m_comps[i]); //i番目のRTCの処理実行
}
end = clock(); //終了時間
printf("%.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); //時間表示
}while (m_running);
return 0;
}
といった感じです.
今回のサンプルでは実行周期を指定できないので,できるようにすべきがどうかは考え中です.
需要があればやろうと思いますけど,僕が見逃してるだけで実は並列にも設定できるとかだったら怖い.
あ,そうそう.
卒論発表の終わる25日まで更新できません.
1日1回更新すると言っといて無責任ですが,25日からは更新するつもりなので勘弁してください.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする