Пример #1
0
// Now, lets see how long it takes to use these implementations
int main(int argc, char** argv)
{
  struct cstruct cs; // chars
  struct sstruct ss; // shorts
  struct lstruct ls; // longs
  struct btype b;    // bits

  char csa[32];
  short ssa[32];
  long lsa[32];

  long count;
  long i;

  // For timing, we can vary the number of iterations run
  Assert(argc == 2, "Usage: flags <number_of_iterations>");

  count = atol(argv[1]);

  cs.pos[0] = true;
  ss.pos[0] = true;
  ls.pos[0] = true;
  csa[0] = true;
  ssa[0] = true;
  lsa[0] = true;
  b.f0 = true;

  // For each interation, we are going to test the time to read and write
  // the values by doing a copy from one array position to another.
  // To cut down on the overhead of the outer loop, we do 120 assignements
  // within the loop body.

  Settime();
  for (i=0; i<count; i++) {
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
    csa[1] = csa[0];
    csa[2] = csa[1];
    csa[3] = csa[2];
    csa[4] = csa[3];
    csa[5] = csa[4];
    csa[6] = csa[5];
    csa[7] = csa[6];
    csa[8] = csa[7];
    csa[9] = csa[8];
    csa[10] = csa[9];
    csa[11] = csa[10];
    csa[12] = csa[11];
    csa[13] = csa[12];
    csa[14] = csa[13];
    csa[15] = csa[14];
    csa[16] = csa[15];
    csa[17] = csa[16];
    csa[18] = csa[17];
    csa[19] = csa[18];
    csa[20] = csa[19];
    csa[21] = csa[20];
    csa[22] = csa[21];
    csa[23] = csa[22];
    csa[24] = csa[23];
    csa[25] = csa[24];
    csa[26] = csa[25];
    csa[27] = csa[26];
    csa[28] = csa[27];
    csa[29] = csa[28];
    csa[30] = csa[29];
  }
  cout << "Time for characters (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
    ssa[1] = ssa[0];
    ssa[2] = ssa[1];
    ssa[3] = ssa[2];
    ssa[4] = ssa[3];
    ssa[5] = ssa[4];
    ssa[6] = ssa[5];
    ssa[7] = ssa[6];
    ssa[8] = ssa[7];
    ssa[9] = ssa[8];
    ssa[10] = ssa[9];
    ssa[11] = ssa[10];
    ssa[12] = ssa[11];
    ssa[13] = ssa[12];
    ssa[14] = ssa[13];
    ssa[15] = ssa[14];
    ssa[16] = ssa[15];
    ssa[17] = ssa[16];
    ssa[18] = ssa[17];
    ssa[19] = ssa[18];
    ssa[20] = ssa[19];
    ssa[21] = ssa[20];
    ssa[22] = ssa[21];
    ssa[23] = ssa[22];
    ssa[24] = ssa[23];
    ssa[25] = ssa[24];
    ssa[26] = ssa[25];
    ssa[27] = ssa[26];
    ssa[28] = ssa[27];
    ssa[29] = ssa[28];
    ssa[30] = ssa[29];
}
  cout << "Time for shorts (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
    lsa[1] = lsa[0];
    lsa[2] = lsa[1];
    lsa[3] = lsa[2];
    lsa[4] = lsa[3];
    lsa[5] = lsa[4];
    lsa[6] = lsa[5];
    lsa[7] = lsa[6];
    lsa[8] = lsa[7];
    lsa[9] = lsa[8];
    lsa[10] = lsa[9];
    lsa[11] = lsa[10];
    lsa[12] = lsa[11];
    lsa[13] = lsa[12];
    lsa[14] = lsa[13];
    lsa[15] = lsa[14];
    lsa[16] = lsa[15];
    lsa[17] = lsa[16];
    lsa[18] = lsa[17];
    lsa[19] = lsa[18];
    lsa[20] = lsa[19];
    lsa[21] = lsa[20];
    lsa[22] = lsa[21];
    lsa[23] = lsa[22];
    lsa[24] = lsa[23];
    lsa[25] = lsa[24];
    lsa[26] = lsa[25];
    lsa[27] = lsa[26];
    lsa[28] = lsa[27];
    lsa[29] = lsa[28];
    lsa[30] = lsa[29];
  }
  cout << "Time for longs (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

  Settime();
  for (i=0; i<count; i++) {
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
    b.f1 = b.f0;
    b.f2 = b.f1;
    b.f3 = b.f2;
    b.f4 = b.f3;
    b.f5 = b.f4;
    b.f6 = b.f5;
    b.f7 = b.f6;
    b.f8 = b.f7;
    b.f9 = b.f8;
    b.f10 = b.f9;
    b.f11 = b.f10;
    b.f12 = b.f11;
    b.f13 = b.f12;
    b.f14 = b.f13;
    b.f15 = b.f14;
    b.f16 = b.f15;
    b.f17 = b.f16;
    b.f18 = b.f17;
    b.f19 = b.f18;
    b.f20 = b.f19;
    b.f21 = b.f20;
    b.f22 = b.f21;
    b.f23 = b.f22;
    b.f24 = b.f23;
    b.f25 = b.f24;
    b.f26 = b.f25;
    b.f27 = b.f26;
    b.f28 = b.f27;
    b.f29 = b.f28;
    b.f30 = b.f29;
  }
  cout << "Time for bitfields (120 assigns): " << count
       << " iterations: " << Gettime() << " seconds\n";

 return 0;
}
void main()  {

/*	
	int listsize = 9;    
	Node *Array = new Node[9];
	
	Array[0].key = 97;
	Array[1].key = 53;
	Array[2].key = 88;
	Array[3].key = 59;
	Array[4].key = 26;
	Array[5].key = 41;
	Array[6].key = 88;
	Array[7].key = 31;
	Array[8].key = 22;

	cout << "排序前:" << endl;
	Print<Node>(Array, listsize);
	RadixSort<Node>(Array, listsize, DStep, radix);
	cout << "排序后:" << endl;
	Print<Node>(Array, listsize);
*/	

	int input = -1;	   // 排序类型: -1 --不增(逆序) ; +1 - 不降(正序); 0 -- 随机

	Randomize();
 
	int listsize = 1000;
	Node *Array = new Node[ARRAYSIZE]; 

  /*
  // 也可以采用下列命令行的形式
  // <sortname> [+/-] <size_of_test> <threshold>
  //        -1 --不增 ; +1 - 不降; 无参数 --  0 随机
  // <size_of_test> 测试数据规模
  // <threshold> 快速排序、归并排序等某些需要阈值的排序

  int currarg;
  if ((argc < 2) || (argc > 4)) {
    cout << "Usage: <sortname> [+/-] <size> [<threshold>]\n";
    exit(-1);
  }
  currarg = 1;
  if (argv[currarg][0] == '-') {
    input = -1;
    currarg++;
  }
  else if (argv[currarg][0] == '+') {
    input = 1;
    currarg++;
  }
  listsize = atoi(argv[currarg++]);
  if (argc > currarg)
    THRESHOLD = atoi(argv[currarg]);
  if ((listsize > ARRAYSIZE) || (listsize < 0)) {
    cout << "Selected list size is too big\n";
    exit(-1);
  }
  cout << "Input: " << input << ", size: " << listsize << ", threshold: "
       << THRESHOLD << "\n";
  */

	int i, j;
	int k = ARRAYSIZE / listsize;

	if (input == -1)  {
		for (i=0; i<k; i++)							// 逆序
			for (j=0; j<listsize; j++)
				Array[i*listsize + j].key = listsize - j;
		}
	else if (input == 0)
		for (i=0; i<ARRAYSIZE; i++)
			Array[i].key = Random(32003);				// 随机
			// Array[i].key = Random(1000000);			// <1M的20位整数,随机	
		else {											// 正序
		for (i=0; i<k; i++)	 
			for (j=0; j<listsize; j++)
				Array[i*listsize + j].key = j;
		}

	Settime();
	for (i=0; i<ARRAYSIZE; i+=listsize)  {
//		cout << "排序前:" << endl;
//		PrintArray<Node>(&Array[i], i);
		RadixSort<Node>(&Array[i], listsize, DStep, radix);
//		cout << "排序后:" << endl;
//		PrintAddr<Node>(&Array[i], listsize);
	}

	cout << "Sort with list size " << listsize
	   << ", Array size " << ARRAYSIZE << " : " 
       << Gettime()/k << " seconds\n";

}