Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #define NTHRD 1 // broj niti
- #define N 10000
- float a[N];
- long grp[NTHRD]; // granica početak
- long grk[NTHRD]; // granica kraj
- HANDLE hn[NTHRD]; // HANDLE-ovi niti
- long ids[NTHRD]; // ID-ovi od niti (kreću od 0,1,2,3,...)
- float sp[NTHRD]; // parcijalne sume
- volatile float sm;
- DWORD WINAPI nit( VOID *p )
- {
- int i, j; float s2;
- int *id = (int *)p;
- printf( "I am thread %d\n", *id );
- for (i=grp[*id]; i<grk[*id]; i++)
- {
- s2 = 0;
- for (j=0; j<N; j++) s2 = s2 + sqrt( a[j] );
- sp[*id] = sp[*id] + a[i]/s2;
- }
- return 0;
- }
- int main(int argc, char *argv[])
- {
- int i,j;
- float s, s2;
- clock_t t1, t2;
- for (i=0; i<N; i++){
- srand ( time(NULL) );
- a[i] = rand();
- }
- t1 = clock();
- s = 0;
- for (i=0; i<N; i++)
- {
- s2 = 0;
- for (j=0; j<N; j++) s2 = s2 + sqrt( a[j] );
- s = s + a[i]/s2;
- }
- t2 = clock();
- printf( "%.3f\n", s );
- printf( "Time: %dms\n", t2-t1 );
- t1 = clock();
- long delta = N/NTHRD;
- for (i=0; i<NTHRD; i++)
- {
- grp[i] = delta*i;
- grk[i] = delta*(i+1);
- ids[i] = i;
- hn[i] = CreateThread( NULL, 0, nit, &ids[i], 0, NULL );
- }
- WaitForMultipleObjects( NTHRD, hn, TRUE, INFINITE );
- s = 0;
- for (i=0; i<NTHRD; i++) s = s + sp[i];
- t2 = clock();
- printf( "%.3f\n", s );
- printf( "Time for %d thread's: %dms\n", NTHRD, t2-t1 );
- system("PAUSE");
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement