X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Gibbs.cpp;h=c1f4fe276b2100ca6e66a151303cb062e0ec0d0e;hb=543f20967e693ef9150eddc94e7869ed04bad962;hp=f911da53c3e95370a224b95d64250abb3434bb7c;hpb=4a5e5138d3fc409e7ade5c14de7689612290f74f;p=rsem.git diff --git a/Gibbs.cpp b/Gibbs.cpp index f911da5..c1f4fe2 100644 --- a/Gibbs.cpp +++ b/Gibbs.cpp @@ -44,7 +44,9 @@ struct Item { int nThreads; int model_type; -int m, M, N0, N1, nHits; +int m, M; +READ_INT_TYPE N0, N1; +HIT_INT_TYPE nHits; double totc; int BURNIN, NSAMPLES, GAP; char imdName[STRLEN], statName[STRLEN]; @@ -54,7 +56,7 @@ char cvsF[STRLEN]; Refs refs; GroupInfo gi; -vector s; +vector s; vector hits; vector theta; @@ -130,7 +132,6 @@ void load_data(char* reference_name, char* statName, char* imdName) { void init() { int quotient, left; char outF[STRLEN]; - char splitF[STRLEN]; quotient = NSAMPLES / nThreads; left = NSAMPLES % nThreads; @@ -157,19 +158,11 @@ void init() { memset(paramsArray[i].pme_theta, 0, sizeof(double) * (M + 1)); } - // output task splitting information - sprintf(splitF, "%s.split", imdName); - FILE *fo = fopen(splitF, "w"); - fprintf(fo, "%d", nThreads); - for (int i = 0; i < nThreads; i++) fprintf(fo, " %d", paramsArray[i].nsamples); - fprintf(fo, "\n"); - fclose(fo); - /* set thread attribute to be joinable */ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - if (verbose) { printf("Initialization finished!"); } + if (verbose) { printf("Initialization finished!\n"); } } //sample theta from Dir(1) @@ -196,8 +189,8 @@ void writeCountVector(FILE* fo, vector& counts) { } void* Gibbs(void* arg) { - int len, fr, to; int CHAINLEN; + HIT_INT_TYPE len, fr, to; Params *params = (Params*)arg; vector theta; @@ -214,11 +207,11 @@ void* Gibbs(void* arg) { counts.assign(M + 1, 1); // 1 pseudo count counts[0] += N0; - for (int i = 0; i < N1; i++) { + for (READ_INT_TYPE i = 0; i < N1; i++) { fr = s[i]; to = s[i + 1]; len = to - fr; arr.assign(len, 0); - for (int j = fr; j < to; j++) { + for (HIT_INT_TYPE j = fr; j < to; j++) { arr[j - fr] = theta[hits[j].sid] * hits[j].conprb; if (j > fr) arr[j - fr] += arr[j - fr - 1]; // cumulative } @@ -230,11 +223,11 @@ void* Gibbs(void* arg) { CHAINLEN = 1 + (params->nsamples - 1) * GAP; for (int ROUND = 1; ROUND <= BURNIN + CHAINLEN; ROUND++) { - for (int i = 0; i < N1; i++) { + for (READ_INT_TYPE i = 0; i < N1; i++) { --counts[z[i]]; fr = s[i]; to = s[i + 1]; len = to - fr; arr.assign(len, 0); - for (int j = fr; j < to; j++) { + for (HIT_INT_TYPE j = fr; j < to; j++) { arr[j - fr] = counts[hits[j].sid] * hits[j].conprb; if (j > fr) arr[j - fr] += arr[j - fr - 1]; //cumulative } @@ -290,23 +283,6 @@ void release() { pve_c[i] = (pve_c[i] - NSAMPLES * pme_c[i] * pme_c[i]) / (NSAMPLES - 1); pme_theta[i] /= NSAMPLES; } - - /* - // combine files - FILE *fo = fopen(cvsF, "a"); - for (int i = 1; i < nThreads; i++) { - sprintf(inpF, "%s%d", cvsF, i); - ifstream fin(inpF); - while (getline(fin, line)) { - fprintf(fo, "%s\n", line.c_str()); - } - fin.close(); - sprintf(command, "rm -f %s", inpF); - int status = system(command); - general_assert(status == 0, "Fail to delete file " + cstrtos(inpF) + "!"); - } - fclose(fo); - */ } template