Ejemplo n.º 1
0
 private void DoJob(FeedJob job)
 {
     if (job != null)
     {
         job.DoJob();
     }
 }
Ejemplo n.º 2
0
        // Metodo que crea todos los trabajos de las capas
        private void CreateJobs()
        {
            // Recorre todas las capas de la red
            for (int i = 0; i < net.numLayers; i++)
            {
                int numNeurons = net.layers[i].numNeurons;
                activations[i] = new float[numNeurons];

                // Escoge en input adecuado y outpud donde se va guardar
                float[] inputL; float[] outputL;

                if (i == 0)
                {
                    inputL = input;
                }
                else
                {
                    inputL = activations[i - 1];
                }

                outputL = activations[i];

                // Checa como se van a distribuir el trabajo en los hilos
                int load = (int)Math.Floor((double)numNeurons / numWorkers);

                // Si el load promedio es menor que el load minimo, se pone el load minimo
                // esto va a causar que no todos los workers hagan algo
                if (load < minWorkLoad)
                {
                    load = minWorkLoad;
                }

                // Espicifica los indices que cada worker va a trabajar en
                int start;
                int end         = 0;
                int jobsCreated = 0;

                // Crea los jobs, conforme el load actual y el numero de neuronas pendientes
                while (jobsCreated < numWorkers && numNeurons > 0)
                {
                    jobsCreated++;

                    start = end;

                    // Si es el ultimo job asegura que se agrege todo el trabajo necesario
                    if (jobsCreated == numWorkers)
                    {
                        end       += numNeurons;
                        numNeurons = 0;
                    }
                    else
                    {
                        end        += load;
                        numNeurons -= load;
                    }

                    var job = new FeedJob(i, net.layers[i], inputL, outputL, start, end);
                    dueJobs.Enqueue(job);

                    // Debugging
                    //System.Console.WriteLine("Job created, starts: " + start + " ends: " + end);
                }
            }
        }