<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ?Visual Studio 11,具備并行模式庫和代理庫、 更輕松地開發多核處理器上運行的并行代碼。 這些庫的主要范例是根據任務 和并發運行庫,自定義的調度程序 進行處理的。 到目前為止,處理任務的的概念原型,就使用task_handle 類型 如下所示: ~~~ task_group task; int i=0; auto t1=make_task([&i]() { i=42; }); int z=0; auto t2=make_task([&z]() { z=42; }); task.run_and_wait (t1); task.run_and_wait (t2); std::wcout << i+z << std::endl; std::wcout << "Fini" << std::endl; ~~~ 這里計算的 i + z 是必須得到的 lambda 表達式中引用變量 。然后這兩個任務并行完成它們的工作。 使用 Visual Studio 11,可以直接使用的task類型的概念,如下所示: ~~~ task<int> t1=task<int>(->int { return 42; }); task<int> t2=task<int>(->int { return 42; }); std::wcout << t1.get() +t2.get () << std::endl; ~~~ 為了簡化語法,更需要為每項任務捕獲變量的引用,要通過調用方法wait()的每個任務并返回值角色的方法get (),獲取狀態以便處理 。 task類的異步任務的遵循設置的運行規則,無需等待,即是說,不論Tn 取決于 Tn-1 任務的任務以及前一任務已完成或沒有。 異步操作將概括為避免假死的用戶界面,很重要的是為了簡化開發過程,以前的VS經常卡死,加載控件的時候。 若要實現這一概念,task類實現的then()方法,將會執行一次已經完成后的該任務。 ~~~ task<int> t1=task<int>(->int { return 42; }).then ([](int i)->int { return i+42; }); task<int> t2=task<int>(->int { //simule une charge std::this_thread::sleep_for (chrono::seconds (1)); return 42; }).then ([](int i)->int { return i+42; }); std::wcout << t1.get() + t2.get() << std::endl; ~~~ 每項任務的返回值是作為參數傳遞,例如lambda 表達式中的then()方法。 并行算法還包括 (parallel_for、 parallel_for_each、 parallel_invoke )) 并行算法的嘗試 parallel_sort 、 parallel_radixsort、 parallel_buffered_sort的標準如果命令它只運行并行模式,其中使用算法的方式都相同。 ~~~ vector<unsigned int> v3; parallel_sort(begin(v3),end(v3)) ~~~ 雖然在大多數情況下,這是一個簡單的類整數的性能足夠流暢了(示例矢量的整數 40 000 000,得到一個序列(std::sort)和parallel_sort(),允許更好地調控,會提高性能) 每種算法,都用來做重載,這個方法允許設置的字符串的排序和要使用的分區的大小。 ~~~ vector<unsigned int> v2; parallel_sort(begin(v2),end(v2),[](const unsigned int& l,const unsigned int& r)->bool { return (l<r); },4096); ~~~ 默認分區大小為 2048,對于大多數情況下就足夠了。可以調整最后一個分區的大小來提高性能。如果分區大小《=向量的大小,將使用任何方法std::sort ()中。(默認情況下,如果向量的元素的數目 < = 2048總是使用std::sort ()版本)。 ~~~ inline void parallel_sort(const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Func, const size_t _Chunk_size = 2048) { _CONCRT_ASSERT(_Chunk_size > 0); // We make the guarantee that if the sort is part of a tree that has been canceled before starting, it will // not begin at all. if (is_current_task_group_canceling()) { return; } size_t _Size = _End - _Begin; size_t _Core_num = Concurrency::details::_CurrentScheduler::_GetNumberOfVirtualProcessors(); if (_Size <= _Chunk_size || _Core_num < 2) { return std::sort(_Begin, _End, _Func); } _Parallel_quicksort_impl(_Begin, _Size, _Func, _Core_num * _MAX_NUM_TASKS_PER_CORE, _Chunk_size, 0); 21.} ~~~ 系統至少不會以任何方式使用 std::sort () 的虛擬處理器。 可用其他算法的嘗試并根據實際需要。例如,在例子中的是基數排序 ~~~ vector<unsigned int> v4; parallel_radixsort(begin(v4),end(v4)); ~~~ 提供更好的結果 197.09 上 40 000 000 個項目。默認分區大小為 256 * 256 parallel_buffered_sort給 631 ~~~ parallel_buffered_sort(begin(v5),end(v5)); ~~~ 減少 線程申請的數量,最小,最多的一組所有成員稱為一般減少。應用減少并行可以或者涉及爭用條件或問題的另外的浮點操作的舍入為例。 例如雙平行處理的循環,循環的量的一種方法是使用concurrency::combinable <T>對象 ~~~ combinable<double> sumReduction; parallel_for_each(begin(v1),end(v1),[&sumReduction](double i) { sumReduction.local ()+=i; }); sum=sumReduction.combine (std::plus<double>()); ~~~ Visual Studio 11,現在可以使用算法parallel_reduce(),比類型算法的使用效率更高(concurrency::combinable)。 它的使用是相對處理算法( std::accumulate) ~~~ vector<double>::const_iterator deb=begin(v1); vector<double>::const_iterator fin=end(v1); auto identity=std::iterator_traits<vector<double>::const_iterator>::value_type(); sum= parallel_reduce(deb,fin,identity,std::plus<double>()); ~~~ 轉型 最后的算法是加工**parallel_transformation()**算法 ~~~ parallel_transform(begin(v1),end(v1),begin(v2),[](double value)->double { return value*2; }); ~~~ 趕緊下載VS11體驗吧 [http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144](http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看