• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-167  評論-8  文章-0  trackbacks-0

            在多核的平臺上開發(fā)并行化的程序,必須合理地利用系統(tǒng)的資源 - 如與內(nèi)核數(shù)目相匹配的線程,內(nèi)存的合理訪問次序,最大化重用緩存。有時候用戶使用(系統(tǒng))低級的應(yīng)用接口創(chuàng)建、管理線程,很難保證是否程序處于最佳狀態(tài)。 

            Intel Thread Building Blocks (TBB) 很好地解決了上述問題: 

            • TBB提供C++模版庫,用戶不必關(guān)注線程,而專注任務(wù)本身。
            • 抽象層僅需很少的接口代碼,性能上毫不遜色。
            • 靈活地適合不同的多核平臺。
            • 線程庫的接口適合于跨平臺的移植(Linux, Windows, Mac)
            • 支持的C++編譯器 – Microsoft, GNU and Intel 

            主要的功能:

            1)通用的并行算法

            循環(huán)的并行: 
            parallel_for, parallel_reduce – 相對獨(dú)立的循環(huán)層 
            parallel_scan – 依賴于上一層的結(jié)果 
            流的并行算法 
            parallel_while – 用于非結(jié)構(gòu)化的流或堆 
            pipeline - 對流水線的每一階段并行,有效使用緩存 
            并行排序 
            parallel_sort – 并行快速排序,調(diào)用了parallel_for 

            2)任務(wù)調(diào)度者

            管理線程池,及隱藏本地線程復(fù)雜度 
            并行算法的實(shí)現(xiàn)由任務(wù)調(diào)度者的接口完成 
            任務(wù)調(diào)度者的設(shè)計(jì)考慮到本地線程的并行所引起的性能問題 

            3)并行容器

            concurrent_hash_map 
            concurrent_vector 
            concurrent_queue 

            4)同步原語

            atomic 
            mutex 
            spin_mutex – 適合于較小的敏感區(qū)域 
            queuing_mutex – 線程按次序等待(獲得)一個鎖 
            spin_rw_mutex 
            queuing_rw_mutex 
            說明:使用read-writer mutex允許對多線程開放”讀”操作 

            5)高性能的內(nèi)存申請

            使用TBB的allocator 代替 C語言的 malloc/realloc/free 調(diào)用 
            使用TBB的allocator 代替 C++語言的 new/delete 操作 

            使用TBB的例子 – task

            1. #include “tbb/task_scheduler_init.h”
            2. #include “tbb/task.h”
            3. using namespace tbb;
            4. class ThisIsATask: public task {
            5. public:
            6.     task* execute () {
            7.         WORK ();
            8.         return NULL;
            9.     }
            10. };
            11.  
            12. class MyRootTask: public task {
            13. public:
            14.     task* execute () {
            15.         for (int i=0; i <N; i++) {
            16.             task& my_task = 
            17.                 *new (task::allocate_additional_child_of (*this)) 
            18.                     ThisIsATask ();
            19.             spawn (my_task);
            20.         }
            21.         wait_for_all ();
            22.         return NULL;
            23.     }
            24. };
            25.  
            26. int main () {
            27.     task_scheduler_init my_tbb;  // 創(chuàng)建線程池
            28.     task& my_root =
            29.         *new (task::allocate_root()) MyRootTask ();
            30.     my_root.set_ref_count (1);
            31.     task::spawn_root_and_wait (my_root); // 開始Root Task任務(wù)
            32.     return 0;
            33. }
            posted on 2011-01-14 13:55 老馬驛站 閱讀(1513) 評論(0)  編輯 收藏 引用 所屬分類: tbb
            国产精品亚洲美女久久久| 久久亚洲国产精品成人AV秋霞| 亚洲AV无码久久| 热99re久久国超精品首页| 精品永久久福利一区二区| 国产精品99久久精品爆乳| 日韩人妻无码一区二区三区久久99 | 久久天天躁狠狠躁夜夜96流白浆 | 777米奇久久最新地址| 久久精品国产色蜜蜜麻豆| 亚洲中文字幕久久精品无码APP | 尹人香蕉久久99天天拍| 久久国产亚洲高清观看| 欧美麻豆久久久久久中文| 久久精品蜜芽亚洲国产AV| 天堂无码久久综合东京热| 久久免费精品视频| 久久国产精品无码HDAV| 狠狠色丁香婷婷久久综合五月 | 久久久久久久精品妇女99| 久久综合狠狠色综合伊人| 久久一日本道色综合久久| 亚洲一级Av无码毛片久久精品| 欧美精品一本久久男人的天堂| 色婷婷综合久久久久中文| 久久人人青草97香蕉| 久久国产香蕉视频| 亚洲天堂久久精品| 欧美综合天天夜夜久久| 亚洲精品无码久久久久去q | 久久青草国产精品一区| 男女久久久国产一区二区三区| 少妇被又大又粗又爽毛片久久黑人| 精品久久久久久无码免费| 亚洲午夜久久影院| 四虎国产永久免费久久| 久久精品国产99国产精偷| 伊人久久大香线蕉影院95| 日韩欧美亚洲综合久久影院d3| 国内精品久久久久久野外| 久久精品国产精品青草app|