ホーム » スタッフ » 斉藤徹 » 実験(斉藤)

実験(斉藤)」カテゴリーアーカイブ

2019年9月
« 8月    
1234567
891011121314
15161718192021
22232425262728
2930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

コンパイラと関数電卓プログラム(専攻科実験2018)

専攻科1年・生産システム実験1(後期)の「コンパイラと関数電卓プログラム」の説明は、昨年度資料と共通なのでリンクを記載しておく。

型による処理速度の実験

授業のネタとするために、型によって計算時間がどう変化するか実験。レガシーなコンピュータを使ってきた人間には、float とか double とか出てきたら、「Z80な時代の頭」では数倍遅いのを期待したけど、FPU を搭載して当たり前のこの時代、そんなに差は出ない。

FPUという言葉さえ、最近は死語かな…

しかたがないので、macOS , Raspberry-Pi , Arduino 遅さの時代を逆行しながら実験。

// test.cxx
#ifndef TYPE
#define TYPE int
#endif
#include <stdio.h>

TYPE foo( TYPE i ) {
    TYPE ans = 0 ;
    for( int j = 0 ; j < 30000 ; j++ ) {
        ans += i * i ;
    }
    return ans ;
}

int main() {
    TYPE y = 0 ;
    for( TYPE i = 0 ; i < 100000 ; i++ ) {
        y = foo( i ) ;
    }
    return 0 ;
}

iMac で実験

iMac で実験。デスクトップ 64 bit マシンだし、そんなに差は出ないのは予想どおり。

bash-3.2$ uname -a
Darwin imac2 17.4.0 Darwin Kernel Version 17.4.0: ... root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64

bash-3.2$ g++ -O0 -DTYPE=int test.cxx
bash-3.2$ time ./a.out
user    0m6.857s
bash-3.2$ g++ -O0 -DTYPE="long long int" test.cxx
bash-3.2$ time ./a.out
user    0m6.831s
bash-3.2$ g++ -O0 -DTYPE=float test.cxx
bash-3.2$ time ./a.out
user    0m8.528s
bash-3.2$ g++ -O0 -DTYPE=double test.cxx
bash-3.2$ time ./a.out
user    0m8.615s

Raspberry-Pi3 で実験

組み込み系の FPU などが貧弱なマシンを想定し、Raspberry-Pi 3 で同じことをやってみた。
64bit整数 long long int が想定外に遅いな。

raspberry-pi:~$ uname -a
Linux raspberry-pi 4.14.22-v7+ #1096 SMP ...2018 armv7l GNU/Linux

raspberry-pi:~$ gcc -O0 -DTYPE=int test.cxx
raspberry-pi:~$ time ./a.out
user    0m37.588s
raspberry-pi:~$ gcc -O0 -DTYPE="long long int" test.cxx
raspberry-pi:~$ time ./a.out
user    1m18.535s
raspberry-pi:~$ gcc -O0 -DTYPE=float test.cxx
raspberry-pi:~$ time ./a.out
user    0m52.206s
raspberry-pi:~$ gcc -O0 -DTYPE=double test.cxx
raspberry-pi:~$ time ./a.out
user    0m50.287s

Arduino で実験

同じことを Arduino でやってみた。main のループは 1/10000 の回数にして、10000倍の時間を掲載…
ようやく「Z80 な頭」が期待している実験結果となったかな。

int       6880[sec] 16bit int
long      6320[sec] 32bit int 
float    92080[sec] 32bit float
double   92080[sec] Arduino Uno では、double = 32bit で float と同じ

電卓プログラム作成の補足

専攻科実験で、「字句解析と構文解析で電卓プログラムを作ろう」というネタを実施中。

サンプルプログラムを見せて、課題の1つが「式を読みやすくするための空白が使えるように改良」としているが、学生さんより、『最初に空白を全部消してから処理するのはアリ?』との質問。

ひとまずは動くプログラムをつくってくれればいいけど….

でも、空白を先に全部消してから、トークン切り出しをやると、色々とトラブルが起こる。

((例1))
x=-1 ;
昔、私が学生の頃に使ったCコンパイラは、"+="演算子を、
"=+"と書いても良かった。だから、"x -= 1"と誤認され、
プログラムがバグった。この経験以降、代入文の"="の前後
とかややこしい演算子の式で、空白を適所に打たないヤツは
シロウト判定している。
今回の質問のように、空白を除去してから字句解析を行うと、
"x = -1"と誤認されないように空白を入れあっても、
"x -= 1"に誤認される。

((例2))
C++でのテンプレートクラスでは、<>の中に型を
書いたりするけど、Foot<int>といった型も
出てくる。んで、<>の中にテンプレートクラス
が出てくると、Foo< Bar<int> > といった
型を使う場合がある。でも、空白除去後に字句解析をすると、
Foo<Bar<int>>となり、右シフト演算子になる。
→ C++03 から C++11 での仕様の変化
 ・C++03までは、テンプレートの">"の前後には空白を入れるべき。
 ・C++11からは、"<"のトークンの数で">>"でも区別してくれる。

専攻科実験・コンパイラと関数電卓プログラム作成

  • コンパイラの技術と関数電卓プログラム(1)
    • 課題
      • 複数桁の数字が使えること。
      • 式中に空白が使えること。
      • 何らかの演算子を追加すること。
        • (例) %,単項演算子のマイナスなど
      • 演算子が左結合か右結合か確認すること。
      • オプション課題
        • 変数が使えること。
          (変数名は1文字のA-Zといったもので良い)
    • レポート内容
      • コンパイラ技術の概要、課題(1)の説明・ソース・動作検証、考察
  • コンパイラの技術と関数電卓プログラム(2)
    • 課題
      • 基本的に、lex+yaccで(1)と同様の課題完成を目指す。
    • レポート内容
      • lex,yaccの概要、課題(2)の説明・ソース・動作検証、考察

電子情報棟の無線LANの更新

電子情報棟では、学生実験などでのノートパソコンのネットワーク接続手段 として、FERECのルータを活用している。 アクセスポイントのSSID,パスワードを知っている利用者であれば、 WiFi接続後に、Web認証が要求されるので、 自分の学籍番号ベースのIDとパスワードを入力すれば、 ネットワークが利用できるようになる。

ただし、ネットワーク接続によるトラブルを避けるために、 http,httpsしか利用できないようにFirewall機能を設定してある。 特別の登録IDを設定すれば、Firewallの条件を変えることもできる。

IEEE.802.11n対応ハイパワーAPに更新

これまでは、主要な実験室にはハイパワーのアクセスポイント、 実験的に導入していた部屋には、小型のアクセスポイントを設置していた。 元々の機材は11a.b.gに対応していたが、フロアや実験室の場所によっては、 電波が弱く接続が困難であった。

今回、業務用の11n対応のハイパワーアクセスポイントに変更し、 電波条件もかなり改善し、電子情報棟のすべての教室・大きな実験室では、 十分な電波強度でアクセスポイントに接続が可能となった。

払下げPCのセッティング

情報処理センターの払下げPCのセッティングを行う。 払下げ時のパスワードを変更し、 ウィルス対策ソフトを入れ、Microsoft Updateとなった。 最後に、BIOSのNetworkBootを停止させる。 でも、実験で必要そうなソフトを追加インストールしないといけないし、 Sambaのドメインに登録して、使えるようにしたいしな…

10台まとめてセッティングだけど、きびきびと動かないマシンじゃ、 待ち時間が長い。んで、複数台並行作業なんだけど、どのマシンはどこまでやったのか… という状態で、作業のヌケがありそう…

学研(大人の科学)、4bitマイコン

毎度ながら、面白そうなものを売り出してくれる学研さんだが、 次号は4ビットマイコンだそうな。 Data メモリ 8word, プログラムメモリ 40word 搭載で、 電子オルガンやらモールス電文発生などのサンプルも掲載となっている。

内容によっては、2年、3年の計算機アーキテクチャネタには十分だろうし、 実験にも使えると予想される。 ということで、個人的に購入するだろうな…

追記:関連授業&実験の先生に宣伝しているうちに、思わず予約購入ボタンを押しちゃった….楽しみ…