Repositório dedicado a estudos de programação em GPU em python utilizando numba (gpu) e cupy.
As GPUs (Graphics Processing Units) foram originalmente desenvolvidas para computação gráfica. Contudo, essas unidades de processamento tornaram-se presentem em quase todas as áreas que exigem computação de alto desempenho. Especialmente, no meio acadêmico, é um recurso fundamental para permitir processar dados e realizar simulações. Porém, em muitos casos, esses recursos somente podem ser utilizados por meio de códigos desenvolvidos pelos pesquisadores. Esse progresso foi possibilitado pelo desenvolvimento de interfaces GPGPU (GPU de uso geral), que nos permitem programar GPUs para computação de uso geral. A mais comum dessas interfaces é a CUDA, seguida pela OpenCL e, mais recentemente, pela HIP.
Existem varias formas de programar cálculos para serem processados em GPU em python, alguns exemplos são: CuPy, PyCUDA, Numba e a CUDA Python. Vamos estudar desde exemplos simples (primeiras cálculos na GPU) a recursos avançados. Importante destacar que o autor desse repositório não é especialista na área e visa aprender enquanto desenvolve esse roteiro didático prático de computação em GPU.
Qual a dinâmica? Serão criados códigos em cupy, numba cuda, e numba (somente CPU), comparando o desempenho e a facilidade de implementação das tarefas. Isso permitirá aprender ambas as bibliotecas, o cupy mais fácil de utilizar e menos flexível, e o cuda, mais complexa e flexível. Às vezes serão utilizados notebooks e outras apenas arquivos .py, mas sempre comentadas e explicadas o máximo possível.