tutorial programming cuda gpu gpu-programming

cuda - programming - ¿Cuál es la diferencia entre “-arch sm_13” y “-arch sm_20”?



cuda zone (1)

Necesito doble cálculo de precisión en mi aplicación. De acuerdo con lo que encontré en google, debería agregar una bandera "-arch sm_13" o "-arch sm_20".

P1: ¿Cuál es la diferencia entre "-arch sm_13" y "-arch sm_20"?

P2: ¿Hay una diferencia en el rendimiento entre "-arch sm_13" y "-arch sm_20"?

Mi GPU: GTX 570.

Gracias.


SM significa multiprocesador de transmisión y el número indica las funciones admitidas por la arquitectura. Puede encontrar una buena descripción en las secciones 3.1.2-3.1.4 de la Guía de programación de CUDA y puede ver las características asociadas con cada arquitectura en la tabla en el apéndice F.

Del manual de NVCC (también incluido en el Kit de herramientas):

Para permitir la evolución arquitectónica, las GPU NVIDIA se lanzan en diferentes generaciones. Las nuevas generaciones introducen mejoras importantes en la funcionalidad y / o arquitectura de chip, mientras que los modelos de GPU dentro de la misma generación muestran diferencias de configuración menores que "moderadamente" afectan la funcionalidad, el rendimiento o ambos.

Su GPU tiene capacidad de cálculo 2.0, por lo que debería usar sm_20 para permitir que el compilador use funciones que no están disponibles en arquitecturas anteriores. Si desea compatibilidad con versiones anteriores, también podría apuntar a sm_13 (o sm_1x), consulte los documentos anteriores para saber cómo usar la opción -gencode para nvcc para apuntar a múltiples arquitecturas en una sola llamada a nvcc.

Con respecto al rendimiento, una cosa a tener en cuenta es que sm_1x no es compatible con el punto flotante IEEE754, por lo tanto, si apunta a sm_13 y se ejecuta en un dispositivo con Compute Capability 2.0 o posterior, es posible que el punto flotante se ejecute más rápido ya que usa menos ruta precisa También puede forzar la ruta menos precisa con sm_20 o posterior utilizando las -ftz=true -prec-div=false -prec-sqrt=false , consulte la sección 5.4.1 en la Guía de programación de CUDA para obtener más información al respecto.