インメモリコンピューティングとアナログ演算
なぜメモリの中で掛け算が一瞬で終わるのか。クロスバーがオームの法則と電流加算で積和を物理的に解き、データ移動というAI計算の最大ボトルネックを消す原理と、ADC精度の壁までが腑に落ちます。
- 1.アナログ・インメモリ演算はメモリ素子の抵抗(コンダクタンス)に重みを書き込み、入力電圧を印加してオームの法則で電流を作り、列で電流を足し合わせる(キルヒホッフの電流則)ことで積和(MAC)を1ステップで物理的に解く。
- 2.フォンノイマン型は重みをメモリから演算器へ運ぶデータ移動がボトルネック(メモリの壁)だが、インメモリ演算は重みを動かさずデータが格納地で計算されるため、移動エネルギーと帯域の制約を根本から回避できる。
- 3.アナログ演算の代償は周辺回路、とくに列電流をデジタル化するADCが面積・電力の大半を占め、素子ばらつき・非線形・ノイズで実効精度が数ビットに制限される。だから誤差に頓着しないAI推論が主用途になる。
なぜ「メモリの中で計算する」のか ── メモリの壁
ニューラルネットワークの推論や学習の計算量は、その大半が積和(MAC: Multiply-Accumulate)、つまり「入力ベクトルと重み行列の掛け算と足し合わせ」に費やされます。従来のフォンノイマン型コンピュータでは、この重み行列はメモリ(DRAM や SRAM)に置かれ、演算するたびに重みを演算器(ALU)まで運んでこなければなりません。
問題は、この「運ぶ」コストが「計算する」コストを圧倒することです。1回の積和そのものに要するエネルギーより、その重みを DRAM から読み出してデータパスを移動させるエネルギーのほうが桁違いに大きい ── これが**メモリの壁(メモリウォール、フォンノイマンボトルネック)**です。行列が巨大な現代の AI では、計算機は演算器を遊ばせたままデータの移動待ちで律速されます。DRAM がそもそも「行を運んで読む」構造であることは /semiconductor/dram-cell/ の通りです。
インメモリコンピューティング(Computing-in-Memory, CIM)の発想は単純で過激です。データを演算器へ運ぶのをやめ、データが置かれている場所そのもので計算する。重みをメモリセルに留めたまま、メモリアレイ自体を演算器に仕立てれば、最も高くつくデータ移動が消える ── これが核心です。
インメモリ演算には、SRAM ビット線上でビット単位の論理・加算をデジタルに行うデジタルインメモリと、メモリ素子の抵抗値を使ってアナログ的に積和を解くアナログインメモリがあります。本稿が扱うのは後者、すなわちオームの法則と電流加算で MAC を物理的に解くアナログ方式です。両者とも「データを動かさない」点は共通します。
クロスバーが積和を物理で解く ── オームの法則と電流加算
アナログインメモリ演算の舞台はクロスバーアレイです。水平な行線(ワード線)と垂直な列線(ビット線)を格子状に交差させ、各交点に1個の可変抵抗メモリ素子(ReRAM、PCM、フラッシュなど)を置きます。各素子のコンダクタンス(抵抗の逆数)G に行列の重みを書き込みます。
ここで二つの物理法則が積和を肩代わりします。
クロスバーで行列ベクトル積を解く原理:
各行 i に入力電圧 Vi を印加(= 入力ベクトルの要素)
交点 (i,j) の素子のコンダクタンス Gij = 重み行列の要素
オームの法則: 交点を流れる電流 Iij = Vi × Gij ← 乗算がここで起きる
キルヒホフの電流則: 列 j の総電流 Ij = Σ_i (Vi × Gij) ← 加算がここで起きる
→ 列 j の電流 Ij が、入力ベクトルと重み列ベクトルの内積そのもの
つまり1本の列を流れ落ちる電流が、その列の重みと入力ベクトルの積和の答えになっています。乗算は各素子のオームの法則(I = V × G)が、加算は列で電流が合流するキルヒホフの電流則が、いずれも回路の物理として瞬時に・並列に解いてしまう。N行M列のアレイなら、N×M回の乗算とM回の総和が、クロックを刻まず1ステップで同時に終わります。重みは素子に書き込まれたまま一切動きません。これがメモリの壁を回避する仕組みです。
コンダクタンスは物理的に正の値しか取れないため、符号付きの重みをそのままでは表せません。実装では1つの重みを正側素子 G+ と負側素子 G− のペアで表し、実効重みを G+ − G− として2列の電流差で読むのが定石です。差動構成は同相ノイズの除去にも効きます。可変抵抗素子そのものの記録物理(フィラメント・相変化・磁化)は /semiconductor/emerging-nvm-physics/ を参照。
なぜ速く・省エネなのか ── 計算量と局所性
クロスバーの効きを計算量で見ます。デジタルプロセッサで N×M の行列ベクトル積を解くには、原理的に N×M 回の乗算と加算をクロックに沿って順に(あるいは並列度の範囲で)こなす必要があります。クロスバーは同じ演算をアレイの大きさに比例した素子で空間的に並べ、定数時間(1回の電圧印加)で解く。アレイを大きくしても演算の「ステップ数」は増えません。
エネルギー優位の本質はデータの局所性にあります。
| 観点 | フォンノイマン型 | アナログインメモリ |
|---|---|---|
| 重みの所在 | メモリに格納し演算器へ転送 | 演算する素子に常駐(動かさない) |
| MACの実行 | ALUで逐次/並列に数値計算 | オームの法則と電流加算で物理的に並列実行 |
| 支配的コスト | 重みのデータ移動(メモリの壁) | 周辺回路、とくにADC変換 |
| 得意領域 | 汎用・高精度 | 誤差耐性のあるAI推論 |
データ移動が消えることで、エネルギーは「演算そのもの」と「アナログ・デジタル変換」へ集約されます。原理的には1演算あたりのエネルギーがフォンノイマン型より1〜2桁小さくでき、これが AI 推論アクセラレータとしてアナログインメモリが注目される理由です。
アナログ演算の代償(その1)── ADCオーバーヘッド
ここから現実の壁です。クロスバーの出力はアナログ電流ですが、後段の処理(次層への入力、活性化関数、デジタル蓄積)にはデジタル値が要ります。各列の電流を数値に戻す**ADC(アナログ・デジタル変換器)**が不可欠で、これがアナログインメモリの最大のアキレス腱になります。
皮肉なことに、コア演算(クロスバー)はほぼ無償で済むのに、周辺のADCがチップの面積と電力の大半を占めることが珍しくありません。高分解能で高速なADCは指数的に高コスト(おおむね1ビット増で電力2倍)で、列ごとに置くと数が膨大になります。そこで複数列で1つのADCを時分割共有しますが、今度は変換のスループットが律速になる ── このADCオーバーヘッドがアナログ演算の実利を削る最大要因です。ADC方式ごとの速度・分解能・電力のトレードオフは /semiconductor/adc-dac-architectures/ に詳しい。
設計はこのジレンマの綱引きになります。アレイを大きくすれば1回の変換で多くのMACを償却できて効率が上がる一方、列電流のダイナミックレンジが広がってADCに高い分解能が要求され、変換器が重くなる。アレイサイズ・ADC分解能・スループットの三者は互いに引っ張り合い、ここを最適化することがアクセラレータ設計の核心になります。
アナログ演算の代償(その2)── 精度の物理
ADCを十分立派にしても、アナログ演算には精度の本質的な限界があります。デジタル演算が「1か0か」のノイズマージンで誤差をゼロに丸めるのに対し、アナログ演算は連続量を扱うため、あらゆる物理的なばらつきが直接そのまま誤差として答えに混入します。
| 誤差源 | 中身 | 演算への影響 |
|---|---|---|
| 素子ばらつき | コンダクタンス値の素子間ばらつき・書き込み誤差 | 重みが目標値からずれる(積の誤差) |
| I-V非線形 | 電圧と電流が完全な比例にならない | オームの法則前提が崩れ乗算が歪む |
| 配線抵抗(IRドロップ) | 行線・列線自体の抵抗で電圧が降下 | アレイ周縁と中央で実効電圧が変わる |
| 雑音・ドリフト | 熱雑音・読み出しノイズ・抵抗の時間変化 | 出力電流が揺らぎ・経時で変動する |
これらが積み重なり、クロスバーの実効的な演算精度はおおむね数ビット相当に制限されます。素子の状態数(多値レベル)を増やしても、ばらつきがレベル間隔を食い潰してしまう。配線抵抗によるIRドロップはアレイを大きくするほど深刻になり、これも実用アレイサイズの上限を作ります。素子レベルのノイズや状態の確率的ばらつきの物理は /semiconductor/device-noise-physics/ に通じます。
数ビットの精度しか出ないということは、科学技術計算や金融のような厳密性が要る用途にはそのままでは使えないということです。アナログインメモリが AI 推論を主戦場にするのは偶然ではありません。ニューラルネットは本質的に冗長で誤差に頑健(低ビット量子化に耐える)なため、数ビットのアナログ演算でも認識精度をほとんど落とさずに済む ── アルゴリズム側の誤差耐性とハードウェアの不完全さが、たまたま噛み合う領域だからです。逆に学習(重み更新)は微小な精度を要求するため、推論より格段に難しくなります。
素子に何を使うか ── メモリ技術との対応
クロスバーの交点に置く素子には複数の候補があり、それぞれ「重みをどう物理量に書くか」が異なります。
| 素子 | 重みの担い手 | 強み | 弱み |
|---|---|---|---|
| ReRAM | 酸素空孔フィラメントによる抵抗値 | 微細・低電圧・積層しやすい | 書き込みが確率的でばらつき大 |
| PCM(相変化) | 結晶/アモルファス比による抵抗値 | 多値化しやすく状態が明確 | 書き込み電流が大・抵抗ドリフト |
| フラッシュ | 浮遊ゲートの蓄積電荷による閾値 | 成熟・量産実績・多値が容易 | 高電圧書き込み・速度が遅い |
| SRAM | ビットセルに保持した値 | 高速・無限耐久・CMOS互換 | 面積が大きく揮発性 |
不揮発メモリ(ReRAM・PCM・フラッシュ)は電源を切っても重みが残り待機電力ゼロで微細・高密度ですが、書き込みのばらつきや耐久が課題です。フラッシュの浮遊ゲートに閾値として重みを書く方式は /semiconductor/nand-flash-cell/ の多値(MLC)と同じ物理を演算に転用したものと見なせます。一方 SRAM ベースは精度と速度に優れますが面積が大きく揮発性で、トランジスタの基本動作は /semiconductor/mosfet-operation/ の通りです。
「なぜインメモリ演算は速い/省エネか」にはフォンノイマンのデータ移動(メモリの壁)を回避し、オームの法則の乗算と電流加算の総和でMACを1ステップで物理的に解くからと答えるのが正確。「最大の課題は」には列電流をデジタル化するADCのオーバーヘッド(面積・電力の過半)と、素子ばらつき・非線形・IRドロップによる数ビット止まりの精度を挙げる。「なぜAI推論向けか」にはニューラルネットが誤差に頑健で低ビット演算に耐えるからと即答できると良いです。
まとめ
- アナログインメモリ演算は、メモリ素子のコンダクタンスに重みを書き、入力電圧を印加して**オームの法則(乗算)と列での電流加算(キルヒホフの電流則、総和)**で積和を1ステップ・並列に物理的に解く。
- フォンノイマン型を律速する重みのデータ移動(メモリの壁)を、データの置き場所で計算することで根本回避し、原理的に1〜2桁の省エネを狙える ── これが AI アクセラレータとして注目される理由。
- 代償は周辺回路で、とくに列電流をデジタル化するADCが面積・電力の過半を占める。アレイサイズ・ADC分解能・スループットの綱引きが設計の核心になる。
- もう一つの代償は精度で、素子ばらつき・I-V非線形・IRドロップ・ノイズにより実効精度は数ビット止まり。だから誤差に頑健な AI 推論が主用途で、厳密計算や学習には向きにくい。
- 素子は ReRAM・PCM・フラッシュ・SRAM が候補で、記録物理は /semiconductor/emerging-nvm-physics/、ADC の方式系統は /semiconductor/adc-dac-architectures/、ばらつき・ノイズの物理は /semiconductor/device-noise-physics/ も参照。
半導体 Article
インメモリコンピューティングとアナログ演算を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
インメモリコンピューティング
比較で見る軸
難易度: advanced / カテゴリ: 半導体 / タグ数: 6
導入後に効く点
フォンノイマン型は重みをメモリから演算器へ運ぶデータ移動がボトルネック(メモリの壁)だが、インメモリ演算は重みを動かさずデータが格納地で計算されるため、移動エネルギーと帯域の制約を根本から回避できる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 半導体
- タグ数
- 6
判断チェックリスト
- 自社の用途が「インメモリコンピューティング / アナログ演算」に近いか確認する。
- 強みである「アナログ・インメモリ演算はメモリ素子の抵抗(コンダクタンス)に重みを書き込み、入力電圧を印加してオームの法則で電流を作り、列で電流を足し合わせる(キルヒホッフの電流則)ことで積和(MAC)を1ステップで物理的に解く。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。