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];
Refs refs;
GroupInfo gi;
-vector<int> s;
+vector<HIT_INT_TYPE> s;
vector<Item> hits;
vector<double> theta;
Params *paramsArray;
pthread_t *threads;
pthread_attr_t attr;
-void *status;
int rc;
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;
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)
}
void* Gibbs(void* arg) {
- int len, fr, to;
int CHAINLEN;
+ HIT_INT_TYPE len, fr, to;
Params *params = (Params*)arg;
vector<double> theta;
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
}
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
}
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<class ModelType>
int main(int argc, char* argv[]) {
if (argc < 7) {
- printf("Usage: rsem-run-gibbs-multi reference_name sample_name sampleToken BURNIN NSAMPLES GAP [-p #Threads] [--var] [-q]\n");
+ printf("Usage: rsem-run-gibbs reference_name imdName statName BURNIN NSAMPLES GAP [-p #Threads] [--var] [-q]\n");
exit(-1);
}
+ strcpy(imdName, argv[2]);
+ strcpy(statName, argv[3]);
+
BURNIN = atoi(argv[4]);
NSAMPLES = atoi(argv[5]);
GAP = atoi(argv[6]);
- sprintf(imdName, "%s.temp/%s", argv[2], argv[3]);
- sprintf(statName, "%s.stat/%s", argv[2], argv[3]);
+
load_data(argv[1], statName, imdName);
nThreads = 1;
pthread_assert(rc, "pthread_create", "Cannot create thread " + itos(i) + " (numbered from 0)!");
}
for (int i = 0; i < nThreads; i++) {
- rc = pthread_join(threads[i], &status);
+ rc = pthread_join(threads[i], NULL);
pthread_assert(rc, "pthread_join", "Cannot join thread " + itos(i) + " (numbered from 0)!");
}
release();