スパコン

スパコンは多数のノード(cpuとメモリ)をネットワークで繋げたもの
典型的なノードは数万ノード(京は8万)
※88128CPU(705024コア) 70万コアってことは1コア9スレッド?
パイプライン方式で処理を高速化
チューニングは作用反作用無視、条件分岐削除、相互作用粒子ソード、除算削除
OSはlinuxが多い
開発言語はFortran, C/C++

中国の「神威太湖之光」。1秒間に9.3京回の計算
中国はCPUも内製

現在の主な用途は、軍事、量子力学、天気予報、気象研究、計算化学、物理シミュレーションなどか。

GPU

ビデオカード、グラフィックカード、グラフィックボードと呼び方は多数
ビデオチップをGPUと呼ぶ。ビデオメモリもある

macだと、グラフィックスに、Intel Iris Plus Graphics 640 1536 MB と記載がある
これはCPU一体型のGPUなので、独立型より性能は劣る

GPU
グラフィック演算処理、並列演算処理(スーパースカラ)が得意
CPUが3〜5の並列処理のところ、GPUは512も
コア数もCPUよりGPUの方が多い、 eg.5120
消費電力が高い
500Mhz~650Mhzあれば綺麗な画像で楽しめる

VRAM(ビデオメモリ)
 映像データを一時的に保存
 RAMと同様、容量、速度が重要。128〜258MB, 1Ghz~1.8Ghzあれば十分
メモリバス幅は128〜256bit

ビデオカードスロットとバスには 1) AGP(転送速度が2.128GB/S)と 2) PCIエクスプレスX16(主流、4GB/S) の2タイプがある

ビデオカードには、DVI-I端子(デジタル・アナログ)、B-sub15ピンのVGA端子(アナログ)、DVI-D(デジタル)などの端子がある
TV出力端子(S端子)はテレビに表示

グラフィックボードのチップメーカーはNVIDIA、AMDなど
NVIDIAはよく聞きますね。あれ、AMDって、CPUだけでなく、GPUもやってるの?

MSI GeForce GTX 1660Ti Gaming X
MSI GeForce GTX 1060 GAMING X 6G
Nvidia GeForce RTX 2080 8GB GDDR6 – Founders Edition
 L VRAMの容量が大きいほど描画が綺麗になりやすい
 L GeForceはゲームを目的とすると、動作保証が取れているということ

Memory

Memoryとは?
 SSD・HDDから取り出したデータを処理する
e.g. 8 GB 2133 MHz LPDDR
 ん?CPUにもL1, L2, L3(SRAM)があるんだから、必要か?
DRAMもSRAMも電荷が必要
 
メモリチップ
 メモリー規格、容量、性能が詰まっている
 CL、動作クロック(周波数)の性能はメモリーチップによって決まる

接続端子
 m/bと接続。デスクトップは240pin、ノートは200pinが主流

SPD(Serial Presence Detect)
メモリーチップの種類、容量、動作周波数などの情報を記憶
BIOSのようなもの

スタブ抵抗
 データを高速でやり取りする際に発生する信号のノイズを制御

メモリチップ
 メモリセルにトランジスタとキャパシタが入っており、0の時に電荷がなく、1の時に電荷がある。
 記憶をコンデンサの電荷として蓄える。一定時間後、自然放電される

読み方
DDR2 Samsung 2GB 2Rx8 PC2-6400U-666-12-E3 2GB
DDR3L 1600 (PC3L-12800) 8GB CL11 1.35V Non-ECC SO-DIMM 204pin KVR16LS11/8
DDR4 Micron 64GB MTA36ASF2G72PZ-2G1A2IK(PC4-2133P ECC)

DDR(Double Data Rate)~はメモリチップ、クロック信号の立ち上がりと立ち下がりを両方利用
DDR X はDDRの世代 第四世代はDDR4 実働周波数にそれぞれ読み込む量をかけた数
PCはメモリモジュール
DDR2のメモリチップ、PC2のメモリモジュールで、6400は転送速度(1秒6400MB転送可) この数字が大きければ転送速度が早いという意味
2GBはメモリ容量、当然大きい方が良い
 CLはデータ読み書き開始までの待ち時間
 ECCはエラーの自動訂正機能

ぱっと見、DDRが高い方が、動作クロック、メモリモジュール、容量、転送速度などの性能も良さそうですね。

デュアルチャンネル、トリプルチャンネルはメモリをマルチで使用すること

メモリメーカー
I-O DATA, Buffalo, samsung, umax, cfd, a-dataなど

ubuntuでのメモリ確認方法
vagrant@trusty:~/other$ free -m
total used free shared buffers cached
Mem: 489 414 75 0 52 262
-/+ buffers/cache: 99 389
Swap: 0 0 0

HDDとSSDの違いは?

EBSは、SSD、HDDどちらもありますが、さて、タコができているかもしれませんが違いは。

HDD
HDDはHard Disk Driveの略で、電磁的に書き込み・読み込みする
プラッタと呼ばれる磁性体に塗られた円盤が入っており、ヘッドで書き込み、読み込みする
プラッタの回転数が多いほど、短時間で大量データ処理が可能
回転数はrpmという単位で表示される、1分間のプラッタ回転数(1分間に約7200~15000回転)
磁気ヘッド先端の電磁石がディスク表面のブロックの磁気方向を変えてデータを書き込む。書き込まれたデータは磁気リーダで読みこむ。読み込みはレコードの仕組みに似ている
電波ノイズを軽減する数値計算用アルゴリズムを改良している
保存できるデータ量が大きく、容量単価が安価だが、衝撃に弱く消費電力が大きい
機械駆動式のため、徐々に壊れる
トラックまでヘッドを移動させる「シーク時間」とセクターが来るまで待つ「回転待ち」時間を要する
SEAGATE, Toshiba, Western Digital
レーザーを使ってディスク表面にピンポイントで熱を与えてデータを書き込むheat assisted magnetic recording、HAMRが開発中。Bit Pattern Mediaが実用化すれば20TビットのHDDなども

SSD
Solid State Driveで半導体素子メモリを使ったドライブ
メモリーチップ内蔵。メモリチップはデータを記憶するICチップ
SSDの構造は、コントローラとNAND型フラッシュメモリ
衝撃に強く、発熱、消費電力が少ない、読み書きの速度が早く作動音がない。
HDDより小さく、軽い。ただし容量が少なく、容量単価の価格が高い
フラッシュメモリのセルも徐々に劣化する。1千~1万回で劣化
CFD、Samsung, Silicon-Power, Transcend
真性半導体、P型半導体、N型半導体に変化し、シリコンウエハーの表面に電子回路パターンを多層形成する
電子回路パターンはNAND型:否定論理積、NOR型:否定論理和
セル内部のフローティングゲートで電子を貯めているため、電源を切っても記憶できる
セルは、絶縁膜、フローティングゲート、トンネル酸化膜、シリコン基盤
SSDコントローラがNAND FLASHを制御
ウェアレベリング処理で、セルの負担を軽減 エラー補正機能やブロックの消去回数なども管理している
SSDは数百メガバイト/秒の転送速度で、HDDの50〜150MB/Sを大きく上回る NANDフラッシュメモリを平行動作

デュアルストレージ
SSDとHDDを両方搭載
SSDにはOSを入れ、HDDにはソフトやデータ保存を行う
e.g. M.2 SSD 256GB Serial ATAIII M.2規格+1TB Serial ATAII 5400rpm

ヨドバシカメラなどをいくと、windowsのノートはデュアルストレージがかなり売られていた。SSD256GB + HDD1T or 2TBが多い。
OSXはSSDだけども、デュアルになってくのだろうか。。

EC2のCPUはインテル? AMD?

EC2ってiシリーズ使ってるの?
AMDのEPYCを使っているらしい。x86-64マイクロプロセッサ
EPYCのシリーズをみるとL1, L2, L3をみると、L3が拡大化してるな。
—-
Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。開発者がウェブスケールのクラウドコンピューティングを簡単に利用できるように設計されています。 AWS は、AMD とのパートナーシップを通じて、最も広くかつ深いインスタンスポートフォリオを強化する追加的な EC2 インスタンスを提供し、ワークロード要件に対するコストとパフォーマンス両方の最適化を実現します。
—-
AMD EPYC プロセッサ
Amazon EC2 インスタンスには現在、全コアターボのクロック速度が 2.5 GHz の AMD EPYC 7000 シリーズプロセッサが搭載されています。AMD ベースのインスタンスは、お客様に新たな選択肢を提供します。コンピューティングリソースが十分に活用されていない多くのワークロードに、よりぴったりなものが見つかる可能性があります。コンピューティングリソースと使用率の間のバランスを最適化することにより、これらのインスタンスでは類似のインスタンスと比べコストを 10% 節約できます。
——
https://aws.amazon.com/jp/ec2/amd/

あれ、GCPもAzureもEPYC? これまじ?
Intelじゃなくて、CPU=AMDなんだ。。

CPUの構造

パッケージ:基盤
ダイ:集積回路、シリコンウェーハ(高純度シリコンから切り出された薄い板、ケイ素(Si))

ダイはバスインターフェイス、キャッシュメモリー、制御装置、演算装置からなる。
バスインターフェイス: 内部バス(CPU内部の回路)、外部バス(CPUとメモリ)
 L アドレスバス、データバス、コントロールバスがある
キャッシュメモリ: バスメモリーから受け取ったデータを一時的に保存
 L 一次キャッシュ、二次キャッシュ、三次キャッシュ
  キャッシュメモリーがあれば、RAMにアクセスしなくて良いため、高速になる。
制御装置: フェッチユニット、デコーダー、レジスタ
 L フェッチユニットは読み込み
 L デコーダーはdecode
演算装置:整数演算ユニット、浮動小数点数演算ユニット、レジスタ
 L 演算ユニットが複数ある場合、マルチコアとなる
 L スレッドはOS(カーネル)が認識するコア数

ピンはCPUとマザーボードとの接続。LGA1151の1151はピンの数
最近のcpuでは発熱量に応じて、自動で電圧を上げて処理速度を高める設計
gpuがcpu内にあるものもある

あら、CPUの中に更にメモリがあるんですね。
Intel Core i7-4785T 2.2GHz Quad-Core SR1QU CPU Processor
Intel Core i5-4570T 2.9GHz SR1CA 5GT/s LGA 1150
Intel Core i7-6900K 20M Broadwell-E 8-Core 3.2 GHz LGA 2011-v3 140W
Threadripper 1950X YD195XA8AEWOF(AMD) 16コア、スレッド32

これはピンが4587個あるってこと?いや、違うな、型番か?LGAの後がピンの数ですね。
こうやってみると、i7-6900Kの8core 3.2GHzの性能が一番良さそうですね。

2.2GHzはクロック周波数。CPUはクロック信号に合わせて処理されるので、クロック周波数が大きい方が、高速になる。

ターミナルから確認できる
mac:ubuntu mac$ system_profiler SPHardwareDataType
Hardware:

Hardware Overview:

Model Name: MacBook Pro
Model Identifier: MacBookPro14,1
Processor Name: Intel Core i5
Processor Speed: 2.3 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 4 MB
Memory: 8 GB
Boot ROM Version: MBP141.0169.B00
SMC Version (system): 2.43f6
Serial Number (system): **********
Hardware UUID: A7D32EAF-45A2-5CDD-AD44-**********

Number of Processorsが、1CPUで、total number of cores:2なので2コアという意味
AWSのvCPUはスレッドの方。

コア数とスレッド数の確認。logicalcpuの4がカーネルから認識されるコア数ということになる
mac:ubuntu mac$ sysctl -n hw.logicalcpu_max
4
mac:ubuntu mac$ sysctl -n hw.physicalcpu_max
2

カーネルは認識しているコア数(演算ユニット)に割り振って処理をする
CPUメーカーはインテル(シェア80%)、AMD(ゲーム用、キャッシュメモリが多い)

intelのcpu core architectの採用情報を見てみましょう
MS or PhD in CS, EECS, ECE, or related computing discipline
Minimum 10 years of experience with the following skillsets:
o High performance CPU microarchitecture and research
o Substantial experience with CPU simulators, tracing technologies, and performance analysis.
o Quick and efficient software development and debug skills
—-
In this position, you will be involving in the training, design and development of next generation SOC/CPU for wide range of Intel products. Your responsibilities will include some of the following but not limited to:
– Assist design unit owner in Register Transfer Level RTL model functional validation. Use CAD tool extensively to simulate logic behavior and circuit performance and direction of physical design for next generation, deep sub-micron embedded circuit solutions. Verify the circuit behavior against the original simulation model and first silicon.
– Define VLSI Structural Design methodology and developing design flows. Implement structural physical designs, such as synthesis, floor planning, power-grid and clock tree designs, timing budgeting and closure, place and route, RC-extraction and integration. Verify structural physical designs, such as functional equivalency, timing/performance, noise, layout design rules, reliability and power.
– Develop Analog IP on next generation deep submicron process for the Intel’s SOC, perform tasks related to Very-large-scale integration VLSI complementary metal-oxide-semiconductor CMOS IC design, Solid state physics and physical layout. Such tasks may include: Circuit design of high speed clocking related circuits [phase-locked loop PLL, delay-locked loop DLL, bandgap] or high voltage input/output IO [double data rate DDR/LPDDR, General-purpose input/output GPIO, OPIO].
– Responsible for Integration of Third party IPs — Synthesis, functional and/or timing convergence, and pre and post-si debug of IPs developed by various external vendors as well as within the company. Handling of signals crossing power planes and clock domains, industry standard protocols including hardware and software details dealing with Memory LPDDR, storage eMMC, SATA, UFS, peripherals PCIe, USB, and MIPI interfaces in SOC devices. System integration dealing with Si/ Platform/ FW/ MW/ drivers/ OS/ Apps on Android Windows-based tablets and phones.

Intel側はダイの設計をどうするか考えているわけだ。
すると、OSのカーネル側としても、クライアント側のcore数、スレッド数、GHzだけでなく、cpu内のキャッシュメモリ・GPUの設計なども意識して書いていくわけね。

CPU

今更って感じではあるが、やはり、知っておかないといけいないようだ。

CPUの主な役割
– 単純な計算(算術計算、論理演算)、単純な判断、データのコピー、機器の制御

CPUの流れ
システムバス、メモリバス、外部バスなどで接続されている

RAMは作業用のメインメモリ、電源を消すと消える
パーソナルPCは4〜16GB、業務用だと32GB程度
SPは1〜6GB程度
mac bookのメモリとはRAMを表している。surface proでも、4GB、8GB、16GBとある
メモリ容量が多い方が高速になる。足りない分はHDD, SDDなどで補う。メモリは記憶用のICチップが付いている。DDR4が主流。LPDDRはスマホ向けメモリ。メモリスロットに取り付ける。データ転送は一般的には一度に64ビット幅の送信が可能。

EC2の場合だとメモリがRAM 0.5~32, 3904もある
AWSだと、CPUやramはそれぞれのリージョンのデータセンターにあるって理解で良いのかな?
リージョン→東京:4 ap-northeast-1a/b/c/d
Transit Center→Equinix TY2、アット東京中央データセンター
エッジロケーション:東京8
噂では、千葉市印西、江東区枝川、横浜市磯子区あたりにDCがあるとされていますね。
クラウドって言ってるけど、AWS、Azure、GCPも実態は分散オンプレミスって感じか。。

メモリバスはメモリモジュールと他の部品をつなぐモジュール
“バスクロック”で表されていて、メモリが駆動するクロック周波数で変化するデータ転送速度

ん?ってことは、CPUとメモリの接続はマザーボードがやってる?
カーネルは、マザーボードに対してどういうデータの流れで処理してるのかしら??

linuxのkernel

linuxのkernelファイル群
bpf, cgroup, configs, debug, dma, events, gcov, irq, livepatch, locking, power, printk, rcu, sched, time, trace
当然全てC言語で書かれていますね。
https://github.com/torvalds/linux/tree/master/kernel

ubuntuだとbootディレクトリの中に入っている
config-*-generic, initrd.img-*-generic, System.map-*-generic, vmlinuz-*-generic, grub

主要機能だとデバイスドライバ、スケジューラ、メモリ管理、ファイルシステム、ネットワークプロトコルスタック、システムコールあたりか。

モノシリックカーネルとマイクロカーネル

モノシリックカーネル
全OSは一つのカーネル内に存在し、カーネルスレッド上で実行される
システム構成要素間の依存関係が複雑
デバイスドライバ、スケジューラ、メモリ管理、ファイルシステム、ネットワークプロトコルスタックなどもカーネル空間におかける
Linux, FreeBSDはモノシリック
ソフトウェアが少なく高速、コードも少ない
システムコールの延長で動作する
コーディングは難しい 標準Cライブラリが使えず、GNUデバッガが必要

モノシリックカーネル
伝統的なカーネルからサーバ群に機能を移転するOS設計方針
サーバ群を可能な限りユーザ空間で動作させる
ハードウェアの抽象化とシステムコールの最小
IPC(プロセス間通信)、基本スケジューラ、基本メモリハンドラ、基本I/Oプリミティブなどはカーネル空間におかける
スケジューラ本体、メモリ管理、ファイルシステム、ネットワークスタックの大部分はユーザ空間で動作
macOS, QNX, GNU Hurdなど
マイクロカーネルは通常、アドレス空間定義部、プロセス間通信(IPC)、プロセス管理などを扱う
ハードウェア処理などの昨日はマイクロカーネルで扱わない
メモリ、ソフトウェアを多く使用し、プロセス管理が複雑
ロボット、医療用システムで使われる

ハイブリッドカーネル
macOS
通信プロトコルスタックやファイルシステムをカーネル空間で動作、一部のカーネルコードはユーザ空間で提供
サードパーティーのテクノロジーを素早く統合できる

unixはユーティリティプログラム群とカーネル
linuxカーネルは1300万行
macOSはDarwinをベースとしており、XNUと呼ばれるハイブリッドカーネルを採用
Windowsもクライアント・サーバ型階層型サブシステムモデルを採用しており、ハイブリッドカーネルと見なされている

なるほど、Linux, Windows, MacOSだと、カーネルの設計・仕組みが異なるってことか。

Kernel

kernelって、どの本にも出てくるけど、具体的に何やってんの?
→ OSの中核。アプリケーションとハードウェアのデータ処理の架け橋
ハードウェアとソフトウェアコンポーネントのやり取りを管理する
プロセスの抽象化、プロセス間通信、システムコールなどを提供する
L モノシリックカーネルは全てを一つの仮装アドレス空間に格納されたコードで実行して性能を向上
L マイクロカーネルはサービスの大部分をユーザー空間で実行し、保守性とモジュール性を向上

あれ、これ、CPU、memory, deviceと繋がってるってことは、CPU、memory、deviceのアーキテクチャを理解してないと、kernelは書けないってこと? ん?
CPU、memory、deviceも日進月歩で進化してるよね。。

– カーネルの機能
コンピュータのリソースを管理し、他のプログラムがそれらのリソースを使って動作できるようにする
 CPU(プロセッサ): 多数のプロググラムからプロセッサ群を選択する
 memory: メモリにはプログラムとデータ両方が格納される
 input, output: keyborad, hdd, usbなど
リソース管理の重要な観点は、実行領域とその領域へのアクセス調停
プロセス同士の同期も提供
マルチタスクシステム(Mac OS, Windows採用)はプロセスを高速に切り替える。プロセスには優先度が設定される。プロセス間通信(IPC)は、パイプ、共有メモリ、メッセージ、RPC、ソフトウェア割り込みなどがある。
協調型マルチタスクは、割り込まれずに実行される。

メモリ管理
ページング方式、セグメント方式による仮想アドレッシング
物理アドレスを仮想アドレスに変換している(RAMからHDDなど)

システムコール
カーネルを呼び出す

カーネルの設計
モノシリックカーネル(大部分をカーネル内に含む)とマイクロカーネルで設計に大きな違いがある
多くのカーネルは、中間のハイブリッドカーネルになっている