For quite a while, CPU’s clock speed has stagnated while the number of cores keeps
increasing. Because of this, parallel computing rose as a paradigm for programming
on multi-core architectures, making it critical to control the costs of communication.
Achieving this is hard, creating the need for tools that facilitate this task.
Work Stealing (WSteal) became a popular option for scheduling multithreaded com-
putations. It ensures scalability and can achieve high performance by spreading work
across processors. Each processor owns a double-ended queue where it stores its work.
When such deque is empty, the processor becomes a thief, attempting to steal work, at
random, from other processors’ deques. This strategy was proved to be efficient and is
still currently used in state-of-the-art WSteal algorithms. However, due to the concur-
rent nature of the deque, local operations require expensive memory fences to ensure
correctness. This means that even when a processor is not stealing work from others, it
still incurs excessive overhead due to the local accesses to the deque. Moreover, the pure
receiver-initiated approach to load balancing, as well as, the randomness of the targeting
of a victim makes it not suitable for scheduling computations with few or unbalanced
parallelism.
In this thesis, we explore the various limitations of WSteal in addition to solutions
proposed by related work. This is necessary to help decide on possible optimizations for
the Low-Cost Work Stealing (LCWS) algorithm, proposed by Paulino and Rito, that we
implemented in C++. This algorithm is proven to have exponentially less overhead than
the state-of-the-art WSteal algorithms. Such implementation will be tested against the
canonical WSteal and other variants that we implemented so that we can quantify the
gains of the algorithm.Já faz algum tempo desde que a velocidade dos CPUs tem vindo a estagnar enquanto
o número de cores tem vindo a subir. Por causa disto, o ramo de computação paralela
subiu como paradigma para programação em arquiteturas multi-core, tornando crítico
controlar os custos associados de comunicação. No entanto, isto não é uma tarefa fácil,
criando a necessidade de criar ferramentas que facilitem este controlo.
Work Stealing (WSteal) tornou-se uma opção popular para o escalonamento de com-
putações concorrentes. Este garante escalabilidade e consegue alcançar alto desempenho
por distribuir o trabalho por vários processadores. Cada processador possui uma fila du-
plamente terminada (deque) onde é guardado o trabalho. Quando este deque está vazio,
o processador torna-se um ladrão, tentando roubar trabalho do deque de um outro pro-
cessador, escolhido aleatoriamente. Esta estratégia foi provada como eficiente e ainda é
atualmente usada em vários algoritmos WSteal. Contudo, devido à natureza concorrente
do deque, operações locais requerem barreiras de memória, cujo correto funcionamento
tem um alto custo associado. Além disso, a estratégia pura receiver-initiated (iniciada
pelo recetor) de balanceamento de carga, assim como a aleatoriedade no processo de es-
colha de uma vitima faz com que o algoritmo não seja adequado para o scheduling de
computações com pouco ou desequilibrado paralelismo.
Nesta tese, nós exploramos as várias limitações de WSteal, para além das soluções
propostas por trabalhos relacionados. Isto é um passo necessário para ajudar a decidir
possíveis otimisações para o algoritmo Low-Cost Work Stealing (LCWS), proposto por
Paulino e Rito, que implementámos em C++. Este algoritmo está provado como tendo
exponencialmente menos overhead que outros algoritmos de WSteal. Tal implementação
será testada e comparada com o algoritmo canónico de WSteal, assim como outras suas
variantes que implementámos para que possamos quantificar os ganhos do algoritmo