使用TBB时如何检查当前正在运行多少个线程?

anh_ng8

我在群集上运行Intel TBB。但是,我不知道如何检查活动和正在运行的线程数。有办法检查吗?

假设我有16个内核,所以我想知道现在我的TBB代码中是否正在使用所有16​​个内核。这样可以确保我的系统没有问题。

安东

我想知道我的TBB代码中是否正在使用所有16​​个内核。

正确的假设是,在TBB中请求或期望多个线程并不总是导致创建或随后处理用户代码的线程数量。TBB遵循可选的并行性范例,该范例不保证特定数量的线程可以同时工作。而且,即使TBB创建了足够多的线程,也并不意味着所有线程都能够加入给定的用户代码。task_scheduler_inittask_arena仅指定工作线程数的限制。

您可以task_scheduler_observer用来监视创建了多少个工作线程以及真正加入了您关注的任务领域的线程。

该博客提供了有关如何计算已创建的TBB工作线程的简单代码

class concurrency_tracker: public tbb::task_scheduler_observer {
    tbb::atomic<int> num_threads;
public:
    concurrency_tracker() : num_threads() { observe(true); }
    /*override*/ void on_scheduler_entry( bool ) { ++num_threads; }
    /*override*/ void on_scheduler_exit( bool ) { --num_threads; }

    int get_concurrency() { return num_threads; }
};

但这与可以显示进程中活动线程数的外部工具没有太大区别。为了检查有多少线程正在加入您的计算区域(区域),我们可以使用预览功能TBB_PREVIEW_LOCAL_OBSERVER

#define TBB_PREVIEW_LOCAL_OBSERVER 1
#include <tbb/task_scheduler_observer.h>
//...
class concurrency_tracker: public tbb::task_scheduler_observer {
    tbb::atomic<int> num_threads;
    tbb::atomic<int> max_threads;
public:
    concurrency_tracker()
    :   tbb::task_scheduler_observer(true)   // request implicit arena observation
    ,   num_threads(), max_thread()
    {
        observe(true);
    }

    /*override*/ void on_scheduler_entry( bool )
    {
        int current_num = ++num_threads;    // increment instant concurrency counter
        int current_max = max_threads;
        while( current_max < current_num )  // update max concurrency value
            current_max = max_threads.compare_and_swap(current_num, current_max);
    }

    /*override*/ void on_scheduler_exit( bool ) { --num_threads; }

    int get_instant_concurrency() { return num_threads; }
    int get_peak_concurrency()    { return max_threads; }
};

最后,可以使用TLS(例如tbb::enumerable_thread_specific从并行算法内部直接完成相同的技巧,因为它是在src/test/harness_concurrency_tracker.hTBB单元测试源文件中实现的它可以跟踪并行运行的特定任务实例的数量

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FreeBSD:如何通过PID检查一个进程中正在运行多少个线程?

来自分类Dev

我如何检查有多少个容器正在运行某个Docker映像?

来自分类Dev

如何检查线程当前是否正在运行

来自分类Dev

检查Azure云上正在运行多少个站点

来自分类Dev

我如何知道正在运行多少个映射器和化简器?

来自分类Dev

Azure Function应用程序-管理门户中的Se当前正在运行多少个实例

来自分类Dev

如何检查LinqToSql DataContext运行了多少个查询?

来自分类Dev

如何检查当前正在运行的外壳是否为BusyBox

来自分类Dev

当前正在运行的线程列表

来自分类Dev

如何使用Jobs API检查跑步者当前是否正在运行工作

来自分类Dev

如何使用swift检查线程是否正在运行或已完成

来自分类Dev

如何检查 PySpark 使用了多少个内核?

来自分类Dev

ffmpeg默认使用多少个线程?

来自分类Dev

使用线程处理时如何在后台关闭正在运行的CMD?

来自分类Dev

使用JUnit完成时如何测试正在运行的线程是否正确终止

来自分类Dev

使用连接时如何计算多少个单词?

来自分类Dev

单击时如何检查SKSpriteNode正在运行哪个SKTexture

来自分类Dev

如何使用Mockito测试正在运行异步线程的方法

来自分类Dev

如何检查由模块线程(在Python 3 _thread中)构成的线程是否正在运行?

来自分类Dev

如何检查使用的正在运行的Java进程的Java版本

来自分类Dev

如何使用VBScript检查MS Word是否正在运行

来自分类Dev

如何使用VB脚本检查进程是否正在运行?

来自分类Dev

如何查询正在运行的线程

来自分类Dev

如何计算正在运行的线程的类

来自分类Dev

如何获取当前正在运行的自定义线程变量

来自分类Dev

如何获取当前正在运行的自定义线程变量

来自分类Dev

如何使用vim计算当前行上的光标之前多少个特定字符?

来自分类Dev

如何检查正在运行的Docker容器

来自分类Dev

如何检查hdfs是否正在运行?

Related 相关文章

  1. 1

    FreeBSD:如何通过PID检查一个进程中正在运行多少个线程?

  2. 2

    我如何检查有多少个容器正在运行某个Docker映像?

  3. 3

    如何检查线程当前是否正在运行

  4. 4

    检查Azure云上正在运行多少个站点

  5. 5

    我如何知道正在运行多少个映射器和化简器?

  6. 6

    Azure Function应用程序-管理门户中的Se当前正在运行多少个实例

  7. 7

    如何检查LinqToSql DataContext运行了多少个查询?

  8. 8

    如何检查当前正在运行的外壳是否为BusyBox

  9. 9

    当前正在运行的线程列表

  10. 10

    如何使用Jobs API检查跑步者当前是否正在运行工作

  11. 11

    如何使用swift检查线程是否正在运行或已完成

  12. 12

    如何检查 PySpark 使用了多少个内核?

  13. 13

    ffmpeg默认使用多少个线程?

  14. 14

    使用线程处理时如何在后台关闭正在运行的CMD?

  15. 15

    使用JUnit完成时如何测试正在运行的线程是否正确终止

  16. 16

    使用连接时如何计算多少个单词?

  17. 17

    单击时如何检查SKSpriteNode正在运行哪个SKTexture

  18. 18

    如何使用Mockito测试正在运行异步线程的方法

  19. 19

    如何检查由模块线程(在Python 3 _thread中)构成的线程是否正在运行?

  20. 20

    如何检查使用的正在运行的Java进程的Java版本

  21. 21

    如何使用VBScript检查MS Word是否正在运行

  22. 22

    如何使用VB脚本检查进程是否正在运行?

  23. 23

    如何查询正在运行的线程

  24. 24

    如何计算正在运行的线程的类

  25. 25

    如何获取当前正在运行的自定义线程变量

  26. 26

    如何获取当前正在运行的自定义线程变量

  27. 27

    如何使用vim计算当前行上的光标之前多少个特定字符?

  28. 28

    如何检查正在运行的Docker容器

  29. 29

    如何检查hdfs是否正在运行?

热门标签

归档