Using Compile-Time Granularity Information toSupport Dynamic Work Distribution in ParallelLogic Programming