小编Da *_*eng的帖子

为什么GCC __builtin_prefetch没有提高性能?

我正在编写一个程序来分析社交网络图.这意味着程序需要大量的随机内存访问.在我看来,预取应该有所帮助.这是从顶点的邻居读取值的一小段代码.

for (size_t i = 0; i < v.get_num_edges(); i++) {
    unsigned int id = v.neighbors[i];
    res += neigh_vals[id];
}
Run Code Online (Sandbox Code Playgroud)

我将上面的代码转换为下面的代码,并预取顶点的邻居值.

int *neigh_vals = new int[num_vertices];

for (size_t i = 0; i < v.get_num_edges(); i += 128) {
    size_t this_end = std::min(v.get_num_edges(), i + 128);
    for (size_t j = i; j < this_end; j++) {
        unsigned int id = v.neighbors[j];
        __builtin_prefetch(&neigh_vals[id], 0, 2);
    }
    for (size_t j = i; j < this_end; j++) {
        unsigned int id = v.neighbors[j];
        res …
Run Code Online (Sandbox Code Playgroud)

c performance gcc prefetch

2
推荐指数
1
解决办法
1559
查看次数

标签 统计

c ×1

gcc ×1

performance ×1

prefetch ×1