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())); }
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()); } }
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(); }
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(); }