Matlab の高速化
Matlab と Fortran では提供していない高パフォーマンスな可視化機能が必要な場合、 どんな解決策はあるでしょうか?



最近の傾向として、シュミレーションのパフォーマンスは、 もはや優れた機能というだけでなく、差別化を図る手段となっています。 科学計算が驚くべき勢いで発展しており、科学データは、劇的に質および多様性に関しても増加しており、 並列プログラミングが必要不可欠な傾向となっています。 時流に対応するために、科学者とエンジニアは、高パフォーマンスなデータ解析とシュミレーション ツールが必要となります。このような来るべき時代を予期して、AnCAD 社は、問題の簡素化、 プログラムの統合、シュミレーションの可視化を一度に包括的に解決するソリューションを 提供します。



Matlab と Fortran の欠点
科学計算の市場では、 Fortran 90/95 と Matlab は、常に市場を支配するようなツールでした。 配列ベースの言語として、Fortran は市場の開拓者として、ベクトル化を使用して、 スカラの操作とベクトルの操作を変更することによって、コードを効果的に拡張してきました。 その高い性能にもかかわらず、可視化ライブラリをあまり多く提供しておらず、 グラフィカルなシュミレーションをコード化および生成するのは困難でした。 一方、Matlab は、反復的なコードのベクトル プログラミングを拡張することによって、 実行時間をできる限り削減してきました。ただし、より多くのグラフィックのサポートを 提供してきましたが、Matlab は、組み込まれたデータ構造が、大幅な速度の改良を妨げる場合には、 プロトタイプ用としてのみ Matlab を実行し、動的なシュミレーションとしては Matlab を実行しません。 これは、Fortran と Matlab 間での互換性の不足によるもので、科学計算の分野では、 高パフォーマンスと強力な可視化機能との間で苦渋の選択を強いられ、そのギャップを埋める 橋渡しが必要となります。



MATFOR、ギャップの橋渡し
今日まで、Matlab のパフォーマンスを改良する方法は一つ のみではありませんが、Matlab から Fortran への手動による変換が好まれてきました。 Matlab と Fortran 間の手動による変換は、その複雑さによって、多くの時間を浪費します。 明確なことは、Matlab と Fortran は、この問題を解決するようなコミュニケーションが必要ですが、 この問題を解決するために MATFOR (両方の利点を統合する革新的な橋渡し的なツールです) が登場しました。 MATFOR は、数値計算と可視化ライブラリのセットで、科学者とエンジニアは独自の Matlab ライクな 言語を使用して Matlab ライクなコードを記述し、MATFOR in Fortran では、高速 Fortran 環境で、 実際に演算を実行します。更に、MATFOR は Matlab および Fortran プログラマーに高度な可視化機能を 提供します。MATFOR の機能は、固体力学、流体力学、分子シュミレーションおよび電磁気解析などの さまざまな分野で利用可能です。高精度、高性能、可視化機能など注目すべき点を考慮し、 高パフォーマンスな可視化機能を必要とする Matlab と Fortran ユーザーにとって MATFOR は必要不可欠なツールと成りえます。
無料体験版ダウンロード提供中 !!



高パフォーマンスなツールキット
Fortran 90/95 および C/C++ ライブラリをベースとして、 MATFOR を開発しました。ベクトル化と並列化技術を使用して、実行時間を最小化します。 強力なコードの統合とデータの可視化に加え、MATFOR はその他にも、ランタイム アニメーション、 ムービー プレゼンテーションおよびスタンド アローンの実行可能ファイルの変換などの高度な機能を提供します。 MATFOR の "Graphic Viewer" は、後処理の必要性を克服し、ランタイム時に瞬時に科学およびエンジニアリング データを可視化します。"Graphics Export" 機能は、可視化ファイルをスタンド アローンの 実行可能ファイルに変換し、移植性と互換性を増すことによって、シュミレーション結果の プレゼンテーション機能を強化します。



ケース スタディ
簡単にシュミレーションを最適化するできることは、 すべての科学計算プログラマーの夢です。台湾 中央研究院の Dr. Pei-Kun Wei は、 最も一般的なシュミレーション ツールである Matlab を使用して彼の研究データの解析と 結果を可視化していたプログラマの一人です。Matlab を愛用していたユーザーでしたが、 Matlab のパフォーマンスにしばしば不満を抱いていました。彼は 2002 年に MATFOR と出会い、 新たな科学の探検の旅の始まりとなりました。

Dr. Wei は、数年間、PBG (Phonetic Band Gap - 音声バンド ギャップ) の分野の研究を行っていました。 Matlab が、科学計算を行うための唯一のツールでした。 Matlab の低いパフォーマンスと結果の共有とパブリッシングの難しさを解消するために、 Matlab のプログラムを他の言語に変換していました。さまざまなプログラミング言語に精通する 科学者として、Dr. Wei は、Fortran と Matlab の二つの言語の類似点から、 Matlab を変換する言語して、Fortran を選択するのが良いと分かりました。

数ヶ月の調査の後、彼は遂に MATFOR を見つけました。高パフォーマンスを持つ可視化機能で、 彼が抱えていたすべての問題を MATFOR が瞬時に解決し、彼はこの優れたツールキットに 大いに驚きました。Dr. Wei は、後になって分かったことですが、MATFOR の開発者も 実際に彼と同じ不満を Matlab に抱いており、それがこのツールの誕生の所以となっています。 Dr. Wei の研究は、高性能な可視化パフォーマンスでプログラムを改良するだけではなく、 多くの場合で、彼の研究結果をプレゼンテーションおよび共有するのにも MATFOR を活用してます。 MATFOR は、Dr. Wei の研究人生を変えました。



Matlab と Fortran 間の橋渡し
MATFOR の支援では、Matlab を Fortran に変換することは、 決して簡単なことではありません。以下のテーブルのように、Fortran での Matlab と MATFOR (独自の Matlab ライクな言語) 間での類似したシンタックスを纏めました。熟練したプログラマであれば、Matlab プログラムを 以下に簡単に MATFOR in Fortran に変換できるかを確認できるはずです。
Matlab
MATFOR in Fortran
Basic Assignment
a=1+2i a=(1,2)
a=[1,2,3]' a=.T. (/ 1, 2, 3 /)
Operator
a=x \ y % solve for x * a = y a=mfLDiv(y, x)
a=y / x % solve for a * x = y a=mfRDiv(y, x)
a=1:2:99 a=1:99:2
Math Function
a=inv(x) a=mfInv(x)
e=eig(x) e=mfEig(x)
Visual Function
surf(x,y,z) mfSurf(x,y,z)
h=plot(x,y,':') h=mfPlot(x,y,':')





コード例
以下のコードは、Dr. Wei の研究プロジェクトのソース コード からの抜粋で、ループ プログラムの例です (Waveguide Transmission in a PBG System)。 行単位で、二つの言語間の比較ができます。
Matlab
for lp=1:Loop
//
//
      Hxi(i,1:2)=Hx(i,1:2);
      Hxo(i,1:2)=Hx(i,NU:NU+1);
      Hzi(1:2,j)=Hz(1:2,j);
      Hzo(1:2,j)=Hz(MU:MU+1,j);
       ......
      if first,
//
//
            [MFX, MFY] = meshgrid(z(mz), x);
            MF1=n(:,mz);
            MF2=real(Ey(:,mz));
            contour(MFX,MFY,MF1);
            hold on;
            h2 = pcolor(MFX,x,MF2)
            first = 0;
      else
            MF2=real(Ey(:,mz));
            set(h2, 'cdata', MF2 );
            drawnow;
      end
end % end of for loop
MATFOR in Fortran
do lp=1,Loop
!Use Fortran native variables Hxi, Hxo, Hzi and Hzo
!to optimize calculation
      Hxi(i,1:2)=Hx(i,1:2)
      Hxo(i,1:2)=Hx(i,NU:NU+1)
      Hzi(1:2,j)=Hz(1:2,j)
      Hzo(1:2,j)=Hz(MU:MU+1,j)
      ......
      if(first) then
!Use MATFOR mfArrays, MF1, MF2, MFX and MFY
!to plot graphs
            call msMeshGrid(mfOut(MFX,MFY),mf(z(mz)),mf(x))
            MF1 = n(:,mz)
            MF2 = real(Ey(:,mz))
            mfSolidContour(MFX,MFY,MF1)
            call msHold('on')
            h2=mfFastPColor(MF2, mf((/ 0.04, 8.18, -Lx/2, Lx/2 /)))
            first=.false.
      else
            MF2 = real(Ey(:,mz))
            call msGSet(h2,'cdata',MF2)
            call msDrawNow()
      end if
end do !end of do loop




波シュミレーションのランタイム アニメーション
科学計算の分野の多くの主題は、波シュミレーションに関連しています。 以下の Dr. Wei の PBG システムのデモンストレーションを参照してください。図 1 と図 2 では、それぞれ、 Matlab と MATFOR でシュミレートした PBG システムの導波トランスミッションを示しています。 図 3 では、MATFOR を使用して他の方法で同じシュミレーションを表現しています。 MATFOR のコードを数行追加するだけで、Fortran のプログラムを 3 次元モードで可視化でき、 破壊的なインターフェースによって、指数関数的に減少するエネルギーをはっきりと表すことができます。


図 1。Matlab を使用した、PBG システムの導波トランスミッションのシュミレーション

図 2。MATFOR を使用した、PBG システムの導波トランスミッションのシュミレーション

図 3。MATFOR を使用した、3 次元モードの PBG システムの導波トランスミッションのシュミレーション




パフォーマンスの比較
Matlab と MATFOR in Compaq Visual Fortran を使用して生成された PBG シュミレーションの ベンチマークの比較は、以下のようになります。この結果から、明らかに Matlab よりも MATFOR を 使用した場合の方がパフォーマンスが良いことが分かります。MATFOR のパフォーマンスは、 ほぼ 5 倍近い値を示しています。パフォーマンスの比較に関しては、両方のバージョンのソース コードを ダウンロード可能ですので、ご検証ください。

OS: Windows XP SP2
CPU: Intel Pentium-M 1.6G
RAM: 512MB
VGA: NVIDIA GeForce FX Go5200(32 MB RAM)
Benchmark Target MATLAB 6.0 Compaq Visual Fortran 6.6B + MATFOR in Fortran 3.2
Execution time 869.36 sec (about 15 minutes) 181.66 sec (about 3 minutes)




備考

MATFOR の開発元の AnCAD 社の Web サイトの "Code Converter" を使用して、Matlab のコードと MATFOR のコードの対比を確認することができます。お試しください。