@ -139,7 +139,16 @@ There are three available choices for data distribution:
1. **Simple BLOCK distribution**
2. **Arbitrary index assignment** (typically from a graph partitioner)
3. **2D distribution** where the unit square is partitioned into rectangles, each assigned to a process.
### Using pdegen for scalability studies
You can use the programs in pdegen to perform scalability studies, but you need to consider the following aspects:
1. **Sizing your test case for strong scalability** In a strong scalability study you solve the exact same problem varying the number or processors (and matching processes). The main issue is the size of the problem: with modern hardware you need to have a substantial size, say 1 million equations per node: therefore it is advisable to start with the largest possibile problem size that would fit onto a single node/processor, and proceed from that; the output from the programs will give an indication of the amount of memory occupied. Once the local size N/NP drops below a certain threshold, performance will also start to flat out or drop. The exact value of the threshold depends on the ratio between the speed of the computing cores and the speed of the network: the faster the network, the smaller the threshold.
2. **Sizing your test case for weak scalability** In a weak scalability study you solve a problem whose size scales with the number of processes/processing cores: if you have a problem of size N=1M on 1 process, then you run with N=2M on 2 processes, and so on. The relationship between N and the IDIM parameter in the input file depends on whether you are running a 2D problem (N=IDIM^2) or a 3D problem *N=IDIM^3). At the time of this writing, a size of 1 or a few million equations per process is a reasonable starting point.
3. **What to measure in a scalability study** The test programs print out a detailed description of the time to set up the problem, the time to set up the preconditioner and the time to solve the problem. The latter (time to solution) is usually the first parameter to be studied: it is further split into number of iterations and time per iteration. Ideally the number of iteration should be constant across different configurations (number of processes and/or problem size), whereas the time per iteration should
1. Scale linearly with the number of processes in a strong scaling experiment;
2. Remain constant in a weak scaling experiment.
Of course these ideal conditions will not be met exactly in practice, but it is important to have a fine level split of the two factors contributing.