Concurrencia (informática): ¿Cuáles son algunas desventajas de usar CAS (Comparar e intercambiar)?

La pregunta es un poco general para producir una respuesta muy precisa, pero la resolveré … me temo que no puedo sugerir una mejor directriz para el enfoque sin bloqueo que “pensar mucho en y prueba mucho tu solución “.

Para problemas con comparar e intercambiar, solo puedo pensar en uno, pero en las condiciones adecuadas, aparece. Toda la familia de operaciones de “captación y phi” de diversos poderes expresivos (que van desde probar y configurar, atrapar y agregar, comparar y intercambiar) comparten el problema de que hacen un verdadero desayuno de cerdo. fuera de caché coherencia. En un entorno en el que existe cierta disputa por la ubicación que desea actualizar atómicamente, las copias almacenadas localmente en caché (potencialmente distribuidas por toda la máquina) requieren invalidación y vaciado / reescritura durante la operación atómica. en un procesador, lo que se convierte en una penalización grave si se hace mucho. Además, si imaginamos algún tipo de esquema de directorio u otra propiedad NUMA para grandes mem compartidas. el acceso, el almacenamiento en caché favorecería (bajo contención) a los procesadores que están cerca del banco de memoria donde se aloja el valor.

Si nos fijamos en los documentos sobre el diseño de Stanford DASH, llegaron a recomendar la implementación de un sistema de memoria completamente separado, sin caché, especialmente por el bien de las operaciones atómicas, y algunas arquitecturas comerciales siguieron su ejemplo (las máquinas Origin presentaron instrucciones como esta que funcionan solo con “memoria de depósito atómico”, completa con una política de asignación independiente torpe, IIRC).

Si utiliza atómicos sin bloqueo de rodadura (cargas vinculadas a una reescritura condicional), descubrirá el efecto de caché injusto antes mencionado si muchos procesadores están luchando por la misma dirección, pero de lo contrario, me atrevería a adivinar que existe es una cierta cantidad de compatibilidad futura en la no creación de algoritmos que requieren soporte ISA para operaciones de captación y phi. (Eso * es * una suposición, renuncias y todo, haz de eso lo que quieras).

En los casos en los que realmente no espera ver mucha disputa (es decir, la atomicidad es más una protección contra razas raras que un medio de imponer el orden en una raza muy común), sospecho que tendrá dificultades para producir cualquier evidencia cuantitativa de que uno u otro enfoque es mejor.

Sin embargo, antes de comenzar a hacer inferencias sobre esto, verifique si comparar e intercambiar está en el ISA de su máquina, o si es un compilador intrínseco tonto generar una secuencia de instrucciones equivalente. Puede que no haya tanta elección como indican las apariencias.

Para analizar las desventajas, deberá mencionar otro para comparar CAS con. Supongo que está interesado en las dificultades de implementar correctamente algoritmos sin bloqueo.

  1. Debe tener una comprensión detallada del compilador que está utilizando y qué tipo de optimización puede realizar. Para C y C ++, esto significa comprender los puntos de secuencia.
  2. Debe tener una comprensión detallada de su arquitectura de hardware y el tipo de coherencia de memoria que ofrece. Las implementaciones están vinculadas a un hardware específico y no se pueden usar directamente en otras plataformas.
  3. Es fácil para un desarrollador introducir errores al hacer modificaciones aparentemente inofensivas a un fragmento de código. Sus prácticas de codificación deben tener en cuenta eso, por ejemplo a través de revisiones sistemáticas de código.

Incluso entonces, dado que no puede evaluar de manera realista la corrección de una implementación mediante pruebas, su implementación debe ser correcta por construcción. No puede utilizar los métodos de desarrollo tradicionales en los que comienza con un prototipo que funciona principalmente y luego lo arregla mediante la depuración.
En cambio, debe comenzar con una especificación que sea claramente correcta, y debe quedar claro que la implementación es una traducción fiel de la especificación.

More Interesting

¿Cómo financió China sus proyectos de investigación civil y de defensa antes del milagro económico chino de 1991?

Cómo encontrar un tema de investigación en informática adecuado para estudiantes universitarios

¿Por qué la biología se está volviendo cada vez más relevante en TI?

¿Qué tan bueno es el curso de informática en RIT?

Si tuviera la oportunidad de investigar cualquier tema de la ciencia, ¿cuál sería?

¿Cuáles son los documentos más influyentes en el mundo de SDN (Software Defined Networking)?

¿Cuáles son las tareas diarias de un investigador de inteligencia artificial?

En el problema del embalaje del contenedor (BPP), ¿por qué el primer ajuste decreciente (FFD) es más eficiente que el primer ajuste creciente (FFI)?

¿Cuáles son algunos proyectos de investigación dignos de Intel ISEF que podrían llevarse a cabo?

¿Cuáles son los temas de investigación más interesantes en ciencias?

Para un estudiante de doctorado ambicioso en seguridad (de sistemas), ¿solo cuentan las 4 conferencias principales (nivel 1)?

¿Cuál de los IIT, IIScs e IIIT tiene la mejor investigación en el campo de la visión por computadora? ¿Cuáles son los cursos que se ofrecen en el campo?

¿Qué prácticas ágiles están respaldadas por la investigación?

¿En qué medida la reciente gran donación de Brendan Iribe, CEO de Oculus VR, al departamento de informática de la Universidad de Maryland (UMD) ayudará al departamento? Si se usa correctamente, ¿puede UMD convertirse en uno de los 5 mejores lugares para la informática?

¿Qué áreas de la informática involucran más trabajo de hardware?