Tratando múltiples núcleos de CPU como uno

0

Hace poco tomé un curso de arquitectura computacional de licenciatura y tuve una pregunta sobre el uso de múltiples núcleos después de ver cuán denso es el campo de investigación. Estoy pensando en una idea general de cuántos núcleos se pueden usar de forma adaptativa para realizar tareas muy paralelizables y no realmente paralelizables sin depender demasiado del sistema operativo.

Entonces, mi pregunta es: dado que pueden compartir los mismos datos y buses de E / S y los mismos registros, ¿podría haber un diseño arquitectónico en el que múltiples unidades de procesamiento pasen por un conjunto de instrucciones cambiando entre unidades?

Por ejemplo, suponga que tenía dos unidades de procesamiento alimentadas con dos señales de reloj diferentes 180 grados fuera de fase. ¿Podría una unidad procesar una instrucción durante su reloj alto y luego la segunda unidad procesar la siguiente instrucción durante su reloj alto (el reloj de la primera unidad baja)? Así que la unidad 1 haría todas las instrucciones impares y la unidad 2 cada par.

Aquí hay un diagrama aproximado de lo que quiero decir con los dos relojes que se usan juntos.

¿Estoesfactible,omeestoyperdiendoalgo?RealmentenopudeencontrarmuchosobreestoenlaweboSE,yaquenoestoymuysegurodequépalabrasclaveutilizarparaestapregunta.

Estoybasandotodoestoenmicomprensióndela LC-3 architecture , aunque es un pequeño obsoleto y puede no reflejar las arquitecturas modernas.

    

2 respuestas

0
  

Dado que pueden compartir los mismos datos y buses de E / S y los mismos registros, podría haber un diseño arquitectónico donde varias unidades de procesamiento pasen por un conjunto de instrucciones

Esto generalmente se conoce como diseño "superscalar" y es usado por casi todos los procesadores modernos.

Como han señalado los otros, el problema clave es dependencias de datos ; los núcleos deben estar ejecutando instrucciones que no dependen de los resultados de los demás.

  

Una unidad podría procesar una instrucción durante su reloj alto y luego la segunda unidad procesar la siguiente instrucción durante su reloj alto

Se puede hacer

temporización de borde negativo , pero es una técnica muy impopular, porque en casi todos los casos puede reemplazarlo con un reloj dos veces más rápido y realizar operaciones solo en bordes positivos, introduciendo la tubería Retrasos donde los circuitos no pueden mantenerse al día. El único caso común que se utiliza es DDR SDRAM.

    
respondido por el pjc50
1

Todo funciona bien hasta que el núcleo azul necesita un valor de datos al comienzo de su instrucción que el núcleo rojo aún no ha terminado de producir.

Obtienes la misma clase de dificultad con un solo núcleo canalizado, donde se requiere el valor de los datos de una instrucción para la siguiente. Cuanto más profunda es la tubería, más ciclos se pierden en la parada mientras la segunda instrucción espera los resultados de la primera.

Una mitigación para el segundo problema, y también sería aplicable al primero si alguna vez intentaste construirlo, es un micro-hilo. Si los datos aún no están disponibles, trabaje en otra cosa por un tiempo.

Desafortunadamente, esto requiere que se ofrezcan múltiples procesos independientes al procesador. Esto es quizás lo que está detrás de un resurgimiento en la popularidad de un estilo de programación puramente funcional, donde las funciones sin efectos secundarios se pueden ejecutar en paralelo de forma automática sin necesidad de ser humano.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas