4

Windows 8 の Visual Studio 2012 で C++ AMP を使用していexperimentDataますexperimentFactors。2D array_view の最初の次元と 1D array_view の 1 次元を反復処理したいと考えています。これは私が持っているものですが、これにはオーバーロードがないというエラーが常に発生します。numberOfTests最初の次元であるを反復処理したいと考えています。私は行が欲しいです:

auto test = experimentData[idx];

データの行全体を返します。の方法はこれを行う方法だと思いますが、section方法array_viewがわかりません。

array_view<int_2, 2> experimentData(numberOfTests, numberOfSolutions, initialConditionSet);
array_view<float_2, 1> experimentFactors(numberOfTests, factorData);
extent<1> e_size(numberOfTests);

parallel_for_each(e_size, [=] (index<1> idx) restrict(amp) {
    auto test = experimentData.section(idx);
    auto factors = experimentFactors[idx];

    analysisAlgorithm(test, factors);
});

オブジェクトはのtest1xN セクションである必要がありますexperimentData array_view。オブジェクトは からのfactors1 つのアイテムである必要がありますexperimentFactors array_view

明確化

array_viewexperimentDataには M 行と N 列があります

array_viewexperimentFactorsには M 行があります

4

1 に答える 1

4

あなたが C++ に取り組んでいて、このような質問がある場合、または異なる次元へのデータの射影を扱う場合は、立ち止まってこの記事を読んでください。

http://blogs.msdn.com/b/nativeconcurrency/archive/2012/02/17/projections-in-c-amp.aspx

この正確な問題を美しい方法で扱います。私の parallel_for ループは次のようになります。

parallel_for_each(e_size, [=] (index<1> idx) restrict(amp) {
    array_view<int_2, 1> test = experimentData[idx[0]];
    auto factors = experimentFactors[idx];

    analysisAlgorithm(test, factors);
});

test配列の作成がどのように変更されたかに注意してください。タイプ の 1D 配列になると述べていますint_2。次に、この記事で説明した射影手法を使用して、データの行全体を で選択します= experimentData[idx[0]];。多次元配列にインデックスを 1 つだけ指定すると、その次元内に保持されているすべてのデータが選択されます。記事はこれをより明確にします。

于 2012-12-02T05:55:04.467 に答える