使用GCC编译C程序的默认优化级别是-O0.根据GCC文档关闭所有优化.例如:
gcc -O0 test.c
Run Code Online (Sandbox Code Playgroud)
但是,要检查-O0是否真的关闭了所有优化.我执行了这个命令:
gcc -Q -O0 --help=optimizers
Run Code Online (Sandbox Code Playgroud)
在这里,我有点惊讶.我启用了大约50个选项.然后,我使用以下方法检查了传递给gcc的默认参数:
gcc -v
Run Code Online (Sandbox Code Playgroud)
我懂了:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-
2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --
enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --
program-suffix=-4.8 --enable-shared --enable-linker-build-id --
libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-
gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-
sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-
time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --
with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-
cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-
java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-
jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-
directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-
gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --
with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release
--build=x86_64-linux-gnu …Run Code Online (Sandbox Code Playgroud) c optimization gcc performance-testing compiler-optimization
我想为输入C程序定义一组优化序列,以研究我应用的序列对代码性能的影响.
例:
gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o
Run Code Online (Sandbox Code Playgroud)
这些选项的顺序是否会影响生成代码的有效性?
同样,两次应用优化选项会产生影响吗?
有没有更好的方法来测试数千个优化序列?就像-02(包括大约20个选项)一样,我想定义自己的标志
在这里,我使用-O2优化级别(使用gcc 4.8.4)编译输入程序并测量执行时间:
gcc -O2 -c test.c -o obj.o
TIMEFORMAT='%3R' && time(./obj.o)
execution time = 1.825
Run Code Online (Sandbox Code Playgroud)
当我将-O2标志替换为在-O2 https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Optimize-Options级别中GCC manuel中定义的选项列表. html#Optimize-Options就像这样:
gcc -fauto-inc-dec -fcompare-elim -fcprop-registers -fdce -fdefer-pop -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -fipa-pure-const -fipa-profile -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time -fthread-jumps -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fdelete-null-pointer-checks -fdevirtualize -fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads -finline-small-functions -findirect-inlining -fipa-sra -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec …Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何 Linux 命令(如 time 或 /usr/bin/time)可以以纳秒为单位高精度提供一个命令的执行时间
我们如何衡量分类数据之间的相似距离?
示例:性别:男、女 数值:[0 - 100]、[200 - 300] 字符串:专业人士、初学者等,...
提前致谢。
我通过将 cpuset 指定为 1 个内核来启动一个 docker 容器:
docker run --cpuset-cpus="0"...
Run Code Online (Sandbox Code Playgroud)
第二个通过将 cpuset 指定为 4 个内核:
docker run --cpuset-cpus="0-3"...
Run Code Online (Sandbox Code Playgroud)
我在每个容器内启动了一个加载进程,并监控了两个容器的 CPU 消耗。
加载过程如下:
ffmpeg input > output
Run Code Online (Sandbox Code Playgroud)
我观察到两个容器之间的执行时间没有改善(没有加速)。
你知道为什么没有改进吗?具有 4 个核心的容器应该比 1 个核心容器运行得更快,对吗?
注意:对 1core 容器使用 top
CPU0%=100%
CPU1%=0
CPU2%=0
CPU3%=0
Run Code Online (Sandbox Code Playgroud)
使用 top 作为 4core 容器,docker 随机选择 4 个内核之一来启动进程。有时它会影响每个核心的 30%
CPU0%=0 CPU0%=30% CPU0%=0
CPU1%=100% or CPU0%=30% or CPU0%=0
CPU2%=0 CPU0%=30% CPU0%=0
CPU3%=0 CPU0%=30% CPU0%=100%
Run Code Online (Sandbox Code Playgroud) 您如何定义docker中google cadvisor提供的内存使用率指标?它是动态堆栈大小,堆需求,高速缓存未命中,代码大小,交换内存还是RAM内存?以及cpu的累计使用量,以哪个度量单位计算?您如何定义它?是否有任何文档?
注意:我记得cadvisor容器将资源使用情况数据导出到influxDB。他要导出的指标包括:memory_usage,cpu_cumulative_usage等。
谢谢
有没有办法使用选项标志在 cpu 和内存方面优化 GCC 编译代码?使用 O3 而不是 01 会增加还是减少内存或 CPU 使用量?
我专注于GCC编译程序的CPU /内存消耗.
执行使用O3编译的代码在资源方面总是如此贪婪吗?
是否有任何科学参考或规范显示不同级别的Mem/cpu消耗的差异?
处理这个问题的人通常关注这些优化对执行时间,编译代码大小和能量的影响.但是,我找不到太多关于资源消耗的工作(通过启用优化).
提前致谢.
optimization gcc compilation performance-testing compiler-optimization
我在java中实现了一个测试数据生成器,用于生成java原始类型的随机值.可能的参数值的范围不受限制.例如,如果我想生成随机整数或浮点数,我会考虑所有可能的值(MAX_INT-MIN_INT).为此,我使用的东西如下:
但是,这样做,我注意到生成的值总是很高(接近参数类型的最大值和最小值).例如,在100000次迭代之后,随机运算符未生成[-1000 - 1000]范围内的值.对于花车来说同样的事情,多头.等等,...
你能解释一下随机运算符在Java中的表现吗?当我们考虑Java类型的所有可能值时,为什么生成的值总是很高?
提前致谢.
gcc ×6
c ×3
cpu-usage ×3
optimization ×3
compilation ×2
docker ×2
memory ×2
cadvisor ×1
cpuset ×1
distance ×1
java ×1
linux ×1
multicore ×1
performance ×1
probability ×1
random ×1
similarity ×1
time ×1