aboutsummaryrefslogtreecommitdiffhomepage
path: root/trace_profile/callgrind
diff options
context:
space:
mode:
authorjohannst <johannst@users.noreply.github.com>2024-01-23 01:39:29 +0000
committerjohannst <johannst@users.noreply.github.com>2024-01-23 01:39:29 +0000
commit6dbf014773f5f8ac0b0e291392dfde518de94daf (patch)
treef48b103633621acc4c4d6b272fd67f3d86cc2ae2 /trace_profile/callgrind
parentc4fdf1c5f2c9ebedd0dedba4449c015f98aecda5 (diff)
downloadnotes-6dbf014773f5f8ac0b0e291392dfde518de94daf.tar.gz
notes-6dbf014773f5f8ac0b0e291392dfde518de94daf.zip
deploy: 8c9fd06e839c06717dd2dcb067371a5e1fc71801
Diffstat (limited to 'trace_profile/callgrind')
-rw-r--r--trace_profile/callgrind/Makefile14
-rw-r--r--trace_profile/callgrind/cg_example.cc36
2 files changed, 50 insertions, 0 deletions
diff --git a/trace_profile/callgrind/Makefile b/trace_profile/callgrind/Makefile
new file mode 100644
index 0000000..0da099c
--- /dev/null
+++ b/trace_profile/callgrind/Makefile
@@ -0,0 +1,14 @@
+prof: cg_example
+ valgrind --tool=callgrind --dump-instr=yes --instr-atstart=no -- ./cg_example
+
+prof-cache: cg_example
+ valgrind --tool=callgrind --dump-instr=yes --instr-atstart=no --cache-sim=yes -- ./cg_example
+
+show:
+ callgrind_annotate
+
+cg_example: cg_example.cc
+ clang++ -o cg_example -Wall -Wextra -O2 -g -fno-inline cg_example.cc -lpthread
+
+clean:
+ $(RM) callgrind.* cg_example
diff --git a/trace_profile/callgrind/cg_example.cc b/trace_profile/callgrind/cg_example.cc
new file mode 100644
index 0000000..d143790
--- /dev/null
+++ b/trace_profile/callgrind/cg_example.cc
@@ -0,0 +1,36 @@
+#include <cstdio>
+#include <thread>
+
+#include <valgrind/callgrind.h>
+
+struct cnt {
+ volatile int a;
+ volatile int b;
+};
+
+void inc_a(cnt &c) { c.a++; }
+void inc_b(cnt &c) { c.b++; }
+
+int main() {
+ cnt C{0, 0};
+
+ CALLGRIND_START_INSTRUMENTATION;
+
+ std::thread T1([&C]() {
+ for (int i = 0; i < 20000000; ++i) {
+ inc_a(C);
+ }
+ });
+ std::thread T2([&C]() {
+ for (int i = 0; i < 10000000; ++i) {
+ inc_b(C);
+ }
+ });
+ T1.join();
+ T2.join();
+
+ CALLGRIND_STOP_INSTRUMENTATION;
+
+ printf("%d %d\n", C.a, C.b);
+ return 0;
+}