0

icc私の目標は、Cilk Plus Array Notation と Intel のコンパイラ バージョンを使用して、暗黙的なインデックス値に基づいて条件付きで配列に値を割り当てることです13.1.3 20130607

次のコードを検討してください。

    T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    if(test[:] < 5) {
        test[:] = 10 - __sec_implicit_index(0);
    }

このコードは正常にコンパイルされますが、実行しようとすると次のエラーが発生します。

undefined symbol: __sec_implicit_index

注:これはリンク エラーのように見えるかもしれませんが、そうではありません。次のコードは正常にコンパイルおよび実行されるためです (条件は削除されています)

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
test[:] = 10 - __sec_implicit_index(0);

それで、私の質問: Cilk Plus Array Notation を使用して、以下の条件付きコードの動作を達成することは可能ですか?

    T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for(int i = 0; i < 10; i++) {
        if(i < 5) {
            test[i] = 10 - i;
        }
    }
4

1 に答える 1

1

例は正しいです。問題は icc 13.1.3 のバグです。icc 14.0 ベータ版は、サンプルを正しくコンパイルして実行しました。

icc 13.1.3 では、ベクトル化の許可を示す方法として、#pragma simd の方が一般的に信頼性が高いことがわかりました。これにより、例は次のようになります。

T test[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
#pragma simd
for(int i = 0; i < 10; i++) {
    if(i < 5) {
        test[i] = 10 - i;
    }
}

もちろん、配列表記の表記上の利便性は失われます。

于 2013-08-30T14:37:42.440 に答える