Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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 );
	}
}
Esempio n. 3
0
// 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);
	}
}