Cでデュアルコアプロセッサシミュレータを構築する必要があります(実際には、マルチレベルメモリシミュレーション、キャッシュL1 / L2、ブロック置換などです)。実は、コア(スレッドとしてプログラミングしている)を同期する方法を見つけるのに苦労しています。どのように私が世界時計をすることができるかについての考えはありますか?スレッドから子プロセスに変更する必要がありますか?前もって感謝します
2 に答える
ここには非常に多くのオプションがあります。複数のスレッドとの複雑な相互作用をサポートすることになる可能性があるため、メッセージが「バス」を通過する「仮想クロック」の使用を検討することをお勧めします。これにより、同期ロジックをデバッグする代わりに、コア機能に集中する時間を増やすことができます...
この手法を使用すると、「アクター」スレッド(最悪の場合)ごとにステートマシン(ここを参照)を構築し、ミューテックス/条件について心配する必要がなくなります。このベースを取得すると、途中で表示されるケースを処理できるようになります(たとえば、「この詳細を忘れました...心配ありません。ここに状態を追加するだけです...再実行する必要はありません。 -ミューテックスをシャッフルします)。
また、シミュレーションの実行はすべて「仮想時間」に関するものであるため(リアルタイムで実行できないため!)、「仮想時計」に基づく基本アーキテクチャを使用すると、問題が適切なレベルに抽象化されます。
クロックスレッドとN個のプロセッサスレッドを使用できます。クロックスレッドは、各プロセッサスレッドを明示的に呼び出して、1つの処理ステップを実行できます。各プロセッサスレッドは、クロックスレッドからdoStep()
;への呼び出しを受け取ります。1つのステップを実行してから、制御をクロックスレッドに戻します。
また、プロセッサスレッドが呼び出されて手順を実行する順序をランダム化して、クライアントコードのバグを検出する可能性を高めることもできます。