diff --git a/examples/test_fmm.c b/examples/test_fmm.c index 33d7d88409ff9492a96afce2295eefc3511f194d..1e65935fe20f2be2d5b7d3e93dbd07d9e0aebbc0 100644 --- a/examples/test_fmm.c +++ b/examples/test_fmm.c @@ -38,14 +38,14 @@ /* Some local constants. */ #define cell_pool_grow 1000 #define cell_maxparts 100 -#define task_limit 1e10 +#define task_limit 1 #define const_G 1 // 6.6738e-8 #define dist_min 0.5 /* Used for legacy walk only */ #define dist_cutoff_ratio 1.5 #define ICHECK -10000000 #define SANITY_CHECKS -#define NO_COM_AS_TASK +#define COM_AS_TASK #define COUNTERS /** Data structure for the particles. */ @@ -103,7 +103,7 @@ struct cell { enum task_type { task_type_self = 0, task_type_pair, - task_type_self_pc, + task_type_pair_pc, task_type_com, task_type_count }; @@ -939,6 +939,33 @@ void create_tasks(struct qsched *s, struct cell *ci, struct cell *cj) { /* Are the cells NOT neighbours ? */ if (!are_neighbours(ci, cj)) { + /* We can do particle-monopole tasks */ + + /* Create the task. */ + data[0] = ci; + data[1] = cj; + tid = qsched_addtask(s, task_type_pair_pc, task_flag_none, data, + sizeof(struct cell *) * 2, ci->count); + + /* Add the resource and dependance */ + qsched_addlock(s, tid, ci->res); +#ifdef COM_AS_TASK + qsched_addunlock(s, cj->com_tid, tid); +#endif + + + /* Create the other task. */ + data[1] = ci; + data[0] = cj; + tid = qsched_addtask(s, task_type_pair_pc, task_flag_none, data, + sizeof(struct cell *) * 2, cj->count); + + /* Add the resource and dependance */ + qsched_addlock(s, tid, cj->res); +#ifdef COM_AS_TASK + qsched_addunlock(s, ci->com_tid, tid); +#endif + } else {/* Cells are direct neighbours */ /* Are both cells split and we are above the task limit ? */ @@ -1253,8 +1280,8 @@ void test_bh(int N, int nr_threads, int runs, char *fileName) { case task_type_pair: iact_pair(d[0], d[1]); break; - case task_type_self_pc: - //iact_self_pc(d[0], d[1], NULL); + case task_type_pair_pc: + iact_pair_pc(d[0], d[1]); break; case task_type_com: comp_com(d[0]); @@ -1392,13 +1419,12 @@ void test_bh(int N, int nr_threads, int runs, char *fileName) { /* root->parts[ICHECK].a_legacy[0], root->parts[ICHECK].a_legacy[1], */ /* root->parts[ICHECK].a_legacy[2]); */ /* #endif */ - printf("task counts: [ %8s %8s %8s %8s %8s ]\n", "self", "pair", "m-poles", + printf("task counts: [ %10s %10s %10s %10s %10s ]\n", "self", "pair", "m-poles", "direct", "CoMs"); - printf("task counts: [ %8i %8i %8i %8i %8i ] (legacy).\n", 0, 0, + printf("task counts: [ %10i %10i %10i %10i %10i ] (legacy).\n", 0, 0, countMultipoles, countPairs, countCoMs); - printf("task counts: [ "); - for (k = 0; k < task_type_count; k++) printf("%8i ", counts[k]); - printf("] (new).\n"); + printf("task counts: [ %10i %10i %10i %10i %10i ] (legacy).\n", counts[0], + counts[1], counts[2], 0, counts[3]); /* Loop over the number of runs. */ for (k = 0; k < runs; k++) {