mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-23 07:46:15 +00:00
benchmarks/gem_mmap: Convert to run over a fixed period
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
9b90234414
commit
e21368c53a
@ -46,10 +46,10 @@
|
|||||||
|
|
||||||
#define OBJECT_SIZE (1<<23)
|
#define OBJECT_SIZE (1<<23)
|
||||||
|
|
||||||
static uint64_t elapsed(const struct timespec *start,
|
static double elapsed(const struct timespec *start,
|
||||||
const struct timespec *end)
|
const struct timespec *end)
|
||||||
{
|
{
|
||||||
return 1000000000ULL*(end->tv_sec - start->tv_sec) + (end->tv_nsec - start->tv_nsec);
|
return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
@ -58,11 +58,13 @@ int main(int argc, char **argv)
|
|||||||
enum map {CPU, GTT, WC} map = CPU;
|
enum map {CPU, GTT, WC} map = CPU;
|
||||||
enum dir {READ, WRITE, CLEAR, FAULT} dir = READ;
|
enum dir {READ, WRITE, CLEAR, FAULT} dir = READ;
|
||||||
int tiling = I915_TILING_NONE;
|
int tiling = I915_TILING_NONE;
|
||||||
|
struct timespec start, end;
|
||||||
void *buf = malloc(OBJECT_SIZE);
|
void *buf = malloc(OBJECT_SIZE);
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
void *ptr, *src, *dst;
|
void *ptr, *src, *dst;
|
||||||
int reps = 13;
|
int reps = 1;
|
||||||
int c, size;
|
int loops;
|
||||||
|
int c;
|
||||||
|
|
||||||
while ((c = getopt (argc, argv, "m:d:r:t:")) != -1) {
|
while ((c = getopt (argc, argv, "m:d:r:t:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@ -140,38 +142,56 @@ int main(int argc, char **argv)
|
|||||||
dst = ptr;
|
dst = ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size = 1; size <= OBJECT_SIZE; size <<= 1) {
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
igt_stats_t stats;
|
switch (dir) {
|
||||||
int n;
|
case CLEAR:
|
||||||
|
case FAULT:
|
||||||
|
memset(dst, 0, OBJECT_SIZE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
memcpy(dst, src, OBJECT_SIZE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||||
|
|
||||||
igt_stats_init_with_size(&stats, reps);
|
loops = 2 / elapsed(&start, &end);
|
||||||
|
while (reps--) {
|
||||||
for (n = 0; n < reps; n++) {
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
struct timespec start, end;
|
for (c = 0; c < loops; c++) {
|
||||||
int page;
|
int page;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
|
||||||
switch (dir) {
|
switch (dir) {
|
||||||
case CLEAR:
|
case CLEAR:
|
||||||
memset(dst, 0, size);
|
memset(dst, 0, OBJECT_SIZE);
|
||||||
break;
|
break;
|
||||||
case FAULT:
|
case FAULT:
|
||||||
|
munmap(ptr, OBJECT_SIZE);
|
||||||
|
switch (map) {
|
||||||
|
case CPU:
|
||||||
|
ptr = gem_mmap__cpu(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
|
||||||
|
break;
|
||||||
|
case GTT:
|
||||||
|
ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_WRITE);
|
||||||
|
break;
|
||||||
|
case WC:
|
||||||
|
ptr = gem_mmap__wc(fd, handle, 0, OBJECT_SIZE, PROT_WRITE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
for (page = 0; page < OBJECT_SIZE; page += 4096) {
|
for (page = 0; page < OBJECT_SIZE; page += 4096) {
|
||||||
uint32_t *x = (uint32_t *)ptr + page/4;
|
uint32_t *x = (uint32_t *)ptr + page/4;
|
||||||
|
__asm__ __volatile__("": : :"memory");
|
||||||
page += *x; /* should be zero! */
|
page += *x; /* should be zero! */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
memcpy(dst, src, size);
|
memcpy(dst, src, OBJECT_SIZE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
|
||||||
|
|
||||||
igt_stats_push(&stats, elapsed(&start, &end));
|
|
||||||
}
|
}
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||||
printf("%7.3f\n", igt_stats_get_trimean(&stats)/1000);
|
printf("%7.3f\n", OBJECT_SIZE / elapsed(&start, &end) * loops / (1024*1024));
|
||||||
igt_stats_fini(&stats);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user