Underlying the whole concept of active messages is the paradigm that
the user takes the responsibility for handling messages as they arrive
at a destination. The user writes a handler function that takes the
data from a register and uses it in a calculation or assigns the data
to memory. By assigning message handling responsibilities to the
user, communications overhead can be significantly reduced. The
effect of reduced overhead can be clearly seen in this algorithm, when
performance of an active message-based algorithm is compared to
performance of an algorithm with more common blocking send and receive
commands. The requirement in this algorithm to broadcast the values
of before the next color can proceed causes
substantial amounts of communications. In the portion of the
algorithm that solves for values of
in the last
diagonal block, the amount of communications is
,
and as the number of processors increases, the size of the messages
for conventional message passing decreases. For traditional message
passing paradigms, the cost for communications increases drastically
as the number of processors increases, because each message incurs the
same latency regardless of the amount of data sent. Meanwhile, with
active messages, latency is greatly reduced because the user has the
responsibility to process the message. This increase in the number of
messages can be seen in figure 10, as the performance for
solving for values in the last block eventually increases slightly as
the number of processors increases. For an algorithm based on a more
traditional send and receive paradigm, performance quickly becomes
unacceptable in this portion of the calculations as the number of
processors increases.