2012-04-26 8 views
17

Necesito el cálculo de doble 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".cuál es la diferencia entre "-arch sm_13" y "-arch sm_20"

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

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

Mi GPU: GTX 570.

Gracias.

+0

necesita usar sm_20. sm_13 es para calcular tarjetas 1.3. –

+0

es tan simple? capacidad de cálculo 2.0 -> sm_20, capacidad de cálculo 1.3 -> sm_13? – user1281071

Respuesta

25

SM significa multiprocesador de transmisión y el número indica las características admitidas por la arquitectura. Se puede encontrar una buena descripción de las secciones 3.1.2-3.1.4 CUDA Programming Guide y se puede ver las características asociadas a cada arquitectura en el cuadro del apéndice F.

Desde el NVCC manual (también incluido en el kit de herramientas):

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

Su GPU tiene Capacidad Compute 2.0, por lo que debe usar sm_20 para permitir que el compilador use características no disponibles en las arquitecturas antiguas. Si desea compatibilidad con versiones anteriores, puede también objetivo sm_13 (o sm_1x), consulte los documentos anteriores para saber cómo usar la opción -gencode de nvcc para orientar varias arquitecturas en una única llamada a nvcc.

En cuanto al rendimiento, una cosa a tener en cuenta es que sm_1x no admite el punto flotante IEEE754, por lo que si se dirige a sm_13 y se ejecuta en un dispositivo con Capacidad Compute 2.0 o posterior, entonces puede encontrar que el punto flotante está usando la ruta menos precisa. También puede forzar la ruta menos precisa con sm_20 o posterior utilizando las opciones -ftz=true -prec-div=false -prec-sqrt=false; consulte la sección 5.4.1 en la Guía de programación CUDA para obtener más información al respecto.

+0

gracias! ¡gran respuesta! – user1281071

Cuestiones relacionadas