首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SSE优化有限差分

使用SSE优化有限差分
EN

Stack Overflow用户
提问于 2010-11-19 07:30:08
回答 1查看 162关注 0票数 3

我想知道是否可以使用SSE (1,2,3,4,...)要优化以下循环:

代码语言:javascript
复制
// u and v are allocated through new double[size*size]
for (int j = l; j < size-1; ++j)
{
    for (int k = 1; k < size-1; ++k)
    {
        v[j*size + k] = (u[j*size + k-1] + u[j*size + k+1] 
                       + u[(j-1)*size + k]+ u[(j+1)*size + k]) / 4.0;
    }
}

[j*size + k]习惯用法用于将内存块视为多维数组。

遗憾的是,GCC (4.5)的-ftree-vectorize旗帜不相信循环可以进行SIMD型优化。(尽管我要说的是,除了最琐碎的循环之外,我从未见过-ftree-vectorize优化任何东西。)

虽然我知道还有许多其他方法可以提高循环的性能(OpenMP、展开、就地算法等),但我特别感兴趣的是是否可以使用SIMD。我可能更感兴趣的是这样的循环如何(如果有的话)可以转换的大致轮廓,而不是具体的实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-19 07:33:05

这看起来应该是可能的,但由于(a)您使用的是doubles,(b)您做的相对于I/O的计算非常少,(c)大多数现代x86-64CPU无论如何都有两个FPU,那么您的SIMD编码投资可能得不到太多回报。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4220740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档