我有一個矩陣乘法代碼,通過以下 乘法做矩陣,矩陣A *矩陣B =矩陣C多線程矩陣乘法幫助用C
for(j=1;j<=n;j++) {
for(l=1;l<=k;l++) {
for(i=1;i<=m;i++) {
C[i][j] = C[i][j] + B[l][j]*A[i][l];
}
}
現在我想將它變成多線程矩陣乘法我的代碼如下:
我使用結構
struct ij
{
int rows;
int columns;
};
我的方法是
void *MultiplyByThread(void *t)
{
struct ij *RowsAndColumns = t;
double total=0;
int pos;
for(pos = 1;pos<k;pos++)
{
fprintf(stdout, "Current Total For: %10.2f",total);
fprintf(stdout, "%d\n\n",pos);
total += (A[RowsAndColumns->rows][pos])*(B[pos][RowsAndColumns->columns]);
}
D[RowsAndColumns->rows][RowsAndColumns->columns] = total;
pthread_exit(0);
}
,並在我的主要是
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) {
struct ij *t = (struct ij *) malloc(sizeof(struct ij));
t->rows = i;
t->columns = j;
pthread_t thread;
pthread_attr_t threadAttr;
pthread_attr_init(&threadAttr);
pthread_create(&thread, &threadAttr, MultiplyByThread, t);
pthread_join(thread, NULL);
}
}
但我似乎無法得到相同的結果作爲第一矩陣乘法(這是正確的) 可有人點我到正確的方向?
結果出來不一樣。你加入他們的意思是什麼?我以爲那是我在做什麼。你可以給我一個例子嗎? – Kevin 2010-11-04 16:53:49
這給了我一個分段錯誤。我不知道爲什麼? – Kevin 2010-11-04 17:07:34
此外,我不認爲這些線程應該是雙數組本身。我相信一個線程應該在列中是單一的,然後結合在一起? – Kevin 2010-11-04 17:09:18