高専ライブ:2018年3月25日(第567回)
- 卒業式の話
- 専門教科の話
- サイエンス共和国 第24回 「飛行機が飛ぶ仕組みと温暖化で困る話」
- 新年度の話
担当:越後(2E,MC)、西島(3EI、MIX)、木村(F3)、中村(教員)
卒業生のお土産
謝恩会で卒業生からのお土産を頂きました。
電子マネー派な私のことをわかってるね。 んで、アマゾンギフトカードの入れ物も、宅配ダンボール風なのに、マグネットで蓋が閉まったりと意外と凝った作り。さすがアマゾン。
ということで、知り合いとのウケ狙いで、名刺入れに活用してみた。そのままじゃ味気ないのでクロネコの送付状を縮小印刷して貼ってみた。
システム開発のジレンマ
現在、他の先生と共同で発達障害者支援システムの開発をしているけど、3/21に利用者を交えた事例検討会があった。
参加者の意見交換の中で、いくつかのシステム作りのジレンマを感じる意見があった。簡単にまとめると…
「支援システムのおかげで、支援能力は2倍になった。でも便利だからこそ、保護者は先生から3倍のサポートを期待する。」(N倍は感覚をわかってもらうための便宜的な数字)
この両者の不足分の「1」は…
- 先生への過度の負担にならないか…
- コンピュータ屋的には、PDCAサイクルもう1周まわして4倍にすりゃいいじゃん…でも、その開発費はどこから?
- ICTによる支援も大事だが、親と子供の直接の関わりを疎遠にさせてはいけない。
高専ライブ:2018年3月18日(第566回)
- 高専の卒業式の話
- 春休み中の部活の話
- 高専生に聞きたい5つのこと 第17回 IT研究会
- 点字ブロックの日の話
担当:水島(3C,MC)、中島(3C,MIX)、山野(F3)、西(教員)
高専ライブ:2018年3月11日(第565回)
- 始まりの話
- 防災の話
- サイエンス共和国 第23回 「生体認証の話」
- マイブームの話
担当:坂田(F1,MC),西島(3EI,MC)、越後(2E)、西(教員)
教育の情報化フォーラム
3月8日に、総務省主管による「教育の情報化フォーラム」が開催されました。
この中で、福井高専・電子情報工学科が協力している2件の報告がありました。
- 発達障害者プログラマーの育成と就労に繋げる支援とメンターの育成(福井大学)
- IchigoJamでものづくり
地域人材を生かして行う、ものづくりを通した科学技術体感型授業(ナチュラルスタイル)
pow(2,i)の速度
例年、2進数演算の課題を出すと、2i の処理を、pow(2,i) で書く学生さんがいる。
しかしながら、pow() は、double 型なので遅い。これは、2進数の特徴を踏まえれば、1 << i で書けば良い。
試しに、実際の処理速度を測ってみた。
#include <stdio.h> #include <math.h> long long int mask( ) { long long int m ; for( int j = 0 ; j < 10000000 ; j++ ) { m = 0 ; for( int i = 0 ; i < 60 ; i++ ) { m += pow( 2 , i ) ; // m |= (1 << i) ; } } return m ; } int main() { long long int x = mask() ; return 0 ; }
m |= (1 << i) ; --------- 1.296 [sec] m += pow( 2 , i ) ; ----- 44.956 [sec] 40倍の遅さ
型による処理速度の実験
授業のネタとするために、型によって計算時間がどう変化するか実験。レガシーなコンピュータを使ってきた人間には、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 と同じ