All the material presented on this page can be executed on the demo server. However, an allocation of eight logical cores clocked at 2.1 GHz does not provide enough processing power to comfortably run our PFB / APFB two-dimensional parallel strategy. Remember that we want each process, Master or Auxiliary, to be capable of mobilizing its own pool of worker processes, say, eight worker processes.
Remember that using a scalable cloud computing service may be the best solution for you. For example, a well-known European provider of cloud services offers a plan providing access to 48GB ram / 24 logical cores for a cost of 0,60€ per hour of use, including VAT.
We used our dedicated workstation to perform all the computations presented on this page. Computations involving PFB / AFB can be identified thanks to the mention “parallelized exploration enabled” at the top of the screen, that is,

Here is a short video showing the various processes running in parallel during the study of the
Very Important: Note that we explain on the Network deployment page how to enforce this strategy at the network level to mobilize the processing power of more than one physical machine to execute the Borcherds’ method.
Define the input data list associated with the
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
The Poolized Borcherds’ method is PFB-ready. At the code level, setting
PFB = True
before executing the method results in a swap of the Walls computation Block from the Poolized Borcherds’ method for a Poolized Functional Block (PFB). The latter will enable the method to communicate with processes executing an Autonomous Poolized Functional Block.
We enforce the strategy described in this figure in the case where
- We execute an instance of the PFB-enhanced Poolized Borcherds’ method, which will play the role of the primary process
. - Assume that the primary process
is exploring and processing the adjacencies of level , i.e., discovers chambers of level . We launch three APFB processes and in charge of assisting the primary process by exploring the adjacencies of chambers of level , and computing the sets of walls of chambers of level thus discovered. - Still assuming that
is exploring and processing the adjacencies of chambers of level , we launch an extra APFB process in charge of exploring and processing the adjacencies of chambers of level as soon as these chambers are identified as new congruence classes of chambers of level by . The process thus computes sets walls of chambers of level during the -th iteration of the method. That is, the process gets a head start on the work to be done during the next iteration.
At the beginning of each iteration, say the
The processes are synchronized by level :

The giant hamster is the primary process; there are three auxiliary APFB processes, each focusing on their assigned share of the workload and located at the same level as the primary process (yellow chambers). There is an additional auxiliary APFB one level higher, getting ahead of the work to be done during the next iteration.
We proceed by explaining, one by one, the following points :
- Launching the primary process
: PFB-enhanced instance of the Poolized Borcherds’ method. - Launching APFB processes
for . - Launching the extra APFB process
.
We thus enforce for

Launching
We start by launching the primary process
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
PFB = True
nb_workers = 8
load('borcherds_direct.sage')
Note that
Note that the implementation of Borcherds’ method will, by default, assume that the user will launch


The method starts its execution :

Since we did not assign values to text1 and text2 before executing the method, string values were picked randomly and assigned to these variables. We see on the screenshot just above that
text1 is str(‘precociousness’)
and that
text2 is str(‘evaporation’)
For example, to launch the primary process
text1 = str('precociousness')
text2 = str('evaporation')
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
PFB = True
nb_workers = 8
load('borcherds_direct.sage')
Launching APFB processes
We now explain how to launch an auxiliary APFB process.
These processes were designed to support
We open a new sage session to make an APFB process join
We first have to set :
text1 = str('precociousness')
text2 = str('evaporation')
The APFB will thus know that a battle is currently fought inside of the folder

and will thus know where they should go to join the fight!
A process number must be assigned to each APFB. For
aux_number = 1
Since we want each APFB to be capable of mobilizing its own worker processes, we set
nb_workers = 8
We have to specify to each APFB the input data required to set up the initial environment for the case under study. Hence, we set :
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
The commands required to launch the APFB process
text1 = str('precociousness') # identification of the case under study
text2 = str('evaporation') # identification of the case under study
nb_workers = 8 # the APFB will be capable of mobilizing a pool of 8 workers
aux_number = 1 # depends on the number assigned to APFB process by the user
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
load('APFB_direct.sage')
Similarly, open new Sage console tabs, and proceed as follows to launch
Commands used to launch
text1 = str('precociousness')
text2 = str('evaporation')
nb_workers = 8
aux_number = 2 # Process P_2
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
load('APFB_direct.sage')
Commands used to launch
text1 = str('precociousness')
text2 = str('evaporation')
nb_workers = 8
aux_number = 3 # Process P_3
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
load('APFB_direct.sage')
Launching an extra APFB : Process
To launch an extra APFB process whose purpose consists in getting ahead of the work to be done a the next iteration, the procedure is the same, except that we call for APFB_extra_direct instead of APFB_direct :
text1 = str('precociousness')
text2 = str('evaporation')
nb_workers = 8
aux_number = 4 # Process P_4
INPUT_DATA=load('INPUT_DATA/DEMO/INPUT_DATA_DEMO_PFB.sobj')
load('APFB_extra_direct.sage')