publicidad

inglés

In general, a scheduling algorithm is a method to determine an efficient execution order for a set of tasks of a given duration on a given set of execution units. Typically, the number of tasks is much larger than the number of execution units. There may be dependencies between the tasks, leading to precedence constraints. Since the number of execution units is fixed, there are also capacity constraints. Both types of constraints restrict the schedules that can be used. Usually, the scheduling algorithm considers the situation that each task is executed sequentially by one processor or core (single-processor tasks). But in some models, a more general case is also considered which assumes that several execution units can be employed for a single task (parallel tasks), thus leading to a smaller task execution time. The overall goal of a scheduling algorithm is to find a schedule for the tasks which defines for each task a starting time and an execution unit such that the precedence and capacity constraints are fulfilled and such that a given objective function is optimized. Often, the overall completion time (also called makespan) should be minimized. This is the time elapsed between the start of the first task and the completion of the last task of the program. For realistic situations, the problem of finding an optimal schedule is NP-complete or NP-hard [62]. A good overview of scheduling algorithms is given in [24]. Often, the number of processes or threads is adapted to the number of execution units such that each execution unit performs exactly one process or thread, and there is no migration of a process or thread from one execution unit to another during execution. In these cases, the terms “process” and “processor” or “thread” and “core” are used interchangeably. 3.3 Levels of Parallelism The computations performed by a given program provide opportunities for parallel execution at different levels: instruction level, statement level, loop level, and function level. Depending on the level considered, tasks of different granularity result. Considering the instruction or statement level, fine-grained tasks result when a small number of instructions or statements are grouped to form a task. On the other hand, considering the function level, tasks are coarse grained when the functions used to form a task comprise a significant amount of computations. On the loop level medium-grained tasks are typical, since one loop iteration usually consists of several statements. Tasks of different granularity require different scheduling methods to use the available potential of parallelism. In this section, we give a short overview of the available degree of parallelism at different levels and how it can be exploited in different programming models. 3.3.1 Parallelism at Instruction Level Multiple instructions of a program can be executed in parallel at the same time, if they are independent of each other. In particular, the existence of one of the following data dependencies between instructions I1 and I2 inhibits their parallel execution: • Flow dependency (also called true dependency): There is a flow dependency from instruction I1 to I2, if I1 computes a result value in a register or variable which is then used by I2 as operand. • Anti-dependency: There is an anti-dependency from I1 to I2, if I1 uses a register or variable as operand which is later used by I2 to store the result of a computation. • Output dependency: There is an output dependency from I1 to I2, if I1 and I2 use the same register or variable to store the result of a computation. Figure 3.2 shows examples of the different dependency types [179]. In all three cases, instructions I1 and I2 cannot be executed in opposite order or in parallel, since this would result in an erroneous computation: For the flow dependence, I2 would use an old value as operand if the order is reversed. For the anti-dependence, I1 would use the wrong value computed by I2 as operand, if the order is reversed. For the output dependence, the subsequent instructions would use a wrong value for R1, if the order is reversed. The dependencies between instructions can be illustrated by a data dependency graph. Figure 3.3 shows the data dependency graph for a sequence of instructions.

español

En general, un algoritmo de planificación es un método para determinar un orden de ejecución eficiente para un conjunto de tareas de una duración determinada en un conjunto dado de unidades de ejecución. Normalmente, el número de tareas es mucho mayor que el número de unidades de ejecución. Puede haber dependencias entre las tareas, lo que lleva a restricciones de precedencia. Dado que el número de unidades de ejecución es fijo, también hay restricciones de capacidad. Ambos tipos de restricciones restringen los horarios que pueden usarse. Normalmente, el algoritmo de planificación considera la situación en la que cada tarea se ejecuta de forma secuencial por un procesador o núcleo (tareas de un solo procesador). Pero en algunos modelos, también se considera un caso más general que asume que se pueden emplear varias unidades de ejecución para una sola tarea (tareas paralelas), lo que lleva a un tiempo de ejecución de tareas más pequeño. El objetivo general de un algoritmo de planificación es encontrar un cronograma para las tareas que defina para cada tarea un tiempo de inicio y una unidad de ejecución de manera que se cumplan las restricciones de precedencia y capacidad y se optimice una función objetivo determinada. A menudo, el tiempo total de finalización (también llamado makepan) debe minimizarse. Este es el tiempo transcurrido entre el inicio de la primera tarea y la finalización de la última tarea del programa. Para situaciones realistas, el problema de encontrar un programa óptimo es NP-completo o NP-hard [62]. En [24] se ofrece una buena descripción de los algoritmos de programación.A menudo, el número de procesos o subprocesos se adapta al número de unidades de ejecución, de modo que cada unidad de ejecución realiza exactamente un proceso o subproceso, y no hay migración de un proceso o subproceso de una unidad de ejecución a otra durante la ejecución. En estos casos, los términos "proceso" y "procesador" o "hilo" y "núcleo" se usan indistintamente. 3.3 niveles de paralelismo Los cálculos realizados por un programa dado brindan oportunidades para la ejecución paralela en diferentes niveles: nivel de instrucción, nivel de instrucción, nivel de bucle y nivel de función. Dependiendo del nivel considerado, resultan tareas de granularidad diferente. Teniendo en cuenta el nivel de instrucción o instrucción, las tareas de grano fino resultan cuando se agrupan un pequeño número de instrucciones o instrucciones para formar una tarea. Por otro lado, considerando el nivel de la función, las tareas son de grano grueso cuando las funciones utilizadas para formar una tarea comprenden una cantidad significativa de cálculos. En el nivel de bucle, las tareas de grano medio son típicas, ya que una iteración de bucle generalmente consta de varias declaraciones. Las tareas de diferente granularidad requieren diferentes métodos de programación para utilizar el potencial disponible del paralelismo. En esta sección, brindamos una breve descripción del grado de paralelismo disponible en diferentes niveles y cómo puede ser explotado en diferentes modelos de programación.3.3.1 Paralelismo a nivel de instrucción Se pueden ejecutar varias instrucciones de un programa en paralelo al mismo tiempo, si son independientes entre sí. En particular, la existencia de una de las siguientes dependencias de datos entre las instrucciones I1 e I2 inhibe su ejecución paralela: • Dependencia de flujo (también llamada dependencia verdadera): hay una dependencia de flujo de la instrucción I1 a I2, si I1 calcula un valor de resultado en un registro o variable que I2 usa como operando. • Anti-dependencia: hay una anti-dependencia de I1 a I2, si I1 usa un registro o una variable como operando, que luego I2 usa para almacenar el resultado de un cálculo. • Dependencia de salida: hay una dependencia de salida de I1 a I2, si I1 e I2 usan el mismo registro o variable para almacenar el resultado de un cálculo. La Figura 3.2 muestra ejemplos de los diferentes tipos de dependencia [179]. En los tres casos, las instrucciones I1 e I2 no se pueden ejecutar en orden opuesto o en paralelo, ya que esto daría como resultado un cálculo erróneo: para la dependencia del flujo, I2 usaría un valor antiguo como operando si se invirtiera el orden. Para la anti-dependencia, I1 usaría el valor incorrecto calculado por I2 como operando, si se invierte el orden. Para la dependencia de salida, las instrucciones subsiguientes usarían un valor incorrecto para R1, si se invierte el orden. Las dependencias entre instrucciones se pueden ilustrar con un gráfico de dependencia de datos.La Figura 3.3 muestra el gráfico de dependencia de datos para una secuencia de instrucciones.

publicidad

Condiciones del Servicio

Asegúrese de cumplir con las reglas de redacción y el idioma de los textos que traducirá. Una de las cosas importantes que los usuarios deben tener en cuenta cuando usan el sistema de diccionario Traductor.com.ar es que las palabras y textos utilizados al traducir se guardan en la base de datos y se comparten con otros usuarios en el contenido del sitio web. Por esta razón, le pedimos que preste atención a este tema en el proceso de traducción. Si no desea que sus traducciones se publiquen en el contenido del sitio web, póngase en contacto con info@traductor.com.ar por correo electrónico. Tan pronto como los textos relevantes serán eliminados del contenido del sitio web.


Política de Privacidad

Los proveedores, incluido Google, utilizan cookies para mostrar anuncios relevantes ateniéndose las visitas anteriores de un usuario a su sitio web o a otros sitios web. El uso de cookies de publicidad permite a Google y a sus socios mostrar anuncios basados en las visitas realizadas por los usuarios a sus sitios web o a otros sitios web de Internet. Los usuarios pueden inhabilitar la publicidad personalizada. Para ello, deberán acceder a Preferencias de anuncios. (También puede explicarles que, si no desean que otros proveedores utilicen las cookies para la publicidad personalizada, deberán acceder a www.aboutads.info.)