chiark / gitweb /
fix threading bugs and arrangements
[moebius2.git] / parallel.h
index 3d5082285824cf07bd0ab560fe032d0d0567b616..19616e43f64b9aeba95b4dc21e973ec571eab7a9 100644 (file)
        (v) < OUTER_PERSECTION_BASE((zero),(n), section + 1) && (v) < (n); \
        (v)++)
 
+/*
+ * OUTER is a loop constructor like INNER (see mgraph.h).
+ *
+ * Constraints on its use:
+ *   - must be in exactly one loop of particular function
+ *   - function must not modify anything other than
+ *      its return value (for cost computation functions, COST()) or
+ *      its designated output (for precomputation functions, PRECOMP())
+ *        (which latter it may not read)
+ *   - function must of course be reentrant
+ */
+
 #define nsections NSECTIONS
 
 typedef void Computation(const struct Vertices *vertices,
@@ -30,5 +42,13 @@ void inparallel(const struct Vertices *vertices,
                Computation *separately,
                Computation *combine,
                size_t secdatasz, void *gendata);
+  /* nsections copies of the computation `separately' are run in parallel
+   * with different values of `section' from 0 to nsections-1.
+   * Each copy is passed the same gendata as passed to inparallel.
+   * Each copy gets its own data block (struct aligned) of size
+   * secdatasz, passed as secdata, uninitialised on entry.
+   * After all the copies have finished, `combine' is invoked
+   * nsections times sequentially, with the same sets of arguments.
+   */
 
 #endif /*PARALLEL_H*/