bool executeIntern()
        {
            switch (state)
            {
            case Init:
                break;
            case WaitForBash:

                if (NULL == Environment<>::get().Manager().getITaskIfNotFinished(initDependency.getTaskId()) )
                {
                    state = InitSend;
                    sendEvent = buffer.getGridBuffer().asyncSend(EventTask(), exchange, initDependency);
                    state = WaitForSendEnd;
                }

                break;
            case InitSend:
                break;
            case WaitForSendEnd:
                if (NULL == Environment<>::get().Manager().getITaskIfNotFinished(sendEvent.getTaskId()))
                {
                    state = Finished;
                    return true;
                }
                break;
            case Finished:
                return true;
            default:
                return false;
            }

            return false;
        }
 void activateChecks()
 {
     canBeChecked = true;
     this->activate();
     
     Environment<>::get().Manager().addTask(this);
     __setTransactionEvent(EventTask(this->getId()));
 }
Exemple #3
0
 void init(bool sizeOnDevice, bool buildDeviceBuffer = true, bool buildHostBuffer = true)
 {
     for (uint32_t i = 0; i < 27; ++i)
     {
         sendExchanges[i] = NULL;
         receiveExchanges[i] = NULL;
         /* fill array with valid empty events to avoid side effects if
          * array is accessed without calling hasExchange() before usage */
         receiveEvents[i] = EventTask();
         sendEvents[i] = EventTask();
     }
     if (buildDeviceBuffer)
     {
         this->deviceBuffer = new DeviceBufferIntern<TYPE, DIM > (gridLayout.getDataSpace(), sizeOnDevice);
     }
     if (buildHostBuffer)
     {
         this->hostBuffer = new HostBufferIntern<TYPE, DIM > (gridLayout.getDataSpace());
     }
 }
Exemple #4
0
    EventTask asyncReceive(EventTask serialEvent, uint32_t recvEx)
    {
        if (hasReceiveExchange(recvEx))
        {
            __startAtomicTransaction(serialEvent + receiveEvents[recvEx]);
            receiveEvents[recvEx] = receiveExchanges[recvEx]->startReceive();

            __endTransaction();
            return receiveEvents[recvEx];
        }
        return EventTask();
    }
Exemple #5
0
 EventTask asyncSend(EventTask serialEvent, uint32_t sendEx, EventTask &gpuFree)
 {
     if (hasSendExchange(sendEx))
     {
         __startAtomicTransaction(serialEvent + sendEvents[sendEx]);
         sendEvents[sendEx] = sendExchanges[sendEx]->startSend(gpuFree);
         __endTransaction();
         /* add only the copy event, because all work on gpu can run after data is copyed
          */
         return gpuFree;
     }
     return EventTask();
 }