メモリの規格を表す"PCx-yyyy"の"PC"って何の略なの？ パソコンじゃないよね？→ パソコンかもしれない

Qiita Advent Calendar 2021の ["ググって解決しづらかったこと"カレンダー](https://qiita.com/advent-calendar/2021/gseach) の13日目の記事として投稿。

# はじめに

まずは許しを乞いたい。この記事はプログラミングに関するものではない。
しかし、この「ググって解決しづらかったこと」アドベントカレンダーのお題には沿っていると思う。

一時期、情シスっぽいことしてたので物理マシンを触ることがけっこうありました。ハードウェアにはさっぱり疎いマンだったので、メモリに世代があることすら知らなかったよ……。

それで、メモリのことを調べたら、どうやら、こういう感じで表記するのが一般的みたいですね: `DDR4-3200 PC4-25600 16GB`
これは、容量が16GBで、DDR4のチップの動作周波数が3,200MHzで、PC4のモジュールの転送速度が25,600Mbpsのメモリを意味します。[^1]

[^1]: ここが気になった人への注釈: いや俺も解説できるほど詳しくはないんだけど、とりま、"DDRx-"の後ろの数値がチップの動作周波数をMHzで表したもので、"PCx-"の後ろの数値がモジュールの転送速度をMbpsで表したものらしい。チップの動作1回分が1バイトになるようなので、"PCx-"の後ろの数値は3200×8=25600のようです。いずれにせよ、数値が大きいほど強い。

この中の"DDR"が何の略なのかはググってすぐ分かったけど、"PC"が何の略なのかをググっても、パソコンの"PC"が引っかかりすぎて、なかなかほしい情報が得られなかった、という話をします。

この記事の結論を述べると、「もしかするとこの"PC"は、マジでパソコン（**P**ersonal **C**omputer）が由来かもしれないが、公式のソースにも記載がないので真相は闇の中」です。

以下、メモリに関する基礎知識を踏まえた上で、どうやって調べたかを記します。


# メモリに関する基礎知識

2021年現在、一般的に用いられているメモリは**SDRAM**（Synchronous Dynamic Random Access Memory）と呼ばれます。外部クロックで同期して動作する（**S**ynchronous）、揮発性の（**D**ynamic）、**RAM**ってことらしい。

メモリというのはこんな感じの見た目をしています。

![MKJ_barukumemori-_TP_V.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150194/db7968e9-bdeb-37f0-bf74-a8233a0b3958.jpeg)

画像は、フリー素材サイトの「ぱくたそ」さんからお借りしました。

マザーボードに指す部分をピンと呼び、メモリのICの部分をチップと呼び、メモリの基盤をモジュールと呼びます。つまりこうです:

![MKJ_barukumemori-_TP_V_kaisetsu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150194/18fbebc3-b844-7e03-7479-3984fb070478.jpeg)

特に、上の写真のような、デスクトップパソコンで使われるSDRAMを**DIMM**（Dual Inline Memory Modul）と呼びます。[^2]

[^2]: ノートパソコンで使われる、形状としては小さいSDRAMはSO-DIMM（Small Outline DIMM）と呼ぶ。

<!-- 回答にDIMMという言葉が使われるのでこの解説は必要 -->

それで、SDRAMの**チップ**の規格として、"**DDR**（Dual Data Rate）"と呼ばれる略称が用いられ、SDRAMの**モジュール**の規格として、"**PC**"と呼ばれる略称が用いられます。

どちらも、世代ごとにナンバリングされていて、DDRxとPCxのxには同じ数字が入ります。[^3]
[^3]: DDRとPCのナンバリングが一致するのはほぼ間違いないと思うのですが、確定的なソースは得ていません。すみません。

こんな感じ:

|世代  |DDR表記  |PC表記  |いつごろから？
|---|---|---|---|
|1  |DDR  |PC  | とてもむかしから
|2  |DDR2  |PC2  | Windows XPのころから
|3  |DDR3  |PC3  | Windows 7のころから
|4  |DDR4  |PC4  | Windows 10のころから。2021年現在、最も主流。
|5  |DDR5  |PC5  | 2021年時点で最新規格

モジュールの世代が違うとメモリの形状が変わるため、これらの世代のメモリに互換性はありません。具体的な例を挙げて述べると、**PC4（DDR4）のメモリが挿せるマザーボードに、PC3（DDR3）のメモリは挿せない** わけです。情シスやるまで知らんかった。


# さて、本題。モジュール規格の"PC"って何の略？

この手の略語が何なのか分かんないと、どうも落ち着かない性分なんです。

## どうにか手がかりを得た

チップのDDRはDual Data Rateの略だとググってすぐ分かったのですが、モジュールのPCが何の略なのかはググるのが難しかった。先に書いた通り、"メモリ SDRAM PC 由来"とかで検索しても、**パソコンの略である"PC"が誤ヒットしてめちゃくちゃググりづらい**。

そして、そんなググりづらさのなか、メモリについて解説している日本語記事をざざっと読んで行っても、この"PC"が何の略であるかを書いているサイトが一向に見つからない。

しゃあない、日本語以外も探すか、と本腰を入れて `DIMM pc stand for` とか `SDRAM pc mean -"personal computer"` とかで検索をかけてざらざら見ていくうちに、ハードウェア関係の海外Q&Aサイトの以下のスレッドを見つけました。

https://forums.tomshardware.com/threads/what-does-pc-stands-for-in-the-memory-speed.451182/

スレ主の質問:

> What does PC means in the memory field such as if we say PC133 ..
> PC133とかいうときのPCってメモリの分野ではどういう意味なの？

このスレッドへの返信のうち、ruckb氏による、Aug 9, 2014の回答が最もそれっぽく感じられました:

> Hello,
the naming of the DIMMs is somehow defined by JEDEC (as the spec is also defined from this group).
I have to admit, even participating in the specificaiton I don't remember what the PC stands for :-( ...
But my guess it is really Personal Computer as name for a class of PC's which includes Desktop, Laptop, Server and Workstations that can use this type of memory.
There are other modules specifiec that area e. g. called EP2 (32bit DDR2 SO-DIMMs), or EP3 (72bit DDR3 SO-DIMM). 
In this case the EP is not used consistently accross the memory generations,
but it was ment to stand for "Embedded Product". These just have different requriements as PC's

>On the JEDEC website one can download the accurate naming convention scheme (free registration required).:
http://www.jedec.org/standards-documents/docs/pr-n09-nm1
This explains the full DDR3 (PC3 ..) naming convention that can be on a DIMM Label:
ggggg eRxff PC3v-wwwwwm-aa-bb-ccd

>But if you take a look this document is already from 2009 .. .So either it did not requrie and update or JEDEC does this kind of naming specifications not really with a high priority ;-)


> 訳)
> こんにちは。
>DIMMの命名は、何らかの形でJEDECによって定義されています（仕様もこのグループが定義しているため）。私はその策定に参加していましたが、PCが何を意味していたのか覚えてないです...。
でも、たぶん、「Personal Computer」の略じゃないかと思います。デスクトップ・ノートPC・サーバ・ワークステーションあたりのこの手のメモリが使えるパーソナルコンピュータという意味で。
メモリのモジュールの規格については、"EP"という別のものもあります。これはたとえば、
EP2（32bit DDR2 SO-DIMM）とか、EP3（72bit DDR3 SO-DIMM）など。
"EP"はメモリの世代全体で一貫しては使用されていませんが、「Embedded Product（組み込み製品）」の略であると考えられていました。これらは"PC"とは異なる要件を持っています

>JEDEC Webサイトで、正確な命名規則についての書式をダウンロードできます（無料登録が必要です）:
http://www.jedec.org/standards-documents/docs/pr-n09-nm1
これは、DIMMラベルに付けることができる完全なDDR3（PC3）の命名規則を説明しています。
"ggggg eRxff PC3v-wwwwwm-aa-bb-ccd" という形式です。

>しかし、このドキュメントは2009年のものです（訳注: このスレッドが立ったのが2002年で、この返信が2014年）。そのため、これは必要とされず更新されなかったか、JEDECにとってこの命名仕様はさして優先度が高くなかったのかも知れません。

なるほど、確かにJEDECについてググってみると、メモリなんかの半導体部品の規格の標準化を行っている団体らしいと分かりました。特に、JEDEC Committeeの45番、[JC-45](https://www.jedec.org/committees/jc-45) がDRAMについて、もろもろと取り決めをしているようです。

**そこまで分かっちまえばこっちのもんよ！** あとは深堀りしていくだけです。ありがとなあ！ruckb！！

## JEDECのドキュメントを読んでいこう

まず、上の回答で示されているリンク先の "Preliminary publication of JEDEC Semiconductor Memory Ballot" という資料を確かめてみました（なお、これ以降のJEDECのサイトへのリンクは、JEDECにログインしていない場合は閲覧できないかも知れません。ruckb氏の言うとおり、無料でアカウントを作ればログインできます）。

確かにこれは、2009年の8月に提出された、DDR3のDIMMの命名規則に関する資料のようです。命名規則の一般的なルールとして、以下のように説明されていますが、**PC3の部分だけ華麗にスルーされています**。

一応その「一般的な命名ルール」を上の資料から引用しますが、メモリにさほど興味がなければ、読み飛ばし可なので、折り畳みにしておきます:

<details>
`ggggg eRxff PC3v-wwwwwm-aa-bb-ccd`
- ggggg = Module total capacity, in bytes
- eR = Number of ranks of memory installed
- xff = Device organization (bit width) of DDR3 SDRAMs used on this assembly
- v = SDRAM and support component supply voltage (VDD)
- wwwww = Module bandwidth in MB/s
- m = Module Type
- aa = DDR3 SDRAM CAS Latency in clocks at maximum operating frequency
- bb = JEDEC SPD Revision Encoding and Additions level used on this DIMM
- cc = Reference design file used for this design (if applicable)
- d = Revision number of the reference design used
同資料内で挙げられている命名例として、"2GB 2Rx4 PC3-10600R-7-10-D2" であれば、「"2GB"で、"2ランクの[^4]、"x4"の[^4]、SDRAMを使用する1333MbpsのRタイプ[^4]の、CASのレイテンシが7
[^4]の、JEDECがデザインしたリファレンス1.0のリビジョン2[^4] の、DDR3のDIMM」ということみたいです。ちゃんと資料みてるんだよという気持ちで書きましたが、「DDR3の2GBのメモリである」くらいしか私も理解できていません。
[^4]: 知らん。
</details>

<!-- A is a 2 GB DDR3 RDIMM using 2 ranks of x4 SDRAMs operational to DDR3-1333 performance 
with CAS Latency = 7 using JEDEC DDR3 SPD revision 1.0, raw card reference design file D 
revision 2 used for the assembl -->

メモリについて詳しくなれましたが **結局"PC"がなんなのかは書かれてねえ！**

この資料はDDR3に関する10年も前のものだからな、2021年現在主流のDDR4の命名規則に関する資料にあたれば有益な情報が得られるかも知れない。あるいは、DDR2, DDRまでさかのぼれば"PC"の由来が記載されているかも知れない。

**だめでした**。

[JEDEC Standard No. 21C](https://www.jedec.org/category/technology-focus-area/memory-configurations-jesd21-c) からメモリに関するスペックをまとめた大pdfが購入できます。これは無料では閲覧できなかった。しかし、幸い、各DDRxに関する名付けの章については、小分けになったpdfファイルをダウンロードすることができるみたいでした。

- [4.19.4 DDR4 DIMM Label](https://www.jedec.org/standards-documents/docs/dimm-label4194) からダウンロードできるpdfファイルを確認
  - やはり"PC4"に関する説明は特にない。
- [4.19.2 DDR DIMM2 Product Label](https://www.jedec.org/system/files/docs/4_19_02R28.pdf)
  - やはり"PC2"に関する説明はない。
- [4.19.1 DDR DIMM Product Label](https://www.jedec.org/system/files/docs/4_19_01R28.pdf)
  - やはり"PC"に関する説明はない。
- ついでに、上でruckb氏が示しているのはDDR3の名付けに関して提案中の資料のようでしたが、この資料の中に正式なものがありました。[4.19.3 DDR DIMM3 Product Label](https://www.jedec.org/system/files/docs/4_19_03R28.pdf)
  - やはり"PC3"に関する説明が追記されていることはありませんでした。

<!-- いずれもJEDECのサイトで"DIMM Label"とかで検索して見つけた。DDR4とDDRについては個別のページがあった（ex. DDR: https://www.jedec.org/standards-documents/docs/dimm-label419-1）が、DDR2, DDR3の方は個別のページが見つからなかった。 -->

**詰んだ。**


# 結論 / おわりに

結論を述べると、「もしかするとこの"PC"は、マジでパソコン（**P**ersonal **C**omputer）が由来かもしれないが、公式のソースにも記載がないので真相は闇の中」です。

公式が説明してくれないならもう打つ手はない。
ruckb氏の言うようにPersonal Computerの略なのかも知れないし、違うのかも知れない。氏の言葉を信じるならば、氏はこのあたりの策定に関わっているようなので、若干は信頼度が高いと考えられます。組み込みシステム向けのメモリをEPと呼ぶのに対して、DIMMをPCと対比させたのでは、という説はそれなりに納得感があります。[^5]

[^5]: ちなみに、**P**ipeline **C**lockのPCである、という説を推すレスも同スレッド内で見つけました。俺はruckbを信じることにする。

たとえば、32bitのCPUをx86と呼ぶとき"x86"は単にプロセッサの型番に由来するだけでそれ以上の意味を含んでいないことに似て、あんまり深く考えるべきことではないと思うことにしました。

ググりにググって深堀りしても辿りつけない真実があるんだな……と遠い目になりました。