posted by rerofumi
2012/7/9 月曜日 3:35:52
拙作の Gerber to G-Code アプリである Gynostemma だけれども「遅いよー」と常々言っているように処理に時間がかかるのが難点である。
高速化のために書き直すのもちょっと困難なので現状のままで提供している次第。
(そしてよくつっこまれる)
全面書き直しせずに ruby 版でもまだチューンの余地はあるのだけれども、その中でもマルチコア向けにマルチスレッド対応が常々やりたいと思っていたところ。演算のループやインスタンス構成をマルチスレッド用に改変しなくてはならないので手を出してこなかった。
IronRuby は .NET ベースなのでスレッドを使うと一応ネイティブスレットで駆動するようになる。パスの計算をマルチスレッド化すれば少しは早くなるのでは無いかといった目論見。
以下にマルチスレッド対応版を置いておく。
今回ちょっと大きく変わりすぎているのと検証が不十分なので「おためし版」としてのリリースとさせてもらう次第。問題があったら従来版に戻っていただきたい。
Download: gynostemma-20120709.zip (1.34MB)
手元の環境でベンチマークを取ってみた。
CPU は Core i7-3930K 6コア 12スレッドのマシン。
テストの基板は先日作成した電源ステーションのものを 2パスで作成。
スレッド数 | 処理時間 |
---|---|
旧版 | 7min 34sec |
1 | 8min 53sec |
2 | 5min 24sec |
4 | 3min 32sec |
6 | 3min 19sec |
8 | 3min 07sec |
10 | 2min 58sec |
12 | 3min 07sec |
見てわかるように、 1スレッドでは逆に遅くなってしまう。マルチスレッド化のために検索構成を変えているのが原因だけれども、世の中うまくいかないものですな。
旧版が 1スレッドなりに幾分最適化はしてあったということでもあるのですが。開発中のものは基板1枚の計算に半日かかっていたものです :-)
4コアマシンをお持ちの方であれば、旧版の半分の時間で演算を終わらせる事ができると思う。2コアの方もおためしあれ。
Preference に演算で使うスレッド数の指定が追加になっている。
Default値は 2 なので、手持ちの環境や他のアプリへの影響を考えつつ設定して欲しい。
パス数と同じく、パスビルド時の確認ダイアログでも指定することができる。ここで指定した値は Preference で記録されないので、今回は減らす(増やす)といった単発使用のときに変更して欲しい。
というわけで今回は様子見リリース。
なんか不具合があったらご指摘ください。
7月 11th, 2012 at 19:03:34
gynostemma、試させていただいてます!
ちょっと気づいたのですが、外形線にツールの直径が反映してないようですが、どうでしょうか?
あと出来れば、基板の外形のくりぬきには別の切削用のエンドミルを使いたいので、外形用のツールの直径を別に設定できるとうれしいです。
7月 12th, 2012 at 1:02:54
はい、これは現在のところ仕様ですね。
設計の際、ツール経を考慮して外形を書いてくださいとお願いしています。
なんでかというとカッティングの外形線が「必ず閉じた形状であると限らない」から、内外の判別が難しい(そもそもできないかも知れない)というのが理由です。
外径内に穴があいていたり凹型の非矩形だった場合にうまくいくのかといったあたり地味に難易度が高くてですね。
とはいえ、私も使っていてわざわざ自分でオフセットさせるのが面倒になるときがあります。
ツール経が設定されていたら閉空間があると判断して外周抽出を行い、設定されていなかったら外形をそのままパスとするといった感じでも良いのかも知れません。
ちょっと研究してみますが、外周をきちんと計算させるのがいささか面倒なので実装できるかどうかは保証の限りではありません。
ごめんなさい。
7月 12th, 2012 at 1:31:18
なるほど、確かに外形は必ずしもきちんと閉じてない可能性ありますね。
試しに変換してみたガーバが、絶縁スリットがあるものだったのでちょっと気になりましたが、あらかじめガーバの外形線の太さをツールの太さに合わせておけばなんとかなりそうですね。
大変便利なツール、ありがとうございます!m(_ _)m