summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-04-15 19:18:07 +0200
committerAnton Khirnov <anton@khirnov.net>2019-04-15 19:18:07 +0200
commit8b86011bb9817a492ae758256f921abe39c20cbc (patch)
treea66a051f2cb376a7773420084da315f46b271658
parent34917b834143c180562fec66a53d1180251a4b7d (diff)
Allow disabling read or write portion through arguments.
-rw-r--r--membw.c47
1 files changed, 32 insertions, 15 deletions
diff --git a/membw.c b/membw.c
index 0ae9d7b..6eb3b6c 100644
--- a/membw.c
+++ b/membw.c
@@ -36,7 +36,7 @@ static inline int64_t gettime(void)
void print_usage(int argc, char **argv)
{
fprintf(stderr,
- "Usage: %s <N> [repeats]\n"
+ "Usage: %s <N> [repeats] [rw]\n"
"\tN: array size in kB\n",
argv[0]);
}
@@ -52,6 +52,8 @@ int main(int argc, char **argv)
int64_t start;
int64_t duration = 0;
+ int do_read = 1, do_write = 1;
+
if (argc < 2) {
print_usage(argc, argv);
return 1;
@@ -73,33 +75,48 @@ int main(int argc, char **argv)
}
}
+ if (argc >= 4) {
+ do_read = 0;
+ do_write = 0;
+ for (int i = 0; argv[3][i]; i++) {
+ if (argv[3][i] == 'r')
+ do_read = 1;
+ if (argv[3][i] == 'w')
+ do_write = 1;
+ }
+ }
+
ret = posix_memalign((void**)&mem, 64, N);
if (ret != 0) {
fprintf(stderr, "Error allocating memory\n");
return 2;
}
- start = gettime();
+ if (do_write) {
+ start = gettime();
- for (unsigned int i = 0; i < repeats; i++)
- membw_mem_write_avx(mem, N);
+ for (unsigned int i = 0; i < repeats; i++)
+ membw_mem_write_avx(mem, N);
- duration = gettime() - start;
+ duration = gettime() - start;
- fprintf(stdout, "Written %u x %g MB in %g ms: write bandwidth: %g MB/s\n",
- repeats, (double)N / (1024 * 1024), duration / 1e3,
- (double)N * repeats / duration * 1e6 / (1024 * 1024));
+ fprintf(stdout, "Written %u x %g MB in %g ms: write bandwidth: %g MB/s\n",
+ repeats, (double)N / (1024 * 1024), duration / 1e3,
+ (double)N * repeats / duration * 1e6 / (1024 * 1024));
+ }
- start = gettime();
+ if (do_read) {
+ start = gettime();
- for (unsigned int i = 0; i < repeats; i++)
- membw_mem_read_avx(mem, N);
+ for (unsigned int i = 0; i < repeats; i++)
+ membw_mem_read_avx(mem, N);
- duration = gettime() - start;
+ duration = gettime() - start;
- fprintf(stdout, "Read %u x %g MB in %g ms: read bandwidth: %g MB/s\n",
- repeats, (double)N / (1024 * 1024), duration / 1e3,
- (double)N * repeats / duration * 1e6 / (1024 * 1024));
+ fprintf(stdout, "Read %u x %g MB in %g ms: read bandwidth: %g MB/s\n",
+ repeats, (double)N / (1024 * 1024), duration / 1e3,
+ (double)N * repeats / duration * 1e6 / (1024 * 1024));
+ }
free(mem);