¿En general? No. A veces, en la luz correcta? Sí.
En primer lugar, debe darse cuenta de que las unidades de estado sólido todavía están en gran flujo en este momento. La tecnología no es madura, en el sentido de que los discos de diferentes proveedores se comportan de manera muy diferente cuando se mide el rendimiento detallado.
Dicho esto, los dos puntos más comunes en los que los SSD difieren lo suficientemente importante de los platos son:
- ¿Qué algoritmo debo usar para codificar un solucionador de Sudoku usando la teoría de grafos?
- Suponiendo una memoria infinita, ¿siempre es posible aumentar la complejidad de cualquier programa sin introducir redundancia?
- ¿Qué función se usa para aceptar números aleatorios entre límite inferior y superior en C?
- ¿Puede una computadora generar un número verdaderamente aleatorio?
- ¿Los árboles binarios / árboles de búsqueda binaria se usan realmente en la práctica o se usan principalmente con fines didácticos?
- Los SSD no tienen tiempo de búsqueda, por lo que el acceso aleatorio y el acceso secuencial están mucho más cerca (aunque aún compite con el tamaño del bloque si sus accesos aleatorios son pequeños)
- Los SSD deben borrar un bloque antes de escribirlo. El FTL nivela el desgaste, por lo que no verá esto hasta que sus escrituras “llenen” la unidad, pero eventualmente se pondrá al día con la recolección de basura de la unidad y verá una caída masiva del rendimiento ya que las escrituras realmente bloquean los borrados.
El modelo común para evaluar algoritmos de memoria externa (algoritmos basados en disco) es el modelo DAM, donde los bloques de tamaño B se barajan entre un disco de tamaño infinito y una memoria de tamaño M (para que pueda colocar bloques M / B en la memoria) . El rendimiento de un algoritmo se mide en el número de transferencias de memoria, y el cálculo de los datos en memoria se considera libre. También existe el modelo ajeno a la memoria caché, donde B y M son desconocidos para el algoritmo, pero se usan de la misma manera al determinar el rendimiento.
Notará que al modelo DAM no le importa si sus accesos son aleatorios o secuenciales, de hecho, la mayoría de las veces suponemos que cada transferencia de memoria puede requerir una búsqueda. Si todos sus datos están en una matriz contigua, decimos que cuesta N / B transferencias de memoria para leerlos, a pesar de que es solo una búsqueda y luego un montón de lecturas secuenciales. El modelo DAM no ve esto de manera diferente a leer las hojas N / B de un árbol B, que podrían estar dispersas por el disco. También tenga en cuenta que los SSD todavía se ocupan en tamaños de bloque. Entonces, un árbol B es tan eficiente en un SSD como en un plato, desde el lado del análisis algorítmico de las cosas. Esto aborda la diferencia # 1.
La diferencia # 2 es donde las cosas se ponen difíciles. Si bien el mismo análisis asintótico se aplica a las SSD incluso cuando envejecen (la constante empeora), nos preocupa la vida útil de las SSD. En un SSD, debe evitar escribir en el lugar tanto como pueda, porque cuando lo hace, deja basura que necesita ser limpiada (el FTL lo hará escribir en un lugar diferente en la unidad y marcará el datos antiguos para el GC, en lugar de permitirle escribir en el lugar). Por lo tanto, las estructuras de datos de solo agregado y las estructuras de datos optimizadas para escritura (conector descarado: como Fractal Trees) son mucho más suaves para su SSD. Por supuesto, estas estructuras de datos generalmente también son mejores que otras estructuras (como los árboles B) en platos, por lo que se podría decir que están optimizadas en ambos.
En resumen, los algoritmos como los árboles B, que están “optimizados” para platos, no son buenos para los SSD, aunque su rendimiento asintótico no es diferente. Hay algoritmos que están mejor optimizados para SSD, pero de todos modos estos también son mejores en platos, por lo que no hay mucha distinción.