2

私は研究室で EMG データを分析しています。ステップの 1 つは、データセット (サイズ ~80000) の連続ウェーブレット変換を計算することです。したがって、ウェーブレット ツールボックスと "cwt" を備えた Matlab を使用して、3D スカログラムをプロットします。

計算には多くの時間がかかり、3D 回転 (データのさまざまな側面を確認するために非常に重要) などの相互作用はほぼ不可能です。

リソース モニターは、ヘキサコア プロセッサの 1 つだけが動作していることを示しています。私は他の計算に並列計算を使用していますが、このような解決策や同様の質問さえ見つけていません。

プロットのマルチコア サポートを有効にするためにできることはありますか?

4

2 に答える 2

1

私は知識に基づいた推測を危険にさらし、答えをふっくらさせますあなたの質問にいいえあなたの質問にいいえプロットのマルチコアサポートをアクティブにするために私ができることはありますか?

Matlabは確かにその計算に複数のコアを使用できます。その組み込み関数の多くはすでにマルチスレッド化されており、プログラマー(またはユーザー)が特別な措置を講じることなく、利用可能なコアを使用します。独自の計算には、ParallelComputeToolboxを使用できます。

ただし、非常に特殊なグラフィックハードウェアがない限り(そして、なぜ言及しなかったのか)、3Dプロットを操作するときに、画面と画面の間のどこかで1つのプロセッサしか使用されていない理由がディスプレイに表示されます。コンピューターのハードウェアには、これらすべてのコアの出力を1つのビットとバイトのストリームに圧縮して表示するボトルネックがあります。

あなたの経験は、Matlabの視覚化ルーチンであるというボトルネックと一致しています。提示した証拠から、Mathworksは、プロット内の各要素の新しい画面位置を計算するルーチンをマルチスレッド化していないと結論付けるのが安全だと思います。それを回転させるか、分析結果を1つまたは複数の画像に変換するために実行されるその他の処理のいずれかを実行します。それらのルーチンを並列化した場合、ボトルネックはシフトしますが、それを取り除くことはできません。

ボトルネックを取り除くには、さまざまなMatlabスレッドが画面のさまざまな部分に個別に対処する方法が必要になります。Matlabにその機能があるという証拠はありません。Googleは、パラレルレンダリングへの参照を大量に見つけますが、Matlabが現在これのいずれかの側面を実装している兆候は見られません。

残念ながら、あなたが書いたコメントに応えて、データをリサンプリングすることはできません。サンプル数が使用可能なピクセル数。水平方向に2000ピクセルのディスプレイで、80000サンプルの時系列を視覚化する場合、何かを与える必要があります。

自分でリサンプリングを担当すると、グラフィックスのパフォーマンスと理解が向上する可能性があります。

于 2012-07-10T14:31:02.287 に答える
1

Matlab のプロット パフォーマンスはかなり悪く、パフォーマンスよりもカスタマイズ性に重点が置かれています。MEX を使用してネイティブ C++ コードを実行し、OpenGL でデータをプロットすると、はるかに高速になる可能性があります。

于 2012-07-10T14:38:29.350 に答える