pulpul 日本の試験

システム監査技術者 概念書 · コンピュータ構成要素

プロセッサの構成と高速化

要点と定義

プロセッサは命令を制御し、演算装置やレジスタなどを使って処理を進めます。演算装置では、基本論理回路を組み合わせて加算などを実現します。1桁の2進数の加算では、和の桁と桁上がりを別々に考えます。例えば1と1の和は2進数で10なので、和の桁は0、桁上がりは1です。

プロセッサの性能を考えるときは、クロック周波数だけでなく、命令数や平均CPI(命令当たりのサイクル数)も関係します。実行時間は「命令数 × 平均CPI × クロック周期」で見積もれます。同じプログラムでも、CPIとクロック周期の両方を考慮しなければ処理時間の比較を誤ります。

クロックを分周して別の回路へ供給する場合は、その回路に入るクロックを起点に、分周後の周波数と許容誤差を確かめます。CPU向けと周辺回路向けで経路が異なることもあるため、ブロックごとの接続を追う必要があります。

高速化の方式には、単一コア内で複数の実行可能な命令を複数の演算器へ振り分けるスーパースカラがあります。VLIWは、コンパイラが同時実行できる動作をまとめ、長い命令語として実行する方式です。並列に動かす単位と、どの段階で並列性を見つけるかが区別の手掛かりです。

SIMDは、一つの命令を複数のデータに適用する並列処理方式です。例えば画像の各画素に同じ補正処理を行う場面では、データごとに異なる命令を実行する方式と区別できます。

適用条件と例

複数の方式を見分けるときは、「命令の流れ」と「データの流れ」の数を分けて捉えます。SIMDでは命令が一つでデータが複数、MIMDでは命令もデータも複数です。スーパースカラは単一コア内で複数命令を並列に実行する技法であり、SIMDのように一つの命令を複数データへ適用する方式とは着眼点が異なります。

多桁の2進加算では、各桁の和と桁上がりを区別し、桁上がりを次の桁の計算に渡します。例えば101と011の和は1000です。各桁を順に計算して桁上がりを引き継ぐことで、結果を得られます。

性能見積りでは、例えば命令数が4,000万、平均CPIが1.5、クロック周期が0.5ナノ秒なら、4,000万 × 1.5 × 0.5ナノ秒 = 3,000万ナノ秒、つまり0.03秒です。実際の比較では、同じプログラムか、命令数が共通かなど、与えられた条件を先に確認します。

過去の出題で扱った補足として、投機実行では分岐条件が確定する前に経路を予測して命令を実行します。予測が外れた場合は、予測経路の仮の実行結果を破棄して正しい経路を実行します。これはパイプラインの高速化に関係する考え方ですが、要綱の用語例にあるスーパースカラやVLIWなどとは別の技法です。

誤りやすい点

クロック周波数が高いだけで、必ずプログラム全体が速くなるとは限りません。命令数やCPI、クロック周期を合わせて比較します。CPIは「命令数 ÷ サイクル数」ではなく、「サイクル数 ÷ 命令数」です。

方式名の混同にも注意します。複数コアで複数スレッドを動かすことと、単一コア内で複数命令を実行することは異なります。また、同じ命令で複数データを処理するSIMDと、複数の命令を複数演算器へ振り分けるスーパースカラも別です。

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む