MCPcopy Create free account
hub / github.com/data61/MP-SPDZ / distribute_no_setup

Method distribute_no_setup

Processor/ThreadQueues.cpp:80–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

78}
79
80int ThreadQueues::distribute_no_setup(ThreadJob job, int n_items, int base,
81 int granularity, const vector<void*>* supplies)
82{
83#ifdef VERBOSE_QUEUES
84 cerr << "Distribute " << job.type << " among " << available.size() << endl;
85#endif
86
87 int n_per_thread = get_n_per_thread(n_items, granularity);
88 size_t n_threads = get_n_threads(n_items, base, granularity);
89
90 if (OnlineOptions::singleton.has_option("debug_sync"))
91 cerr << n_per_thread << " per thread" << ", " << n_threads << " threads"
92 << ", " << available.size() << " available" << endl;
93
94 if (n_items and (n_per_thread == 0 or base + n_per_thread > n_items))
95 {
96 assert(n_threads == 0);
97 available.clear();
98 return base;
99 }
100
101 for (size_t i = 0; i < available.size(); i++)
102 {
103 if (base + (i + 1) * n_per_thread > size_t(n_items))
104 {
105 assert(i);
106 available.resize(i);
107 assert(n_threads == i);
108 return base + i * n_per_thread;
109 }
110 if (supplies)
111 job.supply = supplies->at(i);
112 job.begin = base + i * n_per_thread;
113 job.end = base + (i + 1) * n_per_thread;
114 at(available[i])->schedule(job);
115 }
116 assert(available.size() == n_threads);
117 return base + available.size() * n_per_thread;
118}
119
120void ThreadQueues::sync()
121{

Callers 2

addMethod · 0.80
edabit_sacrificeMethod · 0.80

Calls 6

has_optionMethod · 0.80
scheduleMethod · 0.80
get_n_threadsFunction · 0.50
sizeMethod · 0.45
clearMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected