乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 141|回复: 8

OpenMP

[复制链接]

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2010-8-18 08:53:23 | 显示全部楼层 |阅读模式
仅仅这个小宏就让我的循环快了3倍..
  1. Acad::ErrorStatus ExtPointCloud::transformBy( const AcGeMatrix3d & xform )
  2. {
  3.   #pragma omp parallel for //<<-------
  4.   for(int idx = 0;idx < mPoints.length();idx++)
  5.     mPoints[idx].transformBy(xform);
  6.   return Acad::eOk;
  7. }

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2010-8-18 08:54:28 | 显示全部楼层
比什么快?
回复

使用道具 举报

16

主题

83

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2010-8-18 11:24:40 | 显示全部楼层
没关系,我明白了。
酷!
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-8-18 11:25:41 | 显示全部楼层

恩,很好,从谷歌学到了一些技巧。
谢谢你,丹尼尔。
也许
  1. #pragma omp parallel for num_threads(8)

更好?
我没有测试。
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-8-19 19:43:18 | 显示全部楼层

比什么好?OpenMP很复杂,没有“一刀切”。从给出的例子来看,答案是否定的。你们可能运行i5和i7,但并不是每个人都这样,所以让
#pragma omp parallel for
计算出要自动管理的线程的正确数量。
要获得3倍以上的加速,尤其是在i5 i7上,可以编写一个自定义transpformBy函数,它将更好地利用可用的处理器。幸运的是,这是一个非常适合并行计算的简单函数。
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-8-19 20:06:56 | 显示全部楼层

不确定,我想这取决于处理器是否可以优雅地处理8个线程。我的猜测是最好不要静态说明线程数...但是我对OpenMP还不够了解
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2010-8-19 20:09:35 | 显示全部楼层
由于 ARX 应用程序的大部分时间都花在与 Acad 数据库交互上,因此很难找到有效使用多个处理器的机会。在我尝试过的一些挑战中,但大多数情况下必须放弃,因为锁定进程或数据库访问以进行写入会产生负面影响。似乎我会花更多的时间使用OpenMP而不是原始的挑战代码。所以,把它当作它的价值。
回复

使用道具 举报

15

主题

109

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
169
发表于 2010-8-19 20:32:37 | 显示全部楼层
在Q6600
释放模式下,带和不带OMP之间没有可测量的速度差
调试模式是3.9倍的加速
数据集大小为150万点,发布运行时间为0.034秒。调试OMP运行时为0.034秒。看来我的系统内存访问已经达到上限了。
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-8-19 21:19:41 | 显示全部楼层
这更像是一件探索/学习的事情。如果有一天我真的遇到了一些可以从多线程中“真正”受益的东西,我知道该去哪里寻找。我以前使用过VS2010的PPL库以及一些托管并发库,但从未使用过OpenMP。我想我最喜欢PPL图书馆
1000000点
//openmp开
命令:tt4
0.006115
命令:tt4
0.005942
命令:tt4
0.005784
//openmp关
指令:tt4
0.019366
指令:
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 20:03 , Processed in 0.180850 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表