- ベストアンサー
プログラムの実行速度は何で決まる?
- プログラムの実行速度はCPUのクロック周波数によって決まるのか?
- VBAを使った計算ではプロセッサの数を増やしても速度が変わらないのか?
- 他のプログラム言語ではマルチプロセッサを効率的に活用して計算速度を上げることが可能か?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問者さんのCPUは両方とも2coreですので、使用するプロセッサを増やせても高々2倍の計算速度しかでません。 計算速度は処理系の影響がかなり出ます。 VBAがどの程度の速度が出るのかは分かりませんが、Excelと密接な関係があると思われるのと、処理内容にもよりますが計算時間が24秒程度とかなり遅いので他の処理系を使われた方が、高速になると思われます。 (実際にはどのような計算をしているのでしょうか??) FORTRANやCなどのコンパイラを使えばCPUの性能ぎりぎりまで高速化できますがプログラム作成が簡単ではありません。普通の数値計算の場合には質問欄に書かれているmatlabなどを使うのが現実的だと思います。類似したフリーのソフト(Scilab, Octave, RなどWindows、Mac、Linuxで使用可能)がありますので、以前回答したリンクを貼っておきます。 http://oshiete1.nifty.com/qa7584169.html ベクトルや行列計算の形にすればかなり高速化が期待できます。数値計算の場合は繰り返し計算を多く含んでいるのでそこをベクトルや行列計算の形にします。
その他の回答 (3)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
>No.2お礼 ざっと調べた感じ、VB.NetではThreadクラスがあるようですが、 http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_02.html VB/VBA、mathematica、matlabはわかりませんので。。。 VBAを使わない場合の、あくまで予想、推測ですが。 小計A、小計B、小計C → 合計 の場合、 小計を出す部分をシートに分けて、SUMでそれぞれ小計を出しておき、 もう一つ合計を出すシートで、SheetAの小計+SheetBの小計+SheetCの小計を表示するようにすれば、マルチスレッドになるんじゃないでしょうか。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
VB/VBA、Excelは門外漢ですが最新の投稿で見かけましたので。 考え方として 小計A、小計B、小計C → 合計 という計算を行う場合、 各小計を出す部分をマルチスレッドで同時に計算すると少し早くなります。 ----------------- Excel2007以上はマルチスレッドに対応しています。 http://msdn.microsoft.com/ja-jp/library/aa730921(v=office.12).aspx 『マルチ スレッド計算』の項目参照 >1 つの連続的な数式のチェーンを含むブックを作成した場合、マルチ スレッド計算 (MTC) によるパフォーマンスの向上は見られません。一方、複数の独立した数式のチェーンが含まれるブックでは、使用可能なプロセッサ数に比例してパフォーマンスが向上します。
- t_ohta
- ベストアンサー率38% (5292/13826)
マルチプロセッサを効率的に使うには、その計算が並列で処理できるものかが重要です。 ある計算をして、その結果を元に次の計算をするような場合は、同時に計算できないので順番に処理されることになってしまいます。 それと、Excelはマルチプロセッサに対応(並列処理に対応)したソフトではありませんので、コアが沢山入ってるCPUを使っても、どれか1個のコアしか使わないでしょう。
お礼
ありがとうございます。 教えて下さった箇所を読んでみましたが、具体的にどのようなコードを使えば良いのか分かりませんでした。 例えば、下記の並列プログラムをマルチスレッドで計算したい場合、 どのように改良すれば良いでしょうか? for i=1 to 10000 i = i +1 next for j=1 to 10000 j = j +1 next k = i + j