本文整理汇总了C++中Globals::AddGlobalMemoryBuffer方法的典型用法代码示例。如果您正苦于以下问题:C++ Globals::AddGlobalMemoryBuffer方法的具体用法?C++ Globals::AddGlobalMemoryBuffer怎么用?C++ Globals::AddGlobalMemoryBuffer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Globals
的用法示例。
在下文中一共展示了Globals::AddGlobalMemoryBuffer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: goGenerator
void CLProgramGenerator::goGenerator() {
// Initialise probabilies.
CLExpression::InitProbabilityTable();
CLStatement::InitProbabilityTable();
// Create vector types.
Vector::GenerateVectorTypes();
// Initialise function tables.
FunctionInvocationBuiltIn::InitTables();
// Initialise Variable objects used for thread identifiers.
ExpressionID::Initialise();
// Initialize runtime parameters;
InitRuntimeParameters();
// Initalize atomic parameters
if (CLOptions::atomics())
ExpressionAtomic::InitAtomics();
// Initialise buffers used for inter-thread communication.
StatementComm::InitBuffers();
// Initialise Message Passing data.
MessagePassing::Initialise();
// Expects argc, argv and seed. These vars should really be in the output_mgr.
output_mgr_->OutputHeader(0, NULL, seed_);
// This creates the random program, the rest handles post-processing and
// outputting the program.
GenerateAllTypes();
GenerateFunctions();
// If tracking divergence is set, perform the tracking now.
std::unique_ptr<Divergence> div;
if (CLOptions::track_divergence()) {
div.reset(new Divergence());
div->ProcessEntryFunction(GetFirstFunction());
}
// If EMI block generation is set, prune them.
if (CLOptions::emi())
EMIController::GetEMIController()->PruneEMISections();
// If atomic blocks are generated, add operations for the special values
if (CLOptions::atomics())
StatementAtomicResult::GenSpecialVals();
// If atomic reductions are generated, add the hash buffer
if (CLOptions::atomic_reductions())
StatementAtomicReduction::RecordBuffer();
// If Message Passing is enabled, create orderings and message updates.
if (CLOptions::message_passing())
MessagePassing::CreateMessageOrderings();
// At this point, all the global variables that have been created throughout
// program generation should have been created. Any global variables added to
// VariableSelector's global list after this point must be added to globals
// manually, or the name will not be prepended with the global struct.
Globals *globals = Globals::GetGlobals();
// Once the global struct is created, we add the global memory buffers.
// Adding global memory buffers to do with atomic expressions.
if (CLOptions::atomics()) {
ExpressionAtomic::AddVarsToGlobals(globals);
}
// Add the reduction variables for atomic reductions to the global struct
if (CLOptions::atomic_reductions())
StatementAtomicReduction::AddVarsToGlobals(globals);
// Now add the input data for EMI sections if specified.
if (CLOptions::emi())
for (MemoryBuffer *mb :
*EMIController::GetEMIController()->GetItemisedEMIInput())
globals->AddGlobalMemoryBuffer(mb);
// Add the 9 variables used for the identifiers.
if (CLOptions::fake_divergence())
ExpressionID::AddVarsToGlobals(globals);
// Add buffers used for inter-thread comm.
if (CLOptions::inter_thread_comm())
StatementComm::AddVarsToGlobals(globals);
// Add messages for message passing.
if (CLOptions::message_passing())
MessagePassing::AddMessageVarsToGlobals(globals);
// If barriers have been set, use the divergence information to place them.
if (CLOptions::barriers()) {
if (CLOptions::divergence()) GenerateBarriers(div.get(), globals);
else { /*TODO Non-div barriers*/ }
}
if (CLOptions::small())
CLSmith::CLVariable::ParseUnusedVars();
// Output the whole program.
output_mgr_->Output();
// Release any singleton instances used.
Globals::ReleaseGlobals();
EMIController::ReleaseEMIController();
//.........这里部分代码省略.........