Como decidir como paralelizar loops aninhados na GPU?

1

Suponha que eu tenha um algoritmo que eu queira implementar em uma GPU. O algoritmo consiste em um loop principal e todas as iterações do loop podem ser executadas em paralelo. Além disso, cada iteração do loop tem um loop interno cujas iterações podem ser executadas em paralelo. Digamos que eu precise de N iterações do loop principal e M iterações do loop interno (por iteração de loop principal) e que minha GPU tenha L núcleos.

Se N+N*M <= L , posso executar tudo em paralelo. Mas se esse não for o caso, preciso decidir o que executar sequencialmente. Como devo tomar essa decisão? Por exemplo, se N=10 , M=5 , L = 20 , quando devo escolher cada uma dessas opções (ou qualquer outra opção)?:

  1. Executa todas as iterações principais em paralelo e todo loop interno sequencialmente.
  2. Executa todas as iterações principais sequencialmente, e todo loop interno em paralelo.
  3. Executa todas as iterações principais em paralelo, dois dos loops internos em paralelo e o restante em seqüência.
  4. Execute três das iterações principais em paralelo, execute cada um de seus loops internos em paralelo, execute o restante das iterações principais e seus loops internos sequencialmente.
por Lior 08.04.2016 / 16:57

0 respostas