コード例 #1
0
void WorkerSlave::workparalel() {
    double t1, t2;
    MPI_Barrier(MPI_COMM_WORLD); /* cekam na spusteni vsech procesu */
    t1 = MPI_Wtime(); /* pocatecni cas */
 
    while (running) {
        counter++;
        if (!staciklist.empty()) {
            color = BLACK;
            // cout << myRank << ": ";
            work();
        }
        if (counter % MODULO == 0) {
            counter = 1;
            if (staciklist.empty()) {
                color = WHITE;
                sendRequestForWork(nextProcesor);
            }
            handleCommunication();
        }
    }
    
    MPI_Barrier(MPI_COMM_WORLD); /* cekam na dokonceni vypoctu */
    t2 = MPI_Wtime(); /* koncovy cas */
}
コード例 #2
0
void WorkerMaster::workparalel() {    
    double t1, t2;
    MPI_Barrier(MPI_COMM_WORLD); /* cekam na spusteni vsech procesu */
    t1 = MPI_Wtime(); /* pocatecni cas */

    while (running) {
        tokenCounter++;
        counter++;
        if (counter % MODULO == 0) {
            counter = 1;
            if (staciklist.empty()) {
                color = WHITE;
                sendRequestForWork(nextProcesor);
            } else {
                color = BLACK;
                // cout << myRank << ": ";
                work();
            }
            handleCommunication();
        }
        if (tokenCounter % TOKEN_MODULO == 0) {
            tokenCounter = 1;
            if (color == WHITE) {
                if (!waitingForToken) {
                    waitingForToken = true;
                    sendToken(color);
                }
            }
        }
    }
    //waiting for solutions
    getBestSolutionFromProcessors();
    
    result->printResult();
    delete result;
    
    smallMistakeResult->printResult();
    delete smallMistakeResult;
    
    MPI_Barrier(MPI_COMM_WORLD); /* cekam na dokonceni vypoctu */
    t2 = MPI_Wtime(); /* koncovy cas */
    printf ("Spotrebovany cas je %f.\n",t2-t1);
}
コード例 #3
0
ファイル: CTCPAdapter.cpp プロジェクト: Luxoft/SDLP
void NsSmartDeviceLink::NsTransportManager::CTCPAdapter::connectionThread(const NsSmartDeviceLink::NsTransportManager::tConnectionHandle ConnectionHandle)
{
    handleCommunication(ConnectionHandle);

    tDeviceHandle deviceHandle = InvalidDeviceHandle;

    pthread_mutex_lock(&mConnectionsMutex);

    tConnectionMap::iterator connectionIterator = mConnections.find(ConnectionHandle);

    if (mConnections.end() != connectionIterator)
    {
        STCPConnection * connection = dynamic_cast<STCPConnection*>(connectionIterator->second);

        if (0 != connection)
        {
            deviceHandle = connection->mDeviceHandle;

            delete connection;
        }
        else
        {
            LOG4CPLUS_ERROR(mLogger, "Connection " << ConnectionHandle << " is invalid");
        }

        mConnections.erase(connectionIterator);
    }
    else
    {
        LOG4CPLUS_ERROR(mLogger, "Connection " << ConnectionHandle << " was not found in connections map");
    }

    for (connectionIterator = mConnections.begin(); connectionIterator != mConnections.end(); ++connectionIterator)
    {
        SConnection * connection = connectionIterator->second;

        if (0 != connection)
        {
            if (deviceHandle == connection->mDeviceHandle)
            {
                deviceHandle = InvalidDeviceHandle;
                break;
            }
        }
    }

    pthread_mutex_unlock(&mConnectionsMutex);

    if (InvalidDeviceHandle != deviceHandle)
    {
        LOG4CPLUS_INFO(mLogger, "No connections left for device " << deviceHandle << ". Deleting device");

        pthread_mutex_lock(&mDevicesMutex);

        tDeviceMap::iterator deviceIterator = mDevices.find(deviceHandle);

        if (mDevices.end() != deviceIterator)
        {
            delete deviceIterator->second;

            mDevices.erase(deviceIterator);
        }

        pthread_mutex_unlock(&mDevicesMutex);

        updateClientDeviceList();
    }
}