From bb1ccdbc33d704afb7cbd19beb22dc6972e58b5f Mon Sep 17 00:00:00 2001 From: Allan MacKinnon Date: Tue, 17 Jul 2018 13:10:25 -0700 Subject: Use std::chrono for measuring timing Bug: skia: Change-Id: Ida239fa3b47056289d698a19a624703fe6ff3f35 Reviewed-on: https://skia-review.googlesource.com/141951 Reviewed-by: Allan MacKinnon Commit-Queue: Allan MacKinnon --- src/compute/hs/cl/bench/main.c | 41 +++++++++------------------------------- src/compute/hs/cl/bench/sort.cpp | 38 +++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 40 deletions(-) (limited to 'src/compute/hs/cl/bench') diff --git a/src/compute/hs/cl/bench/main.c b/src/compute/hs/cl/bench/main.c index bfa7c1da38..8be6058981 100644 --- a/src/compute/hs/cl/bench/main.c +++ b/src/compute/hs/cl/bench/main.c @@ -10,20 +10,11 @@ // // +#include #include #include #include -// -// CPU bench -// - -#ifdef _MSC_VER -#include -#else -#include -#endif - // // squelch OpenCL 1.2 deprecation warning // @@ -82,8 +73,8 @@ hs_fill_rand(uint32_t * vin_h, uint32_t const count, uint32_t const words) // // -char const * hs_cpu_sort_u32(uint32_t * a, uint32_t const count); -char const * hs_cpu_sort_u64(uint64_t * a, uint32_t const count); +char const * hs_cpu_sort_u32(uint32_t * a, uint32_t const count, double * const cpu_ns); +char const * hs_cpu_sort_u64(uint64_t * a, uint32_t const count, double * const cpu_ns); // // @@ -91,29 +82,15 @@ char const * hs_cpu_sort_u64(uint64_t * a, uint32_t const count); static char const * -hs_cpu_sort(uint32_t const hs_words, - void * sorted_h, - uint32_t const count, - double * const cpu_ns) +hs_cpu_sort(uint32_t const hs_words, + void * sorted_h, + uint32_t const count, + double * const cpu_ns) { - char const * algo; - - LARGE_INTEGER t0,t1,freq; - - QueryPerformanceCounter(&t0); - if (hs_words == 1) - algo = hs_cpu_sort_u32(sorted_h,count); + return hs_cpu_sort_u32(sorted_h,count,cpu_ns); else - algo = hs_cpu_sort_u64(sorted_h,count); - - QueryPerformanceCounter(&t1); - QueryPerformanceFrequency(&freq); - - // nanoseconds - *cpu_ns = (double)((t1.QuadPart - t0.QuadPart) * 1000 * 1000 * 1000) / (double)freq.QuadPart; - - return algo; + return hs_cpu_sort_u64(sorted_h,count,cpu_ns); } static diff --git a/src/compute/hs/cl/bench/sort.cpp b/src/compute/hs/cl/bench/sort.cpp index 13e0af556e..4daa2c70ce 100644 --- a/src/compute/hs/cl/bench/sort.cpp +++ b/src/compute/hs/cl/bench/sort.cpp @@ -69,34 +69,56 @@ hs_qsort_compare_u64(void const * a, void const * b) extern "C" char const * -hs_cpu_sort_u32(uint32_t * a, uint32_t const count) +hs_cpu_sort_u32(uint32_t * a, uint32_t const count, double * const cpu_ns) { + using to_ns = std::chrono::duration; + + auto start = std::chrono::high_resolution_clock::now(); + #if defined ( HS_USE_PARALLEL_SORT ) std::sort(std::execution::par_unseq,a,a+count); - return "std::sort(std::execution::par_unseq)()"; + char const * const algo = "std::sort(std::execution::par_unseq)()"; #elif defined ( HS_USE_STD_SORT ) std::sort(a,a+count); - return "std:sort()"; + char const * const algo = "std:sort()"; #elif defined ( HS_USE_QSORT ) qsort(a,count,sizeof(*a),hs_qsort_compare_u32); - return "qsort()"; + char const * const algo = "qsort()"; #endif + + auto stop = std::chrono::high_resolution_clock::now(); + auto duration_ns = to_ns(stop - start); + + *cpu_ns = duration_ns.count(); + + return algo; } extern "C" char const * -hs_cpu_sort_u64(uint64_t * a, uint32_t const count) +hs_cpu_sort_u64(uint64_t * a, uint32_t const count, double * const cpu_ns) { + using to_ns = std::chrono::duration; + + auto start = std::chrono::high_resolution_clock::now(); + #if defined ( HS_USE_PARALLEL_SORT ) std::sort(std::execution::par_unseq,a,a+count); - return "std::sort(std::execution::par_unseq)()"; + char const * const algo = "std::sort(std::execution::par_unseq)()"; #elif defined ( HS_USE_STD_SORT ) std::sort(a,a+count); - return "std::sort()"; + char const * const algo = "std::sort()"; #elif defined ( HS_USE_QSORT ) qsort(a,count,sizeof(*a),hs_qsort_compare_u64); - return "qsort()"; + char const * const algo = "qsort()"; #endif + + auto stop = std::chrono::high_resolution_clock::now(); + auto duration_ns = to_ns(stop - start); + + *cpu_ns = duration_ns.count(); + + return algo; } // -- cgit v1.2.3