gpt4 book ai didi

c++ - 为什么此代码在 Mac 和 Red Hat 中运行如此不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:47 26 4
gpt4 key购买 nike

这是一段使用树的列表来累加数组的代码,在Red Hat中运行很慢。

我循环这段代码,8860000 次。
mac 耗时 13.6957 秒。
红帽消耗 50.78 秒。

为什么 mac 运行相同的代码比 CPU 较慢的 Red hat 快得多?
我列出这两个系统的信息,谁能帮我看看?
我用来编译的命令是:g++ main.cc tp.cc -O2.
编译器确实有一些差异,mac air 支持浮点计算比 Red hat 计算机更好,无论如何,请帮助我。

inline bool TP::left_branch(double const& fea_val, float const& node_val) {
return fea_val <= node_val;
}
void TP::predict(double const *features){
uint32_t i, n, k;
double* preds=predictions_;
memcpy(preds, init_preds_, sizeof(double) * class_count_);

for (i = 0; i < tree_count_; i++) {
struct Tree *tree = trees_ + i;
for (n = 0;;) {
struct Node *node = tree->root + n;
if (node->is_leaf) {
//leaf_nodes[i] = node->leaf_idx;
for (k = 0; k < class_count_; k++) {
preds[k] += node->increments[k];
}
break;
}
if (left_branch(features[node->var_idx], node->var_val)) {
n = n * 2 + 1;
} else {
n = n * 2 + 2;
}
}
}
}

Mac 信息:
苹果电脑:OS X 优胜美地 10.10 (14A389)
中央处理器:1.4 GHz 英特尔酷睿 i5
编译器:配置为:--prefix=/Library/Developer/CommandLineTools/usr--with-gxx-include-dir=/usr/include/c++/4.2.1Apple LLVM 版本 6.0 (clang-600.0.56)(基于 LLVM 3.5svn)目标:x86_64-apple-darwin14.0.0线程模型:posix

红帽信息:
个人电脑:Linux 版本 2.6.32-220.23.2.ali927.el5.x86_64
cpu : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
编译:g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51)

最佳答案

有许多可能的原因,我已按照可能性降序列出了这些原因。

  • 非常旧的编译器/操作系统版本:您在同样过时的 Linux 发行版上运行非常的 g++ 版本(超过 7 年) .您很可能只是在处理代码质量的巨大差异。您应该考虑将您的 Red Hat(或其他发行版)版本更新为更现代的版本,这不仅是因为性能问题,还因为安全问题。

  • 内存分配器差异导致的局部性:另一个可能的原因是内存分配器 (malloc) 导致的局部性差异。您可以在两个系统上尝试 Hoard (www.hoard.org) 或其他替代内存分配器来隔离这种影响。

  • 硬件差异:您在两个完全不同的硬件平台上运行。虽然我不怀疑这是问题所在,但您可以通过在 Mac 上的虚拟机中运行 Linux 来隔离可能的硬件影响。使用类似 Parallels 或 VMware 的东西,它们具有相当高的性能,而不是 VirtualBox,后者没有。

关于c++ - 为什么此代码在 Mac 和 Red Hat 中运行如此不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com