void CGeneticStrategyCLv2::nextGeneration( CRandom* rand )
{
	size_t bufSize = (2 * pAntCommon->statesCount() * stateSize + 4)*N*M;
    size_t cacheSize = N*M*sizeof(float);
    try
    {
        //queue.enqueueNDRangeKernel( kernelGen, cl::NullRange, cl::NDRange(N, M), cl::NullRange );
        boost::this_thread::disable_interruption di;
        queue.enqueueNDRangeKernel( kernelGen, cl::NullRange, globalRange, localRange );

        queue.finish();
       
        queue.enqueueReadBuffer( statesBufCL2, CL_FALSE, 0, bufSize, buffer );
        queue.enqueueReadBuffer( statesBufCL1, CL_FALSE, 0, bufSize, buffer2 );
        queue.enqueueReadBuffer( resultCache, CL_FALSE, 0, 2*cacheSize, cachedResults );
    }catch( cl::Error& error )
    {
        Tools::throwDetailedFailed( "[FAILED] Failed to get next generation", streamsdk::getOpenCLErrorCodeStr( error.err() ), &logger );
    }catch( std::exception& ex )
    {
        int k = 0;
        throw ex;
    }

    //ToDo: count buffer, buffer2
    boost::mutex& mutex = result->getMutex();
    boost::mutex::scoped_lock lock(mutex);
    queue.finish();
    addGeneration( buffer2, cachedResults );
    addGeneration( buffer, cachedResults + N*M );
}
Example #2
0
/* Creation de n generations si ce n'est pas deja fait */
void createGen(Generations* generations, Lsystem lsystem, int n)
{
    if (n>lenghtGen(generations)-1){
        Generations* l=generations;
        while (l->next!=NULL)
        {
           l = l->next;
        }
        while (n!=lenghtGen(generations)-1){
        generations = addGeneration(generations,nextGen(l->generation,lsystem));
        l = l->next;
        }
    }
}
Example #3
0
//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){
    addGeneration();
}