gpt4 book ai didi

c++ - C++ 中的多线程矩阵乘法

转载 作者:太空宇宙 更新时间:2023-11-04 15:48:16 26 4
gpt4 key购买 nike

我一直在处理这段并行矩阵乘法代码时遇到问题,在尝试访问我的结构中的数据成员时,我总是遇到错误。

这是我的主要功能:

struct arg_struct
{
int* arg1;
int* arg2;
int arg3;
int* arg4;
};


int main()
{
pthread_t allthreads[4];
int A [N*N];
int B [N*N];
int C [N*N];
randomMatrix(A);
randomMatrix(B);
printMatrix(A);
printMatrix(B);
struct arg_struct *args = (arg_struct*)malloc(sizeof(struct arg_struct));
args.arg1 = A;
args.arg2 = B;
int x;
for (int i = 0; i < 4; i++)
{
args.arg3 = i;
args.arg4 = C;
x = pthread_create(&allthreads[i], NULL, &matrixMultiplication, (void*)args);
if(x!=0)
exit(1);
}

return 0;
}

以及从另一个 C 文件中使用的 matrixMultiplication 方法:

void *matrixMultiplication(void* arguments)
{
struct arg_struct* args = (struct arg_struct*) arguments;
int block = args.arg3;
int* A = args.arg1;
int* B = args.arg2;
int* C = args->arg4;
free(args);
int startln = getStartLineFromBlock(block);
int startcol = getStartColumnFromBlock(block);
for (int i = startln; i < startln+(N/2); i++)
{
for (int j = startcol; j < startcol+(N/2); j++)
{
setMatrixValue(C,0,i,j);
for(int k = 0; k < N; k++)
{
C[i*N+j] += (getMatrixValue(A,i,k) * getMatrixValue(B,k,j));
usleep(1);
}
}
}
}

我遇到的另一个错误是在创建线程时:“从 'void ()(int, int*, int, int*)' 到 'void* () 的无效转换(void)' [-fpermissive]"

谁能告诉我我做错了什么?

最佳答案

首先你很糟糕地混合了 C 和 C++,要么使用纯 C 要么使用 C++,在 C++ 中你可以简单地使用 newdelete

但你出错的原因是你在一个地方分配了 arg_struct 并在 4 个线程中释放了它。您应该为每个线程分配一个 arg_struct

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

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