Pregunta

Estoy intentando aprovechar la potencia de la GPU (nVidia Quadro NVS140M) para acelerar algunos cálculos matriciales en mi proyecto.Estoy leyendo cierta documentación (guía de programación, guía de mejores prácticas y manual de referencia), pero no estoy seguro de en qué sección debo centrarme.Sería fantástico si pudiera recibir algunos consejos sobre esto.

Además, me pregunto si existen SDK mantenidos por terceros, como CuBLAS.net, que puedan simplificar el proceso de desarrollo de cublas antes de seguir con las características ofrecidas de cublas que me ayudarían a lograr mis objetivos con mi proyecto.De nuevo, gracias de antemano por los comentarios.

¿Fue útil?

Solución

La mayor parte de la documentación que viene con el kit de herramientas CUDA y las descargas del SDK son sobre CUDA en general, no sobre CuBLAS específicamente.Comience con el CUBLAS_Library_2.3.pdf archivo si solo va a utilizar CuBLAS; no necesitará escribir sus propios núcleos CUDA.Si ya estás usando una CPU BLAS, CuBLAS no debería ser difícil de aprender.(Y si no es así, considere probar una CPU optimizada antes de CuBLAS, ya que será más fácil de programar).

Si está codificando en .NET, entonces la forma más sencilla de utilizar CuBLAS es probablemente mediante llamadas de invocación de plataforma a cublas.dll.Asegúrese de mantener claro qué matrices están en la memoria del host (CPU) y cuáles en la memoria del dispositivo (GPU).

Tenga en cuenta que CUDA y CuBLAS no son soluciones mágicas.El rendimiento depende de muchos factores (especialmente las transferencias a través del bus PCIe), y es posible que simplemente intercambiar llamadas CUBLAS por llamadas CPU-BLAS no le brinde aceleración.Es posible que deba realizar cambios más sustanciales en su propio código para obtener mejoras de rendimiento.Esas otras guías que mencionas son muy útiles para comprender la arquitectura CUDA y sus cuellos de botella.

EDITAR:No tenía claro el límite entre el código de usuario y el código del kernel.CUBLAS es una biblioteca de kernels CUDA optimizados y prediseñados.Si sólo necesita la funcionalidad BLAS, no necesita escribir sus propios núcleos.En su lugar, simplemente llame a las funciones CUBLAS.Al ajustar el rendimiento, no debería necesitar modificar los núcleos de CUBLAS, pero es posible que necesite cambiar cómo y cuándo los llama, y ​​cómo usa la memoria, para minimizar la cantidad de transferencias a través del bus PCI express.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top