One of the things that sets the BLACS apart from other message passing layers is that the user does not need to specify message IDs, (abbreviated msgid). A msgid (also referred to as a message type or tag) is usually an integer which allows a receiving process to distinguish between incoming messages. The generation of these IDs can become problematic. Non-deterministic code may result if non-unique IDs are used in any two sections of code not separated by an explicit barrier.
Therefore, to add to the programmability of the BLACS, it was decided that the BLACS would generate the required msgids. These generated IDs had to have certain properties. First, it must never be the case that unrelated messages with the same destination would get the same ID. Second, in order to maintain performance, the ID generating algorithm had to use only local information: off-processor memory access could not be allowed. Further, it is necessary to allow for BLACS packages to be used alongside other communication platforms. An example that occurs regularly is linking a BLACS package with a machine specific package.
Therefore, the BLACS must allow the user to specify what range of IDs the BLACS can use. The user may do this by a call to the support routine SHIFT_RANGE. By placing two restrictions on communication, these goals were achieved. First, a receiver must know the coordinates of the sending processor. Second, communication between two processes is strictly ordered. This means that if process {0, 0} sends two messages to {0, 1}, then {0, 1} must receive them in the same order that they were sent.