многопоточное программирование умножение матриц - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь сделать матричное умножение 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);

, пожалуйста, помогите мне решить эту проблему

...