请问关于由操作系统创建的线程问题

adrian_yang84 2008-05-02 01:03:52
您好, 请问是不是omp指令只能对它规定的语句实现并行操作,而编译器对操作系统创建的子线程像是CreateThread就无能为力了,换句话说,我能否让操作系统创建的子线程实现并行化呢? 因为感觉有些时候omp指令规定的条件太严格了,譬如在for循环时,我可能会希望在某种情况下break,这样就不能用omp实现并行了.
非常感谢.
...全文
155 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
youxia000 2008-09-08
  • 打赏
  • 举报
回复
哪么在omp中 continue 是不是可以使用的?

intel_jeff 2008-05-04
  • 打赏
  • 举报
回复
所有OS都支持多线程(并行)的。
上面这个代码的确不太好做并行,因为随时有可能跳出循环、后面的迭代就不做了。如果有可能,你可以改进一下算法。
adrian_yang84 2008-05-03
  • 打赏
  • 举报
回复
首先非常感谢您的解答.那您的意思是omp也是依赖于操作系统的,如果操作系统本身不支持并行的话,omp就没用吧.另外关于循环中用break的问题,我曾经尝试过
for (int i=0; i<5; i++)
{
...
if (满足break的条件)
i=6;
}
发现i的值并不会在循环体中改变,也就是说还是跳不出循环的
intel_jeff 2008-05-02
  • 打赏
  • 举报
回复
ps. omp的底层实现仍然是使用OS API来做的。
intel_jeff 2008-05-02
  • 打赏
  • 举报
回复
你说的基本正确,omp就是为了简化程序员的编程工作、隐藏了对OS线程API的使用。如果你一定要用CreateThread的话,就只能自己来管理线程了,这种情况下omp没办法替你管理。
至于你说的循环中用break的问题,这个跟你的算法有关了,不过如果WIN32 API可以做到并行,那么omp应该也是可以的。

567

社区成员

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

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