プログラムの実行速度は何で決まる?

このQ&Aのポイント
  • プログラムの実行速度はCPUのクロック周波数によって決まるのか?
  • VBAを使った計算ではプロセッサの数を増やしても速度が変わらないのか?
  • 他のプログラム言語ではマルチプロセッサを効率的に活用して計算速度を上げることが可能か?
回答を見る
  • ベストアンサー

プログラムの実行速度は何で決まりますか?

Excel2010附属のVBAで数値計算プログラムを作成し、 5年前に7万円(モニター抜無し)ほどで自作したデスクトップPC Intel Core 2 Duo E8400 3GHz 6MB LGA775 メモリ 4GByte 半年前に12万円で購入したノートPC i5-2540M Processor 2.6GHz メモリ 4GByte OSはともにwindows 7 64bit。 この二つで計算を行い計算時間の比較を行いました。 結果は、 デスクトップPCだと24秒 ノートPCだと29秒 という結果が得られました。 おおよそ24 : 29 = 2.6 : 30 の比率になっていると思います。 これってVBAによる計算はプロセッサの数を増やしても変わらず 一つのプロセッサのクロック周波数のみによって決まるということですよね? VBAを使って、マルチプロセッサを効率的に活用して計算速度を上げることは可能でしょうか? mathematicaやmatlabといった他のプログラム言語だとこういったことに対応しているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

質問者さんのCPUは両方とも2coreですので、使用するプロセッサを増やせても高々2倍の計算速度しかでません。 計算速度は処理系の影響がかなり出ます。 VBAがどの程度の速度が出るのかは分かりませんが、Excelと密接な関係があると思われるのと、処理内容にもよりますが計算時間が24秒程度とかなり遅いので他の処理系を使われた方が、高速になると思われます。 (実際にはどのような計算をしているのでしょうか??) FORTRANやCなどのコンパイラを使えばCPUの性能ぎりぎりまで高速化できますがプログラム作成が簡単ではありません。普通の数値計算の場合には質問欄に書かれているmatlabなどを使うのが現実的だと思います。類似したフリーのソフト(Scilab, Octave, RなどWindows、Mac、Linuxで使用可能)がありますので、以前回答したリンクを貼っておきます。 http://oshiete1.nifty.com/qa7584169.html ベクトルや行列計算の形にすればかなり高速化が期待できます。数値計算の場合は繰り返し計算を多く含んでいるのでそこをベクトルや行列計算の形にします。

その他の回答 (3)

回答No.4

>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の小計を表示するようにすれば、マルチスレッドになるんじゃないでしょうか。

回答No.2

VB/VBA、Excelは門外漢ですが最新の投稿で見かけましたので。 考え方として 小計A、小計B、小計C → 合計 という計算を行う場合、 各小計を出す部分をマルチスレッドで同時に計算すると少し早くなります。 ----------------- Excel2007以上はマルチスレッドに対応しています。 http://msdn.microsoft.com/ja-jp/library/aa730921(v=office.12).aspx 『マルチ スレッド計算』の項目参照 >1 つの連続的な数式のチェーンを含むブックを作成した場合、マルチ スレッド計算 (MTC) によるパフォーマンスの向上は見られません。一方、複数の独立した数式のチェーンが含まれるブックでは、使用可能なプロセッサ数に比例してパフォーマンスが向上します。

motarou
質問者

お礼

ありがとうございます。 教えて下さった箇所を読んでみましたが、具体的にどのようなコードを使えば良いのか分かりませんでした。 例えば、下記の並列プログラムをマルチスレッドで計算したい場合、 どのように改良すれば良いでしょうか? for i=1 to 10000  i = i +1  next for j=1 to 10000  j = j +1  next k = i + j

  • t_ohta
  • ベストアンサー率38% (5085/13287)
回答No.1

マルチプロセッサを効率的に使うには、その計算が並列で処理できるものかが重要です。 ある計算をして、その結果を元に次の計算をするような場合は、同時に計算できないので順番に処理されることになってしまいます。 それと、Excelはマルチプロセッサに対応(並列処理に対応)したソフトではありませんので、コアが沢山入ってるCPUを使っても、どれか1個のコアしか使わないでしょう。

関連するQ&A

  • 数値計算の速度について

    ノートPCとデスクトップで 以下に相当する数値計算を比較しました。 double sum=0.; for(int i=0;i<1000*1000*1000;i++){ sum+=1./(double)(i+1)/(double)(i+1); } スペック等は以下のとおりです。 ノートPC 機種:Dell inspiron 1501 CPU:Athlon 64 x2 周波数については必要なら明日書きます。 OS:windowsXP 実行環境:Eclipse上でJava デスクトップ 機種:IBM IntelliStation M Pro CPU:Core 2 Duo 6700 2.66GHz OS:Ubuntu8.10 実行環境:C++(コンパイラはg++) すると、ノートPCでは21秒(たぶん実時間?)、 デスクトップでは28秒(CPUタイム)となり、 ノートPCのほうが速いという結果になりました。 なぜこの様な結果になるのでしょうか? デスクトップのほうがいいCPUを用い、 同条件ならC++はJavaよりも速いはずだと思います。 自宅PC用にIBM IntelliStation M Proを購入したのですが、 思いのほか遅くて多少がっかりしました。 ひょっとすると、計算速度を上げるコツがあるのでしょうか?

  • プログラム言語に上下関係ってありますか?

    プログラム言語に上下関係ってありますか? 私は、普段プログラミングするとき、表計算ソフトとの連携が容易であり、 グラフ化が簡単にできると理由から、Excelに付属のるVBAを使います。 しかしながら、私の中ではVBAはExcelに毛が生えた程度で、 極めて初心者用のプログラムだと思っています。 やはりC言語やMathematicaの方がプロ仕様という感じがして、 レベルが上のように思います。 そのため、他人にそのプログラムは何で書きましたか? 聞かれたときに、「VBAです」と答えるのですが、「何だVBAか」と思われていないかと 少し引けを感じてしまいます。 でも、実際、どうなんでしょうか? 勝手に私の中でVBAよりC言語やMathematicaの方が偉いと思っているだけなのでしょうか? それとも実際に、ほとんど人が同じように思っているのでしょうか?

  • corei7 実行速度が遅い その2

    「core2duo(E8300 @2.83GHz)で、14秒かかる処理が、 corei7(620M 2.66GHz)では、78秒と、約5倍も遅く、困っています。 OSはどちらもXPservicepack3です。」 上記の質問を以前出させてもらいましたが、回答が滞っておりますので、 その2として新たに質問させていただきます。 いろいろ試行錯誤した結果、以下の事実がわかりました。  (1)XPsp3+core2duo(E8300 @2.83GHz)で、14秒  (2)XPsp3+corei7(620M 2.66GHz)で、78秒  (3)Win7pro+corei7(620M 2.66GHz)で、10秒 ・上記のcorei7(620M 2.66GHz)は、同じPCです。  ・BIOS設定は工場出荷デフォルト(ブートデバイス優先度変更のみ) ・実行してるプログラムは、永久ループ(決められた回数繰り返したらwinメッセージ有無を確認し処理する)しており、ディスクアクセス/LAN通信などのI/Oは行っておりません。 Win7では問題なく高速動作することがわかりましたが、諸事情がありXPでの動作が目標です。 どなたか、このような問題を経験をした方、XPでの対処方法がわかりましたら、お知らせください。

  • メモリとはシステムメモリのことでよいですか?

    ノートパソコンのメモリがどれくらいか調べていて クロック周波数:1.0GHz システムメモリ:1GByte キャッシュメモリ:1MByte と書いてあったのですが これはメモリが1GB入っているということで合っていますか?

  • 表計算上の式がVBA実行中に、メモリを占領して実行速度が遅い。

    エクセルVBAで、表計算上の式がVBA実行中に出てきた結果を用いて再計算しようとするのでメモリが表計算に占領されてしまいます。なのでとても実行完了までに時間がかかります(フリーズしたように遅いです)。 できれば表計算の式が、VBA実行時に再計算されないようにしたいのですがどうすればよいでしょうか? PS:表計算上の式は、沢山ありいずれはVBAに組み込みたいと考えてはいますが、現時点ではそれはできないのでなんとか今の状態を残したままスムーズに実行できるようにしたいと考えております。宜しくお願い致します。

  • プログラムで関数は使わない方が速くなる?

    大きなプログラムを書く際、プログラムの見通しが良くなり、後から修正しやすくするため、 同じ計算が複数回出る際には関数を多用したものを作成してきました。 ところが、プログラムの計算速度を上げたいと思い、計算時間を比較してみたところ、 関数を使わない方が圧倒的に速くなることが分かりました。 Matlabを使って、 for j = 1:100000 for i = 1:1000 y = i*i * j *j; end end の計算を行った際の計算時間と、ループ内の計算を関数で置き換えた for j = 1:100000 for i = 1:1000 y = zikan_sokutei_function ( i, j ); end end function [ kei ] = zikan_sokutei_function ( i, j ) kei = i * i * j * j; end の計算を行った時間は、 それぞれ、0.5秒と1分7.3秒、という結果になりました。 つまり関数で置き換えたことで、計算時間が実に135倍も増大したということです。 上記と同じプログラムを使ってVBAで比較したところ、 それぞれ、8.29秒と20.70秒、という結果になりました。 つまり関数で置き換えたことで、計算時間が2.5倍も増大したということです。 また、関数を使わない場合には、Matlabが最速で、関数を使う場合にはVBAが最速であるという結果になっています。 これは関数を全く使わない方が、圧倒的に高速に計算を実行できるという結果になっていますが、 こういうものなのでしょうか? 2倍程度なら許容範囲ですが、100倍以上も遅くなるのであれば、 関数は全く使うべきではない、ということになりますが、なぜこれほどまでに時間がかかるのでしょうか? Matlabの方がVBAよりも数値計算に適しているため、VBAよりも実行速度は速くなるべきだと思いますが 関数を使った場合には、これが逆転してしまうという、かなり腑に落ちない結果となりましたが、 こういうものなのでしょうか?

  • 回線速度

    我が家ではデスクトップとノートPCを一台のルータで使用しています。 両方とも有線、スペックは少し違いがあります。 回線速度にかなりの違いがでます。 計測してみたところ、デスクトップの下りが約70Mbsなのに対し ノートPCはせいぜい30Mbs程度です。 容量の大きいファイル、例えばネットゲームのクライアント等をダウンロードするときなどは デスクトップが30分で終わるのに対し、ノートは1時間半かかるといった具合に 速度にかなりの差が出ます。 計測の結果自体は30Mbsもでていれば十分と思ったのですが、スピードに差があるとはいえ 同じサイトからクライアントをダウンロードするのにかなりの差が出るので、別に要因があるのかな?と思い質問させて頂きました。 デスクトップ OS Windows7 64bit CPU Intel Corei7-2600 3.40GHz メモリ 16GB ノート OS Windows7 64bit CPU Intel Corei7-4700MQ 2.40GHz メモリ 8GB 同じような症状、または何かしらの解決策をおわかりの方がいましたら ご教授していただけると助かります。

  • インターネットの表示速度

    今家に2台PCがあります。 デスクトップはTWOTOPで注文したBTOで、 CPU P4 2.80CGHz メモリ 1GB HDD 120GB(空き容量46GB) ノートPCはNECのVersaPro Rシリーズ。PCVY22XUXRLで、調べたら2003年10月発売で既に販売完了してる製品。これは学校が一括注文したため買えた法人用ぽい。 CPU セレロン2.20GHz メモリ 256MB HDD 40GB(空き容量25GB) デスクトップはパーティション分割などしていない。 たまたま冬休みという事もあり家にPCを並べてみたのだが、 ウェブページの表示速度が明らかにノートPCの方が速い。 ページにもよるけど、ちょっと重いかなというページは下手すると 10秒経ってもデスクトップでは表示が終わらないがノートは1秒ぐらいで 表示完了される。P4の方がセレロンより高速だと思うし、 空き容量はデスクトップも十分あると思う。3Dゲームのテストじゃないので デスクトップ側がむしろ高速だと思うのですがなぜノートPCの 方が表示が速いのか分かる方おりますか?もし改善できるのであれば デスクトップの表示速度向上をしたいので、対処方法も書き添えていただけるとありがたいです。

  • 光ファイバーの速度はOSによって左右されるの?

    有線ブロードネットワークの光ファイバーを使ってます。 我が家には二つのPCがあり、 ひとつはデスクトップで、win2000、cpu1GHz、メモリ128MBです。 もうひとつはノートで、winxp、cpu1GHz、メモリ384MBです。 デスクトップのほうが約30Mbpsなのに対し、 ノートは約60Mbpsです。 2倍近く違いますが、一番の大きな差はやはりOSでしょうか。 メモリの違いでしょうか。 教えてください。

  • メモリとプロセッサのどちらか片方を高くしても動作速度はかわらないのでしょうか?

    お世話になります。 早速ですが、現在ノートパソコンの購入を下記2パターンで検討しています。 パターン(1)メモリ 2GB(オンボード)  プロセッサAtom Z550(2 GHz)  HDD 64G (2)メモリ 2GB(オンボード)  プロセッサAtom Z530(1.60 GHz)  HDD 128G そこで、一点教えて頂きたいのが、 メモリが2GBのときに、プロセッサが、2GHzの場合と1.60GHzの場合では メモリが2GBということからあまり、動きの速さはかわらないのでしょうか? ※昔、片方だけ、急激に高くしてももう片方の性能が低いと全体として あまりかわらないと聞いたことがありまして。。。 お手数ですが、なにとぞよろしくお願いします。