連載
» 2016年09月20日 07時00分 公開

可能性と複雑性に満ちあふれた「AMP」へようこそSYSTEM DESIGN JOURNAL(4/5 ページ)

[Ron Wilson,(Editor-in-chief,Altera),MONOist]

データの重要性

 AMPシステムの実装に際して最も重要な決定の1つは、プロセッサをシステムメモリ階層にどう適合させるかです。

 この決定は、主に各種プロセッサ上のタスクがデータにアクセスする方法に基づくべきです。SMPシステムの場合、プロセッサ上で実行される全てのタスクが1つの共有メモリスペースへ同様にアクセスするキャッシュコヒーレントな共有メモリ構成が標準の選択です。一方で一部のタスクが特定のプロセッサ上でのみ実行されるAMPシステムでは、多くの場合、メモリアーキテクチャを個々のタスクのアクセスパターンに合わせて調整する機会があります。

 この調整は、タスクによるメモリの使用方法、特に参照の局所性、アクセスの経時変化、必要な帯域幅によって決まります。通常の共有メモリシステムの場合、L1またはL2データキャッシュに十分に収まる比較的小さい隣接データセットをタスクが受け取り、しばらくそのセットを集中的に処理した後、別の隣接データセットに移るのが理想的です。このパターンにより、ほぼ全てのロード/ストアでローカルキャッシュにヒットさせることが可能です。

 残念ながら、多くの重要なアルゴリズムは決して協調的ではありません。ある最近の論文では、ビッグデータ解析タスクにおけるキャッシュミス率は90%以上に及ぶ可能性があると推定されています。また、非常に大規模なテーブルまたはリンクリストを使用するアプリケーションも、極めて散発的なアクセスパターンを示す可能性があります。

 これらの場合、タスクを実行するプロセッサ専用の大容量ローカルメモリを搭載するのが理にかなうこともあります。このメモリはキャッシュとして管理できますが、多くの場合、ソフトウェアで明示的に管理した方がよいかもしれません。

 時として、キャッシュは平均アクセス時間を短縮することが全く出来ないことがあり、その場合、メモリアクセスレイテンシを隠す方法(深いマルチスレッディングなど)を他に探す必要があります。なお、そうしたアイデアは、ローカルメモリとしてプロセッサに直接接続された大容量フラッシュアレイなど、新たな概念につながります。

 特殊なケースとして、データが絶えずタスクにストリーム入力され、一連の短い操作でのみ使用された後、受け渡されたり、フラッシュされたりする場合が考えられます。そうした状況は、ネットワークパケット交換、信号処理、制御システムへの伝達関数の実装などにおいて発生することがあります。

 最善の実装はダイレクトメモリアクセス(DMA)をプロセッサのローカルメモリに直接、ストリーム入出力することかもしれません。そうすれば、メインCPUとメモリをバイパスし、ストリーミングタスクをメインCPUからほぼ独立して実行することが可能になります。

 そこで生じる最後の疑問は、AMPプロセッサはどのようにして外部と関わるのかということです。プロセッサは、少なくとも初期化および例外回復時にI/Oレジスタコントロールおよびステータストランザクションが行えるよう、システムとI/Oバスで接続されるものと考えられます。

 ストリーム処理の場合(つまりプロセッサが実際のイベントを割り込み駆動型でリアルタイム処理している場合)、そのプロセッサを外部と直接I/O接続できます。しかし、AMPシステムにおける割り込みやI/Oトランザクションは、どちらかと言えば中央のCPUで処理され、メインメモリを通じてデータがバッファされます。

Copyright © ITmedia, Inc. All Rights Reserved.