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:))