Alters

BigInteger - Identificación de puntos paralelos y críticos: Calculando los límites del clúster

Hola!

¿Qué tal? ¿Mucho calor? Apenas se nota, ¿verdad?
Pues nada, amigos y amigas, hoy os traigo la entrada final, antes de revisar los últimos cambios de BigInteger y ponernos, por fin, a programar.

Vamos entonces a calcular el límite de clúster, es decir, los valores máximos que podemos dar a la arquitectura CUDA para que todo funcione de manera óptima.


  • ¿No es la entrada que buscabas? Entra en el índice
  • ¿Buscas el código fuente? Aquí lo tienes

¡Vamos allá!


Lo primero es lo primero.

Vamos a ver las conexiones entre funciones.



El camino más largo que podemos encontrar es

nqrt > sBipow > sMul > pAdd > addition > carryAdd

Supongamos que definimos "n" como MAX_LENGTH / 16 - en nuestro caso, 4096 / 16 = 256.
Teniendo en cuenta que en "nqrt" abrimos un clúster a sBipow para calcular los distintos candiatos, y siguendo nuestro valor de "n"

  nqrt > sBipow (10 hilos)


Entre sBipow y sMul se abre un único clúster, por consiguiente

  nqrt > sBipow (10 hilos) > sMul (10 hilos)


Siguiendo con el desarrollo, entre sMul y pAdd se abren "n" clústeres para calcular las operaciones parciales

    nqrt > sBipow (10 hilos) > sMul (10 hilos) > pAdd (10 hilos + n clústeres)


Entre pAdd y addition, de nuevo, se abre otro grupo de "n" clústeres

  nqrt > sBipow (10 hilos) > sMul (10 hilos) > pAdd (10 hilos + n clústeres) > addition (10 hilos + n^2  clústeres)

Finalmente, entre addition y carryAdd no se generan nuevos clústeres.

En resumen, tenemos n^2 clústeres + 10 hilos (que podemos redondear a 1 clúster), y por tanto: 65.537 clústeres.

En este caso, cada hilo haría una única operación; no obstante, en caso de no tener suficientes hilos activos, podríamos redefinir "n = sqrt(4096)", y por tanto, nuestro número máximo sería 4097 (mucho más asequible).

Así que, esas son nuestras cifras! la mejor opción sería 65.537, y la segunda mejor 4097 (como última alternativa, habría la posibilidad de bajar MAX_LENGTH de 4096 a 512 ;-)).


¡Hasta la próxima!

No hay comentarios:

Publicar un comentario