add stress, os_perf_state_minimum, min-os-perf, max-os-perf

This commit is contained in:
Carl Pearson
2019-09-25 12:27:06 -05:00
parent c358f18c22
commit 57bf39bb97
5 changed files with 93 additions and 1 deletions

View File

@@ -40,6 +40,14 @@ Result os_perf_state_maximum(const int cpu) {
#endif
}
Result os_perf_state_minimum(const int cpu) {
#ifdef __linux__
return set_governor(cpu, "powersave");
#else
#error "unsupported platform"
#endif
}
Result set_os_perf_state(const int cpu, OsPerfState state) {
#ifdef __linux__
return set_governor(cpu, state.governor);

View File

@@ -44,4 +44,21 @@ add_executable(sync-drop-caches sync_drop_caches.cpp)
target_link_libraries(sync-drop-caches perfect)
add_executable(no-aslr no_aslr.cpp)
target_link_libraries(no-aslr perfect)
target_link_libraries(no-aslr perfect)
add_executable(max-os-perf max_os_perf.cpp)
target_link_libraries(max-os-perf perfect)
add_executable(min-os-perf min_os_perf.cpp)
target_link_libraries(min-os-perf perfect)
## OpenMP
find_package(OpenMP)
if (OpenMP_FOUND)
add_executable(stress stress.cpp)
target_link_libraries(stress perfect)
target_link_libraries(stress OpenMP::OpenMP_CXX)
else(OpenMP_FOUND)
message(WARNING "didn't find OpenMP, some benchmarks will be unavailable.")
endif(OpenMP_FOUND)

9
tools/max_os_perf.cpp Normal file
View File

@@ -0,0 +1,9 @@
#include "perfect/os_perf.hpp"
int main(void) {
PERFECT(perfect::init());
for (auto cpu : perfect::cpus()) {
PERFECT(perfect::os_perf_state_maximum(cpu));
}
}

9
tools/min_os_perf.cpp Normal file
View File

@@ -0,0 +1,9 @@
#include "perfect/os_perf.hpp"
int main(void) {
PERFECT(perfect::init());
for (auto cpu : perfect::cpus()) {
PERFECT(perfect::os_perf_state_minimum(cpu));
}
}

49
tools/stress.cpp Normal file
View File

@@ -0,0 +1,49 @@
#include <iostream>
#include <cmath>
#include <omp.h>
#include <cstring>
#include <chrono>
#include <vector>
#include <iostream>
int main(int argc, char **argv) {
size_t numThreads = std::stoi(argv[1]);
std::vector<size_t> totals(numThreads, 0);
omp_set_num_threads(numThreads);
auto start = std::chrono::system_clock::now();
double time = std::stod(argv[2]);
#pragma omp parallel
{
size_t tid = omp_get_thread_num();
double a = rand();
while (true) {
for (size_t i = 0; i < 500; ++i) {
double x;
asm volatile(""::"r"(a));
x = sqrt(a);
asm volatile(""::"r"(x));
asm volatile(""::"r"(a));
x = sqrt(a);
asm volatile(""::"r"(x));
}
totals[tid] += 1000;
auto elapsed = (std::chrono::system_clock::now() - start).count() / 1e9;
if (elapsed > time) {
break;
}
}
}
size_t sum = 0;
for (auto t : totals) {
sum += t;
}
std::cout << (double)sum / time << "\n";
};