Las personas han dado excelentes respuestas aquí que responden directamente a tu pregunta, pero me gustaría dar una respuesta complementaria para explicar en mayor detalle por qué las GPU son tan poderosas para esto y otras aplicaciones.
Como algunos han señalado, las GPU están especialmente diseñadas para ser rápidas con operaciones matemáticas, ya que dibujar cosas en su pantalla es todo matemático (trazar posiciones de vértice, manipulaciones de matrices, mezclar valores RBG, leer espacio de texturas, etc.). Sin embargo, esta no es realmente la principal fuerza impulsora detrás de la ganancia de rendimiento. La principal fuerza motriz es el paralelismo. Una CPU de gama alta puede tener 12 núcleos lógicos, donde un high end GPU estaría empaquetando algo así como 3072.
Para mantenerlo simple, el número de núcleos lógicos es igual al número total de operaciones simultáneas que pueden tener lugar en un conjunto de datos determinado. Digamos, por ejemplo, que quiero comparar u obtener la suma de los valores de dos matrices. Digamos que la longitud de la matriz es 3072. En la CPU, podría crear una nueva matriz vacía con la misma longitud, luego generar 12 hebras que iterarían entre las dos matrices de entrada en un paso igual al número de hebras (12) y al mismo tiempo, volcar la suma de los valores en la tercera matriz de salida. Esto llevaría 256 iteraciones en total.
Sin embargo, con la GPU, pude desde la CPU cargar esos mismos valores en la GPU y luego escribir un kernel que podría tener 3072 subprocesos generados contra ese kernel al mismo tiempo y completar toda la operación en una sola iteración.
Esto es útil para trabajar con cualquier información que pueda, por su naturaleza, admitir que se "trabaje" de forma paralela. Lo que estoy tratando de decir es que esto no se limita a las herramientas hacking / evil. Esta es la razón por la que GPGPU se está volviendo cada vez más popular, cosas como OpenCL, OpenMP y así han ocurrido porque la gente tiene nos dimos cuenta de que nosotros, los programadores, estamos atascados en nuestras pobres y pequeñas CPU con trabajo cuando hay una planta de energía masiva en la PC que apenas se usa por contraste. No es solo para el software de craqueo. Por ejemplo, una vez escribí un programa CUDA elaborado que tomó la historia de la lotería durante los últimos 30 años y calculé las probabilidades de ganar / ganar con boletos de varias combinaciones de todos los números posibles con un número variable de juegos por boleto, porque pensé que era una mejor opción. idea que usar estas grandes habilidades para conseguir un trabajo (esto es para las risas, pero lamentablemente también es cierto).
Aunque no necesariamente apoyo a las personas que realizan la presentación, esta presentación ofrece una presentación muy simple pero bastante una ilustración precisa de por qué la GPU es tan buena para cualquier cosa que pueda ser paralelizada, especialmente sin ningún tipo de bloqueo (que sostiene otros hilos, disminuyendo en gran medida los efectos positivos del paralelismo).