2012-09-12 10 views
5

Soy nuevo en computación paralela en matlab. Tengo una función que crea un clasificador (SVM) y me gustaría probarlo con varios conjuntos de datos. Tengo una estación de trabajo de 2 núcleos, así que me gustaría ejecutar la prueba en paralelo. Alguien me puede explicar la diferencia entre: SPMD vs. Parfor

dataset_array={dataset1, dataset2} 
matlabpool open 2 
spmd 
     my_function(dataset(labindex)); 
end 

y

dataset_array={dataset1, dataset2} 
matlabpool open 2 
parfor i:1=2 
     my_function(dataset(i)); 
end 

Respuesta

10

spmd es una región paralela, mientras parfor es un paralelo de bucle. La diferencia es que en la región spmd tiene una flexibilidad mucho mayor cuando se trata de tareas que puede realizar en paralelo. Puede escribir un bucle for, puede operar en arrays y vectores distribuidos. Puede programar un flujo de trabajo completo, que en general consiste en más que bucles. Esto tiene un precio: necesitas saber más sobre cómo distribuir el trabajo y los datos entre tus hilos. Paralelizar el bucle, por ejemplo, requiere dividir explícitamente los rangos de índice de bucle entre los trabajadores (lo que hizo en su código usando labindex) y tal vez crear matrices distribuidas.

parfor, por otro lado, solo hace esto: un bucle forzado en paralelo. Automáticamente paralelizado, puede agregar, por lo que el trabajo se divide entre los trabajadores por MATLAB.

Si solo desea ejecutar un solo ciclo en paralelo y luego trabajar en el resultado en su cliente local, debe usar parfor. Si desea paralelizar todo su programa MATLAB, tendrá que lidiar con las complejidades de distribución spmd y trabajo.

+0

Gracias por la explicación. Por lo tanto, si no me equivoco, los ejemplos que escribí producen los mismos resultados de diferentes maneras, ¿no? –

+1

@ Lazza87 Sí. En este caso, no hay diferencia, puede usar ambos métodos. – angainor

Cuestiones relacionadas