Podem várias threads fazer enqueue de Kernels?

Apr 16, 2010 at 3:27 PM

Bom dia,

a minha dúvida, é se com OpenCL e possível várias threads (no host) poderem em paralelo fazer enqueue de Kernels, para tb estes serem corridos em paralelo?

Se sim, existe algum sitio onde possa ver um exemplo?

 

Cumprimentos,

Vando

Coordinator
May 25, 2010 at 9:31 PM
Edited May 25, 2010 at 9:35 PM
Oi Vando, por favor, me desculpe a demora em responder. Sinto muitissimo. Vou direto ao problema principal da tua questão: as GPUs da NVIDIA só executam UM kernel por vez (pelo menos até antes da arquitetura FERMI, da qual ainda não tenho muitas informações). Não conheco muito bem a arquitetura da AMD, mas imagino que o problema seja o mesmo. OpenCL permite que você tenha múltiplas command-queues relativas ao mesmo device (uma por thread, por exemplo) e isso funciona (principalmente com uma thread só, visto que clEnqueueNDRangeKernel é bloqueante). Não sei como isso se comporta quando são utilizadas múltiplas threads, mas provavelemente os kernels serão serializados (visto que apenas uma chamada é atendida por vez). Uma exceção pode ser feita para o caso em que múltiplas GPUs sejam utilizadas. Nesse caso podes criar command-queues independentes para cada device, e podes ter tantos kernels quantas GPUs executando em paralelo. Uma dica é que CUDA e OpenCL estão intimamente ligados, já que ambos são compilados para ptx. Frequentemente se algo não pode ser feito em CUDA, não pode ser feito para OpenCL. O contrário nem sempre é verdade, visto que algumas features de CUDA não estão presentes em OpenCL. Espero ter ajudado, Atenciosamente, Leonardo Chatain