A way to specify policies for a specific backend
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Read the existing controller API and the OpenBLASController implementation, then review how set_num_threads applies limits. The issue presents alternative policy hooks but does not choose a design; first determine which extension point fits the stated backend policies. Done means a selected design supports the intended policies, with tests covering the behavior.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
We have discussed multiple potential examples of having specific policies for specific libraries' backends, mostly OpenBLAS+pthreads:
- Limit to just 1 core (i.e. inline in current thread) or all cores, don't set any other limits but those two. These are really the most common ones you'd want for a shared process-level thread pool. "All cores" is a concept outside of threadpoolctl's scope, though!
- Only allow setting limits on the main thread, basically: https://github.com/joblib/joblib/pull/1871#discussion_r4340880131
The current API doesn't have great ergonomics for this though.
One approach is to push policies down into threadpoolctl. But that seems difficult, e.g. "all cores" example above (until Python grows a cpu count API that knows about cgroups, at least).
Another approach is to allow libraries (really, joblib) to hook in and define their own policies.
Potential designs
Replace default controller class with custom controller class
from joblib import cpu_count
from threadpoolctl import OpenBLASController, replace_controller
class JoblibOpenBLASController(OpenBLASController):
def set_num_threads(self, num_cores):
if self.threading_layer == "openmp":
return super().set_num_threads(num_cores)
cpus = cpu_count()
if num_cores >= 0.75 * cpus:
num_cores = cpus
else
num_cores = 1
return super().set_num_threads(num_cores)
replace_controller(OpenBLASController, JoblibOpenBLASController)
Register custom policy just for set_num_threads
from joblib import cpu_count
from threadpoolctl import OpenBLASController
def transform_num_threads(controller, num_cores):
if controller.threading_layer == "openmp":
return num_cores
cpus = cpu_count()
if num_cores >= 0.75 * cpus:
return cpus
else
return 1
return super().set_num_threads(num_cores)
OpenBLASController.set_transform_num_threads_before_setting_hook(transform_num_threads)
... other ideas?
- Lenguaje dominante
- Python
- Estrellas
- 434
- Forks
- 38
- Merge medio
- 2 d 14 h
- PR fusionados (30 d)
- 8
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de joblib/threadpoolctl
-
Make it possible to set active/spin wait behavior of LLVM/Intel OpenMP via `kmp_set_blocktime`Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
joblib/threadpoolctl#271 ·
Los mantenedores suelen responder en 1 día
-
Make it possible to inspect active/spin wait behavior of LLVM/Intel OpenMP via `kmp_get_blocktime`Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 42/100
joblib/threadpoolctl#270 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 22/100
joblib/threadpoolctl#261 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Opt-in API that has a cached `ThreadpoolController`Posiblemente ocupada @itamarst la tomó hace 29 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
joblib/threadpoolctl#254 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Speed up usage of threadpoolctlPosiblemente ocupada @itamarst la tomó hace 37 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 18/100
joblib/threadpoolctl#246 ·
Los mantenedores suelen responder en 1 día
Todos los issues de joblib/threadpoolctl
Issues similares
-
[Bug]: Revit selector reads process ids 2000-2099 as years (flaky AgentClientTests.AYearOrAProcessIdSelectsTheHost)Posiblemente ocupada @Wurschdhaud la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
pyrevitlabs/pyRevit#3817 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
521xueweihan/HelloGitHub#4074 ·
-
follow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Helm chart: allow setting ingressClassName on the IngressPosiblemente ocupada @commarla la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
pgadmin-org/pgadmin4#10658 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100