1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

パターソン&ヘネシー本を読んでいく(3)

Posted at

パターソン&ヘネシー本を読んでいきます。

以下から購入できます。いい本ですよ!(ステマ)

データの安全な格納場所

  • 揮発性メモリ→電源が切れると情報が失われる
  • 不揮発性メモリ→電源が切れても情報が失われない
  • 揮発性メモリ→主記憶または一時記憶
  • データ保持用のメモリ→二次記憶
  • 二次記憶として、磁気ディスクやフラッシュメモリが使われる

他のコンピュータとの通信

コンピュータをネットワークに接続すれば、以下の利点が得られる

  • 通信、コンピュータ間で情報を高速に交換
  • 資源の共有
  • リモートアクセス

ネットワークの伝送路長と性能は千差万別

  • ローカルエリアネットワーク
  • ワイド・エリア・ネットワーク

ネットワークの進歩により、コンピュータの利用形態が変わっていった。
ネットワーク技術が改善されるにつれ、コストは大幅に安くなり、情報伝達の容量も増大した
ワイヤレス通信なども普及した
背景には、メモリなどの半導体に使われるのと同じ低コストの半導体技術(CMOS)を用いて、無線通信を行えるようになった

プロセッサおよびメモリを製造するための技術

  • トランジスタ 電気的なオン/オフ動作をするスイッチ
  • 集積回路(Integrated Circuit)  数十から数百のトランジスタを一チップにまとめたもの
  • 大規模集積回路(very large integrated circuit)VLSI
  • チップの製造はシリコンから始まる

チップの製造工程については割愛

性能の定義

  • 飛行機の場合は、搭載可能人数、航続距離、巡航速度など、性能の測定基準はいろいろある。
  • コンピュータの場合は、応答時間、実行時間、バンド幅など、様々な性能測定基準がある
  • モバイルデバイスとサーバの性能を比較しようとすれば、異なるアプリケーションと異なる性能の尺度が必要となる

本書では、最初の数章において、主として応答時間に目を向ける
性能を最大化するには、タスクの応答時間つまり実行時間を最短化する必要がある

性能_X=\frac{1}{実行時間_X}

「XはYよりもn倍速い」時は、以下の関係が成り立つ

\frac{性能_X}{性能_Y} = n

性能の測定

  • コンピュータの性能を測る手段は時間である。
  • プログラムの実行時間は、プログラムあたりの秒数で測定する
  • 最も単純な時間の定義は、応用時間または経過時間→全てのシステムの動作を含む

CPU時間ないし単にCPU時間という概念を導入する→経過時間とプロセッサが実際に処理に費やした時間とを区別したい
CPU時間→該当プログラムのためにCPUが費やした時間

ユーザーCPU時間→プログラム中で費やされたCPU時間
システムCPU時間→オペレーティングシステムがタスクを遂行するために費やしたCPU時間

本書では、経過時間に基づく性能とCPU実行時間に基づく性能を一貫して区別する

プログラム性能の理解

プログラムの性能を改善するためには、まず問題となる性能の尺度を明確に定義し、それからプログラムを実行して測定することにより、性能上のボトルネックを探る

クロック周波数って、性能の測定基準として重要なようだ。クロック周波数とコンピュータのユーザが使う秒との関係を次で公式化している。

最後に感想

個人的にBounty SourceのPOWER9プロセッサでの演算の最適化とかやろうかなと思っている。(できるかどうかわからんけど。多分結構むずい)多分だけど、演算の最適化の場合は、実行時間を最短化すればいいのかなとは思う。つまり、応答時間、全てのシステムを含んだ計算を開始してから答えが出るまでの時間を最短化すればいいのかなとは思う。
POWER9は組込み系ではなく、比較的でかいシステムで使われると思うので、メモリとかは潤沢に使っちゃっていい感じはするんだよね。最近のPythonはメモリを潤沢に使って高速化する感じになっていると聞いたことがある。前4テラのメモリ積んだコンピュータとか出てたけど、そこまで極端でなくても、まあ、結構な大容量を積めるので。
応答時間を最適化するということは、一部最適化を部分部分やって全体を最適化というのは、多分ダメだよねとは思う。いやわからないんですが(教えて欲しい)。
一応、P32の最後に、「プログラムの性能を改善するためには、まず問題となる性能の尺度を明確に定義し、それからプログラムを実行して測定することにより、性能上のボトルネックを探る」と書いてあった。ボトルネックを改善するだけでいいのかなとは思ったりする。
昔、PART図ってのを習ったんだよね。オペレーションズリサーチの分野の一つで、ここではクリティカルパスを同定したり、パスを短縮するコストなどを勘案に入れた納期の短縮法などがあった。
まあ色々勉強する必要があるよね。

追記
どうでもいいけど、スタンディングデスクは作業や勉強が捗る。カロリー消費も増えるしオススメですよ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?