Alters

BigInteger - Identificación de puntos paralelos y críticos: Raíz de BigInteger

Hola a todos y todas!

Como siempre, aquí ando, a vueltas... "disfrutando" de este fin de semana... Calor y Confinamiento, la combinación ideal para estas vacaciones, ¿verdad?

Por suerte (o desgracia) para vosotros, eso me da cierto tiempo para escribir, así que... Otra entrada para BigInteger!

Como os prometí en la entrada anterior, en esta vamos a ver algo más de contenido (la potenciación quedó un poco escasa, lo reconozco), así que vamos a analizar los puntos críticos de la operación de raíz de BigInteger.


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

¡Vamos allá!


Recordemos que la obtención de la raíz se hacía a través del teorema de Bolzano (un sistema parecido al usado en la división), por lo que hay una parte importante de la función que vamos a poder paralelizar, dándonos un buen rendimiento.


El algoritmo a seguir sería el siguiente:

  • Validamos "a"
  • Calculamos el primer valor base (a través de bipow, que ya hemos optimizado)
  • Buscamos el exceso de manera paralela
  • Sincronizamos vía semáforo
  • Recalculamos la base 
  • Normalizamos el operando (a través de pSub, que ya hemos optimizado)
  • Repetimos, con un dígito menos

De esta explicación, el punto crítico es el cálculo del exceso de manera paralela. En pocas palabras, la idea es llenar un BIT de nuestra base, y comparar BIT con el valor buscado.

Con esto, podemos incluso definir un esbozo de función, que dado un BIT, y un número, nos indique en qué índice tenemos el cambio de valor, como ya explicamos en la División por CUDA.

Como veis, la ventaja de ir hacia funciones más "altas" es que partimos de bases previas, y por tanto, cada vez es más sencillo optimizar las funciones, ya que partimos de una base bien estudiada.

Y con esto terminamos las funciones de cálculo. Ahora, solo nos queda revisar las funciones de apoyo, y pasaremos a la implementación en CUDA.


Hasta la próxima!

No hay comentarios:

Publicar un comentario