bool Layer3::registerLayer2 (Layer2 * l2) { TRACEPRINTF (t, 3, this, "registerLayer2 %08X", l2); if (! busmonitor () || ! l2->enterBusmonitor ()) if (! l2->Open ()) { TRACEPRINTF (t, 3, this, "registerLayer2 %08X = 0", l2); return 0; } layer2.resize (layer2() + 1); layer2[layer2 () - 1] = l2; TRACEPRINTF (t, 3, this, "registerLayer2 %08X = 1", l2); return 1; }
bool Layer3::deregisterLayer2 (Layer2 * l2) { unsigned i; for (i = 0; i < layer2 (); i++) if (layer2[i] == l2) { layer2[i] = layer2[layer2 () - 1]; layer2.resize (layer2 () - 1); TRACEPRINTF (t, 3, this, "deregisterLayer2 %08X = 1", l2); return 1; } TRACEPRINTF (t, 3, this, "deregisterLayer2 %08X = 0", l2); return 0; }
bool Layer3::registerIndividualCallBack (L_Data_CallBack * c, Individual_Lock lock, eibaddr_t src, eibaddr_t dest) { unsigned i; TRACEPRINTF (t, 3, this, "registerIndividual %08X %d from %s to %s", c, lock, FormatEIBAddr(src)(), FormatEIBAddr(dest)()); if (mode == 1) return 0; for (i = 0; i < individual (); i++) if (lock == Individual_Lock_Connection && individual[i].src == src && individual[i].lock == Individual_Lock_Connection) { TRACEPRINTF (t, 3, this, "registerIndividual locked %04X %04X", individual[i].src, individual[i].dest); return 0; } for (i = 0; i < individual (); i++) { if (individual[i].dest == dest) break; } if (i == individual () && dest) for (int i = 0; i < layer2 (); i++) layer2[i].l2->addAddress (dest); individual.resize (individual () + 1); individual[individual () - 1].cb = c; individual[individual () - 1].dest = dest; individual[individual () - 1].src = src; individual[individual () - 1].lock = lock; TRACEPRINTF (t, 3, this, "registerIndividual %08X = 1", c); return 1; }
bool Layer3::registerBusmonitor (L_Busmonitor_CallBack * c) { TRACEPRINTF (t, 3, this, "registerBusmontior %08X", c); if (individual ()) return 0; if (group ()) return 0; if (broadcast ()) return 0; if (mode == 0) for (int i = 0; i < layer2 (); i++) { layer2[i].l2->Close (); if (!layer2[i].l2->enterBusmonitor ()) { while(i--) { layer2[i].l2->leaveBusmonitor (); layer2[i].l2->Open (); } return 0; } } mode = 1; busmonitor.resize (busmonitor () + 1); busmonitor[busmonitor () - 1].cb = c; TRACEPRINTF (t, 3, this, "registerBusmontior %08X = 1", c); return 1; }
bool Layer3::deregisterIndividualCallBack (L_Data_CallBack * c, eibaddr_t src, eibaddr_t dest) { unsigned i; for (i = 0; i < individual (); i++) if (individual[i].cb == c && individual[i].src == src && individual[i].dest == dest) { individual[i] = individual[individual () - 1]; individual.resize (individual () - 1); TRACEPRINTF (t, 3, this, "deregisterIndividual %08X = 1", c); for (i = 0; i < individual (); i++) { if (individual[i].dest == dest) return 1; } if (dest) for (i = 0; i < layer2 (); i++) layer2[i].l2->removeAddress (dest); return 1; } TRACEPRINTF (t, 3, this, "deregisterIndividual %08X = 0", c); return 0; }
bool Layer3::registerLayer2 (Layer2Interface * l2) { TRACEPRINTF (t, 3, this, "registerLayer2 %08X", l2); if (!(mode ? l2->enterBusmonitor () : l2->Open ())) { TRACEPRINTF (t, 3, this, "registerLayer2 %08X = 0", l2); return 0; } layer2.resize (layer2() + 1); layer2[layer2 () - 1].l2 = l2; layer2[layer2 () - 1].l3 = this; if (running) layer2[layer2 () - 1].Start (); TRACEPRINTF (t, 3, this, "registerLayer2 %08X = 1", l2); return 1; }
//Calls layer 3, 2,and 1 within layer 4 struct l2pdu* transmit(char*buf, char pos) { struct l3pdu* strptr3; struct l2pdu* strptr2; struct l2pdu* strptr1; strptr3 = layer3(strptr2,buf,pos); //empty structures passed in to satisfy parameter requirements strptr2= layer2(strptr3,strptr2,pos); strptr1 = layer1(strptr2,pos); return strptr1; }
void Layer3::send_L_Data (L_Data_PDU * l) { TRACEPRINTF (t, 3, this, "Send %s", l->Decode ()()); if (l->source == 0) l->source = defaultAddr; for (int i = 0; i < layer2 (); i++) if (l->l2 != layer2[i].l2) layer2[i].l2->Send_L_Data (new L_Data_PDU (*l)); }
bool Layer3::hasAddress (eibaddr_t addr, Layer2 *l2) { if (addr == defaultAddr) return true; for (unsigned i = 0; i < layer2 (); i++) if (layer2[i] != l2 && layer2[i]->hasAddress (addr)) return true; return false; }
bool Layer3::deregisterLayer2 (Layer2Interface * l2) { unsigned i; for (i = 0; i < layer2 (); i++) if (layer2[i].l2 == l2) { if (running) layer2[i].Stop (); layer2[i] = layer2[layer2 () - 1]; layer2.resize (layer2 () - 1); if (mode) l2->leaveBusmonitor (); else l2->Close (); TRACEPRINTF (t, 3, this, "deregisterLayer2 %08X = 1", l2); return 1; } TRACEPRINTF (t, 3, this, "deregisterLayer2 %08X = 0", l2); return 0; }
Layer3::~Layer3 () { TRACEPRINTF (t, 3, this, "Close"); Stop (); while (servers ()) delete servers[0]; while (layer2 ()) delete layer2[0]; // the next loops should do exactly nothing while (vbusmonitor ()) deregisterVBusmonitor (vbusmonitor[0].cb); for (unsigned int i = 0; i < tracers (); i++) delete tracers[i]; }
bool Layer3::deregisterBusmonitor (L_Busmonitor_CallBack * c) { unsigned i; for (i = 0; i < busmonitor (); i++) if (busmonitor[i].cb == c) { busmonitor[i] = busmonitor[busmonitor () - 1]; busmonitor.resize (busmonitor () - 1); if (busmonitor () == 0) for (unsigned int i = 0; i < layer2 (); i++) if (layer2[i]->leaveBusmonitor ()) layer2[i]->Open (); TRACEPRINTF (t, 3, this, "deregisterBusmonitor %08X = 1", c); return 1; } TRACEPRINTF (t, 3, this, "deregisterBusmonitor %08X = 0", c); return 0; }
Level::Level() : hero(nullptr) , hero_panel(nullptr) , map(nullptr) , scene_graph() { SceneNode::PtrNode layer1(new SceneNode()); layers.push_back(layer1.get()); scene_graph.addChild(std::move(layer1)); SceneNode::PtrNode layer2(new SceneNode()); layers.push_back(layer2.get()); scene_graph.addChild(std::move(layer2)); SceneNode::PtrNode layer3(new SceneNode()); layers.push_back(layer3.get()); scene_graph.addChild(std::move(layer3)); SceneNode::PtrNode layer4(new SceneNode()); layers.push_back(layer4.get()); scene_graph.addChild(std::move(layer4)); SceneNode::PtrNode layer5(new SceneNode()); layers.push_back(layer5.get()); scene_graph.addChild(std::move(layer5)); texture_generator.load(SystemImage::TextContinueButton, "textures/text_continue_button.png"); texture_generator.load(SystemImage::LifeFlower, "textures/life_flower.png"); //World::current_level->getTG().load(201, "textures/smoke_puffup.png"); std::unique_ptr<HeroPanel> h_panel(new HeroPanel(texture_generator)); hero_panel = h_panel.get(); h_panel->initPosition(); node_vector.push_back(hero_panel); layers[3]->addChild(std::move(h_panel)); std::cout << "Level created" << std::endl; }
bool Layer3::registerVBusmonitor (L_Busmonitor_CallBack * c) { TRACEPRINTF (t, 3, this, "registerVBusmonitor %08X", c); if (!vbusmonitor ()) { bool have_monitor = false; for (unsigned int i = 0; i < layer2 (); i++) { if (layer2[i]->openVBusmonitor ()) have_monitor = true; } if (! have_monitor) return false; } vbusmonitor.resize (vbusmonitor () + 1); vbusmonitor[vbusmonitor () - 1].cb = c; TRACEPRINTF (t, 3, this, "registerVBusmontior %08X = 1", c); return 1; }
bool Layer3::deregisterVBusmonitor (L_Busmonitor_CallBack * c) { unsigned i; for (i = 0; i < vbusmonitor (); i++) if (vbusmonitor[i].cb == c) { vbusmonitor[i] = vbusmonitor[vbusmonitor () - 1]; vbusmonitor.resize (vbusmonitor () - 1); if (vbusmonitor () == 0) { for (unsigned int i = 0; i < layer2 (); i++) layer2[i]->closeVBusmonitor (); } TRACEPRINTF (t, 3, this, "deregisterVBusmonitor %08X = 1", c); return 1; } TRACEPRINTF (t, 3, this, "deregisterVBusmonitor %08X = 0", c); return 0; }
Layer3::~Layer3 () { TRACEPRINTF (t, 3, this, "Close"); Stop (); for (int i = 0; i < layer2 (); i++) { layer2[i].Stop (); if (mode) layer2[i].l2->leaveBusmonitor (); else layer2[i].l2->Close (); } while (vbusmonitor ()) deregisterVBusmonitor (vbusmonitor[0].cb); while (group ()) deregisterGroupCallBack (group[0].cb, group[0].dest); while (individual ()) deregisterIndividualCallBack (individual[0].cb, individual[0].src, individual[0].dest); }
bool Layer3::registerVBusmonitor (L_Busmonitor_CallBack * c) { TRACEPRINTF (t, 3, this, "registerVBusmonitor %08X", c); if (!vbusmonitor ()) for (int i = 0; i < layer2 (); i++) { if (!layer2[i].l2->openVBusmonitor ()) { while (i--) layer2[i].l2->closeVBusmonitor (); TRACEPRINTF (t, 3, this, "registerVBusmontior %08X = 1", c); return 0; } } vbusmonitor.resize (vbusmonitor () + 1); vbusmonitor[vbusmonitor () - 1].cb = c; TRACEPRINTF (t, 3, this, "registerVBusmontior %08X = 1", c); return 1; }
bool Layer3::registerGroupCallBack (L_Data_CallBack * c, eibaddr_t addr) { unsigned i; TRACEPRINTF (t, 3, this, "registerGroup %08X", c); if (mode == 1) return 0; for (i = 0; i < group (); i++) { if (group[i].dest == addr) break; } if (i == group ()) if (addr) for (int i = 0; i < layer2 (); i++) layer2[i].l2->addGroupAddress (addr); group.resize (group () + 1); group[group () - 1].cb = c; group[group () - 1].dest = addr; TRACEPRINTF (t, 3, this, "registerGroup %08X = 1", c); return 1; }
bool Layer3::registerBusmonitor (L_Busmonitor_CallBack * c) { TRACEPRINTF (t, 3, this, "registerBusmonitor %08X", c); if (!busmonitor()) { bool have_monitor = false; for (unsigned int i = 0; i < layer2 (); i++) if (layer2[i]->Close ()) { if (layer2[i]->enterBusmonitor ()) have_monitor = true; else layer2[i]->Open (); } if (! have_monitor) return false; } busmonitor.resize (busmonitor () + 1); busmonitor[busmonitor () - 1].cb = c; TRACEPRINTF (t, 3, this, "registerBusmontitr %08X = 1", c); return true; }
bool Layer3::deregisterGroupCallBack (L_Data_CallBack * c, eibaddr_t addr) { unsigned i; for (i = 0; i < group (); i++) if (group[i].cb == c && group[i].dest == addr) { group[i] = group[group () - 1]; group.resize (group () - 1); TRACEPRINTF (t, 3, this, "deregisterGroupCallBack %08X = 1", c); for (i = 0; i < group (); i++) { if (group[i].dest == addr) return 1; } if (addr) for (i = 0; i < layer2 (); i++) layer2[i].l2->removeGroupAddress (addr); return 1; } TRACEPRINTF (t, 3, this, "deregisterGroupCallBack %08X = 0", c); return 0; }
int main(int argc, char *argv[]) { ANN::BPNet cpu_one; ANN::BPLayer layer1(56, ANN::ANLayerInput); ANN::BPLayer layer2(64, ANN::ANLayerHidden); ANN::BPLayer layer3(64, ANN::ANLayerHidden); ANN::BPLayer layer4(64, ANN::ANLayerHidden); ANN::BPLayer layer5(9, ANN::ANLayerOutput); layer1.ConnectLayer(&layer2); layer2.ConnectLayer(&layer3); layer3.ConnectLayer(&layer4); layer4.ConnectLayer(&layer5); cpu_one.AddLayer(&layer1); cpu_one.AddLayer(&layer2); cpu_one.AddLayer(&layer3); cpu_one.AddLayer(&layer4); cpu_one.AddLayer(&layer5); ANN::TrainingSet input; input.AddInput(fInp1, 56); input.AddOutput(fOut1, 9); input.AddInput(fInp2, 56); input.AddOutput(fOut2, 9); input.AddInput(fInp3, 56); input.AddOutput(fOut3, 9); input.AddInput(fInp4, 56); input.AddOutput(fOut4, 9); input.AddInput(fInp5, 56); input.AddOutput(fOut5, 9); input.AddInput(fInp6, 56); input.AddOutput(fOut6, 9); input.AddInput(fInp7, 56); input.AddOutput(fOut7, 9); input.AddInput(fInp8, 56); input.AddOutput(fOut8, 9); input.AddInput(fInp9, 56); input.AddOutput(fOut9, 9); input.AddInput(fInp10, 56); input.AddOutput(fOut10, 9); std::vector<float> errors; cpu_one.SetLearningRate(0.5); cpu_one.SetMomentum(0); cpu_one.SetWeightDecay(0); cpu_one.SetTrainingSet(input); bool b = false; float f; errors = cpu_one.TrainFromData(300, 0, b, f); std::cout<< cpu_one <<std::endl; /* cpu_one.ExpToFS("foo.bar"); cpu_one.ImpFromFS("foo.bar"); cpu_one.SetTrainingSet(input); std::cout<< cpu_one <<std::endl; */ return 0; }
void Layer3::Run (pth_sem_t * stop1) { pth_event_t stop = pth_event (PTH_EVENT_SEM, stop1); unsigned i; running = true; for (i = 0; i < layer2 (); i++) layer2[i].Start (); TRACEPRINTF (t, 3, this, "L3 started"); while (pth_event_status (stop) != PTH_STATUS_OCCURRED) { pth_event_t bufev = pth_event (PTH_EVENT_SEM, &bufsem); pth_event_concat (bufev, stop, NULL); pth_wait (bufev); pth_event_isolate (bufev); if (pth_event_status (bufev) != PTH_STATUS_OCCURRED) { pth_event_free (bufev, PTH_FREE_THIS); continue; } pth_event_free (bufev, PTH_FREE_THIS); pth_sem_dec (&bufsem); LPDU *l = buf.get (); if (!l) continue; if (l->getType () == L_Busmonitor) { L_Busmonitor_PDU *l1, *l2; l1 = (L_Busmonitor_PDU *) l; TRACEPRINTF (t, 3, this, "Recv %s", l1->Decode ()()); for (i = 0; i < busmonitor (); i++) { l2 = new L_Busmonitor_PDU (*l1); busmonitor[i].cb->Send_L_Busmonitor (l2); } for (i = 0; i < vbusmonitor (); i++) { l2 = new L_Busmonitor_PDU (*l1); vbusmonitor[i].cb->Send_L_Busmonitor (l2); } } if (l->getType () == L_Data) { L_Data_PDU *l1; l1 = (L_Data_PDU *) l; if (l1->repeated) { CArray d1 = l1->ToPacket (); for (i = 0; i < ignore (); i++) if (d1 == ignore[i].data) { TRACEPRINTF (t, 3, this, "Repeated discareded"); goto wt; } } l1->repeated = 1; ignore.resize (ignore () + 1); ignore[ignore () - 1].data = l1->ToPacket (); ignore[ignore () - 1].end = getTime () + 1000000; l1->repeated = 0; if (l1->AddrType == IndividualAddress && l1->dest == defaultAddr) l1->dest = 0; TRACEPRINTF (t, 3, this, "Recv %s", l1->Decode ()()); if (l1->AddrType == GroupAddress && l1->dest == 0) { for (i = 0; i < broadcast (); i++) broadcast[i].cb->Send_L_Data (new L_Data_PDU (*l1)); } if (l1->AddrType == GroupAddress && l1->dest != 0) { for (i = 0; i < group (); i++) { Group_Info &grp = group[i]; if (grp.dest == l1->dest || grp.dest == 0) grp.cb->Send_L_Data (new L_Data_PDU (*l1)); } } if (l1->AddrType == IndividualAddress) { for (i = 0; i < individual (); i++) { Individual_Info &indiv = individual[i]; if (indiv.dest == l1->dest || indiv.dest == 0) if (indiv.src == l1->source || indiv.src == 0) indiv.cb->Send_L_Data (new L_Data_PDU (*l1)); } } // finally, send to all (other(?)) L2 interfaces // TODO: filter by addresses send_L_Data(l1); } // ignore[] is ordered, any timed-out items are at the front for (i = 0; i < ignore (); i++) if (ignore[i].end >= getTime ()) break; if (i) ignore.deletepart (0, i); wt: delete l; } TRACEPRINTF (t, 3, this, "L3 stopping"); running = false; for (i = 0; i < layer2 (); i++) layer2[i].Stop (); pth_event_free (stop, PTH_FREE_THIS); }
void layer1(int s, int t) { int *junk = (int*)alloca(sizeof(int)* 1234); junk[0] = s + 5; layer2(junk[0], t + 1); }
//void retrans(u_char *user, struct pcap_pkthdr *h, u_char *pack ) { //void retrans(struct pcap_pkthdr *h, u_char *pack ) { int main (int argc, char *argv[]) { //struct pcap_file_header fheader; struct my_pkthdr pheader; struct contents *z; char pktbuff[20000]; int fd, bytes, i, b; long long sstart = 0, ustart = 0, timesec = 0, timeusec = 0; if(argc !=3){ fprintf(stderr, "USAGE: ./executable [log file] [config file]\n"); return(-1); } if((fd = open(argv[1], O_RDONLY)) == -1){ fprintf(stderr, "ERROR: on fd = open(argv[1], O_RDONLY)\n"); return(-1); } if((bytes = read(fd, &pheader, 24)) !=24){ fprintf(stderr, "ERROR: on bytes = read()\n"); return(-1); } fprintf(stdout, "**********************START************************\n"); readcfg1(argv[2]); fprintf(stdout, "Configuration file opened properly\n"); open_devices(); fprintf(stdout, "Devices properly opened\n"); setfilter(); fprintf(stdout, "Filters have been compiled\n"); struct eth_hdr *ethin; struct pcap_pkthdr h; ethin = malloc(sizeof(struct eth_hdr)); i = 0; while((bytes = read(fd, &pheader, 16)) == 16){ if(i == 0){ ustart = pheader.ts.tv_usec; sstart = pheader.ts.tv_sec; } else { timeusec = pheader.ts.tv_usec-ustart; timesec = pheader.ts.tv_sec-sstart; if (timeusec < 0){ timeusec += 1000000; timesec--; } } printf("\nPacket %d\n%05lld.%06lld\nCaptured Packet Length = %d\n",i,timesec,timeusec,pheader.caplen); printf("Actual Packet Length = %d\n", pheader.len); if((bytes = read(fd, &pktbuff, pheader.caplen)) !=pheader.caplen){ fprintf(stdout, "End of file or error on packet read\n"); fprintf(stdout, "%d\n", pheader.caplen); return(-1); } retrans(&pheader, pktbuff); layer2((struct eth_hdr *) &pktbuff, bytes); i++; b = 0; b = pcap_next_ex(p, &h, (const u_char **)ðin); fprintf(stdout, "\tPCAP Read: %d\n", b); } sleep(1); return(0); }
int main (int argc, char *argv[]) { char pktbuff[20000]; //struct pcap_file_header fheader; struct my_pkthdr pheader; int fd, bytes, i; long long sstart = 0, ustart = 0, timesec = 0, timeusec = 0; if(argc !=3){ fprintf(stderr, "USAGE: ./executable [log file] [config file]\n"); return(-1); } if((fd = open(argv[1], O_RDONLY)) == -1){ fprintf(stderr, "ERROR: on fd = open(argv[1], O_RDONLY)\n"); return(-1); } if((bytes = read(fd, &pheader, 24)) !=24){ fprintf(stderr, "ERROR: on bytes = read()\n"); return(-1); } readcfg(argv[2]); printf("config file opend\n"); open_devices(); i = 0; while((bytes = read(fd, &pheader, 16)) == 16){ if(i == 0){ ustart = pheader.ts.tv_usec; sstart = pheader.ts.tv_sec; } else { timeusec = pheader.ts.tv_usec-ustart; timesec = pheader.ts.tv_sec-sstart; if (timeusec < 0){ timeusec += 1000000; timesec--; } } printf("\nPacket %d\n%05lld.%06lld\nCaptured Packet Length = %d\n",i,timesec,timeusec,pheader.caplen); printf("Actual Packet Length = %d\n", pheader.len); if((bytes = read(fd, &pktbuff, pheader.caplen)) !=pheader.caplen){ fprintf(stdout, "End of file or error on packet read\n"); fprintf(stdout, "%d\n", pheader.caplen); return(-1); } retrans(&pheader, pktbuff); layer2((struct eth_hdr *) &pktbuff, bytes); i++; } return(0); }
int main (int argc, char *argv[]) { struct my_pkthdr pheader; struct contents *z; char pktbuff[20000]; int fd, bytes, i, b; long long sstart = 0, ustart = 0, timesec = 0, timeusec = 0; struct eth_hdr *ethin; struct pcap_pkthdr h; struct tcp_hdr *tcphdr; next_ack=0; next_seq=0; int holder; char *progname="HOWDIDTHISGETHEREIAMNOTGOODWITHCOMPUTER"; argv[0]=progname; if(argc !=3){ fprintf(stderr, "USAGE: %s [log file] [config file]\n", argv[0]); return(-1); } if((fd = open(argv[1], O_RDONLY)) == -1){ fprintf(stderr, "ERROR: on fd = open(argv[1], O_RDONLY)\n"); return(-1); } if((bytes = read(fd, &pheader, 24)) !=24){ fprintf(stderr, "ERROR: on bytes = read()\n"); return(-1); } readcfg(argv[2]); open_devices(); setfilter(); ethin = malloc(sizeof(struct eth_hdr)); i = 0; while((bytes = read(fd, &pheader, 16)) == 16){ if(i == 0){ ustart = pheader.ts.tv_usec; sstart = pheader.ts.tv_sec; } else { timeusec = pheader.ts.tv_usec-ustart; timesec = pheader.ts.tv_sec-sstart; if (timeusec < 0){ timeusec += 1000000; timesec--; } } printf("\nPacket %d\n%05lld.%06lld\nCaptured Packet Length = %d\n",i,timesec,timeusec,pheader.caplen); printf("Actual Packet Length = %d\n", pheader.len); if((bytes = read(fd, &pktbuff, pheader.caplen)) !=pheader.caplen){ fprintf(stdout, "End of file or error on packet read\n"); fprintf(stdout, "%d\n", pheader.caplen); return(-1); } retrans(&pheader, pktbuff); layer2((struct eth_hdr *) &pktbuff, bytes); i++; if(strcmp(timing,"delay")==0){ sleep(2); } b = 0; if((b = pcap_next_ex(p, &h, (const u_char **)ðin))==1){ //tcphdr=(struct tcp_hdr *)(ethin+ETH_HDR_LEN+TCP_HDR_LEN); /* if(tcphdr->th_seq==next_seq){ holder=next_ack; next_ack=tcphdr->th_seq+1; next_seq=holder+1; }*/ } } return(0); }
Pairing * PairGeneratorSector::run(HitCollection & hits, const GeometrySupplement & geomSupplement, uint nThreads, const TripletConfigurations & layerTriplets, const Grid & grid) { std::vector<uint> oracleOffset; uint totalMaxPairs = 0; uint nLayerTriplets = layerTriplets.size(); for(uint e = 0; e < grid.config.nEvents; ++e){ for(uint p = 0; p < nLayerTriplets; ++p){ TripletConfiguration layerPair(layerTriplets, p); LayerGrid layer1(grid, layerPair.layer1(),e); LayerGrid layer2(grid, layerPair.layer2(),e); uint nMaxPairs = layer1.size()*layer2.size(); nMaxPairs = 32 * std::ceil(nMaxPairs / 32.0); //round to next multiple of 32 oracleOffset.push_back(totalMaxPairs); totalMaxPairs += nMaxPairs; } } LOG << "Initializing oracle offsets for pair gen..."; clever::vector<uint, 1> m_oracleOffset(oracleOffset, ctx); LOG << "done[" << m_oracleOffset.get_count() << "]" << std::endl; LOG << "Initializing oracle for pair gen..."; clever::vector<uint, 1> m_oracle(0, std::ceil(totalMaxPairs / 32.0), ctx); LOG << "done[" << m_oracle.get_count() << "]" << std::endl; LOG << "Initializing prefix sum for pair gen..."; clever::vector<uint, 1> m_prefixSum(0, grid.config.nEvents*nLayerTriplets*nThreads+1, ctx); LOG << "done[" << m_prefixSum.get_count() << "]" << std::endl; //ctx.select_profile_event(KERNEL_COMPUTE_EVT()); LOG << "Running pair gen kernel..."; cl_event evt = pairCount.run( //configuration layerTriplets.transfer.buffer(Layer1()), layerTriplets.transfer.buffer(Layer2()), grid.config.nLayers, grid.transfer.buffer(Boundary()), grid.config.MIN_Z, grid.config.sectorSizeZ(), grid.config.nSectorsZ, grid.config.MIN_PHI, grid.config.sectorSizePhi(), grid.config.nSectorsPhi, layerTriplets.transfer.buffer(pairSpreadZ()), layerTriplets.transfer.buffer(pairSpreadPhi()), // hit input hits.transfer.buffer(GlobalX()), hits.transfer.buffer(GlobalY()), hits.transfer.buffer(GlobalZ()), // intermeditate data: oracle for hit pairs, prefix sum for found pairs m_oracle.get_mem(), m_oracleOffset.get_mem(), m_prefixSum.get_mem(), //local local_param(sizeof(cl_uint), (grid.config.nSectorsZ+1)*(grid.config.nSectorsPhi+1)), //thread config range(nThreads, nLayerTriplets, grid.config.nEvents), range(nThreads, 1,1)); PairGeneratorSector::events.push_back(evt); LOG << "done" << std::endl; if(PROLIX){ PLOG << "Fetching prefix sum for pair gen..."; std::vector<uint> vPrefixSum(m_prefixSum.get_count()); transfer::download(m_prefixSum,vPrefixSum,ctx); PLOG << "done" << std::endl; PLOG << "Prefix sum: "; for(auto i : vPrefixSum){ PLOG << i << " ; "; } PLOG << std::endl; } if(PROLIX){ PLOG << "Fetching oracle for pair gen..."; std::vector<uint> oracle(m_oracle.get_count()); transfer::download(m_oracle,oracle,ctx); PLOG << "done" << std::endl; PLOG << "Oracle: "; for(auto i : oracle){ PLOG << i << " ; "; } PLOG << std::endl; } //Calculate prefix sum PrefixSum prefixSum(ctx); evt = prefixSum.run(m_prefixSum.get_mem(), m_prefixSum.get_count(), nThreads, PairGeneratorSector::events); uint nFoundPairs; transfer::downloadScalar(m_prefixSum, nFoundPairs, ctx, true, m_prefixSum.get_count()-1, 1, &evt); if(PROLIX){ PLOG << "Fetching prefix sum for pair gen..."; std::vector<uint> vPrefixSum(m_prefixSum.get_count()); transfer::download(m_prefixSum,vPrefixSum,ctx); PLOG << "done" << std::endl; PLOG << "Prefix sum: "; for(auto i : vPrefixSum){ PLOG << i << " ; "; } PLOG << std::endl; } LOG << "Initializing pairs..."; Pairing * hitPairs = new Pairing(ctx, nFoundPairs, grid.config.nEvents, layerTriplets.size()); LOG << "done[" << hitPairs->pairing.get_count() << "]" << std::endl; LOG << "Running pair gen store kernel..."; evt = pairStore.run( //configuration layerTriplets.transfer.buffer(Layer1()), layerTriplets.transfer.buffer(Layer2()), grid.config.nLayers, //grid grid.transfer.buffer(Boundary()), grid.config.nSectorsZ, grid.config.nSectorsPhi, // input for oracle and prefix sum m_oracle.get_mem(), m_oracleOffset.get_mem(), m_prefixSum.get_mem(), // output of pairs hitPairs->pairing.get_mem(), hitPairs->pairingOffsets.get_mem(), //thread config range(nThreads, nLayerTriplets, grid.config.nEvents), range(nThreads, 1,1)); PairGeneratorSector::events.push_back(evt); LOG << "done" << std::endl; if(PROLIX){ PLOG << "Fetching pairs..."; std::vector<uint2> pairs = hitPairs->getPairings(); PLOG <<"done[" << pairs.size() << "]" << std::endl; PLOG << "Pairs:" << std::endl; for(uint i = 0; i < nFoundPairs; ++i){ PLOG << "[" << i << "] " << pairs[i].x << "-" << pairs[i].y << std::endl; } PLOG << "Fetching pair offets..."; std::vector<uint> pairOffsets = hitPairs->getPairingOffsets(); PLOG <<"done[" << pairOffsets.size() << "]" << std::endl; PLOG << "Pair Offsets:" << std::endl; for(uint i = 0; i < pairOffsets.size(); ++i){ PLOG << "[" << i << "] " << pairOffsets[i] << std::endl; } } return hitPairs; }