Я пытаюсь сделать матричное умножение 1000 * 1000, используя несколько потоков. Я хочу составить таблицу количества потоков и времени, затраченного на C языке программирования, используя pthreads. Я передаю структуру, которая сообщает подсчет количества ядер и потоков для запуска l oop.
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<sys/time.h>
#define n 1000
int a[n][n];
int b[n][n];
int c[n][n];
//int count=0;
struct thr{
int core;
int num;
};
void *mult(void *arg)
{
struct thr th = thr* arg;
int i,j,k;
for(i=(th.core)*n/(th.num); i<(th.core+1)*n/(th.num); i++)
for(j=0; j<n; j++)
for(k=0; k<n; k++)
c[i][j]+=a[i][k]*b[k][j];
return NULL;
}
int main()
{
int i,j=0,k,m;
int f[50];
for(i=0;i<n;i++)
{
for(k=0; k<n; k++)
{
a[i][k]=rand()%10;
b[i][k]=rand()%10;
}
}
for(i=1;i<1001;i++)
{
if((1000/i)==0)
{
f[j]=i;
j++;
}
}
long int time[j];
struct timeval t0, t1,timetaken;
for(i=f[k]; k<j; k++)
{
pthread_t th[i];
//gettimeofday(&t0, NULL);
clock_t start=clock();
struct thr t;
t.core=0;
t.num=i;
for(j=0; j<i; j++)
{
t.core++;
pthread_create(&th[j],NULL,mult,(thr)&t);
}
for(j=0;j<i;j++)
pthread_join(th[j],NULL);
//gettimeofday(&t1,NULL);
//timersub(&t1, &t0, &timetaken);
clock_t end=clock();
for(m=0; m<j; m++)
time[m]=end-start;
}
for(i=0;i<j;i++)
printf("%d threads %ld\n",f[i],time[i]);
printf("\na*b\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",c[i][j]);
}
printf("\n");
}
return 0;
}
Это показывает ошибку.
mult.c: In function ‘mult’:
mult.c:18:18: error: ‘thr’ undeclared (first use in this function)
struct thr th = thr* arg;
^~~
mult.c:18:18: note: each undeclared identifier is reported only once for each function it appears in
mult.c: In function ‘main’:
mult.c:60:37: error: ‘thr’ undeclared (first use in this function)
pthread_create(&th[j],NULL,mult,(thr)&t);
, пожалуйста, помогите мне решить эту проблему