watki w C pod linuxem

0

witam:))
pisze program w C pod linuxa, ktory ma mnozyc maciez x wektor... program ma byc wykonywany rownolegle na watkach... program smiga, ale bez watkow... gdy tylko zrobie go na watkach (pierwszy raz pracuje na watkach) za nic w swiecie nie chce mi chodzic:(( ...na necie juz chyba wszystko przeczytalem o watkach i... nic nie skutkuje:((
jesli mozna... to prosze znawcow o zerkniecie i wskazanie pomyslu...
podaje kod programu bez watkow...

#include <stdio.h>
#include <time.h>

main ()
{
int n,k,j,i,x,y,p,wynik,reszta,rozz;
int *wektor_k, *wektor, *dol, *gora, *tab_wynik;
int **tablica, **tablica1;
double dif;
long czas;
long double t1, t2, sr, w;
char quit;  
     quit = '\0';
     sr=0;

while (quit != 'q')
{
printf("Podaj n: ");
scanf("%d", &n);
printf("Podaj ilosc komputerow: ");
scanf("%d", &k);
printf("\n");
wynik = n/k;
reszta = n%k;

// Wczytywanie danych
wektor_k = (int *) malloc(k * sizeof(int));
for (j=0; j<k; j++)
    wektor_k[j] = wynik;
for (j=0; j<reszta; j++)
    wektor_k[j] = wektor_k[j] + 1;  
for (j=0; j<k; j++)
    printf("L.obl.wierszy dla komp. %d: %d\n", (j+1), wektor_k[j]);
printf("\n");

// Losowanie elementow wektora
wektor = (int *) malloc(n * sizeof(int));
for (x=0; x<n; x++)
    {
    wektor[x] = rand() % 3;
    printf("El_wektora %d: %d\n", x, wektor[x]);
    }
printf("\n");

// Losoawanie elementow tablicy
tablica = (int **) malloc(n * sizeof(int *));
for( i = 0; i < n; i++ )
     tablica[i] = (int *) malloc(n * sizeof(int));      
for (x=0; x<n; x++)
    {
    for (y=0; y<n; y++)
        {
        tablica[x][y] = rand() % 3;
        printf("El_tablicy %d%d: %d\n", x, y, tablica[x][y]);
        }
    }

time_t start = clock();

FILE* rozmiarz; 
rozmiarz = fopen("rozmiar.txt","wb");
fwrite(&n, sizeof(int), 1, rozmiarz);
fclose(rozmiarz);
    
FILE* plik; 
plik = fopen("pol.txt","wb");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
fwrite(&tablica[i][j], sizeof(int), 1, plik);
}
fclose(plik);

FILE* rozmiaro; 
rozmiaro = fopen("rozmiar.txt","rb");
fread(&p, sizeof(int), 1, rozmiaro);
fclose(rozmiaro);
printf("Wartosc p: %d\n", p);
printf("\n");

tablica1 = (int **) malloc(n * sizeof(int *));
for( i = 0; i < n; i++ )
     tablica1[i] = (int *) malloc(n * sizeof(int));      
  
FILE* plik1; 
plik1 = fopen("pol.txt","rb");
for (i=0; i<n; i++)
{
    for (j=0; j<n; j++)
        fread(&tablica1[i][j], sizeof(int), 1, plik1);
}
fclose(plik1); 
    
for (x=0; x<n; x++)
    {
    for (y=0; y<n; y++)
        {
        printf("Element %d%d tablicy1 %d\n", x, y, tablica1[x][y]);
        }
    }

// Obliczanie zakresu wierszy dla poszczegolnych komputerow
dol = (int *) malloc(k * sizeof(int));
for (i=0; i<k; i++)
    {
    if (i > 0)
       dol[i] = dol[i-1] + wektor_k[i-1];
    else
        dol[i] = 0;
    } 
gora = (int *) malloc(k * sizeof(int));
for (i=0; i<k; i++)
    {
    if (i > 0)
       gora[i] = gora[i-1] + wektor_k[i];
    else
        gora[i] = wektor_k[i] - 1;
    }    
printf("\n");

// Tworzenie tablicy wynikow i obliczanie mnozenia
tab_wynik = (int *) malloc(n * sizeof(int));
for (i=0; i<n; i++)
    tab_wynik[i] = 0;
for (i=0; i<k; i++)
    {
    for (x=dol[i]; x<=gora[i]; x++)
        {
        for (y=0; y<n; y++)
            tab_wynik[x] = tablica1[x][y] * wektor[y] + tab_wynik[x];
        printf("El_wyniku %d: %d\n", x, tab_wynik[x]);
        }
    }
printf("\n");

time_t end = clock();
czas = (end - start)*1000/CLK_TCK;
printf("Zmierzony czas czas %.5lf", czas);
    }
}

z gory WIELKIE DZIEKI za pomoc!:))
pozdrawiam:))

0

obadaj manual od pthread

0

#include <pthread.h>
#include <stdio.h>

void *thread(void *tid)
{
while(1)
{
printf("%d: Thread !\n", tid);
sleep(1);
}
//pthread_exit(NULL);
}

int main()
{
pthread_t threads[5];
int i = 0;

for(i = 0; i < 5; i++)
pthread_create(&threads[i], NULL, thread, (void *)i);

while(1){ sleep(1); }

pthread_exit(NULL);

return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1