« Excel VBAでセル内での改行 | トップページ | センター試験数学のプログラム問題をVBAで »

2010年1月18日 (月)

マルチコアとVBA

今使っているパソコンが
シングルコアかマルチコアかは
タスク マネージャでわかります。

タスクマネージャは
「ファイル名を指定して実行」で
taskmgr.exe
と入力してOKを押して実行できます。

タスクマネージャの「パフォーマンス」のところ
「CPU使用率の履歴」の枠を見てください。

シングルコアは
Pic20100118a

ダブルコアは
Pic20100118b

クアッドコアはここが4つになっています。

長く時間のかかるプロシージャを実行してみると
シングルコアの場合
CPU使用率が100%くらいになります。
Pic20100118c

一方、ダブルコアの方は
CPU使用率は50%くらいです。
Pic20100118d

なぜかといって調べてみると
どうもExcel2000がマルチコアに対応していない
らしいのです。

いろいろ検索して
こんなページを見つけました。
パソコン雑誌:DOS/V POWER REPORTのWebページです。

2007 Office systemはマルチコア CPUで使え!

なるほど、
ここを読むと
マルチコアに対応しているOfficeのバージョンは
2007からで
それ以前のバージョンは
マルチコアのパソコンで使っても
CPUを使い切れないみたいです。

そーかー
このマルチコアのパソコンも
Office2007にすれば
もっと速くなるんだー

と思った方、待ってください。
私はこれで失敗しました…

何日もかかるプロシージャを実行していた私は
この情報でOffice2007に飛びつきました
(OEM版ですが、あはは)

届いて早速使ってみました。
遅いです(泣)
タスクマネージャで見てみると
確かにCPUはフルに使えているようなんですが
遅いです(泣)

なじぇーと思ってまた検索…
こんなんでましたけど~
msdnのページです。

Excel 2007 における パフォーマンスの改善

VBAのユーザー定義関数は

常にメイン スレッドで動作し、何個のプロセッサまたはスレッドが使用されていても、一度に 1 つずつしか実行できません。

とあります。

FunctionプロシージャとSubプロシージャの違いは
値を返すか返さないかで
中でやってることは自分でプログラムしたものなので
結局、自分で作ったプロシージャは
マルチコアのパソコンで
Excel2007で実行しても速くならない。

こう、私は理解しましたが(知識不足で確信できません)
もちろん、マルチスレッド計算以前の
VBAマクロを速くする工夫あってのことです。

それにしても
同じ「何日もかかるプロシージャ」を
同じパソコンを用いて
Excel2007とExcel2000の両方で実行したところ
Excel2007の方が遅くてビックリです。
同じくらいなら納得できますが…

最終的にOffice2007はお蔵入りに…

このmsdnのページはExcel2007でなくても
参考になります。

特に、
今までプロシージャの速度を測るのに
Time 関数を使っていたので
MICROTIMER() 関数は重宝しそうです。

|

« Excel VBAでセル内での改行 | トップページ | センター試験数学のプログラム問題をVBAで »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: マルチコアとVBA:

« Excel VBAでセル内での改行 | トップページ | センター試験数学のプログラム問題をVBAで »