Python、Pillow、tkinterでゴニョゴニョやってるアレ。
昨日、Windowsで動かしてみてやっぱり結構な処理時間
が掛かっちゃうのが、なんか腑に落ちなかったので、
あらためて、プログラムの頭からウォークスルーを
してみることにしてみた。
なにしろ、640×480ドットって、30万ピクセルだから、
それで10秒も掛かってるってことは、1ピクセルあたり
30ミリ秒くらい掛かっちゃってる計算。そんな重い
処理してるつもりないし、そのくらいの速度なら、
メモリさえ足りればArduinoでも出来そうじゃね?と
思ってるので。
処理内容的には、評価値を1個参照して、それが閾値
よりも大きいか小さいかを判断して、ドットを打つ
というだけの処理。
それと遅い遅いといわれているPillowのputpixelメソッド
で描いていくというだけの処理。putpixelだけでループ
をすると、1秒掛かるか掛からないか、というぐらい
かな。
残りはいったい何やってるの?と。putpixel以外で
10秒ほどのほぼすべてを食ってると思ってよさそう。
評価値と閾値って言っても、1個手前の計算結果を
元に、差分使って積数の計算しているだけなので
(積数を毎回forループで計算してるわけではない)、
メモリアクセスはせいぜい数回してるだけ。それが
30万回。ミリ秒も掛からないだろう?と。
で、いざ1ステップずつコードを起動直後から眺めて
いくと、ふと、1ドット1ドット毎、ある関数を
呼び出していることに気づいた。
これ、仮に置いておいた関数(あとでちゃんと作り直す)
で、その中で平方和の平方根(sqrtを1回、powを2回)
使ってる。それが1ドットごとに4回計算されてる。
これもしかして遅いんじゃね? と思って、ここを
計算式取っ払って、仮の値に置き換えてみる。
…うん、速くなった。
速くはなったんだけど、まだ4秒くらいかかっちゃう。
1ドットあたり10ミリ秒以上かかっているくらいの
計算だなぁ。
うーーーん。あと一桁二桁速く処理できないの?
じゃないと、もっと大きい画像扱うのには、速度が
足らなさすぎる。
if文が遅いのか、それともメモリアクセス全体的に
遅いのか…?
リストのアクセスって、やっぱ遅いのかなぁ?なんて
思って、ちょっと検索。
https://qiita.com/pegasusBS15/items/75da968c9d3ee285f851
https://qiita.com/shaka/items/f180ae4dc945dc7b9066
決定打は見つからないなぁ。こまったな。
リストのアクセスが、実際にどのくらいの速度が掛かる
ものなのか、実験プログラムでも作って調べてみる
かなぁ?
それにしても、実験中にあれこれしてたときに、あれこれ
Lubuntu環境と行ったり来たりしてて、Lubuntu上のsamba
でファイルやり取りしてたんだけど、なんだかおかしい。
Windows10上のVirtualBoxで動かしているLubuntu上の
samba。Windows7からはこいつにアクセスできるのに、
母艦であるWindows10からアクセスが出来ない。
ついこないだまでちゃんとアクセスできてたから、
多分原因は今月(2019年1月)のWindows Updateだろうと
思うんだけどなぁ。
smb1は使ってないはずなんだけどな。
http://blog.livedoor.jp/nichepcgamer/archives/1073650652.html
それらしいことが見つからない…。
それにしても、ホント、今回のWindows Updateと称する
月例ウィンドウズダウングレードは、ろくでもないこと
しまくってるなぁ。曲がりなりにも有料ソフトだろう…
https://twitter.com/kantamizutamari/status/1086578012265443328
チャーハン。弩迫力
相変わらずアルコールストーブをaliexで物色してる。
https://ja.aliexpress.com/item/-/32915060438.html
安いんだけど、蓋が無いから、途中で火を止めて、燃料
をボトルに戻すってことが出来ないつくりなんだよな。
でも悪く無さそう。
https://ja.aliexpress.com/item/b-1/32850619856.html
五徳が一体型なので、これは便利そう。ただ、ちょっと
大きいよな。もっと薄型(高さが低い)でもいいんじゃ
ないの?という感じもする。持ち運びと安定性の観点で。
https://ja.aliexpress.com/item/-/32885617952.html
これも蓋は無いけど、ウィンドシールド付いてて、
なかなかのアイデア品って感じでいい。
https://shmineta.com/?p=3030
トランギアっぽいデザインで、蓋があって、火力調整も
出来て、コンパクトにたためる(or平べったくできる)
ウィンドシールドが付いてるとばっちりなんだけどな。
|
|
|
|
|
|