Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a224e6367f3351a8

Jump to content

Scalable parallelism

From Wikipedia, the free encyclopedia

Software exhibits scalable parallelism if it can make use of added processors to solve larger problems, i.e., this term refers to software for which Gustafson's law holds. Consider a program which execution time is dominated by one or more loops, each of which updates every element of an array. For example, the following finite difference heat equation stencil calculation:

for t := 0 to T do
    for i := 1 to N-1 do
        new(i) := (A(i-1) + A(i) + A(i) + A(i+1)) * .25
        // explicit forward-difference with R = 0.25
    end
    for i := 1 to N-1 do
        A(i) := new(i)
    end
end

In the above source code, all iterations of each "i" loop can be executed concurrently, i.e., turn each into a parallel loop. In such cases, it is often possible to make effective use of twice as many processors for a problem of array size 2N as for a problem of array size N. As in this example, scalable parallelism is typically a form of data parallelism. This form of parallelism is often the target of automatic parallelization of loops.

Distributed computing systems and non-uniform memory access architectures are typically the most easily scaled to large numbers of processors, and thus would seem a natural target for software that exhibits scalable parallelism. However, applications with scalable parallelism may not have parallelism of sufficiently coarse grain to run effectively on such systems (unless the software is embarrassingly parallel). In the example above, the second "i" loop is embarrassingly parallel, but in the first loop, each iteration requires results produced in several prior iterations. Thus, for the first loop, parallelization may involve extensive communicating or synchronizing among processors, and thus only result in a net speedup if such interactions have very low overhead, or if the code can be transformed to resolve this issue (i.e., by combined scalable locality or scalable parallelism optimization[1]).

Languages

[edit]

References

[edit]
  1. Wonnacott, D. (2000). "Using time skewing to eliminate idle time due to memory bandwidth and network limitations". Proceedings 14th International Parallel and Distributed Processing Symposium. IPDPS 2000. pp. 171–180. doi:10.1109/IPDPS.2000.845979. ISBN 978-0-7695-0574-9.