标签: optimization

如何使用 CMake 在没有优化的情况下进行编译 -O0

我正在使用Scientific Linux (SL)。我正在尝试编译一个使用一堆 C++ (.cpp) 文件的项目。

在目录中user/project/Build,我输入make以编译和链接所有 .cpp 文件。然后我必须去user/run/然后输入./run.sh values.txt

要使用 GDB 进行调试,我必须转到user/run然后键入gdb ../project/Build/bin/Project并运行,我输入run -Project INPUT/inputfile.txt. 但是,我正在尝试使用p variablename.

但是,我收到了消息s1 = <value optimized out>。我在网上做了一些研究,似乎我需要在没有优化的情况下编译-O0来解决这个问题。但是我在哪里输入呢?在CMakeLists?如果是这样,哪些 CMakeLists ?在project/Buildproject/src/project?

debugging gdb cmake optimization

20
推荐指数
3
解决办法
5万
查看次数

为什么内核不能使用 SSE/AVX 寄存器和指令?

StackOverflow 的这篇文章有这个

在某些环境中,对某些指令或使用某些寄存器存在限制。例如,在 Linux 内核中,通常不允许使用 SSE/AVX 或 FP 寄存器。因此,大多数优化的 memcpy 变体无法使用,因为它们依赖于 SSE 或 AVX 寄存器,并且在 x86 上使用了基于 mov 的纯 64 位副本。对于这些平台,使用 rep movsb 可以在不破坏 SIMD 代码限制的情况下获得优化的 memcpy 的大部分性能。

为什么 x86_64 内核不能使用 SSE/AVX?如果它会使memcopy()速度更快,似乎应该允许它。我只是在学习 Intel Assembly,当我看到这个评论时,我特别想学习 SEE/AVX。

对 Linux 内核中的 SSE/MME 和 AVX 优化特别感兴趣。

kernel intel optimization syscalls assembly

17
推荐指数
1
解决办法
6282
查看次数

快速压缩大量大文件

我每天生成大约 200 GB 的日志数据,分布在大约 150 个不同的日志文件中。

我有一个脚本将文件移动到一个临时位置,并在临时目录上执行 tar-bz2。

我得到了很好的结果,因为 200 GB 的日志被压缩到大约 12-15 GB。

问题是压缩文件需要很长时间。该cron的工作上午2:30每天运行,并继续运行,直到5:00-6:00 PM。

有没有办法提高压缩速度,更快地完成工作?有任何想法吗?

不要担心其他进程和所有,压缩发生的位置在NAS 上,我可以在专用VM上运行挂载 NAS并从那里运行压缩脚本。

以下是top的输出供参考:

top - 15:53:50 up 1093 days,  6:36,  1 user,  load average: 1.00, 1.05, 1.07
Tasks: 101 total,   3 running,  98 sleeping,   0 stopped,   0 zombie
Cpu(s): 25.1%us,  0.7%sy,  0.0%ni, 74.1%id,  0.0%wa,  0.0%hi,  0.1%si,  0.1%st
Mem:   8388608k total,  8334844k used,    53764k free,     9800k buffers
Swap: 12550136k total,      488k used, 12549648k free,  4936168k …
Run Code Online (Sandbox Code Playgroud)

tar shell-script bzip2 optimization

16
推荐指数
3
解决办法
2万
查看次数

ksh93 如何避免命令替换中的分叉

给定的

cmd='fun(){ echo "$@";  }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)

贝壳往往需要制作 2 个叉子才能实现

strace-f(){ strace -f "$@" 2>&1; }; 
for sh in dash bash zsh ksh; do 
    printf "$sh\t" ; strace-f $sh -c "$cmd"  |grep -e clone -e fork -c;
done
Run Code Online (Sandbox Code Playgroud)

除了ksh英勇地使它没有分叉一次:

dash    2
bash    2
zsh     2
ksh     0
Run Code Online (Sandbox Code Playgroud)

它是如何做到的?


编辑:

下面是它如何随着一个管道的插入而下降:

cmd='fun(){ echo "$@"| echo "$@";  }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)

输出:

dash    11
bash    10
zsh     5
ksh     3 
Run Code Online (Sandbox Code Playgroud)

shell ksh fork command-substitution optimization

12
推荐指数
1
解决办法
611
查看次数

文件描述符是否优化了对文件的写入?

是否等同于将命令直接打印到文件,而不是写入文件描述符?

插图

直接写入文件:

for i in {1..1000}; do >>x echo "$i"; done
Run Code Online (Sandbox Code Playgroud)

使用 fd:

exec 3>&1 1>x
for i in {1..1000}; do echo "$i"; done
exec 1>&3 3>&-
Run Code Online (Sandbox Code Playgroud)

后一种效率更高吗?

shell bash io-redirection file-descriptors optimization

7
推荐指数
2
解决办法
1006
查看次数

SSD优化

我知道这已经讨论过很多次了,但是互联网上有很多不同的意见,哪些优化对 SSD 有利(以及是否使用它们)。此外,技术已经进步,一些建议可能已经过时。

FS 上的过度配置和可用空间

这似乎仍然相关,但根据ycombinator讨论中的用户 cabirum 的说法

您不必过度配置未分区的空间并保留 20% 的分区可用空间。这是一个或另一个,关键是要有足够的可用空间来进行适当的磨损平衡。

另一方面,在ArchWikinamhuy 的这篇文章中没有提到它。还有什么更简单的 Linux建议!

Noatime、nodirtime 和 relatime 挂载选项

namhuy建议两者,ArchWikieasylinux建议仅 noatime 和用户 andmarios 在ycombinator说:

noatime:这是旧的,使用relatime。

这是根据自 Linux 2.6.30 以来的手册页默认行为。

修剪

这可能是最大的混乱

  • easylinux/etc/rc.local. 不要使用discard挂载选项。
  • ArchWiki使用fstrim.servicefstrim.timer. 警告有关discard.
  • namhuy和simoncion ycombinator使用discard选项。

限制写入操作

ArchWikinamhuyeasylinux建议将浏览器缓存移至 RAM。这在ycombinator 中通常是不同意的。 …

ssd optimization

6
推荐指数
1
解决办法
1343
查看次数

如果有信号,如何创建仅连接到 WiFi 的配置?30%?

有没有机会创建一个配置来完成以下工作?


仅当信号强于 30% 时才连接到可用的 WiFi


在很多地方,我都住在几乎没有wifi信号的边境地区。于是那些不可避免的信号中断就很烦人,所以我总是不得不自己手动在移动数据和wifi之间切换。

是否有机会设置一些仅允许连接到 WiFi 的配置,以便在信号强度足以避免终止的情况下(并由此保证稳定的连接)?


简化方法:

如果信号强度 < 30 % ? 连接容许

如果信号强度是 ? 30%?允许连接


30% 的值当然只是一个例子......也许 20% 会更有意义,我们会看到!

networking wifi configuration optimization connectivity

6
推荐指数
1
解决办法
525
查看次数

如何计算Linux中“C”程序消耗的内存

我写了两个 C 程序

  1. 一种是使用函数指针,并且
  2. 另一个没有函数指针。

现在我想知道两个程序消耗的内存,看看如何优化内存。

performance cpu c memory optimization

5
推荐指数
3
解决办法
3万
查看次数