Fehler bei boost::thread_group-Erstellung
-
ich wollte mein neuronales netz parallelisieren und zwar mit boost::threads.
ich bin mir nicht ganz sicher ob ich die boost-lib richtig benutze, aber ich bekomme bei folgendem beispiel den fehler:terminate called after throwing an instance of 'boost::thread_resource_error' what(): boost::thread_resource_errorvoid Net::RunForward() { for(unsigned int i = 1; i < m_lLayers.size(); i++) { SimpleLayer *curLayer = m_lLayers[i].first; for(unsigned int j = 0; j < curLayer->GetLayer().size(); j++) { //curLayer->GetLayer()[j]->CalcNeuronValue(); Neuron *pNeuron = curLayer->GetLayer()[j]; if(pNeuron != 0) m_Threads.create_thread(boost::bind(&Neuron::CalcNeuronValue, pNeuron) ); } } }die funktion läuft das netz von vorne nach hinten durch.
die neuronen sind in schichten organisiert, und ich zähle jedes neuron in jeder schicht durch und rufe eine funktion auf, die dann eine summierung durchführt.
der thread soll also die memberfunktion "CalcNeuronValue" von neuron "pNeuron" ausführen.
ziel war es halt die komplette schicht parallel auszurechnen, anstatt für jedes neuron nacheinander, da die rechenoperationen je nach vorgängerschichtgröße recht lang werden können.
-
dgrat schrieb:
ziel war es halt die komplette schicht parallel auszurechnen, anstatt für jedes neuron nacheinander, da die rechenoperationen je nach vorgängerschichtgröße recht lang werden können.
Warum? So ein NN hat doch normal nur 3-5 Schichten und pro Schicht nicht all zu viele Neuronen. Da braucht das Thread erstellen doch länger als das ausrechnen.
-
mein netz hat 3 schichten und viele neuronen. pro neuron in derhidden existieren circa 6000 verbindungen pro eingabeschicht. und selbst wenn nicht, könnte ich circa jeweils 8 neuronen-operationen in einen thread packen, denn ich habe 100-500 neuronen in der verdeckten, da sonst der erkennungserfolg zurück geht. andererseits habe ich nicht nach hilfe zum neuronalem netz gefragt sondern zum threading.
-
habe den fehler, bei zu vielen threads kommt dieser fehler, ich habe jetzt auf 8 parallele begrenzt.