2013-08-29 22 views
0

我的目標是使用Cilk Plus陣列符號與英特爾的icc編譯器版本13.1.3 20130607,基於隱式索引值爲陣列有條件地賦值。是否可以在使用Cilk Plus數組符號的`if`語句中使用`__sec_implicit_index`?

考慮下面的代碼:

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; 
     } 
    } 

回答

1

該示例是正確的。問題是icc 13.1.3中的一個錯誤。 icc 14.0 beta正確編譯併爲我執行了這個例子。

對於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; 
    } 
} 

它當然失去了數組符號的符號方便。

+0

謝謝,太好了!另外,感謝關​​於'#pragma simd'的提示!我現在記得在文檔中瀏覽過這些內容,但完全忘記了它。 – naitsirhc

相關問題