News | People | Our Github

Tiling Script

 

This script uses multiple display setups to arrange OpenGL programs according to user specifications. The user specifies an input file, which details the display and application setups, and the script will tile the programs accordingly. The script can use Chromium if the user wishes to tile a single application over multiple (or one) display.

Files:

tiles.conf
README

Input Examples: boba_windows.in, boba_all_local_test.in, boba_full_tilesort_test.in, boba_mixed_tile_test.in

Input File Format

Refer to example below.

The array 'a' holds each monitor's position and size. The position is normally 0, 0. Size is resolution (width, height).

'dir1' is directory to application.
'app1' is application, including absolute paths, along with any input

'crsite' contains all the data for how the applications should be rendered

In crsite:

"render_nodes" is an array that holds an array for render machine.
  Each machine has this format:
  ['machine_name', a, [tile location and size]],

 "client_nodes" is an array that holds an array for application(client)
   machines.
   Each machine has this format:
    ['client_name', [tiles_to_span], [render_nodes], app_dir, app, window_#],
     *tiles_to_span: [#_horizontal_tiles, #_vertical_tiles]
     *render_nodes: Render nodes are numbered 1 through (total_nodes) from
      left to right then top to bottom. List nodes in increasing order.
      e.g., [1, 2, 3, 4]
     *window_# specifies which window of a mutli-window application to display.
      Use 0 for single window applications.

 "local_run" is an array that holds an array for applications that
   will be run directly on the render machine.
   Each has this format:
    ['render_machine_name', application],

 "chromium" is a string that specifies the path to chromium
/---------------------------Example Input-------------------------/

a = [0, 0, 1280, 1024]

dir1 = '/user/application_dir'
app1 = '/user/application_dir/app (input parameters)'

crsite = {
   "render_nodes"  : [['render01', a, [0, 1024, 1280, 1024]],
                      ['render02', a, [1280, 1024, 1280, 1024]],
                      ['render03', a, [0, 0, 1280, 1024]],
                      ['render04', a, [1280, 0, 1280, 1024]],
                     ],

   "client_nodes"  : [['head01', [2, 2], [1, 2, 3, 4], dir1, app1, 1],
                     ],

   "local_run"  : [[7, app1],

   "chromium"   : '/user/cr-1.7'
}

/--------------------------------------------------------------------/

Running

 ./tiles.conf <input_file>

Notes

If you want an application to be fullscreen when running locally on a render machine, be sure the window it produces is in position 0,0 and its size is the same as the monitors resolution.

When using tiling, each row must contain the same number of render machines. The order of "render_nodes" is left to right then top to bottom, numbered respectively from 1 to number_of_nodes.

Example:

                      ___________
                     | 1 | 2 | 3 |
                     |---|---|---|
                     | 4 | 5 | 6 |
                     |---|---|---|
                     | 7 | 8 | 9 |
                      -----------
Use x2x to get keyboard/mouse access on the nodes. If you run more than one application on a single node, then x2x can only send keys to one of those programs, so keep that in mind.