#qpstudy 2012.05 に参加してきた

05/19 に、qpstudy 2012.05 に参加してきました。

内容は、「エンジニアのためのハードウェア徹底入門」というものでした。

一週間たってしまいましたが、ブログを書くまでが勉強会なので、書きます。

やさぐれギンガさんのアーキテクチャ入門 (@kuwa_tw さん)

やさぐれギンガさんのアーキテクチャ入門(ためしてガッテン)(仮)

コンピュータの 5 大要素である、入力・出力・演算・記憶・制御について、
寸劇を交えながら説明されていました。

ーーー 正直なところ、僕は 5 大要素がパッと浮かばず、
大学の情報系の学科で勉強してきた身として、「これはヤバイ」と思いましたが、
寸劇が印象的だったので、もう忘れないでしょうw

この 5 大要素はノイマン型コンピュータが基礎なっている。
ノイマン型の最初のものは EDVAC であり、それから 60 年程経つが、
現在も変わっていない。

効率がいいコードや仕組みを考えるには、コンピュータをよく知っていることが大事。
効率の良いというのは、すなわちアーキテクチャから見て効率がいいということ。

The Story of CPU (@sho7650 さん)

The Story of CPU

ノイマン型コンピュータの (上記とは別の) 3 つの規則は、

  • プロセッサがある
  • それがプログラムによって動かされる
  • データがある

という事。

CPU は各クロックごとに以下を繰り返している。

Fetch -> Decode -> Execute -> Writeback

Fetch - 主記憶からデータをとってくる。
Decode - とってきたデータを命令にする
Execute - 実際に実行する
Writeback - 結果を戻す (戻し先はメモリだったり I/O だったり)

高速化手法

  1. パイプライン

    Writeback してから次の Fetch するのではなく、
    Fetch の処理が終わって Decode がはじまったら、次の Fetch をはじめる。
    欠点として、Execute が jump 命令だったり、実行に数クロックかかるばあい、
    前の Fetch や Decode が無駄になる。
    GPU など、ひたすら同じ処理を繰り返すようなものには良く効く。

  2. スーパースカラー

    まとめて出来る演算はいっぺんに計算する。

  3. Out if Order

    先に実行できるものは先に実行する。

Z80 CPU
一番売れた 8bit CPU で、今も使われている。
各レジスタがあり、特別なものとして計算時に使われる Accumulator レジスタや、
キャリーオーバーフラグなどに使われる Status レジスタがある。

機械語... はきびしいのでアセンブラを学ぼう。

アセンブラは実は簡単。
機械語の命令列をそのまま書けばいいだけ。

まとめ。
アセンブラをやれば、普段使っているプログラムがどう動いているのか理解できる。
低級言語をしっていれば、高級言語が理解できる。ポインタなんかちょろい。

そして、英語を学ぶことも大事。

ーーー 大学の授業で学んだことを思い出しながら聞いていました。
特に、アセンブラ言語ですが、少しですが授業で書いたこともあり、
せっかく勉強したんだから人に説明できるレベルにはなっておきたいなと
感じました。
また、英語は大事というのは、自分も最近とても感じています。
新しいものを使おうとすると、必ず英語で書かれたドキュメントに行き当たるので。

コンピュータアーキテクチャ I/O入門 (@hasegaw さん)

20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

入出力とは、コンピュータにかならず必要な要素ではないが、
人がコンピュータを操作する前提では、無くてはならない存在。
(操作できない、結果がわからない。)

  • I/O ポート (ポートマップド I/O)

    古典的な入出力で 8bit の情報をやりとりできる。

  • 割り込み

    作業中に電話がかかってきたら受話器を取る、といったイメージ。

  • メモリマップド I/O

    プロセッサの物理メモリ空間に、デバイスのメモリ空間を割り当てる。
    データ転送の開始時・終了時のみプロセッサが干渉するため、
    プロセッサ時間を節約できる。

  • IRQ (Interrupt ReQuest)

    キーボードやサウンドカードなど複数のデバイスが割り込みをするための
    識別番号があり、0-15 の 16 個。

    おなじ割り込み線を使わざるを得ない場合は、
    デバイスが、自分が割り込みを出した事を保存するレジスタにフラグを立ててから
    割り込みを出す。

  • Bus による I/O

    内部バス・周辺回路・拡張バスがある。
    拡張バスは主に PCI 系。

  • PCI, PCI-X

    PCI をサーバ向けに拡張したものが PCI-X。
    現在一部で廃れつつある。

  • PCI Express

    シリアル転送である。
    データの転送経路を複数設けて転送しよう。
    活線挿抜に対応している。(HW, Soft 用対応)

  • PCI Express 2.0

    IRQ ではなく MSI で割り込みを行う。
    (IRQ と MSI は、仮想化環境時に大きな性能差がある。)

さいごに
I/O を勉強するには、マイコンでやるといい。
普通の PC でやろうとすると、OS の制限を受けてしまう。
Arduino とかがオススメ。

ーーー 割り込みは言葉だけしか知らないで過ごしてきたので、
聞いててもイメージが浮かばないところが少々ありました。
一度どこかで勉強したいですね。
Arduino やろう、うん。

インターフェース入門 (@H_Shinonome さん)

20120519 インターフェース入門

インターフェースとは、
2 つの物の間で情報のやりとりを仲介するもの。

例)
口・耳: インタフェース
空気 : 伝送媒体
言葉 : プロトコル

インタフェースの紹介

  • RS-232C

    25pin のものが正式なもの。
    9pin のものは、実は RS-232C 規格ではない。
    非同期通信のみをサポートしている。

ーーー いろいろな "シリアル" インタフェースが紹介されていましたが割愛。

  • 端子数が多い理由

    直接データを送受信しない端子がある。
    同時に同じ端子を使う規格がある。
    そもそも使っていない端子がある。

  • 速度が伸び悩むわけ

    費用対効果
    半導体性能 - 安定する周波数が 40Mbps 程度だった。
    → 同時に送信しよう。

ーーー いろいろな "パラレル" インタフェースが紹介されていましたがこちらも割愛。

パラレルにより、格段に通信速度が上がったが、再び頭打ちするように。

  • スキュー発生率の増加

    スキューは、クロック同期型の電子回路において、
    クロック回路から送られるクロック信号が、回路の異なる部分に異なったタイミングで
    到着する現象。
    → 今回の場合は、パラレルに送信された各データが異なったタイミングで到着する。

半導体性能の向上により、インタフェース規格は再びシリアルのものに戻ってきた。
(USB, SATA 等)

最近のトレンドは非同期パラレル。
(Thunderbolt, InfiniBand)

ーーー 普段使っている 9pin のシリアルは RS-232C 規格じゃなかったのかー!
スライドの中で知らないインタフェースがたくさん出てきたので、
帰ってから面白くなってたくさんググってしまいました。

全体的な感想

忘れてかけている事を思い出すことができて、とても有意義な勉強会でした。
どうせなら、デキるエンジニアになりたいので、学んだことはまた時間を作って復習します。
マイコンは以前から興味があったけど触ったことが無いので、この機会に手を出してみようかな。。。