int main (void) { if (lookup1(2) != 2) abort (); if (lookup2(2) != 3) abort (); if (lookup3(2) != 4) abort (); return 0; }
int main(void) { const unsigned int experiments = 50; const unsigned int hashDataSetTimes = 1000000; const unsigned int hashes = 7; TimeMeasurement measurement[hashes][experiments]; TimeResult results[hashes]; uint32_t testIP = 0; uint32_t testOutput = 0; // INITIALIZATION results[0].identifier = "MurmurHash3"; results[1].identifier = "IPHash 1"; results[2].identifier = "IPHash 2"; results[3].identifier = "MurmurHash2"; results[4].identifier = "SpookyHash"; results[5].identifier = "lookup3"; results[6].identifier = "SuperFastHash"; // EXPERIMENTS for (unsigned int experiment = 0; experiment < experiments; experiment++) { // MURMURHASH3 measurement[0][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { for (unsigned int octet = 0; octet < 4; octet++) { testIP += octets_dataset[ipc][octet]; testIP = testIP << 8; } MurmurHash3_x86_32(&testIP, 32, 1, &testOutput); } } measurement[0][experiment].end = std::chrono::system_clock::now(); measurement[0][experiment].elapsed_seconds = measurement[0][experiment].end-measurement[0][experiment].start; // IPHASH1 measurement[1][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { hash1 ( octets_dataset[ipc][0] , octets_dataset[ipc][1] , octets_dataset[ipc][2] , octets_dataset[ipc][3] ); } } measurement[1][experiment].end = std::chrono::system_clock::now(); measurement[1][experiment].elapsed_seconds = measurement[1][experiment].end-measurement[1][experiment].start; // IPHASH2 measurement[2][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { hash2 ( octets_dataset[ipc][0] , octets_dataset[ipc][1] , octets_dataset[ipc][2] , octets_dataset[ipc][3] ); } } measurement[2][experiment].end = std::chrono::system_clock::now(); measurement[2][experiment].elapsed_seconds = measurement[2][experiment].end-measurement[2][experiment].start; // MURMURHASH2 measurement[3][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { for (unsigned int octet = 0; octet < 4; octet++) { testIP += octets_dataset[ipc][octet]; testIP = testIP << 8; } MurmurHash2(&testIP, 32, 1); } } measurement[3][experiment].end = std::chrono::system_clock::now(); measurement[3][experiment].elapsed_seconds = measurement[3][experiment].end-measurement[3][experiment].start; // SPOOKYHASH measurement[4][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { for (unsigned int octet = 0; octet < 4; octet++) { testIP += octets_dataset[ipc][octet]; testIP = testIP << 8; } SpookyHash::Hash32(&testIP, 32, 1); } } measurement[4][experiment].end = std::chrono::system_clock::now(); measurement[4][experiment].elapsed_seconds = measurement[4][experiment].end-measurement[4][experiment].start; // lookup3 measurement[5][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { for (unsigned int octet = 0; octet < 4; octet++) { testIP += octets_dataset[ipc][octet]; testIP = testIP << 8; } lookup3(&testIP, 32, 1); } } measurement[5][experiment].end = std::chrono::system_clock::now(); measurement[5][experiment].elapsed_seconds = measurement[5][experiment].end-measurement[5][experiment].start; // SuperFastHash measurement[6][experiment].start = std::chrono::system_clock::now(); for (unsigned int i = 0; i < hashDataSetTimes; i++) { for (unsigned int ipc = 0; ipc < 100; ipc++) { for (unsigned int octet = 0; octet < 4; octet++) { testIP += octets_dataset[ipc][octet]; testIP = testIP << 8; } SuperFastHash(&testIP, 32, 1, &testOutput); } } measurement[6][experiment].end = std::chrono::system_clock::now(); measurement[6][experiment].elapsed_seconds = measurement[6][experiment].end-measurement[6][experiment].start; } for (unsigned int hash = 0; hash < hashes; hash++) { for (unsigned int experiment = 0; experiment < experiments; experiment++) { results[hash].elapsed_avg_seconds += measurement[hash][experiment].elapsed_seconds.count(); } results[hash].elapsed_avg_seconds /= experiments; } for (unsigned int mes = 0; mes < hashes; mes++) { printMeasurementResults(&results[mes]); } return 0; }