Commit a2ec137b56cf73b4bd6b4693c9750e077ec2edf4
1 parent
f3c60625
Exists in
master
updated to PaCCS version 0.90d
Showing
9 changed files
with
61 additions
and
23 deletions
Show diff stats
README
1 | -PaCCS version 0.90c | |
1 | +PaCCS version 0.90d | |
2 | 2 | |
3 | -All files Copyright (C) 2009-2015 Vasco Pedro <vp@di.uevora.pt> | |
3 | +All files Copyright (C) 2009-2016 Vasco Pedro <vp@di.uevora.pt> | |
4 | 4 | All rights reserved. |
5 | 5 | |
6 | 6 | * Compiling |
... | ... | @@ -103,7 +103,24 @@ Problem splitting: |
103 | 103 | teams) |
104 | 104 | |
105 | 105 | See the TUNING file for the options to use with the different |
106 | -problems. | |
106 | +problems, and the src/problem.c file for all the available options. | |
107 | + | |
108 | +** Arguments | |
109 | + | |
110 | +The arguments for some of the benchmark problems are: | |
111 | + | |
112 | + costas array-length | |
113 | + golomb n.-of-marks | |
114 | + k-queens [-k n.-of-copies] n.-of-queens | |
115 | + langford n.-of-sets set-size | |
116 | + magic-seq sequence-length | |
117 | + magic-square square-size | |
118 | + partition n.-of-values | |
119 | + qap problem-name (see qap.h, DEFAULT is esc16i) | |
120 | + queens n.-of-queens | |
121 | + | |
122 | +Arguments should come at the end of the command line, after any | |
123 | +runtime option. | |
107 | 124 | |
108 | 125 | |
109 | 126 | * Programming | ... | ... |
TUNING
bench/costas.c
... | ... | @@ -138,12 +138,20 @@ int main(int argc, char *argv[]) |
138 | 138 | break; |
139 | 139 | } |
140 | 140 | |
141 | + fd_end(); | |
142 | + | |
143 | + { | |
144 | + // avoid failure messages from mpirun | |
145 | + extern int _fd_counting_solutions; // XXX: private variable | |
146 | + | |
147 | + if (_fd_counting_solutions) | |
148 | + return 0; | |
149 | + } | |
150 | + | |
141 | 151 | if (solutions) |
142 | 152 | printf("%d solutions found\n", solutions); |
143 | 153 | else |
144 | 154 | printf("inconsistent CSP\n"); |
145 | 155 | |
146 | - fd_end(); | |
147 | - | |
148 | 156 | return !solutions; |
149 | 157 | } | ... | ... |
bench/queens.c
... | ... | @@ -129,12 +129,20 @@ int main(int argc, char *argv[]) |
129 | 129 | break; |
130 | 130 | } |
131 | 131 | |
132 | + fd_end(); | |
133 | + | |
134 | + { | |
135 | + // avoid failure messages from mpirun | |
136 | + extern int _fd_counting_solutions; // XXX: private variable | |
137 | + | |
138 | + if (_fd_counting_solutions) | |
139 | + return 0; | |
140 | + } | |
141 | + | |
132 | 142 | if (solutions) |
133 | 143 | printf("%d solutions found\n", solutions); |
134 | 144 | else |
135 | 145 | printf("inconsistent CSP\n"); |
136 | 146 | |
137 | - fd_end(); | |
138 | - | |
139 | 147 | return !solutions; |
140 | 148 | } | ... | ... |
src/VERSION
src/agents-splitgo-mpi.c
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | # error "don't know which MPI type to use for MPI_DOMAIN_TYPE" |
45 | 45 | #endif |
46 | 46 | |
47 | -#define MAX_AGENTS 256 | |
47 | +#define MAX_AGENTS 1024 | |
48 | 48 | |
49 | 49 | // number of workers to use |
50 | 50 | int fd__workers = -1; |
... | ... | @@ -1441,12 +1441,12 @@ int _fd_dsolve() |
1441 | 1441 | if (nagents < 0) |
1442 | 1442 | { |
1443 | 1443 | nagents = 0; |
1444 | - _fd_debug("[%d] using %d workers\n", tid, nagents); | |
1444 | + fd__info("[%d] using %d workers\n", tid, nagents); | |
1445 | 1445 | } |
1446 | 1446 | else if (nagents > MAX_AGENTS) |
1447 | 1447 | { |
1448 | 1448 | nagents = MAX_AGENTS; |
1449 | - _fd_debug("[%d] using %d workers\n", tid, nagents); | |
1449 | + fd__info("[%d] limiting workers to %d\n", tid, nagents); | |
1450 | 1450 | } |
1451 | 1451 | } |
1452 | 1452 | ... | ... |
src/agents-splitgo.c
... | ... | @@ -21,7 +21,7 @@ |
21 | 21 | #error "must USE_STORE" |
22 | 22 | #endif |
23 | 23 | |
24 | -#define MAX_AGENTS 256 | |
24 | +#define MAX_AGENTS 1024 | |
25 | 25 | |
26 | 26 | // number of workers to use |
27 | 27 | int fd__workers = -1; |
... | ... | @@ -238,12 +238,12 @@ int _fd_dsolve() |
238 | 238 | if (nagents < 0) |
239 | 239 | { |
240 | 240 | nagents = 0; |
241 | - _fd_debug("using %d workers\n", nagents); | |
241 | + fd__info("using %d workers\n", nagents); | |
242 | 242 | } |
243 | 243 | else if (nagents > MAX_AGENTS) |
244 | 244 | { |
245 | 245 | nagents = MAX_AGENTS; |
246 | - _fd_debug("using %d workers\n", nagents); | |
246 | + fd__info("limiting workers to %d\n", nagents); | |
247 | 247 | } |
248 | 248 | } |
249 | 249 | ... | ... |
src/pool.c
... | ... | @@ -18,6 +18,7 @@ static __thread int *split_variable; |
18 | 18 | #endif |
19 | 19 | |
20 | 20 | #ifdef GROWABLE_POOL |
21 | +// number of stores in the pool | |
21 | 22 | #define POOL_DEFAULT_SIZE 32 |
22 | 23 | static __thread int pool_size; |
23 | 24 | #endif |
... | ... | @@ -31,13 +32,10 @@ static int EMPTY_POOL[] = { 0, 0 }; |
31 | 32 | |
32 | 33 | #ifndef STORE_IN_POOL |
33 | 34 | #define STEAL_THRESHOLD 3 // an agent with less stores won't be stolen from |
34 | -#define INDEX_SAFE 3 // XXX: explain.... | |
35 | +#define INDEX_SAFE 3 // lock-free access with these many stores in the pool | |
35 | 36 | #else |
36 | -// XXX: should STEAL_THRESHOLD and INDEX_SAFE be changed (because | |
37 | -// there's one extra store in the pool)? | |
38 | -// changing for now, to be able to compare performances | |
39 | -#define STEAL_THRESHOLD 4 | |
40 | -#define INDEX_SAFE 4 | |
37 | +#define STEAL_THRESHOLD (3 + 1) | |
38 | +#define INDEX_SAFE (3 + 1) | |
41 | 39 | #endif |
42 | 40 | |
43 | 41 | static pthread_mutex_t *stores_mutexes; |
... | ... | @@ -58,7 +56,7 @@ static __thread unsigned long pool_gets = 0; |
58 | 56 | #endif |
59 | 57 | |
60 | 58 | #ifdef STATS_STEALS |
61 | -#define MAX_AGENTS 256 // XXX: copied from agents-splitgo*.c | |
59 | +#define MAX_AGENTS 1024 // XXX: copied from agents-splitgo*.c | |
62 | 60 | static unsigned long sts_attempts[MAX_AGENTS + 1], sts_done[MAX_AGENTS + 1]; |
63 | 61 | #ifdef RANDOM_VICTIM |
64 | 62 | static unsigned long sts_checks[MAX_AGENTS + 1], sts_slept[MAX_AGENTS + 1]; |
... | ... | @@ -95,8 +93,10 @@ void _fd_init_store_depository(int agents) |
95 | 93 | // XXX: check for NULL's |
96 | 94 | split_stores_ = calloc(agents, sizeof(*split_stores_)); |
97 | 95 | split_indexes = calloc(agents, sizeof(*split_indexes)); |
98 | - // XXX: mitigate a race condition: another agent may try to access | |
99 | - // this before proper initialisation by the owning agent | |
96 | + | |
97 | + // these will be properly initialised later, by the agent; | |
98 | + // for now, just make sure that if another agent tries to access it | |
99 | + // before that happens, it will find a sensible value there | |
100 | 100 | for (i = 0; i < agents; ++i) |
101 | 101 | split_indexes[i] = EMPTY_POOL; |
102 | 102 | ... | ... |
src/problem.c
... | ... | @@ -98,6 +98,9 @@ static void _fd_parse_general_options(int *argc, char *argv[]) |
98 | 98 | ; |
99 | 99 | #endif |
100 | 100 | else if (!strcmp(argv[i], "--no-sort")) /* miscellaneous */ |
101 | + // Note: the meaning of this option depends on whether it | |
102 | + // appears in the command line before or after the choice of the | |
103 | + // variable selection heuristic (see the code above) | |
101 | 104 | sort = false; |
102 | 105 | else if (!strncmp(argv[i], "--workers=", sizeof("--workers=") - 1)) |
103 | 106 | fd__workers = atoi(argv[i] + sizeof("--workers=") - 1); | ... | ... |