2

Microsoft Visual Studio 2012 Express を使用して、Win 32 ビットおよび x64 ビット設定で「for」ループを自動並列化しようとしました。コマンド ライン オプションが /O2 /Qpar /Qpar-report:2 に設定され、最適化、自動並列化、および "for" ループ自動並列化の成功と失敗のレポートが有効になりました。32 ビットから 64 ビットの設定は、次の方法で変更されました: ( http://msdn.microsoft.com/en-us/library/vstudio/9yb4317s.aspx )。64 ビット バージョンの Windows がコンピューターで実行されています。私が使用したサンプル コードは、ここからのものです: ( http://msdn.microsoft.com/en-us/library/hh872235.aspx )。私が実行したコードは次のとおりです。

int A[1000];
void test() 
{
___#pragma loop(hint_parallel(0))
___for (int i=0; i<1000; ++i) 
___{
______A[i] = A[i] + 1;
___}

___for (int i=1000; i<2000; ++i) 
___{
______A[i] = A[i] + 1;
___}
}

int main() 
{
___test();
___return 0;
}

Win32 でビルドすると、次のレポート出力が得られます。

--- Analyzing function: void __cdecl test(void)
d:\myproject\mytest.cpp(4) : loop parallelized
d:\myproject\mytest.cpp(4) : loop not parallelized due to reason '1008'

x64 でのビルドでは、「ループが並列化されている」または「ループが並列化されていない」という報告はありませんでした。

なぜ報告がなかったのですか?Visual Studio 2012 Express しか持っていないのに、VS 2012 Professional が必要だったからですか? これはすべてのコンピューターで発生しますか、それとも VS 2012 のすべてのバージョンで発生しますか? 64 ビット Microsoft Visual Studios プロジェクトで自動並列化レポート ( /Qpar-report:2 ) を有効にするには、この問題をどのように修正すればよいですか?

4

1 に答える 1

3

/Qpar-report は、製品版の x64 コンパイル モードで適切に機能します。Express は、コンパイラの特別なビルドを使用しません。

考えられる説明は、x64 構成の /Qpar-report オプションも設定するのを忘れたことです。これらの設定は、構成ごとに保存されます。プロジェクトの [プロパティ] を右クリックします。ダイアログの上部にあるコンボ ボックスをチェックします。適切な構成とプラットフォームが選択されていることを確認してください。

リリース ビルドでは必ずこれを行ってください。デバッグ ビルドでは、これらのループが並列化されません。

于 2013-04-28T16:22:08.093 に答える