Es seguro para establecer los elementos de un unitialised matriz a 0 con CUBLAS / CUSPARSE operaciones?

StackOverflow https://stackoverflow.com//questions/9684519

Pregunta

Cuando, por ejemplo,la acumulación de los resultados de las diferentes matriz-vector-multiplicaciones (que es lo que haces en BLAS incluso cuando sólo hay una acumulación de elemento), que formalmente se inicia con un vector cero.Pero no hay sobrecarga-de manera libre para asignar directamente una matriz de ceros en CUDA memoria del dispositivo (o es?), así que la solución que salta a la mente es simplemente tomar un array con cifras arbitrarias y, en lugar de inicializar a 0, pasar un valor beta = 0. a la primera llamada de cublas<t>gemv o cusparse<t>csrmv.Después de todo, si se tiene que el parámetro "¿por qué no usarlo".

Es este

  • una buena idea?O es el caso β = 1 optimizado de tal manera que da en general un mejor rendimiento para inicializar una matriz a 0 y, a continuación, utilice una llamada cusparseDcsrmv(..., 1., zeroes_array)?
  • seguro?Ingenuamente, flotante puntos como representaciones de ℝ elementos deben cumplir x ⋅ 0 = 0 ∀ x, pero este ingenuo tratamiento es, por supuesto, a menudo, en lugar mortal cuando se trata con la flotación de los puntos.Estoy bastante seguro de que es seguro cuando la matriz se utilizó anteriormente para otras operaciones con el mismo tipo de datos, donde el resultado fue de buen comportamiento, pero también es seguro para un unititialised bloque de recién asignada del dispositivo de memoria?

Estoy principalmente interesado en la escasa caso, ya que para las matrices densas de la O( n2 ) la complejidad de la multiplicación hace innecesaria la razón demasiado sobre el rendimiento de la O( n ) la asignación de los vectores.

¿Fue útil?

Solución

Esto debe ser perfectamente seguro, y se hace todo el tiempo;cualquier paquete que no se comportan correctamente cuando β=0 tendría un grave error.

El cusparse documentación para csrmv, en particular, dice que "si la beta es cero, y no tiene que ser una entrada válida", y LAPACK dice algo similar para *gemv ("Cuando la BETA se suministra como cero, Y no necesita ser configurado en la entrada")

Como para optimizaciones, podría darse el caso de que el beta=1 y beta=0 tiene particular, rutas de código optimizado para cualquier aplicación, pero puede que no;probablemente si uno no lo hace, tampoco.

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