ちょっとだけソフトリアルタイム機能を試してみたいというとき、簡単に利用できるのが「cmd.exe」です。cmd.exeはコマンドプロンプトという認識がありますが、別のプロセスを起動するときのラッパとして利用することもでき、さまざまなパラメータが備わっています。
cmd.exeを経由してアプリケーションを起動すること、で簡単に動作するコアを指定できます。下記は「サンプル.exe」をコア3に限定して、プロセスの優先度をRealtimeで実行する場合のパラメータです。
cmd /c start "サンプル.exe" /Realtime /affinity 8
コアの指定は2進数のマスクで行います。ただし、/affinityで指定するのは、この2進数を16進数に変換した値になります。
例)
コア0指定 2進数 0000 0001 16進数 1
コア3指定 2進数 0000 0100 16進数 8
コア0、1指定 2進数 0000 0011 16進数 3
上記で実行された結果が下記の図2になります。サンプル.exeは、mainスレッド内で計算をしながらループをし続ける簡単なアプリケーションです。通常実行した場合にはWindowsが4コアに処理を割り振りながら動作しますが、コア3に限定して実行しているためCPU利用率はコア3のみが増加していることが分かります。
WindowsのCPU、プロセス、スレッドの詳細については、下記のマイクロソフトのドキュメントが大変参考になります。
Windows 10 IoT Enterpriseのソフトリアルタイム機能は、複数のコアの中からOSが利用するコアとアプリケーションが利用するコアを分離することが特徴となります。予約されたコアの中でスレッドやプロセスの優先度を設定しながらアプリケーションやドライバを開発することができます。
Windows 10 IoT Enterpriseはハードリアルタイムに対応していないOSですが、このソフトリアルタイム機能を利用することで開発者は自身のアプリケーションやドライバのスレッドが他のOSのスレッド要因によって停止することがなくなり、ある程度開発者が予測したスレッドコントロールができるようになります。
(連載完)
Copyright © ITmedia, Inc. All Rights Reserved.