gpt4 book ai didi

c++ - 在 C++ 中全局使用二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:52 25 4
gpt4 key购买 nike

我的问题是我想使用线程更新两个矩阵相乘的矩阵。以下是我的代码

#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cmath>
#include <vector>

using namespace std;

int thread_count; // For Command Line Argument
int l;
int m;
int n;
int start_Task;
int stop_Task;

void *Hello(void* rank); // Prototype of a thread function

int main(int argc,char* argv[])
{
int thread_id;

thread_count = atoi(argv[1]);
int l = atoi(argv[2]);
int m = atoi(argv[3]);
int n = atoi(argv[4]);

int A[l][m]; //creates A l*m matrix or a 2d array.

for(int i=0; i<l; i++) //This loops on the rows.
{
for(int j=0; j<m; j++) //This loops on the columns
{
A[i][j] = i+j; // Allocating values to A matrix
}
}

int B[m][n]; //creates B m*n matrix or a 2d array.
for(int i=0; i<m; i++) //This loops on the rows.
{
for(int j=0; j<n; j++) //This loops on the columns
{
B[i][j] = i+j+1; // Allocating values to B matrix
}
}

int C[l][n]; //creates C m*n matrix or a 2d array.

int remainder = l % thread_count;
int allocatedProcess = l/thread_count;
start_Task =0;
//cout<<remainder<<" "<<allocatedProcess<<endl;
pthread_t myThreads[thread_count];

//creates a certain number of threads
for(thread_id = 0; thread_id < thread_count; thread_id++)
{
stop_Task = start_Task + allocatedProcess;
pthread_create(&myThreads[thread_id], NULL,Hello, (void*)thread_id);
start_Task = stop_Task;
}

cout<<"Hello from the main thread \n"<<endl;

for(int i=0; i<l; i++) //This loops on the rows.
{
for(int j=0; j<n; j++) //This loops on the columns
{
cout<<"Values in Final Matrix is"<<C[i][j]<<endl;
}
}
//wait until all threads finish
for(thread_id = 0; thread_id<thread_count; thread_id++)
pthread_join(myThreads[thread_id],NULL);

return 0;
}//main

void *Hello(void* rank)
{
for(int i=start_Task; i<stop_Task; i++) //This loops on the rows.
{
for(int j=0; j<n; j++) //This loops on the columns
{
int sum = 0;
for(int k=0; k<m; k++) //This loops on the columns
{
sum += A[i][k] * B[k][j]; // Allocating values to C matrix
//product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
}
C[i][j] = sum;
cout << C[i][j] << " ";
}
cout << "\n";
}

int my_rank = (long)rank;

cout<<"Thread_"<<my_rank<<" of "<<thread_count<<endl;

return NULL;
}

我面临的问题是我无法让我的 Matrix 全局初始化,因为维度本身是全局的。请更新我正确的实现方式。

最佳答案

简短的回答是 C 和 C++ 中的数组必须设置为常量,而不是变量。

您示例中的 l 和 m 不是常量。您可以使用 std::vector。如果您使用的是 C++11 编译器,那么您还有其他几种选择。这是一个可能会有所帮助的线程,但这是认真的; google“2d dynamic arrays c++”看看还有什么。这对您来说是一个很好的练习,并且可以让我免于复制和粘贴所有这些精彩文章!

http://www.cplusplus.com/forum/beginner/12409/

关于c++ - 在 C++ 中全局使用二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22470313/

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