2

簡単な答えがあると思われる質問がありますが、疑いを確認するためのドキュメントはどこにも見つかりませんでした。

私のプログラムは、2 つの正方行列を乗算することです。コード全体が少し長いので、関連する部分を以下に貼り付けました。コードをコンパイルすると、「エラー: 割り当てに互換性のない型があります」というメッセージが表示され続けます。サブマトリックスsuba、subb、subcをa、b、およびcの対応する部分に割り当てようとしています。これは、28 ~ 32 行目で変数 v と w int を使用しているためですか? また、正しい概念を持っていることを確認するために、マトリックスの左上隅を「サブマトリックス」に割り当てると、指定された大きな位置から開始するポインター (subb など) を割り当てるだけです。マトリックスですよね?

助けてくれてありがとう!それは非常に高く評価されています

struct threads
{
  pthread_t id; //The thread id to use in functions
  int n; //size of block
  float **suba; //Sub-matrix a
  float **subb; //Sub-matrix b
  float **subc; //Sub-matrix c
};

int main( int argc, char* argv[ ] )
{
  int n; // dimension of the matrix
  int p; // number of threads in the program
  float *sa, *sb, *sc; // storage for matrix A, B, and C
  float **a, **b, **c; // 2-d array to access matrix A, B, and C
  int i, j;
  struct threads* t;

  t = ( struct threads* ) malloc( p * sizeof( struct threads ) );

  int x = -1;
  int z;
  for( z = 0; z < p; z++ )
  {
    t[ z ].n = n / sqrt( p );
    if( fmod( z, sqrt( p ) ) == 0 )
      x++;
    int w = ( int )( x * n / sqrt( p ) );
    int v = ( int )( fmod( z, sqrt( p ) ) * n / sqrt( p ) );
    t[z].suba = a[ w ][ v ];
    t[z].subb = b[ w ][ v ];
    t[z].subc = c[ w ][ v ];

    //pthread_create( &t[ z ].id, 0, threadWork, &t[ z ] );
  }

  return 0;
}
4

1 に答える 1

1

t[z].subaタイプですfloat **

a[w][v]タイプfloatです。

ということですか

t[z].suba[w][v] = a[w][v]; ?
于 2012-11-12T22:20:10.573 に答える