私はC++を学んでおり、私が読んだ本の中でこれを実際に見たことはありません。私はコードを読んでコメントしたかったので、よく学び、走っているが条件がない奇妙なコード部分を見つけました。私が読んだこと(そして他の言語での私の経験から、ブロックのためのif、while、forまたはsomethingが必要です)。このコードブロックは理解できません(条件なしで実行します)
tbbスレッドパッケージを見ていますので、スレッドやC++の起動に関連しているかどうかはわかりません(もしこれをC++の共通のものと認識していれば、おそらくtdd固有です)。
実際に内部のコードが何を理解していると思いますが、どのようにトリガされたか、実行されたかわかりません。何か案は?ここで
はセクションです:
{
//this is the graph part of the code
Graph g;
g.create_random_dag(nodes);
std::vector<Cell*> root_set;
g.get_root_set(root_set);
root_set_size = root_set.size();
for(unsigned int trial=0; trial<traversals; ++trial) {
ParallelPreorderTraversal(root_set);
}
}
P.S.ここではファイル全体が役に立ちます(上記のコードはmain()の真ん中にあります)。
#include <cstdlib>
#include "tbb/task_scheduler_init.h"
#include "tbb/tick_count.h"
#include "../../common/utility/utility.h"
#include <iostream>
#include <vector>
#include "Graph.h"
// some forward declarations
class Cell;
void ParallelPreorderTraversal(const std::vector<Cell*>& root_set);
//------------------------------------------------------------------------
// Test driver
//------------------------------------------------------------------------
utility::thread_number_range threads(tbb::task_scheduler_init::default_num_threads);
static unsigned nodes = 1000;
static unsigned traversals = 500;
static bool SilentFlag = false;
//! Parse the command line.
static void ParseCommandLine(int argc, const char* argv[]) {
utility::parse_cli_arguments(
argc,argv,
utility::cli_argument_pack()
//"-h" option for for displaying help is present implicitly
.positional_arg(threads,"n-of-threads","number of threads to use; a range of the form low[:high], where low and optional high are non-negative integers or 'auto' for the TBB default.")
.positional_arg(nodes,"n-of-nodes","number of nodes in the graph.")
.positional_arg(traversals,"n-of-traversals","number of times to evaluate the graph. Reduce it (e.g. to 100) to shorten example run time\n")
.arg(SilentFlag,"silent","no output except elapsed time ")
);
}
int main(int argc, const char* argv[]) {
try {
tbb::tick_count main_start = tbb::tick_count::now(); //tbb counter start
ParseCommandLine(argc,argv);
// Start scheduler with given number of threads.
std::cout << threads << std::endl;
for(int p=threads.first; p<=threads.last; ++p) {
tbb::tick_count t0 = tbb::tick_count::now(); //timer
tbb::task_scheduler_init init(4); //creates P number of threads
srand(2); //generates a random number between 0-2?
size_t root_set_size = 0;
{
//this is the graph part of the code
Graph g;
g.create_random_dag(nodes);
std::vector<Cell*> root_set;
g.get_root_set(root_set);
root_set_size = root_set.size();
for(unsigned int trial=0; trial<traversals; ++trial) {
ParallelPreorderTraversal(root_set);
}
}
tbb::tick_count::interval_t interval = tbb::tick_count::now()-t0; //counter done
if (!SilentFlag){ //output the results
std::cout
<<interval.seconds()<<" seconds using "<<p<<" threads ("<<root_set_size<<" nodes in root_set)\n";
}
}
utility::report_elapsed_time((tbb::tick_count::now()-main_start).seconds());
return 0;
}catch(std::exception& e){
std::cerr
<< "unexpected error occurred. \n"
<< "error description: "<<e.what()<<std::endl;
return -1;
}
}
http://en.wikibooks.org/wiki/C%2B%2B_Programming/Scope/Examples - 具体的には「//複雑なスコーププログラム」のセクション – WernerCD