Dmitry Vyukov c4cb9b64dd tsan: add more micro benchmarks
1. Add a set of micro benchmarks for memory accesses,
   mem* functions and unaligned accesses.
2. Add support for multiple benchmarks in a single binary
   (or it would require 12 new benchmark binaries).
3. Remove the "clock growth" machinery,
   it affects the current tsan runtime by increasing size of
   all vector clocks, but this won't be relevant for the new
   tsan runtime.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D106961
2021-07-28 20:11:59 +02:00

40 lines
1016 B
C

#include "test.h"
#include <time.h>
int bench_nthread;
int bench_niter;
int bench_mode;
void bench(); // defined by user
void start_thread_group(int nth, void(*f)(int tid));
int main(int argc, char **argv) {
bench_nthread = 2;
if (argc > 1)
bench_nthread = atoi(argv[1]);
bench_niter = 100;
if (argc > 2)
bench_niter = atoi(argv[2]);
if (argc > 3)
bench_mode = atoi(argv[3]);
timespec tp0;
clock_gettime(CLOCK_MONOTONIC, &tp0);
bench();
timespec tp1;
clock_gettime(CLOCK_MONOTONIC, &tp1);
unsigned long long t =
(tp1.tv_sec * 1000000000ULL + tp1.tv_nsec) -
(tp0.tv_sec * 1000000000ULL + tp0.tv_nsec);
fprintf(stderr, "%llu ns/iter\n", t / bench_niter);
fprintf(stderr, "DONE\n");
}
void start_thread_group(int nth, void(*f)(int tid)) {
pthread_t *th = (pthread_t*)malloc(nth * sizeof(pthread_t));
for (int i = 0; i < nth; i++)
pthread_create(&th[i], 0, (void*(*)(void*))f, (void*)(long)i);
for (int i = 0; i < nth; i++)
pthread_join(th[i], 0);
}