#include #include #include #include #include #include int main() { size_t size = 1e8; size_t huge_page = 2097152; uint8_t* psrc = (uint8_t*)memalign(huge_page, size); memset(psrc, 128, size); //madvise(psrc, size, MADV_HUGEPAGE); std::vector v; for(int n=0; n<20; n++) { auto start = std::chrono::high_resolution_clock::now(); uint8_t* p0 = (uint8_t*)memalign(huge_page, size); if(n > 10) madvise(p0, size, MADV_HUGEPAGE); auto stop = std::chrono::high_resolution_clock::now(); std::chrono::duration d = stop-start; std::cout << n << ": Allocation: " << d.count()*1e3 << " ms; "; start = std::chrono::high_resolution_clock::now(); memset(p0, 16, size); stop = std::chrono::high_resolution_clock::now(); d = stop-start; std::cout << "Memset (1): " << d.count()*1e3 << " ms; "; start = std::chrono::high_resolution_clock::now(); memset(p0, 16, size); stop = std::chrono::high_resolution_clock::now(); d = stop-start; std::cout << "Memset (2): " << d.count()*1e3 << " ms; "; start = std::chrono::high_resolution_clock::now(); memcpy(psrc, p0, size); stop = std::chrono::high_resolution_clock::now(); d = stop-start; std::cout << "Memcpy (1): " << d.count()*1e3 << " ms; "; start = std::chrono::high_resolution_clock::now(); memcpy(psrc, p0, size); stop = std::chrono::high_resolution_clock::now(); d = stop-start; std::cout << "Memcpy (2): " << d.count()*1e3 << " ms; "; start = std::chrono::high_resolution_clock::now(); memcpy(p0, psrc, size); stop = std::chrono::high_resolution_clock::now(); d = stop-start; std::cout << "Memcpy (rev): " << d.count()*1e3 << " ms\n"; //free(p0); v.push_back(p0); } for(auto x: v) free(x); free(psrc); }