From e04e54d0d169d2568fa2dc0e7f7c4e3245d28bd4 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Thu, 9 Feb 2012 16:12:43 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@7732 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- doc/JPG/balance.jpg | Bin 0 -> 34031 bytes doc/balance.html | 206 ++++++++++++++++++++++++++++++++++++++++++++ doc/balance.txt | 197 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 403 insertions(+) create mode 100644 doc/JPG/balance.jpg create mode 100644 doc/balance.html create mode 100644 doc/balance.txt diff --git a/doc/JPG/balance.jpg b/doc/JPG/balance.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea8bdf14663eaf340627d49f77788e916ef24ed8 GIT binary patch literal 34031 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 +
LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Commands +
+ + + + + + +
+ +

balance command +

+

NOTE: the fix balance command referred to here for dynamic load +balancing has not yet been released. +

+

Syntax: +

+
balance group-ID keyword args ... 
+
+
  • group-ID = ID of group of atoms to balance across processors + +
  • one or more keyword/arg pairs may be appended + +
  • keyword = x or y or z or dynamic + +
      x args = uniform or Px-1 numbers between 0 and 1
    +    uniform = evenly spaced cuts between processors in x dimension
    +    numbers = Px-1 ascending values between 0 and 1, Px - # of processors in x dimension
    +  y args = uniform or Py-1 numbers between 0 and 1
    +    uniform = evenly spaced cuts between processors in x dimension
    +    numbers = Py-1 ascending values between 0 and 1, Py - # of processors in y dimension
    +  z args = uniform or Pz-1 numbers between 0 and 1
    +    uniform = evenly spaced cuts between processors in x dimension
    +    numbers = Pz-1 ascending values between 0 and 1, Pz - # of processors in z dimension
    +  dynamic args = Nrepeat Niter dimstr thresh
    +    Nrepeat = # of times to repeat dimstr sequence
    +    Niter = # of times to iterate within each dimension of dimstr sequence
    +    dimstr = sequence of letters containing "x" or "y" or "z"
    +    thresh = stop balancing when this imbalance threshhold is reached 
    +
    + + +

    Examples: +

    +
    balance x uniform y 0.4 0.5 0.6
    +balance dynamic 1 5 xzx 1.1
    +balance dynamic 5 10 x 1.0 
    +
    +

    Description: +

    +

    This command adjusts the size of processor sub-domains within the +simulation box, to attempt to balance the number of particles and thus +the computational cost (load) evenly across processors. The load +balancing is "static" in the sense that this command performs the +balancing once, before or between simulations. The processor +sub-domains will then remain static during the subsequent run. To +perform "dynammic" balancing, see the fix balance +command, which can adjust processor sub-domain sizes on-the-fly during +a run. +

    +

    Load-balancing is only useful if the particles in the simulation box +have a spatially-varying density distribution. E.g. a model of a +vapor/liquid interface, or a solid with an irregular-shaped geometry +containing void regions. In this case, the LAMMPS default of dividing +the simulation box volume into a regular-spaced grid of processor +sub-domain, with one equal-volume sub-domain per procesor, may assign +very different numbers of particles per processor. This can lead to +poor performance in a scalability sense, when the simulation is run in +parallel. +

    +

    Note that the processors command gives you some +control over how the box volume is split across processors. +Specifically, for a Px by Py by Pz grid of processors, it lets you +choose Px, Py, and Pz, subject to the constraint that Px * Py * Pz = +P, the total number of processors. This can be sufficient to achieve +good load-balance for some models on some processor counts. However, +all the processor sub-domains will still be the same shape and have +the same volume. +

    +

    This command does not alter the topology of the Px by Py by Pz grid or +processors. But it shifts the cutting planes between processors (in +3d, or lines in 2d), which adjusts the volume (area in 2d) assigned to +each processor, as in the following 2d diagram. The left diagram is +the default partitioning of the simulation box across processors (one +sub-box for each of 16 processors); the right diagram is after +balancing. +

    +
    +
    +

    When the balance command completes, it prints out the change in +"imbalance factor". The imbalance factor is defined as the maximum +number of particles owned by any processor, divided by the average +number of particles per processor. Thus an imbalance factor of 1.0 is +perfect balance. For 10000 particles running on 10 processors, if the +most heavily loaded processor has 1200 particles, then the factor is +1.2, meaning there is a 20% imbalance. The change in the maximum +number of particles (on any processor) is also printed. +

    +

    IMPORTANT NOTE: This command attempts to minimize the imbalance +factor, as defined above. But because of the topology constraint that +only the cutting planes (lines) between processors are moved, there +are many irregular distributions of particles, where this factor +cannot be shrunk to 1.0, particuarly in 3d. Also, computational cost +is not strictly proportional to particle count, and changing the +relative size and shape of processor sub-domains may lead to +additional computational and communication overheads, e.g. in the PPPM +solver used via the kspace_style command. Thus +you should benchmark the run times of your simulation before and after +balancing. +

    +
    + +

    The x, y, and z keywords adjust the position of cutting planes +between processor sub-domains in a specific dimension. The uniform +argument spaces the planes evenly, as in the left diagram above. The +numeric argument requires you to list Ps-1 numbers that specify the +position of the cutting planes. This requires that you know Ps = Px +or Py or Pz = the number of processors assigned by LAMMPS to the +relevant dimension. This assignment is made (and the Px, Py, Pz +values printed out) when the simulation box is created by the +"create_box" or "read_data" or "read_restart" command and is +influenced by the settings of the "processors" command. +

    +

    Each of the numeric values must be between 0 and 1, and they must be +listed in ascending order. They represent the fractional position of +the cutting place. The left (or lower) edge of the box is 0.0, and +the right (or upper) edge is 1.0. Neither of these values is +specified. Only the interior Ps-1 positions are specified. Thus is +there are 2 procesors in the x dimension, you specify a single value +such as 0.75, which would make the left processor's sub-domain 3x +larger than the right processor's sub-domain. +

    +
    + +

    The dynamic keyword changes the cutting planes between processors in +an iterative fashion, seeking to reduce the imbalance factor, similar +to how the fix balance command operates. Note that +this keyword begins its operation from the current processor +partitioning, which could be uniform or the result of a previous +balance command. +

    +

    The dimstr argument is a string of characters, each of which must be +an "x" or "y" or "z". The characters can appear in any order, and can +be repeated as many times as desired. These are all valid dimstr +arguments: "x" or "xyzyx" or "yyyzzz". +

    +

    Balancing proceeds by adjusting the cutting planes in each of the +dimensions listed in dimstr, one dimension at a time. The entire +sequence of dimensions is repeated Nrepeat times. For a single +dimension, the balancing operation (described below) is iterated on +Niter times. After each dimension finishes, the imbalance factor is +re-computed, and the balancing operation halts if the thresh +criterion is met. +

    +

    The interplay between Nrepeat, Niter, and dimstr means that +these commands do essentially the same thing, the only difference +being how often the imbalance factor is computed and checked against +the threshhold: +

    +
    balance y dynamic 5 10 x 1.2
    +balance y dynamic 1 10 xxxxx 1.2
    +balance y dynamic 50 1 x 1.2 
    +
    +

    A rebalance operation in a single dimension is performed using an +iterative "diffusive" load-balancing algorithm. One iteration (which +is repeated Niter times), works as follows. Assume there are Px +processors in the x dimension. This defines Px slices of the +simulation, each of which contains Py*Pz processors. The task is to +adjust the position of the Px-1 cuts between slices, leaving the end +cuts unchanged (left and right edges of the simulation box). +

    +

    The iteration beings by calculating the number of atoms within each of +the Px slices. Then for each slice, its atom count is compared to its +neighbors. If a slice has more atoms than its left (or right) +neighbor, the cut is moved towards the center of the slice, +effectively shrinking the width of the slice and migrating atoms to +the other slice. The distance to move the cut is a function of the +"density" of atoms in the donor slice and the difference in counts +between the 2 slices. A damping factor is also applied to avoid +oscillations in the position of the cutting plane as iterations +proceed. Hence the "diffusive" nature of the algorithm as work +(atoms) effectively diffuses from highly loaded processors to +less-loaded processors. +

    +
    + +

    Restrictions: +

    +

    The dynamic keyword cannot be used with the x, y, or z +arguments. +

    +

    For 2d simulations, the z keyword cannot be used. Nor can a "z" +appear in dimstr for the dynamic keyword. +

    +

    Related commands: +

    +

    processors, fix balance +

    +

    Default: none +

    +
    + +

    add a citation and image +

    + diff --git a/doc/balance.txt b/doc/balance.txt new file mode 100644 index 0000000000..84c598d21c --- /dev/null +++ b/doc/balance.txt @@ -0,0 +1,197 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +balance command :h3 + +NOTE: the fix balance command referred to here for dynamic load +balancing has not yet been released. + +[Syntax:] + +balance group-ID keyword args ... :pre + +group-ID = ID of group of atoms to balance across processors :ule,l +one or more keyword/arg pairs may be appended :l +keyword = {x} or {y} or {z} or {dynamic} :l + {x} args = {uniform} or Px-1 numbers between 0 and 1 + {uniform} = evenly spaced cuts between processors in x dimension + numbers = Px-1 ascending values between 0 and 1, Px - # of processors in x dimension + {y} args = {uniform} or Py-1 numbers between 0 and 1 + {uniform} = evenly spaced cuts between processors in x dimension + numbers = Py-1 ascending values between 0 and 1, Py - # of processors in y dimension + {z} args = {uniform} or Pz-1 numbers between 0 and 1 + {uniform} = evenly spaced cuts between processors in x dimension + numbers = Pz-1 ascending values between 0 and 1, Pz - # of processors in z dimension + {dynamic} args = Nrepeat Niter dimstr thresh + Nrepeat = # of times to repeat dimstr sequence + Niter = # of times to iterate within each dimension of dimstr sequence + dimstr = sequence of letters containing "x" or "y" or "z" + thresh = stop balancing when this imbalance threshhold is reached :pre +:ule + +[Examples:] + +balance x uniform y 0.4 0.5 0.6 +balance dynamic 1 5 xzx 1.1 +balance dynamic 5 10 x 1.0 :pre + +[Description:] + +This command adjusts the size of processor sub-domains within the +simulation box, to attempt to balance the number of particles and thus +the computational cost (load) evenly across processors. The load +balancing is "static" in the sense that this command performs the +balancing once, before or between simulations. The processor +sub-domains will then remain static during the subsequent run. To +perform "dynammic" balancing, see the "fix balance"_fix_balance.html +command, which can adjust processor sub-domain sizes on-the-fly during +a "run"_run.html. + +Load-balancing is only useful if the particles in the simulation box +have a spatially-varying density distribution. E.g. a model of a +vapor/liquid interface, or a solid with an irregular-shaped geometry +containing void regions. In this case, the LAMMPS default of dividing +the simulation box volume into a regular-spaced grid of processor +sub-domain, with one equal-volume sub-domain per procesor, may assign +very different numbers of particles per processor. This can lead to +poor performance in a scalability sense, when the simulation is run in +parallel. + +Note that the "processors"_processors.html command gives you some +control over how the box volume is split across processors. +Specifically, for a Px by Py by Pz grid of processors, it lets you +choose Px, Py, and Pz, subject to the constraint that Px * Py * Pz = +P, the total number of processors. This can be sufficient to achieve +good load-balance for some models on some processor counts. However, +all the processor sub-domains will still be the same shape and have +the same volume. + +This command does not alter the topology of the Px by Py by Pz grid or +processors. But it shifts the cutting planes between processors (in +3d, or lines in 2d), which adjusts the volume (area in 2d) assigned to +each processor, as in the following 2d diagram. The left diagram is +the default partitioning of the simulation box across processors (one +sub-box for each of 16 processors); the right diagram is after +balancing. + +:c,image(JPG/balance.jpg) + +When the balance command completes, it prints out the change in +"imbalance factor". The imbalance factor is defined as the maximum +number of particles owned by any processor, divided by the average +number of particles per processor. Thus an imbalance factor of 1.0 is +perfect balance. For 10000 particles running on 10 processors, if the +most heavily loaded processor has 1200 particles, then the factor is +1.2, meaning there is a 20% imbalance. The change in the maximum +number of particles (on any processor) is also printed. + +IMPORTANT NOTE: This command attempts to minimize the imbalance +factor, as defined above. But because of the topology constraint that +only the cutting planes (lines) between processors are moved, there +are many irregular distributions of particles, where this factor +cannot be shrunk to 1.0, particuarly in 3d. Also, computational cost +is not strictly proportional to particle count, and changing the +relative size and shape of processor sub-domains may lead to +additional computational and communication overheads, e.g. in the PPPM +solver used via the "kspace_style"_kspace_style.html command. Thus +you should benchmark the run times of your simulation before and after +balancing. + +:line + +The {x}, {y}, and {z} keywords adjust the position of cutting planes +between processor sub-domains in a specific dimension. The {uniform} +argument spaces the planes evenly, as in the left diagram above. The +{numeric} argument requires you to list Ps-1 numbers that specify the +position of the cutting planes. This requires that you know Ps = Px +or Py or Pz = the number of processors assigned by LAMMPS to the +relevant dimension. This assignment is made (and the Px, Py, Pz +values printed out) when the simulation box is created by the +"create_box" or "read_data" or "read_restart" command and is +influenced by the settings of the "processors" command. + +Each of the numeric values must be between 0 and 1, and they must be +listed in ascending order. They represent the fractional position of +the cutting place. The left (or lower) edge of the box is 0.0, and +the right (or upper) edge is 1.0. Neither of these values is +specified. Only the interior Ps-1 positions are specified. Thus is +there are 2 procesors in the x dimension, you specify a single value +such as 0.75, which would make the left processor's sub-domain 3x +larger than the right processor's sub-domain. + +:line + +The {dynamic} keyword changes the cutting planes between processors in +an iterative fashion, seeking to reduce the imbalance factor, similar +to how the "fix balance"_fix_balance.html command operates. Note that +this keyword begins its operation from the current processor +partitioning, which could be uniform or the result of a previous +balance command. + +The {dimstr} argument is a string of characters, each of which must be +an "x" or "y" or "z". The characters can appear in any order, and can +be repeated as many times as desired. These are all valid {dimstr} +arguments: "x" or "xyzyx" or "yyyzzz". + +Balancing proceeds by adjusting the cutting planes in each of the +dimensions listed in {dimstr}, one dimension at a time. The entire +sequence of dimensions is repeated {Nrepeat} times. For a single +dimension, the balancing operation (described below) is iterated on +{Niter} times. After each dimension finishes, the imbalance factor is +re-computed, and the balancing operation halts if the {thresh} +criterion is met. + +The interplay between {Nrepeat}, {Niter}, and {dimstr} means that +these commands do essentially the same thing, the only difference +being how often the imbalance factor is computed and checked against +the threshhold: + +balance y dynamic 5 10 x 1.2 +balance y dynamic 1 10 xxxxx 1.2 +balance y dynamic 50 1 x 1.2 :pre + +A rebalance operation in a single dimension is performed using an +iterative "diffusive" load-balancing algorithm. One iteration (which +is repeated {Niter} times), works as follows. Assume there are Px +processors in the x dimension. This defines Px slices of the +simulation, each of which contains Py*Pz processors. The task is to +adjust the position of the Px-1 cuts between slices, leaving the end +cuts unchanged (left and right edges of the simulation box). + +The iteration beings by calculating the number of atoms within each of +the Px slices. Then for each slice, its atom count is compared to its +neighbors. If a slice has more atoms than its left (or right) +neighbor, the cut is moved towards the center of the slice, +effectively shrinking the width of the slice and migrating atoms to +the other slice. The distance to move the cut is a function of the +"density" of atoms in the donor slice and the difference in counts +between the 2 slices. A damping factor is also applied to avoid +oscillations in the position of the cutting plane as iterations +proceed. Hence the "diffusive" nature of the algorithm as work +(atoms) effectively diffuses from highly loaded processors to +less-loaded processors. + +:line + +[Restrictions:] + +The {dynamic} keyword cannot be used with the {x}, {y}, or {z} +arguments. + +For 2d simulations, the {z} keyword cannot be used. Nor can a "z" +appear in {dimstr} for the {dynamic} keyword. + +[Related commands:] + +"processors"_processors.html, "fix balance"_fix_balance.html + +[Default:] none + +:line + +add a citation and image