2016-08-05 12 views
-1

私には狂ったセグメンテーションフォールトの問題があります。未知のセグメンテーション障害の問題

これはコードです:

  for (k = 0; k < range; k=k+4) 
     { 
      int k1,k2,kfactor,k1factor,k2factor; 
      __m128 bfly0_rv, bfly1_rv, bfly2_rv, bfly3_rv; 
      __m128 bfly0_iv, bfly1_iv, bfly2_iv, bfly3_iv; 
      __m128 x_n2_vec, x_N2_vec, x_N2_2_vec, x_N2_3_vec; 
      __m128 y_n2_vec, y_N2_vec, y_N2_2_vec, y_N2_3_vec; 
      /////////// 
      //factors// 
      /////////// 
      k1=2*k; 
      k2=3*k; 
      kfactor = k * factor; 
      k1factor = k1 * factor; 
      k2factor = k2 * factor; 
      //printf("%d \t %d \t %d \n",kfactor,k1factor,k2factor); 

      ////////////// 
      //Load input// 
      ////////////// 
      //real parts// 
      __M128_MM_LOAD_PS(x_n2_vec,&x[n2]); 
      __M128_MM_LOAD_PS(x_N2_vec,&x[N2]); 
      __M128_MM_LOAD_PS(x_N2_2_vec,&x[N2_2]); 
      __M128_MM_LOAD_PS(x_N2_3_vec,&x[N2_3]); 
      //imaginary parts// 
      __M128_MM_LOAD_PS(y_n2_vec,&y[n2]); 
      __M128_MM_LOAD_PS(y_N2_vec,&y[N2]); 
      __M128_MM_LOAD_PS(y_N2_2_vec,&y[N2_2]); 
      __M128_MM_LOAD_PS(y_N2_3_vec,&y[N2_3]); 

      /////////////// 
      //butterflies// 
      /////////////// 
      //additions// 
      //Butterfly 0// 
      __M128_MM_ADD_PS(bfly0_rv,x_n2_vec,x_N2_vec) 
      __M128_MM_ADD_PS(bfly0_rv,bfly0_rv,x_N2_2_vec) 
      __M128_MM_ADD_PS(bfly0_rv,bfly0_rv,x_N2_3_vec) 

      __M128_MM_ADD_PS(bfly0_iv,y_n2_vec,y_N2_vec) 
      __M128_MM_ADD_PS(bfly0_iv,bfly0_iv,y_N2_2_vec) 
      __M128_MM_ADD_PS(bfly0_iv,bfly0_iv,y_N2_3_vec) 
      //Butterfly 1// 
      __M128_MM_ADD_PS(bfly1_rv,x_n2_vec,y_N2_vec) 
      __M128_MM_SUB_PS(bfly1_rv,bfly1_rv,x_N2_2_vec) 
      __M128_MM_SUB_PS(bfly1_rv,bfly1_rv,y_N2_3_vec) 

      __M128_MM_SUB_PS(bfly1_iv,y_n2_vec,x_N2_vec) 
      __M128_MM_SUB_PS(bfly1_iv,bfly1_iv,y_N2_2_vec) 
      __M128_MM_ADD_PS(bfly1_iv,bfly1_iv,x_N2_3_vec) 
      //Butterfly 2// 
      __M128_MM_SUB_PS(bfly2_rv,x_n2_vec,x_N2_vec) 
      __M128_MM_ADD_PS(bfly2_rv,bfly2_rv,x_N2_2_vec) 
      __M128_MM_SUB_PS(bfly2_rv,bfly2_rv,x_N2_3_vec) 

      __M128_MM_SUB_PS(bfly2_iv,y_n2_vec,y_N2_vec) 
      __M128_MM_ADD_PS(bfly2_iv,bfly2_iv,y_N2_2_vec) 
      __M128_MM_SUB_PS(bfly2_iv,bfly2_iv,y_N2_3_vec) 
      //Butterfly 3// 
      __M128_MM_SUB_PS(bfly3_rv,x_n2_vec,y_N2_vec) 
      __M128_MM_SUB_PS(bfly3_rv,bfly3_rv,x_N2_2_vec) 
      __M128_MM_ADD_PS(bfly3_rv,bfly3_rv,y_N2_3_vec) 

      __M128_MM_ADD_PS(bfly3_iv,y_n2_vec,x_N2_vec) 
      __M128_MM_SUB_PS(bfly3_iv,bfly3_iv,y_N2_2_vec) 
      __M128_MM_SUB_PS(bfly3_iv,bfly3_iv,x_N2_3_vec) 
      printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[0],bfly0_iv[0],bfly1_rv[0],bfly1_iv[0],bfly2_rv[0],bfly2_iv[0],bfly3_rv[0],bfly3_iv[0]); 
      printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[1],bfly0_iv[1],bfly1_rv[1],bfly1_iv[1],bfly2_rv[1],bfly2_iv[1],bfly3_rv[1],bfly3_iv[1]); 
      printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[2],bfly0_iv[2],bfly1_rv[2],bfly1_iv[2],bfly2_rv[2],bfly2_iv[2],bfly3_rv[2],bfly3_iv[2]); 
      printf("%f \t %f \t %f \t %f \t %f \t %f \t %f \t %f \n",bfly0_rv[3],bfly0_iv[3],bfly1_rv[3],bfly1_iv[3],bfly2_rv[3],bfly2_iv[3],bfly3_rv[3],bfly3_iv[3]); 

      n2 = n2 + 4; 
      N2 = N2 + 4; 
      N2_2 = N2_2 + 4; 
      N2_3 = N2_3 + 4; 
     } 

私は蝶のためのprintfを使用する際にセグメンテーションフォールトが来ます。すべての計算が適切に行われていることを確認したいので、私はバタフライの値を印刷しています。

何が間違っていますか?

注意

範囲は、以下の値(1024,256,64,16,4,1)実数

用フロートのXアレイ

を取っていますy想像上のフロートの配列

配列のサイズは40です。 96

私はインテルの組み込み関数を使用していますので、一度に4つの値をロードしています。 MSDN(https://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx)によると

+1

これをまだセグメンテーションしている[mcve]に減らしてみてください。 FFTを実装する必要はなく、組み込みの組み込み関数を使用して印刷することもできます。 –

答えて

1

あなたが直接__m128フィールドにアクセスするべきではありません。ただし、これらのタイプはデバッガで参照できます。タイプ__m128の変数は、XMM [0-7]レジスタにマップされます。

上記の警告が避けようとした状況に陥る可能性があります。

+0

あなたのはっきりした答えをありがとうサー...私はそれをデバッグし、私はほとんどすべての値を参照する必要がある場合、実行が非常に長い問題です。 –

+4

プログラマーの本当の生活へようこそ:5分間コードを書いてから、5時間デバッグ画面を見てください:) – fritzone

関連する問題