SIMD和多核并行(OpenMP)的问题

wwwquzhinet 2009-05-04 11:29:21
我将一段浮点运算的程序使用SSE优化后,速度得到大幅度的提高。然后,为了获得更高的匀速,我想采用OpenMP指令。
但是,我测试后发现,性能只是提升了一点点。并没有因为是四核,所以快很多。
我的机器是: Intel Core 2 Quad Q9550

请问在四核计算机上,SIMD寄存器是四组还是只有一组?也就是说,在四核计算机上,是否能并行执行四条SIMD指令?
或者说,综合使用SSE和OpenMP,是否能同时处理个16(4 * 4)个相同的浮点运算?



...全文
1104 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tigerqqq 2009-05-28
  • 打赏
  • 举报
回复
所以,理论加速比确实是:4x4=16?

我也遇到了同样的问题,在单线程模式下SIMD指令确实获得了加速,多线程下性能反而下降了。(使用OpenMP)

wwwquzhinet 2009-05-17
  • 打赏
  • 举报
回复
我是做计算机视觉的,用在机器视觉上:工业自动化中的基于图像处理的测量、缺陷检查和定位。
在我的程序中,最浪费时间的是图像处理函数(尤其是滤波,比如说高斯滤波之类的函数)。
在这些函数中,循环语句是基本的结构。

在这个领域,为了适应生产线的要求,都要求程序有非常高的速度。
因此,充分利用计算机的能力实现最快速度的程序是一个重要的目标。

基于这样一种目标,我利用SIMD指令写了这些函数,相对于原来的函数,速度已经得到很大的提高。
为了得到更快的速度,我尝试将循环结构OpenMP并行化处理,我现在就在做这个事情。

但是,我发现不是很理想。所有有了上面的问题。
看了1楼的帖子,我觉得却是可能是cpu缓存的问题。
光宇广贞 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 intel_www 的回复:]
四核计算机上,SIMD寄存器是四组还是只有一组?

有四组,但是是在不同的core里面。

在四核计算机上,是否能并行执行四条SIMD指令?

可以,但是这四条指令必须在不同的线程中。
[/Quote]

好解法。

另楼主,OPENMP是用于协调多核的多线程处理的。核再多,也只能有一个核应付多个线程,不会出现多个核应付同一个线程的情况。楼主的设想便相当于多核应对同一线程,目前这种技术做不到。

OPENMP对于处理循环语句块多线程和并行模块多线程效果非常好,也只有这时候才真正体现多核的并发优势。除此之外,用不用,没多大的区别的。而且,你若用错了地方,比如说不是我前面说的该用OPENMP的地方用了,将导致OPENMP让多个线程——至少是你的所有CPU,去并行走同一个过程,也就是说同一个过程在你的所有CPU中各走一遍,这就是浪费了,而且更容易出危险。
intel_www 2009-05-06
  • 打赏
  • 举报
回复
四核计算机上,SIMD寄存器是四组还是只有一组?

有四组,但是是在不同的core里面。

在四核计算机上,是否能并行执行四条SIMD指令?

可以,但是这四条指令必须在不同的线程中。
intel_iclifort 2009-05-06
  • 打赏
  • 举报
回复
同一处理器中不同核的SSE处理单元都是独立的, 所以我觉得问题可能是由于数据的组织或者访问造成的cache效率问题

或许这里帖子对你会有启发的: http://topic.csdn.net/u/20080910/23/c8bcbb29-3b8b-4ff1-8574-6be72e20f4f6.html

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧