readme.txt 7.08 KB

Parallel heterogeneous architecture constraint toolkit (PHACT) is a complete
solver, capable of using all the devices compatible with OpenCL of a machine
to solve a CSP.
It can load CSPs implemented in C according to PHACT's interface, or modeled
in MiniZinc or FlatZinc and whose variables domains are constituted by
positive integers or booleans.


List of accepted arguments:
 -D [GPU|CPU|ACC][:n][/[wg]/[wi]] - Select the device/s to use. Examples:
 -D CPU:1/64/1 -D GPU:2 -D ACC//1 - Use first CPU with 64 work-groups
    and 1 work-item per work-group, second GPU with the default number of
    work-groups and of work-items, and all accelerators with default number
    of work-groups and one work-item per work-group;
 -D CPU:1 -D GPU:1 -INTERVALS - Use first CPU and first GPU with INTERVAL
    domains;
 -D CPU -D GPU - Use all GPUs and all CPUs with default number of
    work-groups and work-items;
 If none -D argument is introduced, all the devices compatible with OpenCL
    will be used.

 -E [QUEENS | COSTAS | GOLOMB | SUDOKU | ALL-DIFF | QAP | LANGFORD | STEINER |
    LATIN | ALL-INTERVAL | MARKET-SPLIT | SCHURS] - Select one of the sample
    CSPs implemented through PHACT's interface;
 -FZN /home/user/csp.fzn - Solve the Flatzinc model in the file
    "/home/user/csp.fzn". If only the mame of the file is given, it
    will be searched in src/csps/csp.fzn. Flex and Bison programs are
    required;
 -MZN /home/user/csp.mzn /home/user/csp.dzn - Solve the Minizinc model
    in the files "/home/user/csp.mzn" and "/home/user/csp.dzn".
    If only the mame of the files is given, they will be searched in
    src/csps/csp.Xzn. Mzn2fzn, Flex and Bison programs are required.

 -MZN /home/user/csp.mzn [/home/user/csp.dzn] -MZN2FZN-ONLY - Only
    converts the MZN file in "/home/user/csp.mzn" and
    "/home/user/csp.dzn" to the FZN file "/home/user/csp.fzn".
    If only the mame of the file is given, it will be searched in
    src/csps/csp.Xzn. Mzn2fzn program is required.

 (int) - CSP dimension. "(int)" should be replaced by each dimension of the
    CSP to solve. Not used when solving a Minizinc or Flatzinc model.

 [-COUNT|-ONE|-OPT] - Select what must be done with the CSP. When solving
   FlatZinc models, it overrides the model selection:
   -COUNT - Count all the solutions;
   -ONE - Find one solution. Default for CSPs modeled with PHACT C interface;
   -OPT - Do optimization.

 [-INTERVALS] - Use interval representation for domains, instead of bitmaps.

 [-N-SS n] - Number of sub-search spaces to create. "n" should be replaced by
    the number of sub-search spaces to create. If not present, the default
    number of sub-search spaces will be created;

 [-ANTI-FIRST-FAIL | -FIRST-FAIL | -INPUT-ORDER | -LARGEST | -MAX-REGRET | 
   -MOST-CONSTRAINED | -OCCURRENCE | -SMALLEST] - Method to select the variable
   to label:
   -ANTI-FIRST-FAIL - Select the variable to label that has more values in
      its domain;
   -FIRST-FAIL - Select the variable to label that has less values in its
      domain;
   -LARGEST - Select the variable to label that has the largest value in its
      domain;
   -INPUT-ORDER - Select the variable to label by the order on which they were
      created. Default;
   -MAX-REGRET - Select the variable to label that has the largest difference
      between the two smallest values in its domain;
   -MOST-CONSTRAINED - Select the variable to label that has the smallest
      domain, breaking ties using the number of constrains;
   -OCCURRENCE - Select the variable to label that is more constrained;
   -SMALLEST - Select the variable to label that has the smallest value in its
      domain.

 [-INDOMAIN-INTERVAL | -INDOMAIN-MAX | -INDOMAIN-MIDDLE | -INDOMAIN-MEDIAN |
    -INDOMAIN-MIN | -INDOMAIN-REVERSE-SPLIT | -INDOMAIN-SPLIT] - Method to
    select the value to assign to the variable for labeling:
   -INDOMAIN-INTERVAL - Select the first contiguous interval or, if none, select
    half of the domain;
   -INDOMAIN-MAX - Select the maximum value to assign;
   -INDOMAIN-MIDDLE - Select the mean value of the domain bounds;
   -INDOMAIN-MEDIAN - Select the median value of the domain values;
   -INDOMAIN-MIN - Select the minimum value to assign. Default;
   -INDOMAIN-REVERSE-SPLIT - Splits the domain about half and tries the second
    half;
   -INDOMAIN-SPLIT - Splits the domain about half and tries the first half.

 -STATS - Print statistics about the solving process;
 -PRINT-SOLUTIONS - Print all the solutions (only available when using only
    one thread per device);
 -PRINT-CSP - Before starting the exploration, prints all the variables with
    their domains, the constraints and the relation between them;
 -V - Print more information and timings about what is being done by each
    device;
 -Q - Print only the best solution, the solution, or the number of solutions,
    depending if optimizing, searching for one solution or counting the
    number of solutions;

 -H - Show this information.


Notes on compilation:
 To compile PHACT execute one of the following commands on folder
     "PHACT/Debug":
   make all - To solve CSPs with variables whose domains have values between 0
     and 1023;
   make all CFLAGS="-D BITS=n" - To solve CSPs with variables whose domains
     have values between 0 and n. When recompiling PHACT to change
     CL_BITS value, please run "make clean" before;
   make all CFLAGS="-D COMPILE_FZN=0" - Required when the programs mzn2fzn,
     flex or bison are not available. Minizinc and Flatzinc interpreter will
     not be available.


Note on execution:
 The OpenCL drivers implemented by some vendors for their devices will try to
     vectorize the kernel. When using PHACT in some devices, that may result in
     crashing the OpenCL compiler, or in a poor performance of PHACT.
     For that motive, it is recommended to disable this OpenCL feature by
     introducing "CL_CONFIG_USE_VECTORIZER=false" at the beginning of PHACT
     execution command.


Execution examples:
 For counting the number of solutions of the Costas Array 10 problem using all
    the devices compatible with OpenCL on the running machine, execute the
    following command on folder "PHACT/Debug":
      ./PHACT -E COSTAS 10 -COUNT

 For finding one solution for the n-Queens 30 problem using all the GPUs
    compatible with OpenCL on the running machine, execute the following
    command on folder "PHACT/Debug":
      ./PHACT -E QUEENS 30 -D GPU

 For finding one solution for a new CSP modeled in the file "/src/csps/CSP.c"
    and using the CPU on the running machine, after recompiling PHACT,execute
    the following command on folder "PHACT/Debug":
      ./PHACT -D CPU

 For solving the CSP modeled in the FlatZinc file
    "PHACT/Debug/src/csps/CSP.fzn" file using all the GPUs compatible with
    OpenCL on the running machine, execute the following command on folder
    "PHACT/Debug":
      ./PHACT CSP.fzn -D GPU

 For solving the CSP modeled in the MiniZinc files
    "PHACT/Debug/src/csps/CSP.mzn" and "PHACT/Debug/src/csps/CSP.dzn"
    files using all the devices compatible with OpenCL on the running machine,
    execute the following command on folder "PHACT/Debug":
      ./PHACT -MZN CSP.mzn CSP.dzn