xeon traduccion threading que juegos activar multithreading apache-spark parallel-processing multicore

multithreading - que - hyper threading traduccion



¿Cómo logra Spark el paralelismo dentro de una tarea en máquinas multi-core o hyper-threaded? (1)

Para responder a su pregunta de título, Spark por sí mismo no le proporciona ganancias de paralelismo dentro de una tarea. El objetivo principal del parámetro spark.task.cpus es permitir tareas de naturaleza multiproceso. Si llama a una rutina externa multiproceso dentro de cada tarea, o si desea encapsular el nivel más fino de paralelismo en el nivel de la tarea, puede establecer spark.task.cpus en más de 1.

  • Sin embargo, configurar este parámetro a más de 1 no es algo que haría con frecuencia.

    • El planificador no iniciará una tarea si el número de núcleos disponibles es menor que los núcleos requeridos por la tarea, por lo que si tu ejecutor tiene 8 núcleos y has establecido spark.task.cpus en 3, solo se lanzarán 2 tareas. .
    • Si su tarea no consume la capacidad total de los núcleos todo el tiempo, puede descubrir que usar spark.task.cpus=1 y experimentar cierta contención dentro de la tarea aún le da más rendimiento.
    • Gastos generales de cosas como GC o E / S probablemente no deberían incluirse en la configuración de spark.task.cpus , porque probablemente sería un costo mucho más estático, que no se escala linealmente con su conteo de tareas.

Pregunta 1 : Para una máquina multinúcleo (por ejemplo, 4 núcleos en total, 8 subprocesos de hardware), cuando "spark.task.cpus = 4", Spark usará 4 núcleos (1 hilo por núcleo) o 2 núcleos con hiper- ¿hilo?

La JVM casi siempre confiará en el SO para proporcionarle información y mecanismos para trabajar con CPU, y AFAIK Spark no hace nada especial aquí. Si Runtime.getRuntime().availableProcessors() ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors() Runtime.getRuntime().availableProcessors() o ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors() devuelven 4 para su procesador Intel® de doble núcleo habilitado para HT, Spark también verá 4 núcleos.

Pregunta 2 : ¿Cómo se logra este tipo de paralelismo de hardware? Traté de ver el código pero no pude encontrar nada que se comunique con el hardware o JVM para el paralelismo a nivel del núcleo. Por ejemplo, si la tarea es función de "filtro", ¿cómo se fragmenta una única tarea de filtro en múltiples núcleos o subprocesos?

Como se mencionó anteriormente, Spark no paralelizará automáticamente una tarea de acuerdo con el parámetro spark.task.cpus . Spark es principalmente un motor de paralelismo de datos y su paralelismo se logra principalmente mediante la representación de sus datos como RDD.

He estado leyendo e intentando comprender cómo utiliza Spark Framework sus núcleos en el modo autónomo . Según la documentación de Spark, el valor del parámetro " spark.task.cpus " se establece en 1 por defecto, lo que significa el número de núcleos para asignar para cada tarea.

Pregunta 1: Para una máquina multinúcleo (por ej., 4 núcleos en total, 8 subprocesos de hardware), cuando "spark.task.cpus = 4", Spark usará 4 núcleos (1 hilo por núcleo) o 2 núcleos con hiper- ¿hilo?

¿Qué sucederá si configuro "spark.task.cpus = 16", más que el número de subprocesos de hardware disponibles en esta máquina?

Pregunta 2: ¿Cómo se logra este tipo de paralelismo de hardware? Traté de ver el código pero no pude encontrar nada que se comunique con el hardware o JVM para el paralelismo a nivel del núcleo. Por ejemplo, si la tarea es función de "filtro", ¿cómo se fragmenta una única tarea de filtro en múltiples núcleos o subprocesos?

Tal vez me estoy perdiendo algo. ¿Está relacionado con el lenguaje Scala?