前回予告で「息子くんVRコンテンツを作った」記事を書こうと思ってたんですけど、
開発中の一式を修理中のノートPCに入ったまま出してしまったので、こっちから書きます(;^ω^)
アスキーアート動画変換の続編です。
動画をアスキーアート動画に変換するというプログラムを作っています。
性能改善をしたい!
性能改善案その1-OpenGLを使ってみる
作った当初から性能改善をしたいと言ってて、前回記事の終わりのほうでも書いてます。
最初にOpenGLを使ったらどうかな!と思ったらしいのですが、諸事情により不可能と判断し断念。
(前回記事「小6息子くんアスキーアート動画コンバーターを作る」を参照してくださいね)
性能改善案その2-GPUは?
前回はノートPCで作ってましたが、現在ノートPCが修理中で無いので自作デスクトップPCで開発してます。
しかしCPUはノートPCの方がCPU性能いいんですよ。(ノートPCはCore-i7、デスクトップはCore-i5)
でもでも、デスクトップPCのほうが勝るものそれはグラフィックボード!
↓ 先日つけたまさにコレコレ☆
siroitori.hatenablog.com
グラフィックボードを使って、つまりGPUで処理させてみたらどうだろう!と思ったらしいです。
がしかし、GPUの性能良くてもメモリが2GBなのでどうかなぁという懸念をもちつつ、
でもやってみよう、と思ったらしいのですが、GPUに画像処理をさせる情報がうまくみつけられなかったらしく「できるはずなんだけど…」と言いながらこれも断念。
ていうかCPUの処理をGPUにさせるなんてことができるんですねえ!?私知りませんでした。
性能改善案その3-マルチプロセッシングで動かす
結果から言いますと、これで大幅な性能改善に成功しました!!
「マルチスレッド」については私VBやなんかで以前よくマルチスレッド処理は書いてましたが、果たして今回の対処が「マルチスレッド」にあたるのか?書き方が正しいのか不明ですが…。→「マルチプロセッシング」と息子くんに訂正されました。
「論理プロセッサ」というものを使うらしいです。
タスクマネージャのCPU画面。
ここで右クリック→グラフの変更→論理プロセッサ
とすると、
画面が4つになりました!
これは、CPUに4つの論理プロセッサが存在するということらしく、4スレッドの処理を走らせることができるということなのだそうです!( ゚Д゚)
ちなみに、我が家の家族用のノートPC(Core-i7)では下記のように8スレッド表示されました!
そして、ソースコードには、下記のように修正を入れてました。
pythonでこのように書いたらマルチプロセッシングで書けるんですね。へー。
さらに、上記のように multi.cpu_count() で現在使っているPCの最大論理プロセッサ数がとれるらしいです。
from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': with Pool(5) as p: print(p.map(f, [1, 2, 3]))
multiprocessing --- プロセスベースの並列処理 — Python 3.8.1 ドキュメント
そもそもアスキーアート動画変換実行中に、CPU使用率があまり上がらないことに疑問を持ってたそうです。
なるほど「1スレッドしか使ってなかったからか」と。
日々、マニア度を増していく息子くん。
一生懸命私に説明してくれますが、私の脳みそがなかなかついていけないお年頃。。
こうやってブログを書いて理解しようと頑張っています(;^ω^)
がんばれ息子くん!
そして私!
おまけ
前回嬉しいはてブコメントいただいたのでここでお返事を(*^▽^*)
id:nakarobo さん
自力修理ですね!
8月にいただいたばかりだったのでその選択肢は思いつきもしませんでした。
次回はそれやりたいと思います♪
いつもありがとうございます^^
id:Thoth さん
コメントありがとうございます^^
高専すごいですよー
うち頭が足りないから高専は到底・・・(;^ω^)
キャッチボールも逆にうらやましいですよ。超インドアなので・・・
↓ 友達100人できるかな?
スター・はてブとても嬉しいです!