auの日記

プログラミング初心者の日記。(auはハンドルネームです)

プログラムでのキャッシュとは

auです。
昨日のSRAMについて調べていたり、授業でよく「キャッシュ」という言葉を目にします。しかし、意味をよく分かっていないので調べてみました。

キャッシュとは

 キャッシュとは、CPU内や、CPUとメモリーの間にあり、一時的にメモリのデータをおいておく"場所"のことです。
 CPUがメモリーに読み出す命令を行った際に、メモリーは読み出されたデータをCPUとキャッシュの両方に送信します。その後、同じデータを呼び出された際はキャッシュから読み出すことにより、高速になるということです。

SRAMとは

auです。
今回はSRAMについて調べてみました。

SRAMとは

SRAM(Static Random Access Memory)とは、読み込みと書き込みができるメモリです。
内部構造は順序回路になっているため、フリップフロップのように現在の入力だけでなく、過去に入力した情報も利用する構造になっている論理回路です。
DRAMと違い、速度に優れていて、消費電力も小さというメリットもあります。
それに対し、コストパフォーマンスが低い、回路がトランジスタを複数用いているので複雑というデメリットもあります。

クリティカルパスとは

auです。
今日はクリティカルパスについて調べてみました。

クリティカルパスとは

クリティカルパスとは、
プロジェクトを実行する際に"遅延してしまうと全体に影響がでてしまうところがクリティカルパス"といいます。
プロジェクトを短くするためには、新しく策を練るのもありですが、現在のパス(スケジュールのタスクの経路)を見直し、クリティカルパスを見つけ、そこのタスクを見直し、改善するのもいい手法です。

CPUにおけるCPIとは

auです。
今回はCPIについて調べてみました。
調べるといろいろなCPIと略される言葉があることを知りました。
今回調べるのはそのなかの"Cycles Per Instruction"です。

CPIとは

CPUの処理速度を表す単位です。1命令を処理するのに必要な平均クロック数のことです。
CPI = CPUサイクル数 / 命令数で表すことができます。
CPIは少ないほうがCPUの性能がいいということになります。つまり、CPIを減らすか、命令の数を減らす、または両方をすることで処理速度を向上することができます。

CPUバウンドとは

auです。
今回はCPUバウンドという用語について調べてみました。

CPUバウンドとは

計算を行うプログラムを実行した際にはCPUが働きます。そのCPUを使って行うプログラムで、処理速度がCPUに制約されることを意味します。
CPUによってプログラムの処理が遅くなっている場合、そのプログラムを「CPUバウンド」といいます。
この速度はコードを最適化することで解消することができます。
少し文を最適化するだけで速度は速くなることがあります。

C言語のscanf関数でスペースが入っている文字を出力する

auです。
今回はscanf関数でスペースの入った文字を出力してみます。
普通に書こうとすると以下のようになると思います。

#include <stdio.h>

int main(void) {
    char c[30];
    printf("Please write words\n");
    scanf("%s", c);
    printf("c = %s\n", c);

    printf("Please write words\n");
    scanf("%s", c);
    printf("c = %s\n", c);
    return 0;
}

// 実行結果
Please write words
I have a pen
c = I
Please write words
c = have

scanfでスペースを含めた文字を出したい場合は以下のようにします。

scanf("%[^\n]%*c", c);

このようにすると"\n(改行)"以外出力されるようになります。
上のコードを書き替えてみます。

#include <stdio.h>

int main(void) {
    char c[30];
    printf("Please write words\n");
    scanf("%[^\n]%*c", c);
    printf("c = %s\n", c);

    printf("Please write words\n");
    scanf("%s", c);
    printf("c = %s\n", c);
    return 0;
}

// 実行結果
Please write words
I have a pen.
c = I have a pen.    // scanf("%[^\n]%*c", c);
Please write words
I have a pen.    // scanf("%s", c);
c = I

%が一つ赤く表示されますが問題なくコンパイルすることができる。
全ての文が出力されました。

プログラムを書くときに気を付けていること

auです。
明日テストなので最近プログラミングをする際に気を付けていることでも書こうと思います。
1. i + 1など、空白をあけて見やすくする
 間違いなども見つかりやすいし、みていて綺麗になる
2. 分からなくなったら誰かに説明をするように勉強する
 自分に合っているような勉強法なんでしょうが自分に対して説明するようにすると何か理解できる気がします。

プログラミングをもっとしていくには、まだ勉強しなければならないとすごく感じています。
学校だけではなく、他の場所でも勉強をもっとがんばりたいです。