#include #include #include #include "omp.h" #ifndef BUF_SIZE #define BUF_SIZE (64 * 1024 * 1024) #endif #ifndef PAGE_SIZE #define PAGE_SIZE (4 * 1024) #endif #ifdef POPULATE_VIA_MMAP #define MMAP_FLAGS (MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE) #else #define MMAP_FLAGS (MAP_ANONYMOUS | MAP_PRIVATE) #endif int main(int argc, char **argv) { #pragma omp parallel { } double t0 = omp_get_wtime(); #pragma omp parallel { int i; for (i = 0; i < 10; i++) { char *p = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE, MMAP_FLAGS, -1, 0); #ifdef POPULATE_VIA_LOOP size_t j; for (j = 0; j < BUF_SIZE; j += PAGE_SIZE) p[j] = 0; #endif } } double t1 = omp_get_wtime(); printf("%d\t%f\n", omp_get_max_threads(), t1 - t0); return 0; }