1 votos

Práctica del uso de la programación paralela en las bibliotecas numéricas

Esta es una pregunta suave, y probablemente también de opinión.

Supongamos que estoy escribiendo una biblioteca de álgebra lineal numérica para trabajar con datos financieros. Mis objetivos son:

  1. Como trabajo con big data, quiero hacerlo lo más rápido posible utilizando la computación paralela.
  2. Quiero que mis colegas usen esta biblioteca sin entender/ajustar el paralelismo debajo de las funciones.

Las preguntas resultantes son:

  1. ¿Es una buena idea hacer del paralelismo el comportamiento por defecto? Por ejemplo sum(vector) para paralelizar la suma sin preguntar al usuario.
  2. Si es así, ¿hay alguna regla general que cubra el comportamiento por defecto de la división de tareas entre los procesadores? Es decir, ¿cuántos procesadores debería utilizar?

Preguntando en QuantFinance ya que estoy especialmente interesado en como la gente del sector aborda esto. Gracias de antemano.

2voto

Charles Chen Puntos 183

Soy un gran fan de tabla de datos . Los autores de data.table pensaron mucho en el rendimiento de los grandes conjuntos de datos y, gracias a su popularidad y antigüedad, han recibido muchos comentarios y han adquirido mucha experiencia a la hora de sopesar las alternativas. Sin duda, te recomiendo que te familiarices con sus ideas.

Permiten establecer el número de hilos mediante la función setDTthreads() :

Establece y obtiene el número de hilos a utilizar en las funciones de 'data.table' que se paralelizan con OpenMP. El número de hilos se inicializado cuando 'data.table' se carga por primera vez en la sesión de R utilizando variables opcionales del entorno (sic, PR hecho). A partir de entonces, el número de hilos puede cambiar llamando a 'setDTthreads'. Si se cambia una variable de entorno Si cambias una variable de entorno usando 'Sys.setenv' tendrás que llamar a 'setDTthreads' de nuevo para volver a leer las variables de entorno.

Esto es específico del trabajo con un paquete de R, pero creo que el principio aplicado es válido. Hazlo configurable en tiempo de ejecución y a través de variables de entorno y establece una variable por defecto sensata. En el caso de data.table el valor por defecto es bastante codicioso lo que tiene sentido para la gente que hace el análisis en su propia máquina. También es inteligente en el sentido de que detecta que el proceso está bifurcado: si detecta que el proceso está bifurcado, el paralelismo se elimina porque es probable que el paralelismo se aplique a un nivel superior y tratar de utilizar todos los núcleos en todos los hilos llevaría a una contención muy mala.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X