ホーム » 2018 » 3月

月別アーカイブ: 3月 2018

2018年3月
 123
45678910
11121314151617
18192021222324
25262728293031

検索・リンク

高専ライブ:2018年3月25日(第567回)

  • 卒業式の話
  • 専門教科の話
  • サイエンス共和国 第24回 「飛行機が飛ぶ仕組みと温暖化で困る話」
  • 新年度の話

担当:越後(2E,MC)、西島(3EI、MIX)、木村(F3)、中村(教員)

卒業生のお土産

謝恩会で卒業生からのお土産を頂きました。

電子マネー派な私のことをわかってるね。 んで、アマゾンギフトカードの入れ物も、宅配ダンボール風なのに、マグネットで蓋が閉まったりと意外と凝った作り。さすがアマゾン。

ということで、知り合いとのウケ狙いで、名刺入れに活用してみた。そのままじゃ味気ないのでクロネコの送付状を縮小印刷して貼ってみた。

システム開発のジレンマ

現在、他の先生と共同で発達障害者支援システムの開発をしているけど、3/21に利用者を交えた事例検討会があった。

参加者の意見交換の中で、いくつかのシステム作りのジレンマを感じる意見があった。簡単にまとめると…

「支援システムのおかげで、支援能力は2倍になった。でも便利だからこそ、保護者は先生から3倍のサポートを期待する。」(N倍は感覚をわかってもらうための便宜的な数字)

この両者の不足分の「1」は…

  1. 先生への過度の負担にならないか…
  2. コンピュータ屋的には、PDCAサイクルもう1周まわして4倍にすりゃいいじゃん…でも、その開発費はどこから?
  3. ICTによる支援も大事だが、親と子供の直接の関わりを疎遠にさせてはいけない。

卒業おめでとうございます

高専ライブ:2018年3月18日(第566回)

  • 高専の卒業式の話
  • 春休み中の部活の話
  • 高専生に聞きたい5つのこと 第17回 IT研究会
  • 点字ブロックの日の話

担当:水島(3C,MC)、中島(3C,MIX)、山野(F3)、西(教員)

第80回情報処理学会全国大会で卒研内容を発表

高専ライブ: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 と同じ

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー