|
|
@@ -10,9 +10,9 @@
|
|
|
NTL_CLIENT
|
|
|
|
|
|
// The total number of nodes (that is, dpnodes)
|
|
|
-static unsigned short total_nodes = 0;
|
|
|
+static unsigned short total_nodes = 1;
|
|
|
// The amount of memory we can use per dpnode
|
|
|
-static unsigned short GB_mem_per_node = 0;
|
|
|
+static unsigned short GB_mem_per_node = 1;
|
|
|
|
|
|
void desired_resources(const ZZ &order, unsigned short &desired_dpnodes,
|
|
|
unsigned int &max_workers, unsigned int &dpfreq)
|
|
|
@@ -22,16 +22,21 @@ void desired_resources(const ZZ &order, unsigned short &desired_dpnodes,
|
|
|
ZZ sorder = SqrRoot(order);
|
|
|
|
|
|
// How many DPnodes should we use for a problem of this size?
|
|
|
- desired_dpnodes = 1;
|
|
|
+
|
|
|
// 338 is bytes per DP in the table. 10 is a safety factor.
|
|
|
ZZ dpnumerator = sorder * 338 * 10;
|
|
|
ZZ dpdenominator;
|
|
|
- dpdenominator = dpscale;
|
|
|
- dpdenominator *= GB_mem_per_node;
|
|
|
+ dpdenominator = GB_mem_per_node;
|
|
|
dpdenominator *= 1000000000UL; // Convert the above line to GB
|
|
|
- ZZ dpnodes = (dpnumerator / dpdenominator) + 1;
|
|
|
+ ZZ dpnodes = (dpnumerator / (dpdenominator * dpscale)) + 1;
|
|
|
if (dpnodes > total_nodes) {
|
|
|
desired_dpnodes = total_nodes;
|
|
|
+ ZZ zzdpscale = dpnumerator / (dpdenominator * total_nodes);
|
|
|
+ if (NumBits(zzdpscale) > 31) {
|
|
|
+ dpscale = 4294967295U;
|
|
|
+ } else {
|
|
|
+ dpscale = trunc_long(zzdpscale, 31);
|
|
|
+ }
|
|
|
} else {
|
|
|
desired_dpnodes = trunc_long(dpnodes, 31);
|
|
|
}
|
|
|
@@ -91,7 +96,7 @@ int main(int argc, char **argv)
|
|
|
total_nodes = strtoul(argv[1], NULL, 10);
|
|
|
GB_mem_per_node = strtoul(argv[2], NULL, 10);
|
|
|
cout << "# log_2(order) dpnodes workers dpfreq\n";
|
|
|
- for (int i=44; i<=90; ++i) {
|
|
|
+ for (int i=44; i<=92; ++i) {
|
|
|
unsigned short desired_dpnodes;
|
|
|
unsigned int max_workers;
|
|
|
unsigned int dpfreq;
|