Algoritmos de escalonamento de lista em ambientes multithread dinâmicos: análise de estudos de caso teóricos e práticos - Camargo, Cícero Augusto de Souza (2013)
A popularização das arquiteturas multicore trouxe a capacidade de processamento paralelo para diversos dispositivos de computação pessoal, como laptops, tablets e smartphones. No entanto, para que uma aplicação se beneficie do hardware paralelo, precisamos do suporte de ferramentas de programação concorrente que forneçam uma interface simples e abstrata, a qual esconda do programador as complexidades do hardware e do sistema operacional. O modelo multithread é o que mais se adequa ao modo de execução das arquiteturas multicore. Diversas ferramentas de programação concorrente amplamente utilizadas como OpenMP, Intel R Cilk Plus e Intel R Threading Building Blocks, oferecem interfaces de programação multithread e abstraem o escalonamento de threads em nível de aplicação, empregando estratégias baseadas em algoritmos de lista. Uma vez que algoritmos de lista foram originalmente concebidos para o escalonamento estático de Grafos Dirigidos Acíclicos de tarefas (DAG – Directed Acyclic Graph), este trabalho se dedica a analisar o impacto gerado ao empregar tais algoritmos no núcleo de escalonamento de ambientes multithread dinâmicos. Para tanto, foram implementadas uma ferramenta de simulação e um ambiente real de execução multithread, este batizado de Anahy3. Os resultados obtidos nas simulações indicam que escalonamentos de lista em ambientes multithread podem fornecer, para uma dada aplicação, tempos de execução muito próximos daqueles obtidos no escalonamento estático do DAG que descreve a mesma aplicação, mesmo que o grafo de threads seja gerado em tempo de execução. Nas execuções reais com Anahy3 foi possível constatar que algoritmos de lista podem gerar escalonamentos eficientes, resultando em desempenhos semelhantes àqueles fornecidos pelas principais ferramentas multithread da academia e da indústria. Contudo, alguns resultados demonstram que a eficiência das técnicas utilizadas na implementação do ambiente de execução é tão importante quanto a ordem de execução dos threads.