Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业7 OpenMP更新进度条问题 Tagged: path-tracing This topic has 7 replies, 7 voices, and was last updated 4 years, 8 months ago by Yadi Cao. Viewing 5 reply threads Author Posts 2020年4月21日 at 下午3:08 #5933 Score: 0 小狮子Participant Karma: 1 pt 我通过 parallel for直接把castRay变成了多线程~ 但现在有个问题,我不知道要如何更新我的进度条。。 正常来说 也许我会开一个轮询线程 每隔一段时间 调用UpdateProgress 但不太理解OpenMP应该如何做这个操作。。,但如果我通过在parallel语句中加锁 来写进度条,则会减慢了很大的速度。 This topic was modified 4 years, 8 months ago by 小狮子. 2020年4月21日 at 下午3:25 #5935 Score: 0 KeneyrParticipant Karma: 7 pts +1 ,我也想知道 2020年4月21日 at 下午3:42 #5939 Score: 0 arcParticipant Karma: 5 pts 你可以把最内层的 UpdateProgress() 去掉,再对外层的 UpdateProgress() 加锁。 2020年4月21日 at 下午4:01 #5940 Score: 0 Yinda XuParticipant Karma: -1 pt 考虑update移到最内层循环,对统一的counter累加,然后外包pragma critical? atomic貌似报错,只能critical了. Attachments:You must be logged in to view attached files. 2020年4月21日 at 下午4:17 #5946 Score: 0 小狮子Participant Karma: 1 pt 我把 paralle for 移到了第二个循环,得益于 OpenMP是从主线程开始 顺序执行这点, 我的确可以更新进度条,在每行像素渲染完的时候。 但实际上我还是想知道OpenMP有没有回调或者通过额外的 线程来轮询的写法来按我自己想要的频率来更新进度条~ 2020年4月24日 at 上午11:03 #6041 Score: 0 slongle(助教)Keymaster Karma: 13 pts smallPT是这么写的 This reply was modified 4 years, 8 months ago by slongle(助教). Attachments:You must be logged in to view attached files. 2020年4月23日 at 上午10:03 #6024 Score: 0 TroyParticipant Karma: -1 pt openmp的critical和atomic性能差距非常大,尽量不要用critical吧。可以只对++m;这一句atomic 2020年4月25日 at 下午7:31 #6091 Score: 0 Yadi CaoParticipant Karma: 2 pts 我这边实现的办法是改变loop的对象由“行和列,i和j”变成直接loop m,然后i j可以由m计算得到,这样就不用担心parfor在哪一层的问题。 进度条更新我采纳的办法是,只让第一个线城去输出就不会打乱屏幕了。但需要注意怎么根据第一个线程完成渲染的像素数量来估计全局的完成进度,我直接是 进度 = 线程数 * 第一个线程完成像素/总像素数。 这两步实现下来也不用加锁或者用critical,效率还可以。 Author Posts Viewing 5 reply threads You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In