我使用以下开关编译了我的 C++ 代码:
g++ -O0 -g -rdynamic -DNDEBUG -DARMA_NO_DEBUG -std=c++11 -pthread
Run Code Online (Sandbox Code Playgroud)
链接器开关是:
-lboost_system -lboost_thread -lboost_chrono -larmadillo -pthread
Run Code Online (Sandbox Code Playgroud)
但是我在我的应用程序中没有使用线程。我也避免使用任何delay函数。
然后我运行代码并使用perf工具对其进行测试。
sudo perf record ./bin/my_application
sudo perf report -f
Run Code Online (Sandbox Code Playgroud)
结果对我来说很奇怪:
Overhead Command Shared Object Symbol
50.92% myApplication [kernel.kallsyms] [k] native_sched_clock
24.73% myApplication [kernel.kallsyms] [k] pick_next_entity
17.46% myApplication [kernel.kallsyms] [k] prepend_name
2.57% myApplication myApplication [.] arma::arrayops::copy_small<double>
1.11% myApplication myApplication [.] arma::Mat<double>::Mat
1.11% myApplication myApplication [.] myClass::myMethod
1.11% myApplication libblas.so.3 [.] dgemv_
0.97% myApplication myApplication [.] arma::Mat<double>::init_cold
Run Code Online (Sandbox Code Playgroud)
为什么 kernel.kallsyms函数主宰了执行时间? …