加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 具有PPL和并行内存分配的线程ID

发布时间:2020-12-16 07:29:43 所属栏目:百科 来源:网络整理
导读:我有一个关于Microsoft PPL库和一般并行编程的问题.我正在使用FFTW执行64 x 64 x 64 FFT和反FFT的大集(100,000).在我当前的实现中,我使用并行for循环并在循环中分配存储阵列.我注意到在这些情况下我的CPU使用率仅为60-70%. (注意,这仍然比我测试的FFTW提供
我有一个关于Microsoft PPL库和一般并行编程的问题.我正在使用FFTW执行64 x 64 x 64 FFT和反FFT的大集(100,000).在我当前的实现中,我使用并行for循环并在循环中分配存储阵列.我注意到在这些情况下我的CPU使用率仅为60-70%. (注意,这仍然比我测试的FFTW提供的内置线程FFT更好的利用率).由于我使用的是fftw_malloc,是否可能发生过度锁定而导致无法完全使用?

鉴于此,建议在主处理循环之前为每个线程预分配存储数组,因此循环内部不需要锁定吗?如果是这样,MSFT PPL库如何实现?我之前一直在使用OpenMP,在这种情况下,使用提供的函数获取线程ID非常简单.然而,我没有在PPL文档中看到类似的功能.

解决方法

我只是回答这个问题,因为还没有人发布任何内容.

如果需要大量锁定,互斥锁(e)可能会对性能造成严重破坏.此外,如果需要大量内存(重新)分配,这也会降低性能并将其限制为内存带宽.就像你说的那样,后期线程运行的预分配可能很有用.但是,这需要您拥有固定的线程数,并且您可以在所有线程上平衡您的工作负载.

关于PPL thread_id函数,我只能谈论Intel-TBB,但它应该与PPL非常类似. TBB – 我想也是PPL – 不直接谈论线程,而是谈论任务,TBB的目的是将这些底层细节抽象出用户,因此它不提供thread_id函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读