/*--------------------------------------------------- * file: docword2dw.c * purpose: * usage: * inputs: docword.txt P * outputs: dw.p0.bin ... dwz.p7.bin * version: 1.0 * author: newman@uci.edu * date: 8/10/07 * NOTE: binary matrices are all (c-style) zero offset *-------------------------------------------------*/ #include #include #include #include #include #include "topiclib.h" /*========================================== * main *========================================== */ int main(int argc, char* argv[]) { int P, D, W, N, NNZ; int i, j, k, chk, n2=2; int *dd, *ww, *cc, *d, *w; int Dp, p, dstart, dend, nstart, nend, Np; int *dSplit, *wSplit; FILE *fin, *fout; char fname[32]; if (argc == 1) { fprintf(stderr, "usage: %s P\n", argv[0]); exit(-1); } P = atoi(argv[1]); assert(P>0); /*========================================== * read docword.txt *========================================== */ fin = fopen("docword.txt","r"); assert(fin); fscanf(fin,"%d", &D); assert(D>0); fscanf(fin,"%d", &W); assert(W>0); fscanf(fin,"%d", &NNZ); assert(NNZ>0); dd = ivec(NNZ); assert(dd); ww = ivec(NNZ); assert(ww); cc = ivec(NNZ); assert(cc); for (j = 0; j < NNZ; j++) fscanf(fin,"%d%d%d", dd+j, ww+j, cc+j); fclose(fin); printf("... read docword.txt\n"); printf(" D = %d\n", D); printf(" W = %d\n", W); printf(" NNZ = %d\n", NNZ); /*========================================== * allocate memory d and w *========================================== */ N = isum(NNZ,cc); d = ivec(N); assert(d); w = ivec(N); assert(w); printf(" N = %d\n", N); /*========================================== * assign d and w *========================================== */ i = 0; for (j = 0; j < NNZ; j++) { for (k = 0; k < cc[j]; k++) { d[i] = dd[j]-1; w[i] = ww[j]-1; i++; } } assert(i==N); free(dd); free(ww); free(cc); printf("... assigned d and w\n"); /*========================================== * DISTRIBUTE over P datafiles *========================================== */ Dp = D/P; nstart = 0; for (p = 0; p < P; p++) { // Compute offsets dstart = p *Dp; dend = (p+1)*Dp; if (p==(P-1)) dend=D; nend = nstart; while( (d[nend]