def write_phase1_allgather_forall(builder, tr, inscription): buildnet.write_unpack_binding(builder, tr, builder.expand("static_cast<Tokens_{0.id}*>($bindings[$i])", tr)) builder.for_begin("int $j = 0; $j < $thread->get_process_count(); $j++") builder.line("Tokens_{0.id} *$t = static_cast<Tokens_{0.id}*>($bindings[$j]);", tr) builder.line("$t->token_collective->value[$i] = {0.expr};", inscription) builder.block_end()
def write_phase1_scatter_preinit(builder, tr, inscription): builder.line("Tokens_{0.id} *$rbinding = static_cast<Tokens_{0.id}*>($bindings[$root]);", tr) buildnet.write_unpack_binding(builder, tr, builder.expand("$rbinding")) builder.line("const std::vector<{0.type} > &$ccdata = {0.expr};", inscription) builder.if_begin("$ccdata.size() != $thread->get_process_count()") builder.line("fprintf(stderr, \"Invalid number of scattered elements (%zu)\\n\"," "$ccdata.size());") builder.line("exit(1);") builder.block_end()
def write_phase1_bcast_preinit(builder, tr, inscription): builder.line("Tokens_{0.id} *$rbinding = static_cast<Tokens_{0.id}*>($bindings[$root]);", tr) buildnet.write_unpack_binding(builder, tr, builder.expand("$rbinding")) builder.line("const {0.type} &$ccdata = {0.expr};", inscription)
def write_phase1_gather_forall(builder, tr, inscription): buildnet.write_unpack_binding(builder, tr, builder.expand("static_cast<Tokens_{0.id}*>($bindings[$i])", tr)) builder.line("$rbinding->token_collective->value[$i] = {0.expr};", inscription)