mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 06:46:33 +00:00

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
40 lines
1016 B
C
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);
|
|
}
|