static void threadRoutine(void *para) { PARAMETER *prm; unsigned int i; unsigned char id; prm = (PARAMETER *)para; id = prm->threadID; //printf("%dth thread with threadID %d, hash_table %p\n",id,prm.threadID,prm.hash_table); while(1) { if(*(prm->selfSignal) == 1) { unsigned int seq_index = 0; unsigned int pos = 0; for(i = 0; i < kmer_c; i++) { if(seq_index < read_c && indexArray[seq_index + 1] == i) { seq_index++; // which sequence this kmer belongs to pos = 0; } //if((unsigned char)(hashBanBuffer[i]&taskMask)!=id){ if((unsigned char)(hashBanBuffer[i] % thrd_num) != id) { pos++; continue; } kmerCounter[id + 1]++; singleKmer(i, KmerSets[id], seq_index, pos++); } *(prm->selfSignal) = 0; } else if(*(prm->selfSignal) == 2) { for(i = 0; i < read_c; i++) { if(i % thrd_num != id) continue; chopKmer4read(i, id + 1); } *(prm->selfSignal) = 0; } else if(*(prm->selfSignal) == 3) { *(prm->selfSignal) = 0; break; } usleep(1); } }
static void threadRoutine ( void * para ) { PARAMETER * prm; int i; unsigned char id; prm = ( PARAMETER * ) para; id = prm->threadID; //printf("%dth thread with threadID %d, hash_table %p\n",id,prm.threadID,prm.hash_table); while ( 1 ) { if ( * ( prm->selfSignal ) == 1 ) { for ( i = 0; i < kmer_c; i++ ) { //if((unsigned char)(magic_seq(hashBanBuffer[i])%thrd_num)!=id) //if((kmerBuffer[i]%thrd_num)!=id) if ( ( hashBanBuffer[i] % thrd_num ) != id ) { continue; } kmerCounter[id + 1]++; singleKmer ( i, KmerSets[id] ); } * ( prm->selfSignal ) = 0; } else if ( * ( prm->selfSignal ) == 2 ) { for ( i = 0; i < read_c; i++ ) { if ( i % thrd_num != id ) { continue; } chopKmer4read ( i, id + 1 ); } * ( prm->selfSignal ) = 0; } else if ( * ( prm->selfSignal ) == 3 ) { * ( prm->selfSignal ) = 0; break; } else if ( * ( prm->selfSignal ) == 4 ) { thread_mark ( KmerSets[id], id ); * ( prm->selfSignal ) = 0; } else if ( * ( prm->selfSignal ) == 5 ) { thread_delow ( KmerSets[id], id ); * ( prm->selfSignal ) = 0; } usleep ( 1 ); } }
// 2 -> 1 -> 3 -> 4 -> 6 static void threadRoutine (void *para) { PARAMETER *prm; int i, t, j, start, finish; unsigned char id; prm = (PARAMETER *) para; id = prm->threadID; //printf("%dth thread with task %d, hash_table %p\n",id,prm.task,prm.hash_table); while (1) { if (*(prm->selfSignal) == 1) { for (i = 0; i < kmer_c; i++) { //if((hashBanBuffer[i]&taskMask)!=prm.threadID) if ((hashBanBuffer[i] % thrd_num) != id) { continue; } searchKmer (i, KmerSets[id]); } *(prm->selfSignal) = 0; } else if (*(prm->selfSignal) == 2) { for (i = 0; i < read_c; i++) { if (i % thrd_num != id) { continue; } chopKmer4read (i, id + 1); } *(prm->selfSignal) = 0; } else if (*(prm->selfSignal) == 3) { // parse reads for (t = 0; t < read_c; t++) { if (t % thrd_num != id) { continue; } parse1read (t, id + 1); } *(prm->selfSignal) = 0; } else if (*(prm->selfSignal) == 4) { //printf("thread %d, reads %d splay kmerplus\n",id,read_c); for (t = 0; t < read_c; t++) { start = indexArray[t]; finish = indexArray[t + 1]; for (j = start; j < finish; j++) { if (flagArray[j] == 0) { #ifdef MER127 if(mixBuffer[j].low2==0) #endif #ifdef MER63 if(mixBuffer[j].low==0) #endif #ifdef MER31 if(mixBuffer[j]==0) #endif { break; } } else if (hashBanBuffer[j] % thrd_num == id) { //fprintf(stderr,"thread %d search for ban %lld\n",id,hashBanBuffer[j]); search1kmerPlus (j, id); } /* if(flagArray[j]==0&&mixBuffer[j]==0) break; if(!flagArray[j]||(hashBanBuffer[j]%thrd_num)!=id) continue; search1kmerPlus(j,id); */ } } *(prm->selfSignal) = 0; } else if (*(prm->selfSignal) == 6) { for (t = 0; t < read_c; t++) { start = indexArray[t]; finish = indexArray[t + 1]; for (j = start; j < finish - 1; j++) { #ifdef MER127 if (mixBuffer[j].low2 == 0 || mixBuffer[j + 1].low2 == 0) { break; } if (mixBuffer[j].low2 % thrd_num != id) { continue; } thread_add1preArc (mixBuffer[j].low2, mixBuffer[j + 1].low2, id); #endif #ifdef MER63 if (mixBuffer[j].low == 0 || mixBuffer[j + 1].low == 0) { break; } if (mixBuffer[j].low % thrd_num != id) { continue; } thread_add1preArc (mixBuffer[j].low, mixBuffer[j + 1].low, id); #endif #ifdef MER31 if (mixBuffer[j] == 0 || mixBuffer[j + 1] == 0) { break; } if (mixBuffer[j] % thrd_num != id) { continue; } thread_add1preArc (mixBuffer[j], mixBuffer[j + 1], id); #endif } } *(prm->selfSignal) = 0; } else if (*(prm->selfSignal) == 5) { *(prm->selfSignal) = 0; break; } usleep (1); } }