アポロ11号 vs USB-C充電器(2020年)
(forrestheller.com)- 現代のUSB-C壁面充電器内のマイクロコントローラは、1969年の Apollo 11 Guidance Computer と比較できるほどクロック・メモリ・ストレージ容量が大きくなっている
- Anker PowerPort Atom PD 2の CYPD4225 は48MHz ARM Cortex-M0、128KB Flash、8KB RAMを備え、AGCより大半の命令実行基準で約 563倍高速 という計算になる
- ストレージ容量は命令エンコーディングの仮定によって変わるが、CYPD4225はAGCより 1.19〜1.78倍 多くの命令を格納できる水準
- Apollo 11にはAGC 2台、LVDC 1台、AGS 1台の 4台のコンピュータ があり、元の設計を大きく変えないなら単一の充電器チップで全てを置き換えるのは難しい
- 計算性能だけで見ればAnker充電器4台でApollo 11級のコンピューティングに達しそうだが、宇宙環境認証、周辺機器、電圧レベル、LVDCの三重冗長ロジックは別の制約として残る
比較対象と基本仕様
- 比較対象はApollo 11 Guidance Computerと最近のUSB-C充電器3種
- Google Pixel 18W Charger: Weltrend WT6630P, 10MHz, 512バイト RAM, 8KB ストレージ
- Huawei 40W SuperCharge: Richtek RT7205, 22.7MHz, “0.75kB” RAM, 24KB ストレージ
- Anker PowerPort Atom PD 2: Cypress CYPD4225, 48MHz, 8KB RAM, 128KB Flash
- Apollo 11 Guidance Computer: ディスクリート部品ベース、1.024MHz、2,048個の15ビットワード RAM、36,864個の15ビットワードのプログラム保存領域
- AGCはCSMの月飛行の大部分、LEMの月面着陸と離陸、CSMの地球帰還を支えた
- 表の中で最も強力なCPUはAnker PowerPort Atom PD 2の CYPD4225
- AGC比でクロックは約48倍
- プログラム保存領域は約1.8倍
命令実行速度の比較
- AGCは 1.024MHz のマスタークロックを使い、命令1つに最低12クロックサイクルが必要
- 整数演算には 1の補数(one's complement) を使う
- 浮動小数点はない
- 算術演算には単一のアキュムレータレジスタを使う
- CYPD4225には ARM Cortex-M0 CPUが入っている
- AGCとCortex-M0はどちらもキャッシュがなく、メモリアクセス時間が一定で、命令を順番に実行する
- どちらもハードウェア浮動小数点やAVX、SSE、NEONのようなベクトル・行列ハードウェアを持たない
- 類似する命令のサイクル数を比べるとCortex-M0が大きく有利
- 15ビット加算・減算: AGC 24サイクル、Cortex-M0 1サイクル
- 31ビット加算・減算: AGC 36サイクル、Cortex-M0 1サイクル
- 乗算: AGC 36サイクル、Cortex-M0 1サイクル
- 0分岐: AGC 24サイクル、Cortex-M0はCMPなしで1〜4サイクル、CMP込みで2〜5サイクル
- メモリ保存・ロード: AGC 24サイクル、Cortex-M0 2サイクル
- AGCの大半の命令はCortex-M0より約 12倍多いクロックサイクル を使い、Cortex-M0は48MHzで動作する
- 計算式は
12 * 48MHz / 1.024MHz - この基準ではAnker PowerPort Atom PD 2 USB-C充電器のCPUは大半のアプリケーションでAGCより 563倍高速
- 計算式は
- Cortex-M0でAGC比ではっきり遅い命令は 除算
- AGCの除算は72サイクル、約70.3µsかかる
- 同じ時間でCYPD4225は約3,374個の算術命令を実行できる
- 分岐コストが約3サイクルなので、ソフトウェア除算を実装する余地がある
プログラム保存領域と命令エンコーディング
- ApolloのプログラマはGuidance Computerの 保存領域不足 のために仮想マシン/インタプリタを書いた
- 保存領域を節約するために速度を犠牲にするほど空間制約が厳しかった
- AGCは36,864個の15ビットワードを保存し、CYPD4225は128KB Flashを保存領域として持つ
- 単純な情報量基準ではCYPD4225がAGCより 1.90倍 多くの情報を保存できる
- AGC命令は15ビット固定長命令
- Cortex-M0は THUMB2命令セット を実装し、16ビットと32ビット命令を使う
- 16ビット命令には算術、分岐、ロード/ストアなど一般的な処理の大半が含まれる
- 全ての命令を16ビットと単純に仮定すると、CYPD4225は 65,536命令 を保存できる
- AGCの36,864命令に対して最大 1.78倍
- 半分が16ビット、半分が32ビットというより極端な仮定では、合計 43,690命令 を保存できる
- AGC比 1.19倍
- 命令密度の比較は単純ではない
- Cortex-M0には算術結果を保持できる汎用レジスタが12個ある
- AGCは単一アキュムレータを使うが、算術結果をメモリ位置に直接保存できる
- Cortex-M0では別途store命令が必要
- AGCのバンク切り替えは、算術命令により多くのメモリアドレスを直接エンコードできるようにする
- Cortex-M0ではメモリはより単純で、バンク切り替えは不要
- CYPD4225は 1.19〜1.78倍 多くの命令を格納できるので、AGCと同等のプログラムも収容できると考えられる
- 他のUSB-C充電器はAGCよりプログラム容量が小さい
- 8KBで月に行くのは難しそう
- AGCも元々はもっと小さいプログラム保存領域で設計されていたが、増やす必要があった
- したがって他の充電器CPUは月へ行く候補から除外される
RAMの比較
- AGCは2,048個の 15ビットワード を保存できる
- CYPD4225は 8KB RAM を持つ
- バイト換算ではAGCより少し多い2倍超のRAMを持つ
- AGCは主に15ビットワード単位で計算する
- Cortex-M0の同等の計算は16ビットワード単位で行われる
- 計算単位基準ではCYPD4225が4,096個の16ビットワード、AGCが2,048個の15ビットワードなのでちょうど2倍
Apollo 11全体のコンピュータと必要な充電器の数
- WikipediaによればApollo 11宇宙船には 4台のコンピュータ があった
- AGC 2台: LEM 1台、CSM 1台
- Saturn Launch Vehicle Digital Computer 1台
- Apollo Abort Guidance System 1台
- 4台のコンピュータは宇宙船の異なる部分にあったため、単一のCYPD4225 1個で全てを置き換えるのは難しい
- Apollo 11の設計を大きく変えない条件では、コンピュータ4台が必要だと仮定する
- 表にあるApollo 11の各コンピュータは、Anker PowerPort Atom PD 2より性能もメモリも低い
- AGC: 1.024MHz, 2,048個の15ビットワード RAM, 36,864個の15ビットワードのプログラム保存領域
- LVDC: 2.048MHz, 4,096個の13ビットワード RAM, 32,768個の13ビットワードのプログラム保存領域
- AGS: 1.024MHz, 2,048個の18ビットワード RAM, 2,048個の18ビットワードのプログラム保存領域
- LVDCとAGSがCortex-M0で実行しにくい特殊命令を使わないと仮定する
- 除算は乗算より時間がかかる可能性がある
- CYPD4225はApollo 11のコンピュータのいずれかが単一の乗算を実行する時間で、数千個の算術命令を実行できる
- 計算性能だけを見れば Anker PowerPort Atom PD 2 USB-C充電器4台 の処理能力で月に行ける
残る制約と論点
- CYPD4225は 宇宙用認証 を受けた部品ではない
- 宇宙で動作するかは分からない
- Apollo 11コンピュータが使った周辺機器は別途検討していない
- CYPD4225は30本のGPIO信号を持ち、UART、I2C、SPIをサポートする
- AGCがサポートした周辺機器の数が100個なのか、10個なのか、それ以上なのかは追加確認が必要
- 1960年代の電圧レベルはCYPD4225に直接接続するには高すぎる可能性がある
- LVDCは実際には 三重冗長ロジック を含む
- ロジックが3つの答えを出し、投票メカニズムが勝者を選ぶ構造
- LVDCと比較するならUSB-C充電器3台が必要だと見ることもできる
- この冗長性は信頼性のためのもので、全体の計算では信頼性を無視している
- マイクロコントローラ3個と投票用の4個目のマイクロコントローラでこの方式を真似しても、システム信頼性がより高くなるとは考えにくい
- この点は議論の余地がある
USB-C電力供給が生んだ複雑さ
- 2012〜2013年ごろ、Structure Sensorファームウェアは当時ほとんどのUSB充電器にあった USB充電器検出 を使っていた
- USB D+ / D- 信号間の抵抗ネットワーク方式で、デジタル通信はなかった
- ファームウェア実装は容易だったと記憶している
- 2020年にはUSB-Cが普及し、多くのUSB充電器にCPUを搭載した マイクロコントローラ が入るようになった
- AGCより非力なものもある
- AGCより強力なものもある
- 大半は少なくとも約10倍速いクロック速度を持つ
- USB-C Power Deliveryは問題を解決し新機能を提供する一方で、複雑さも高める
- 製造工程で処理すべきファームウェアとチップが1つ増える
- ケーブルの1本の線を使い、USB-C充電器が任意の充電電流と電圧を提示できるようにする代替案は提示できていない
1件のコメント
Hacker Newsの意見
アナログコンピュータも正当に評価されるべき。Apollo 11宇宙船にはもう1台コンピュータがあり、それはSaturn Vでロケットのジンバルを制御していたアナログコンピュータ、**FCC(Flight Control Computer)**だった
2フィートの円筒形装置で、重さはほぼ100ポンドに達していた
両者が同じ名前を持つようになったのは、もともとどちらも機械式卓上計算機で計算していた人々、つまり「コンピュータ」と呼ばれていた仕事を置き換えるために作られたからだ
飛行制御「コンピュータ」は、Cray-1、AGC、Arduino、ノートPC、充電器よりも、アナログシンセサイザーモジュールに近い。比較対象であるデジタル機器同士は、ほとんど区別がつかないほど似ている
「Flight Control Computer(FCC)は完全なアナログ信号処理装置であり、Saturn V Switch Selector Unitが制御するリレーを使って内部冗長性とフィルタバンク選択を管理していた。FCCは3重構成の複数の冗長信号処理経路を持ち、基本チャネルの比較に失敗した場合は待機チャネルへ切り替えることができた。飛行制御コンピュータは動力飛行中の推力ベクトル制御のための基本的な比例-微分フィードバックを実装し、S-IVB補助推進システム(APS)制御のための位相平面ロジックも含んでいた。」
「動力飛行においてFCCは、制御則 $ \beta_c = a_0 H_0(s) \theta_e + a_1 H_1(s) \dot{\theta} $ を実装していた。ここで $ a_0 $ と $ a_1 $ は比例および微分ゲインで、$ H_0(s) $ は姿勢および姿勢変化率チャネル構造曲げフィルタの連続時間伝達関数である。Saturn V構成では、$ a_0 $ と $ a_1 $ のゲインはスケジュールに従って変化せず、離散的なゲインスイッチがあった。Saturn V FCCはランプ発生器を用いた電子式推力ベクトル傾斜機能も実装しており、離陸20秒後からS-ICエンジンを外側へ約2度ベクトルさせ、推力ベクトル整列不一致への感度を緩和した。」
https://ntrs.nasa.gov/api/citations/20200002830/downloads/20...
[1] https://imgur.com/qscoWrR
[2] https://imgur.com/HHg5ohS
女性は数学ができないなどと誰が言ったのか?
https://www.smithsonianmag.com/science-nature/history-human-...
「月に着陸した装置と今日のハードウェアを比較」するような扇情的な記事には少しうんざりしている。最初の飛行機にはどんな種類のコンピュータもなかったのだから、計算能力がこの種のことの性能と成功を左右する唯一の要素ではない
Apolloミッションのソフトウェアとハードウェアは非常によく設計されていた。その間に計算能力が途方もなく強力になったことは誰もが知っているが、だからといって今日同じことを簡単にできるわけではない。性能が上がっても、優れた工学の必要性が消えるわけではない。ところが一部は、その前提にかなり頼っているように見える
より興味深いのは、私たちが気に留めていない技術がどれほど複雑になったかを比較している部分だ。スマートデバイスでもなく、80年代のデジタル時計でもない、文字通りのケーブル1本にApollo 11並みの技術が入っているのに、私たちはそれに気づかないというのは驚きだ
反論を代弁するなら、月へ行くことがUSB機器を充電するより難しい理由の一つは、宇宙飛行には既製部品がないからだ。携帯電話を充電するたびにUSB充電器をゼロから作らなければならず、USB規格まで最初から定義しなければならないなら、USBケーブルもすぐに難問と呼ばれただろう
こうした記事から得るべき最大のメッセージは、Apollo 11が途方もない工学的成果ではなかったということではない。私たちの日常の中に、大量生産されて目立たない膨大な工学が存在するという点だ
そのエンジニアたちが現代へタイムスリップしてきたなら、新しいハードウェアも問題なく習得するだろう。私たちは今も同じ人間であり、同じ人間の脳を使っている
「計算能力が唯一の決定要因ではない」というのは、携帯電話を充電するという作業にも当てはまるのか?
今では重量とコストの計算が十分に改善されて、回路自体を耐放射線化するよりも、プロセッサ全体を遮蔽するほうが安くなったのか気になる。耐放射線回路は既製部品を使いにくく、最新技術の利用も制限されるため、はるかに高価になる。
記憶が正しければ、Marsドローンで探っていた領域の一つだったように思うが、Mars表面の放射線への懸念が、宇宙空間で使う場合と違うのかはよく分からない。
「飛行ソフトウェアはC/C++で書かれ、x86環境で実行される。各計算/判断ごとに『flight string』は2つのコアの結果を比較する。不一致があれば、そのstringは不良と見なされ、コマンドを送らない。2つのコアが同じ応答を返した場合、stringはエンジンやグリッドフィンなどを制御するロケット上の複数のマイクロコントローラへコマンドを送る。」
https://space.stackexchange.com/a/9446/53026
Galileo探査機は探査機リレー受信機プロセッサを保護するためにタングステン板を使い、Galileoプラズマ装置はタンタル遮蔽を使っていた。ちょうど放射線遮蔽について調べていたところだった。
ほぼすべてのUSBチップは、データシートを見ると完全にプログラム可能なCPUを備えている。単純なHIDや充電機器には少し滑稽に見えるが、基本的なマイクロコントローラは安く、実際にはASICよりコストを削減できる。
「LVDCには実際に三重冗長ロジックが入っている」という話はごく些細な点だが、何かが3つあるからといって三重冗長というわけではない。冗長性の基準では、3つなら二重冗長、2つなら単一冗長、1つなら冗長性なしだ。
投票メカニズムが、3つの実装すべてが互いに異なる答えを出した場合でも somehow 正しい答えを作れるのでなければ、どうして三重冗長と言えるのか分からない。投票メカニズム自体が機能的に4番目の実装なのだろうか?
LVDCはシリアルコンピュータなので、一度に1ビットだけ扱えばよく、投票の実装はより単純になる。
LVDCは故障してはならない高冗長設計で、AGCは冗長性はないが、故障が発生したら素早く復旧するよう設計されていた。
通常コンピュータとは見なされない小型機器、たとえばスマートフォン充電器のようなものに、正確にどんなハードウェアが使われているのか、分解せずに知る方法があるのか気になる。
特殊なデータシートや政府の認証文書のようなものがあるのだろうか? 日常的な電子機器を動かす最小仕様のハードウェアにはいつも魅力を感じていて、筆者がその情報をどこで得たのか知りたい。
1970年代の古いキーボードにも完全にプログラム可能なCPUが入っており、たいていはIntel MCS-48の派生品だった https://en.wikipedia.org/wiki/Intel_MCS-48#Uses
今日ではなおさらだ。キーボード、トラックパッド、マウス、あらゆるUSB機器などに、完全にプログラム可能なCPUが入っている。
Anker PowerPort Atom PD 2 USB-C Wall Charger のCPUがApollo 11 Guidance Computerより563倍速いなんて、自分の機器を充電しているものをプログラムすれば、人を月に送ることもできたのかと思うと驚き
地上にいた多くのエンジニアにはコンピュータがなく、運のよい人が使っていたものも個人用ではなくメインフレームだった
コンピュータはあまりに貴重だったため、必ずコンピュータが必要な作業、特に計算の精度や速度が重要な作業にだけ使われた
そもそも計算尺で航空宇宙をうまくやっていた人にメインフレーム級のリソースを与えると何が起きるかを示している
すべての着陸は操縦士が操縦桿を握り、スラスターはソフトウェアが制御するフライ・バイ・ワイヤ方式だった
https://www.quora.com/Could-the-Apollo-Guidance-Computer-hav...:
「P64。高度約7,000フィート、『high gate』と呼ばれる地点で、コンピュータは自動的にP64へ切り替わった。コンピュータは依然として飛行をすべて実行し、LMを着陸目標へ誘導した。ただしCommanderは着陸地点を見て、気に入らなければ別の目標を選ぶことができ、コンピュータは経路を変えてその目標へ誘導した。
この時点で、着陸を完了するために3つのプログラムのうち1つを使った。
P66。6回の月面着陸すべてで実際に使われたプログラムである。地表から数百フィート上で、CommanderがコンピュータにP66へ切り替えるよう指示した。よく『手動モード』として知られているが、実際には完全な手動ではなかった。このモードでは、Commanderは自分が望む動作をコンピュータに指示する形でLMを操縦し、コンピュータがそれを実行した。これは着陸まで続いた。
P65。質問にある自動モードである。コンピュータが約150フィート上空までP64のままでいると自動的にP65へ切り替わり、P65はコンピュータ制御でLMを地表まで連れていった。問題は、コンピュータには障害物を探したり、目標着陸地点がどれほど平坦か判断したりする方法がなかった点である。すべての飛行でCommanderは、コンピュータが連れていこうとしていた地点ではない別の地点を選びたがり、そのためコンピュータが自動的にP65へ切り替わる前にP66へ切り替えた。[Update: その後の飛行ではP65のコードはAGCから削除された。プログラマーたちは別のコードにメモリを必要としており、AGCはメモリが非常に限られていたため、どこかにコードを追加するには別の場所から何かを削除しなければならなかった。その時点では、どの乗組員も自動着陸モードを使わないことが明らかだったため、P65は削除された。]
P67。これが本当の完全手動モードである。P66では操縦士が操縦していても、コンピュータはまだループの中にいる。P67ではコンピュータが完全に切り離される。高度や降下率などのデータは引き続き提供するが、機体を制御することはない。」
50年後には、今日のデータセンターのGPT-4学習クラスターに相当するものが安物のケーブルの中に入り、今のクラスター全体より100倍以上速く動くようになるだろう
GPT-4の学習に約100日かかったとすると、50年後には一般的なスマートフォン級のデバイスが、GPT-4級モデルをゼロから1秒以内に学習できるということになる
LVDCにだけ三重冗長ロジックが入っていたとは知らなかった
「3個のマイクロコントローラと投票集計用の4個目のコントローラでこの投票方式をまねても、システムの信頼性は上がらない」という話は十分に明確だ。投票集計器が単一障害点になるからだ
TandemとStratusが2つのプロセッサ間の不一致をどう処理していたのかはよく分からない。Stratusは市販の68Kプロセッサを1組使っていたが、投票を意味しているようには見えない。投票者が2つだけなら、不一致をどう解決できるのか分からない
既製のCPUチップで投票ベースの「信頼できる」プロセッサを作る方法はよく見えない。各CPUが他の2つのCPUの出力を監視し、投票で負けたら自分で投票をやめるようにしなければならない気がするが、それはカスタムCPUハードウェアのように聞こえる
投票を比較し、CPUに投票をやめるよう知らせ、勝った出力へルーティングする外部ハードウェアは、結局のところ投票集計器であり、これは単一障害点だ。投票集計器を3つ置いて互いに監視させることもできるだろうが、そうすると投票集計器の集計器が必要になる。その下はどこまでも亀だ
一般に、信頼性を高めるために複数のCPUに投票させる方式は、複雑さを増してかえって信頼性を下げるため、危うく見える
信頼できるプロセッサを作るということは、結局は信じられるプロセッサを作ることなのかもしれない
Jonny Kimの経歴リンクが切れていて残念。動作するリンクは https://www.nasa.gov/people/jonny-kim/ だ
彼は史上最も印象的な人間の一人だろう。勲章を受けたNavy SEAL、Harvardの医師、宇宙飛行士など、いくつもの経歴を持っている。子どもが究極のG.I. Joeを組み立てたように聞こえる