Pixel Visual Core

Pixel Visual Core（PVC）は、Googleが設計したARMベースの一連のsystem in a package（SiP）の画像プロセッサである。PVCは、モバイル デバイスおよび将来のIoT向けの、完全にプログラム可能な画像、label=ビジョン、AIのマルチコアのドメイン固有アーキテクチャ（DSA）である。2017年10月19日に発売されたGoogle Pixel 2と2 XLで初めて導入された。Google Pixel 3と3 XLでも導入されている。Pixel 4以降、このチップはPixel Neural Coreに置き換えられた。

**歴史**
Googleは以前、Qualcomm SnapdragonのCPU、GPU、IPU、およびDSPを使用して、Google NexusおよびGoogle Pixelデバイスの画像処理を処理していた。コンピュテーショナルフォトグラフィーの技術の重要性が増してきたことで、GoogleはPixel Visual Core（PVC）を開発した。Googleは、PVCはCPUやGPUを使用するよりも消費電力が少なく、テンソル・プロセッシング・ユニット（TPU）のようなASICとは異なり、完全にプログラム可能であると主張している。実際、従来のモバイルデバイスには、固定機能の画像処理パイプラインである画像信号プロセッサ（ISP）が装備されてきた。これとは対照的に、PVCは画像処理だけに限定されない柔軟なプログラマブルな機能を備えている。
Google Pixel 2と2 XLのPVCには、SR3HX X726C502というラベルが付いている。
Google Pixel 3と3 XLのPVCには、SR3HX X739F030というラベルが付いている。
PVCのおかげで、Pixel 2とPixel 3は98と101のモバイルDxOMarkを取得した。後者は、iPhone XRと並んで、一眼レフのモバイルDxOMarkスコアの上位であった。

**Pixel Visual Coreソフトウェア**
ファイル:Image_processing_pipeline.svg|右|サムネイル| PVCプログラマー向けのカーネルの有向非循環グラフのビュー
PVCの典型的な画像処理プログラムは、Halide (programming language)で記述されている。現在、浮動小数点演算は行わず、メモリアクセスパターンが制限されているHalideプログラミング言語のサブセットのみをサポートしている。Halideは、ユーザーがアルゴリズムとその実行のスケジューリングを分離できるドメイン固有言語である。これにより、開発者はターゲット ハードウェア アーキテクチャに最適化されたプログラムを作成できる。

**Pixel Visual Core ISA**
PVCには、仮想と物理の2種類の命令セットアーキテクチャ（ISA）がある。まず、高水準言語プログラムが、RISC-V ISAに触発された仮想 ISA（vISA）にコンパイルされ、ターゲット ハードウェア世代から完全に抽象化される。次に、vISAプログラムは、いわゆる物理 ISA（pISA）、つまりVLIW ISAにコンパイルされる。このコンパイル手順では、ターゲット ハードウェア パラメーター（PEサイズの配列、STPサイズなど）を考慮し、メモリ移動を明示的に指定するようになっている。vISAとpISAの分離により、最初のものはクロスアーキテクチャで世代に依存せず、pISAはオフラインまたはJITコンパイルを通じてコンパイルできる。

**Pixel Visual Coreアーキテクチャ**
4コアのPVCの例
Pixel Visual Core は、2～16コア設計の偶数の範囲で、スケーラブルなマルチコアのエネルギー効率の高いアーキテクチャとして設計されている。PVCのコアは、画像処理用に調整されたプログラム可能なユニットである画像処理ユニット（IPU）である。Pixel Visual Coreアーキテクチャも、SR3HXのような独自のチップとして、またはシステム オン チップ（SOC）のIPブロックとして設計されている。

**画像処理ユニット（IPU）**
IPU コアには、ステンシル プロセッサ（STP）、ライン バッファー プール（LBP）、label=NoCがある。STPは主に、label=ステンシル計算を実行できる処理要素（PE）の2次元SIMDアレイ、つまりピクセルの小さな近傍を提供する。Systolic arrayと波面計算に似ているように見えるが、STPには明示的なソフトウェア制御によるデータ移動がある。各PEは、2x 16ビット算術論理演算ユニット（ALU）、1x 16ビット積和演算ユニット（MAC）、10x 16ビットレジスタ、および10x 1ビット述語レジスタを備えている。

**ラインバッファプール（LBP）**
最もエネルギーコストのかかる操作の1つがDRAM アクセスであることを考慮すると、各STPにはデータの局所性を高めるための一時バッファー、つまりLBPがある。使用されるLBPは、さまざまなサイズの読み取りと書き込みに対応する2次元FIFOになっている。LBPは、シングル プロデューサー、マルチコンシューマーの行動モデルを使用する。各LBPは、8つの論理LBメモリとDMA入出力操作用に1つを持つことができる。メモリシステムは非常に複雑であるため、PVC設計者はLBPコントローラを最も困難なコンポーネントの1つとして挙げている。使用されるNoCは、エネルギーの節約とパイプライン化された計算パターンの保存のために、隣接するコアのみと通信するために使用されるリングネットワークオンチップである。

**ステンシル プロセッサ（STP）**
PEの2次元配列の表現。白は完全なPE（16x16）で、灰色は「halo」（144）の一部である。明示すると、すべての接続が報告されているわけではない。
STPにはPEの2次元配列がある。たとえば、完全なPEの16x16配列と、「halo」と呼ばれる単純化されたPEの4レーンである。 STPには、スカラー レーン（SCL）と呼ばれるスカラープロセッサがあり、小さな命令メモリで制御命令を追加する。STPの最後のコンポーネントは、シート ジェネレーター（SHG）と呼ばれるロードストアユニットであり、シートはPVCメモリアクセスユニットである。

**SR3HXのデザインの要約**
SR3HX PVCは、64 ビットARMv8aのARM Cortex-A53 CPU、8x画像処理ユニット（IPU）コア、512MB LPDDR4、MIPI、PCIeを備えている。IPUコアにはそれぞれ、16 x 16の2次元配列として配置された256の処理要素（PE）で構成される512のALUがある。これらのコアは、カスタムVLIW ISAを実行する。処理要素ごとに2つの16ビットALUがあり、independent、joined、fusedという3つの異なる方法で動作できる。SR3HX PVCは、28 nm processのHKMGプロセスを使用してTSMCによってSiPとして製造されている。これは、Intelとのパートナーシップで4年以上かけて設計された（コードネーム: Monette Hill）。Googleは、SR3HX PVCはlabel=Snapdragon 835よりも7〜16倍エネルギー効率が高いと主張している。また、SR3HX PVCは1秒あたり3兆回の操作を実行できるため、HDR+はSnapdragon 835よりも5倍速く、10分の1未満のエネルギーで実行できる。画像処理用のHalide (programming language)と機械学習用のTensorFlowをサポートしている。現在のチップは426MHzで動作し、単一のIPUは1TeraOPS以上で実行できる。

**出典 ==