我曾尝试将OpenMP与单个#pragma omp parallel for
. @ 3.40GHz。这就是在 Debian 7 (wheezy) 上使用和编译的区别。g++ -O3
g++ -O3 -fopenmp
gcc (Debian 4.7.2-5) 4.7.2
为什么它最多只使用 500% CPU,而理论最大值为 800%,因为 CPU 是 4 核 / 8 线程?它不应该至少达到700s吗?
为什么我的总时间仅提高了 2.5 倍,而 CPU 使用成本却提高了 5 倍?缓存抖动?
整个程序基于 C++string
操作,具有递归处理(使用大量的.substr(1)
和一些连接),其中所述字符串连续插入到 a vector
of 中set
。
换句话说,基本上,在单个并行 for 循环中完成了大约 2k 次循环迭代,在 上操作vector
,并且它们中的每一个都可以对自身进行两次递归调用 w/ somestring
.substr(1)
和+ char
concatenation,然后递归终止于set
.insert
a单个字符串或两个字符串的串联,并且 saidset
.insert
还负责处理大量可能的重复项。
一切都在规范范围内正确运行,但我正在尝试看看它是否可以运行得更快。:-)