|
1
8
这是我的尝试,经过充分优化和测试:
这将使用
|
|
2
4
希望这能让编译器将加载与算法交错;配置并查看组件,看看是否有改进。理想情况下,编译器将生成SSE指令,但我不确定在实践中是否会发生这种情况。
希望有帮助。 |
|
|
3
2
上海证券交易所
尽可能少的荷载,且不假设
这段代码明显比上面的代码快,而上面的代码又比简单代码快,而且在除简单情况外的所有访问模式上都快
测试内存带宽大约为5333MB/s,所以看起来我只看到了一个通道。我使用Debian的GCC4.3.2-1.1,-O3-Ffast math-msse2-Ftree vectorize-std=gnu99进行编译。
为了测试,我让
带宽
假设服务器上没有完全缓存
更广泛的硬件可能会产生更大的差异。运行三个DDR3-1333通道的Nehalem系统需要每周期移动3*10667/2.66=12.6字节,以饱和内存带宽。如果
|
|
|
4
0
简短回答否。冗长回答是,但效率不高。您将因执行非对齐负载而受到惩罚,这将否定任何类型的好处。除非您能保证b[i]连续索引对齐,否则向量化后的性能很可能会更差 如果您事先知道什么是索引,那么最好是展开并指定显式索引。我使用模板专门化和代码生成做了类似的事情。如果你感兴趣,我可以分享 嗯 *_像往常一样。伪代码:
我记不清函数名,可能需要再次检查。 另外,若您知道可能并没有别名问题,那个么在指针中使用restrict关键字。 这将使编译器更具攻击性。 |
|
|
5
0
这不会像现在这样矢量化,因为数组索引具有双重间接性。由于您使用的是Double,因此从SSE中几乎得不到什么好处,尤其是在大多数现代CPU都有2个FPU的情况下。 |
|
|
aeiou · 对日志表进行矢量化处理,以确定最新的可用性 2 年前 |
|
|
bbbb · 矢量化或在大型数据帧上使用多重处理[重复] 2 年前 |
|
|
Sterling Butters · NumPy 1D近邻中循环的避免 2 年前 |