0

MIC (Intel Xeon Phi) の C コードでインライン asm を作成しようとしています。そして、jknzd命令に問題があります。

これは私のコードの一部です:

   float *A = (float*)_mm_malloc(N * sizeof(float), 64);
   int32_t* Indx = (int32_t*)_mm_malloc(N * sizeof(int32_t), 64);

   __m512i idx = __cdecl _mm512_load_epi32(&Indx[i]);
   asm (
          "kxnor %%k1, %%k1\n\t"
          "1:" "vgatherpf0dps (%0, %1, 4){{%%k1}}\n\t"
          "jknzd 1b, %%k1"
          :   
          :"r"(A),"x"(idx)
          :"%r8d", "%k1"
   );  

コンパイラは icc-13.0.1、オプション: -mmic -lrt -O3。コンパイルしようとすると、次のメッセージが表示されます。

/tmp/icc1XDD1vas_.s: アセンブラ メッセージ: /tmp/icc1XDD1vas_.s:237: エラー: 無効な文字 '{' オペランド 1 {rz-sae}' /tmp/icc1XDD1vas_.s:250: Error: invalid char '{' beginning operand 1{rn-sae} の開始' /tmp/icc1XDD1vas_.s:254: エラー: 無効な文字 '{ ' オペランド 1 の開始{rn-sae}' /tmp/icc1XDD1vas_.s:260: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:263: エラー: 無効な文字 '{' オペランド 1 の開始{rn-sae}' /tmp/icc1XDD1vas_.s:264: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:360: エラー: 無効な文字 '{ ' オペランド 1 の開始{rz-sae}' /tmp/icc1XDD1vas_.s:373: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:375: エラー: 無効な文字 '{' オペランド 1 の開始{rn-sae}' /tmp/icc1XDD1vas_.s:378: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:383: エラー: 無効な文字 '{ ' オペランド 1 の開始{rn-sae}' /tmp/icc1XDD1vas_.s:385: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:398: エラー: 無効な文字 '{' オペランド 1 の開始{rz-sae}' /tmp/icc1XDD1vas_.s:402: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:415: エラー: 無効な文字 '{ ' オペランド 1 の開始{rn-sae}' /tmp/icc1XDD1vas_.s:417: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:422: Error: invalid char '{' beginning operand 1{rn-sae}' /tmp/icc1XDD1vas_.s:421: エラー: オペランド 1 {rn-sae} の開始文字 '{' が無効です

「jmp 1b」のような簡単なジャンプがあればOKです。私は何を間違っていますか?

4

1 に答える 1

0

これは探しているものとはまったく異なる場合がありますが、組み込み関数を使用してマスク レジスタ内のゼロ以外の値をテストできます。

Intel MIC フォーラムのこのスレッドから、次のような解決策を確認できます。

if(!_mm512_kortestz(mask, mask)) // Returns true if at least one bit is 1
{}
于 2014-07-24T12:55:37.657 に答える