]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Simplify code in WorkStream when graph coloring is used.
authorBruno Turcksin <bruno.turcksin@gmail.com>
Thu, 7 Nov 2013 20:16:17 +0000 (20:16 +0000)
committerBruno Turcksin <bruno.turcksin@gmail.com>
Thu, 7 Nov 2013 20:16:17 +0000 (20:16 +0000)
git-svn-id: https://svn.dealii.org/trunk@31574 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/base/work_stream.h

index a029e9b0c5209a2c601faf45b95dacaa867cce09..85c8400f26ef8b3027e2a33460ef585a53d9d970 100644 (file)
@@ -952,57 +952,30 @@ namespace WorkStream
          std::vector<std::vector<Iterator> > coloring = graph_coloring::make_graph_coloring(
              begin,end,get_conflict_indices);
 
-         // colors that do not have cells, i.e., less than chunk_size times
-         // multithread_info.n_threads(), are gathered and the copier is
-         // called serially.
+         // For colors that do not have enough cells, i.e., less than chunk_size times
+         // multithread_info.n_threads(), the copier is called serially.
          const unsigned int serial_limit(chunk_size*multithread_info.n_threads());
          std::vector<Iterator> serial_copying;
 
          for (unsigned int color=0; color<coloring.size(); ++color)
            {
+             bool serial = false;
              if (coloring[color].size()<serial_limit)
-               serial_copying.insert(serial_copying.end(),coloring[color].begin(),coloring[color].end());
-             else
-               {
-                 // create the three stages of the
-                 // pipeline
-                 internal::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
-                 iterator_range_to_item_stream (coloring[color].begin(), coloring[color].end(),
-                     queue_length,
-                     chunk_size,
-                     sample_scratch_data,
-                     sample_copy_data);
-
-                 internal::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
-                 internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,false);
-
-                 // now create a pipeline from
-                 // these stages
-                 tbb::pipeline assembly_line;
-                 assembly_line.add_filter (iterator_range_to_item_stream);
-                 assembly_line.add_filter (worker_filter);
-                 assembly_line.add_filter (copier_filter);
-
-                 // and run it
-                 assembly_line.run (queue_length);
-
-                 assembly_line.clear ();
-               }
-           }
-
-         // use the serial copier for all the colors that do not have enough cells
-         if (serial_copying.size()!=0)
-           {
+               serial = true;
+             // create the three stages of the
+             // pipeline
              internal::IteratorRangeToItemStream<Iterator,ScratchData,CopyData>
-             iterator_range_to_item_stream (serial_copying.begin(), serial_copying.end(),
+             iterator_range_to_item_stream (coloring[color].begin(), coloring[color].end(),
                  queue_length,
                  chunk_size,
                  sample_scratch_data,
                  sample_copy_data);
 
              internal::Worker<Iterator, ScratchData, CopyData> worker_filter (worker);
-             internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,true);
+             internal::Copier<Iterator, ScratchData, CopyData> copier_filter (copier,serial);
 
+             // now create a pipeline from
+             // these stages
              tbb::pipeline assembly_line;
              assembly_line.add_filter (iterator_range_to_item_stream);
              assembly_line.add_filter (worker_filter);

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.