Beispiel #1
0
int main2mod(unsigned long long spe_id, unsigned long long program_data_ea, unsigned long long env) 
{
	unsigned tagid = spe_id&31;
	uint32 i,j;

	// get program data
	mfc_get(&pd, program_data_ea, sizeof(spu_program_data), tagid, 0, 0);
	mfc_write_tag_mask(1<<tagid);
	mfc_read_tag_status_all();

	// precompute partial working states based on ihv & partial msg block
	pre_compute(pd.ihv1, pd.ihv2, pd.m1, pd.m2);

	if (pd.collisiondata > 0)
	{
		j = pd.collisiondata*8;
		vec_uint32* bufferptr = &buffer[j];

		// get the trail buffer
		for (i = 0; i < j; i += 128)
			mfc_get(&buffer[i], &pd.buffer[i], sizeof(vec_uint32)*128, tagid, 0, 0);
		mfc_write_tag_mask(1<<tagid);
		mfc_read_tag_status_all();

		// process collision trails
		
		reduce_trailsmod(pd.ihv1, pd.ihv2mod, pd.m1, pd.m2, &pd.astart, &buffer[0], bufferptr);
		reduce_trails2mod(pd.ihv1, pd.ihv2mod, pd.m1, pd.m2, &pd.astart, &buffer[0], bufferptr);
		find_collmod(pd.ihv1, pd.ihv2mod, pd.m1, pd.m2, &pd.astart, &buffer[0], bufferptr);

		// store the trail buffer
		for (i = 0; i < j; i += 128)
			mfc_put(&buffer[i], &pd.buffer[i], sizeof(vec_uint32)*128, tagid, 0, 0);
		mfc_write_tag_mask(1<<tagid);
		mfc_read_tag_status_all();
	} else {
		// fill the trail buffer in steps and do intermediate DMA transfers
		vec_uint32* bufferptr = &buffer[0];
		for (i = 0; i < BUFFERSIZE; i += 256)
		{
			bufferptr = generate_trailsmod(pd.ihv1, pd.ihv2mod, pd.m1, pd.m2, &pd.astart, bufferptr, &buffer[i+256]);
			mfc_put(&buffer[i], &pd.buffer[i], sizeof(vec_uint32)*128, tagid, 0, 0);
			mfc_put(&buffer[i+128], &pd.buffer[i+128], sizeof(vec_uint32)*128, tagid, 0, 0);
		}
	}
	// transfer the current program data back
	mfc_put(&pd, program_data_ea, sizeof(spu_program_data), tagid, 0, 0);

	// wait for dma transfers to complete
	mfc_write_tag_mask(1<<tagid);
	mfc_read_tag_status_all();
	return 0;
}
Beispiel #2
0
void read_from_stdin()
{
  int n, i, value;
  int pos = 0;
  while((n = read(0, buf + pos, BUFSIZE - pos)) > 0){
    pos += n;
  }
  gettimeofday(&t[1], NULL);
  buf[pos] = '\n';
  buf[pos + 1] = '\0';
  char *space = index(buf, ' ');
  N = atoi(buf);
  D = atoi(space + 1);
  gettimeofday(&t[2], NULL);
  /// read item prices.
  char *src = index(space + 1, '\n') + 1;
  value = 0;
  i = 0;
  while(i < N){
    if(*src != '\n'){
      value = 10 * value + digit[(int)*src];
    }else{
      count_and_offset[value]++;
      value = 0;
      i++;
    }
    src ++;
  }
  gettimeofday(&t[3], NULL);
  /// read campaign prices.
  int *dst = cprices;
  i = 0;
  value = 0;
  while(i < D){
    if(*src != '\n'){
      value = 10 * value + digit[(int)*src];
    }else{
      *(dst++) = value;
      value = 0;
      i++;
    }
    src ++;
  }
  gettimeofday(&t[4], NULL);
  pre_compute();
}