gpt4 book ai didi

c - C 语言的多线程矩阵乘法帮助

转载 作者:行者123 更新时间:2023-12-02 03:04:31 26 4
gpt4 key购买 nike

我有一个矩阵乘法代码,它可以将矩阵乘以以下内容其中矩阵 A * 矩阵 B = 矩阵 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);

}
}

但我似乎无法得到与第一个矩阵乘法相同的结果(这是正确的)有人能指出我正确的方向吗?

最佳答案

尝试以下操作:

#pragma omp for private(i, l, j)
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];
}
}
}

在谷歌搜索 GCC 编译器开关以启用 OpenMP 时,我实际上遇到了 this blog post它比我能更好地描述发生的事情,并且还包含一个更好的示例。

OpenMP 在与多核机器最相关的编译器上受支持,请参阅 OpenMP web site了解更多信息。

关于c - C 语言的多线程矩阵乘法帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com