#include #include #include #include #include #define N 1000 double A[N][N], b[N]; int p; int mdone, nwdone; pthread_cond_t ecv = PTHREAD_COND_INITIALIZER; pthread_mutex_t emtx = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t scv = PTHREAD_COND_INITIALIZER; pthread_mutex_t smtx = PTHREAD_MUTEX_INITIALIZER; typedef struct { int startrow; int endrow; } range; range rows[16]; void geneqns ( ) { int i, j, t, x[N], rhs; for (i=0; i i) { for (j=i; j=0; --i) { x[i] = b[i]; for (j=i+1; j maxerr) maxerr = rowerr; } return maxerr; } int main ( int argc, char *argv[] ) { int tno[16], i, j; pthread_t tid[16]; double Acopy[N][N], bcopy[N]; double x[N], maxerr; p = (argc > 1) ? atoi(argv[1]) : 8; if ((p < 2) || (p > 16)) p = 8; printf("+++ p = %d\n\n", p); srand((unsigned int)time(NULL)); geneqns(); for (i=0; i