亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tprocessingelement.cpp

?? noxim系統的軟件實現
?? CPP
字號:
/*****************************************************************************  TProcessingElement.cpp -- Processing Element (PE) implementation *****************************************************************************//* Copyright 2005-2007      Maurizio Palesi <mpalesi@diit.unict.it>    Fabrizio Fazzino <fabrizio.fazzino@diit.unict.it>    Davide Patti <dpatti@diit.unict.it> *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "TProcessingElement.h"//---------------------------------------------------------------------------int TProcessingElement::randInt(int min, int max){  return min + (int)((double)(max-min+1) * rand()/(RAND_MAX+1.0));}//---------------------------------------------------------------------------void TProcessingElement::rxProcess(){  if(reset.read())  {    ack_rx.write(0);    current_level_rx = 0;  }  else  {    if(req_rx.read()==1-current_level_rx)    {      TFlit flit_tmp = flit_rx.read();      if(TGlobalParams::verbose_mode > VERBOSE_OFF)      {        cout << sc_simulation_time() << ": ProcessingElement[" << local_id << "] RECEIVING " << flit_tmp << endl;      }      current_level_rx = 1-current_level_rx;     // Negate the old value for Alternating Bit Protocol (ABP)    }    ack_rx.write(current_level_rx);  }}//---------------------------------------------------------------------------void TProcessingElement::txProcess(){  if(reset.read())  {    req_tx.write(0);    current_level_tx = 0;    transmittedAtPreviousCycle = false;  }  else  {    TPacket packet;    if (canShot(packet))    {      packet_queue.push(packet);      transmittedAtPreviousCycle = true;    }    else      transmittedAtPreviousCycle = false;    if(ack_tx.read() == current_level_tx)    {      if(!packet_queue.empty())      {        TFlit flit = nextFlit();                  // Generate a new flit        if(TGlobalParams::verbose_mode > VERBOSE_OFF)        {          cout << sc_time_stamp().to_double()/1000 << ": ProcessingElement[" << local_id << "] SENDING " << flit << endl;        }	flit_tx->write(flit);                     // Send the generated flit	current_level_tx = 1-current_level_tx;    // Negate the old value for Alternating Bit Protocol (ABP)	req_tx.write(current_level_tx);      }    }  }}//---------------------------------------------------------------------------TFlit TProcessingElement::nextFlit(){  TFlit   flit;  TPacket packet = packet_queue.front();  flit.src_id      = packet.src_id;  flit.dst_id      = packet.dst_id;  flit.timestamp   = packet.timestamp;  flit.sequence_no = packet.size - packet.flit_left;  flit.hop_no      = 0;  //  flit.payload     = DEFAULT_PAYLOAD;  if(packet.size == packet.flit_left)    flit.flit_type = FLIT_TYPE_HEAD;  else if(packet.flit_left == 1)    flit.flit_type = FLIT_TYPE_TAIL;  else    flit.flit_type = FLIT_TYPE_BODY;    packet_queue.front().flit_left--;  if(packet_queue.front().flit_left == 0)    packet_queue.pop();  return flit;}//---------------------------------------------------------------------------bool TProcessingElement::canShot(TPacket& packet){  bool   shot;  double threshold;  if (TGlobalParams::traffic_distribution != TRAFFIC_TABLE_BASED)    {      if (!transmittedAtPreviousCycle)	threshold = TGlobalParams::packet_injection_rate;      else	threshold = TGlobalParams::probability_of_retransmission;      shot = (((double)rand())/RAND_MAX < threshold);      if (shot)	{	  switch(TGlobalParams::traffic_distribution)	    {	    case TRAFFIC_RANDOM:	      packet = trafficRandom();	      break;	      	    case TRAFFIC_TRANSPOSE1:	      packet = trafficTranspose1();	      break;	      	    case TRAFFIC_TRANSPOSE2:	      packet = trafficTranspose2();	      break;	      	    case TRAFFIC_BIT_REVERSAL:	      packet = trafficBitReversal();	      break;	    case TRAFFIC_SHUFFLE:	      packet = trafficShuffle();	      break;	    case TRAFFIC_BUTTERFLY:	      packet = trafficButterfly();	      break;	    default:	      assert(false);	    }	}    }  else    { // Table based communication traffic      if (never_transmit)	return false;      double now         = sc_time_stamp().to_double()/1000;      bool   use_pir     = (transmittedAtPreviousCycle == false);      vector<pair<int,double> > dst_prob;      double threshold = traffic_table->getCumulativePirPor(local_id, (int)now, use_pir, dst_prob);      double prob = (double)rand()/RAND_MAX;      shot = (prob < threshold);      if (shot)	{	  for (unsigned int i=0; i<dst_prob.size(); i++)	    {	      if (prob < dst_prob[i].second) 		{		  packet.make(local_id, dst_prob[i].first, now, getRandomSize());		  break;		}	    }	}    }  return shot;}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficRandom(){  TPacket p;  p.src_id = local_id;  double rnd = rand()/(double)RAND_MAX;  double range_start = 0.0;  //cout << "\n " << sc_time_stamp().to_double()/1000 << " PE " << local_id << " rnd = " << rnd << endl;  int max_id = (TGlobalParams::mesh_dim_x * TGlobalParams::mesh_dim_y)-1;  // Random destination distribution  do  {    p.dst_id = randInt(0, max_id);    // check for hotspot destination    for (uint i = 0; i<TGlobalParams::hotspots.size(); i++)    {	//cout << sc_time_stamp().to_double()/1000 << " PE " << local_id << " Checking node " << TGlobalParams::hotspots[i].first << " with P = " << TGlobalParams::hotspots[i].second << endl;	if (rnd>=range_start && rnd < range_start + TGlobalParams::hotspots[i].second)	{	    if (local_id != TGlobalParams::hotspots[i].first)	    {		//cout << sc_time_stamp().to_double()/1000 << " PE " << local_id <<" That is ! " << endl;		p.dst_id = TGlobalParams::hotspots[i].first;	    }	    break;	}	else 	    range_start+=TGlobalParams::hotspots[i].second; // try next    }  } while(p.dst_id==p.src_id);  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficTranspose1(){  TPacket p;  p.src_id = local_id;  TCoord src,dst;  // Transpose 1 destination distribution  src.x = id2Coord(p.src_id).x;  src.y = id2Coord(p.src_id).y;  dst.x = TGlobalParams::mesh_dim_x-1-src.y;  dst.y = TGlobalParams::mesh_dim_y-1-src.x;  fixRanges(src, dst);  p.dst_id = coord2Id(dst);  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficTranspose2(){  TPacket p;  p.src_id = local_id;  TCoord src,dst;  // Transpose 2 destination distribution  src.x = id2Coord(p.src_id).x;  src.y = id2Coord(p.src_id).y;  dst.x = src.y;  dst.y = src.x;  fixRanges(src, dst);  p.dst_id = coord2Id(dst);  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------void TProcessingElement::setBit(int &x, int w, int v){  int mask = 1 << w;    if (v == 1)    x = x | mask;  else if (v == 0)    x = x & ~mask;  else    assert(false);    }//---------------------------------------------------------------------------int TProcessingElement::getBit(int x, int w){  return (x >> w) & 1;}//---------------------------------------------------------------------------inline double TProcessingElement::log2ceil(double x){  return ceil(log(x)/log(2.0));}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficBitReversal(){    int nbits = (int)log2ceil((double)(TGlobalParams::mesh_dim_x*TGlobalParams::mesh_dim_y));  int dnode = 0;  for (int i=0; i<nbits; i++)    setBit(dnode, i, getBit(local_id, nbits-i-1));  TPacket p;  p.src_id = local_id;  p.dst_id = dnode;  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficShuffle(){    int nbits = (int)log2ceil((double)(TGlobalParams::mesh_dim_x*TGlobalParams::mesh_dim_y));  int dnode = 0;  for (int i=0; i<nbits-1; i++)    setBit(dnode, i+1, getBit(local_id, i));  setBit(dnode, 0, getBit(local_id, nbits-1));  TPacket p;  p.src_id = local_id;  p.dst_id = dnode;  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------TPacket TProcessingElement::trafficButterfly(){    int nbits = (int)log2ceil((double)(TGlobalParams::mesh_dim_x*TGlobalParams::mesh_dim_y));  int dnode = 0;  for (int i=1; i<nbits-1; i++)    setBit(dnode, i, getBit(local_id, i));  setBit(dnode, 0, getBit(local_id, nbits-1));  setBit(dnode, nbits-1, getBit(local_id, 0));  TPacket p;  p.src_id = local_id;  p.dst_id = dnode;  p.timestamp = sc_time_stamp().to_double()/1000;  p.size = p.flit_left = getRandomSize();  return p;}//---------------------------------------------------------------------------void TProcessingElement::fixRanges(const TCoord src, TCoord& dst){  // Fix ranges  if(dst.x<0) dst.x=0;  if(dst.y<0) dst.y=0;  if(dst.x>=TGlobalParams::mesh_dim_x) dst.x=TGlobalParams::mesh_dim_x-1;  if(dst.y>=TGlobalParams::mesh_dim_y) dst.y=TGlobalParams::mesh_dim_y-1;}//---------------------------------------------------------------------------int TProcessingElement::getRandomSize(){  return randInt(TGlobalParams::min_packet_size,                  TGlobalParams::max_packet_size);}//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美久久一区| 一区二区三区四区高清精品免费观看| 亚洲一区二区三区视频在线播放| 日韩在线一区二区| 91免费在线看| 亚洲黄色性网站| 91在线一区二区三区| 国产精品久久影院| 国产高清久久久久| 国产喷白浆一区二区三区| 久久国产精品免费| 日韩欧美二区三区| 国内欧美视频一区二区| 久久综合九色欧美综合狠狠| 国产综合久久久久久鬼色| 精品日韩在线观看| 激情综合亚洲精品| 午夜国产不卡在线观看视频| 91理论电影在线观看| 亚洲丝袜制服诱惑| 色久优优欧美色久优优| 亚洲一区二区三区三| 欧美视频精品在线观看| 日本不卡视频在线| 久久久不卡影院| 久久久国产精华| 久久99这里只有精品| 久久网站热最新地址| 国产a区久久久| 亚洲男人天堂av网| 日韩午夜在线播放| 99久久精品99国产精品| 日韩精品亚洲一区| 国产精品沙发午睡系列990531| 欧美日韩一卡二卡三卡 | 久久不见久久见免费视频7| 国产夜色精品一区二区av| 欧美在线免费播放| 欧美日韩国产免费一区二区| 久久福利视频一区二区| 最新日韩av在线| 337p粉嫩大胆噜噜噜噜噜91av| 日本高清不卡一区| 国产成人免费在线视频| 日本亚洲三级在线| 亚洲伦理在线精品| 国产精品色在线| 精品久久久久久久久久久久久久久| 91激情在线视频| 成人激情图片网| 国产精品综合av一区二区国产馆| 婷婷国产在线综合| 一区二区三区日韩欧美精品| 国产日韩欧美不卡在线| 欧美第一区第二区| 91精品国产综合久久精品麻豆| 北岛玲一区二区三区四区| 国内成人免费视频| 蜜桃免费网站一区二区三区| 天堂av在线一区| 亚洲综合成人网| 国产精品久久久久影院| 久久综合久久综合久久| 日韩一区二区免费视频| 精品污污网站免费看| 一本大道久久a久久综合| 不卡的电影网站| 成人免费毛片嘿嘿连载视频| 国产精品一区二区久久不卡| 久久69国产一区二区蜜臀| 日韩av电影天堂| 奇米四色…亚洲| 人人狠狠综合久久亚洲| 日韩国产精品久久久| 午夜视频久久久久久| 午夜电影一区二区三区| 日韩电影免费在线看| 日韩黄色小视频| 青青草91视频| 麻豆一区二区在线| 久久爱www久久做| 国产精品正在播放| 国产福利不卡视频| av电影在线不卡| 91蝌蚪porny| 91久久精品一区二区三| 欧美性大战久久久久久久| 欧美偷拍一区二区| 91精品国产欧美一区二区18| 欧美一区二区三区在线观看| 欧美大片顶级少妇| 国产欧美一区二区精品仙草咪| 国产精品美女一区二区在线观看| 中文字幕一区二区三区在线播放 | 日韩福利视频网| 美国欧美日韩国产在线播放| 国产一区在线视频| 成人a区在线观看| 日本韩国精品在线| 欧美一区二区三区精品| 国产亚洲制服色| 亚洲人妖av一区二区| 亚洲成人av一区二区| 久久国产成人午夜av影院| 国产宾馆实践打屁股91| 一本久久a久久精品亚洲| 91精品国产一区二区三区蜜臀| 精品99久久久久久| 亚洲欧美激情在线| 日本美女一区二区三区视频| 国产98色在线|日韩| 91福利在线免费观看| 欧美一区二区三区色| 亚洲国产精品精华液2区45| 亚洲欧美乱综合| 日本vs亚洲vs韩国一区三区| 国产精品一级二级三级| 色狠狠综合天天综合综合| 日韩三级免费观看| 中文字幕一区二区在线播放| 亚洲国产日韩一区二区| 国产综合久久久久久鬼色| 一本色道亚洲精品aⅴ| 欧美变态tickling挠脚心| 亚洲男同1069视频| 激情综合一区二区三区| 精品视频999| 国产精品动漫网站| 久久草av在线| 欧美日精品一区视频| 欧美国产日韩在线观看| 日本亚洲视频在线| 91黄色小视频| 中文字幕精品在线不卡| 秋霞影院一区二区| 色网综合在线观看| 国产亚洲短视频| 理论片日本一区| 欧美日韩一区二区在线观看视频 | 欧美精品丝袜久久久中文字幕| 欧美激情一区二区三区四区| 免费国产亚洲视频| 欧美日韩一级大片网址| 国产精品毛片久久久久久| 韩国精品主播一区二区在线观看 | 色婷婷综合久久久中文字幕| 国产亚洲欧美色| 精品亚洲aⅴ乱码一区二区三区| 在线不卡免费av| 亚洲一区二区在线免费观看视频| 国产精品一区二区在线看| 91精品国产91久久久久久最新毛片| 亚洲精品国产第一综合99久久 | 久久综合久久综合九色| 日韩精品电影在线| 欧美午夜电影网| 亚洲欧美国产77777| 99精品热视频| 国产精品久久久久久久蜜臀| 国产精品一二三区在线| 久久色中文字幕| 精品一区二区三区av| 精品欧美一区二区三区精品久久 | 亚洲欧美一区二区不卡| 成人网页在线观看| 日本一区二区三区高清不卡| 国产一区二区伦理| 国产日韩精品一区二区浪潮av | 精品欧美乱码久久久久久| 精油按摩中文字幕久久| 精品三级在线观看| 国产精品综合视频| 中文字幕 久热精品 视频在线| 国产酒店精品激情| 日本一区二区三级电影在线观看| 国产精品一区二区在线看| 亚洲国产精品黑人久久久| 91丝袜美女网| 亚洲午夜一区二区三区| 欧美一区在线视频| 麻豆国产精品官网| 国产欧美一区在线| 99vv1com这只有精品| 夜夜亚洲天天久久| 日韩一区二区三区av| 国产一区二区三区视频在线播放| 中文字幕免费不卡| 91亚洲午夜精品久久久久久| 亚洲综合一区在线| 欧美电影免费观看完整版| 国产**成人网毛片九色| 国产精品久久久久久福利一牛影视| 91视频在线看| 日本中文一区二区三区| 国产亚洲欧洲一区高清在线观看| 91视频免费观看| 秋霞午夜av一区二区三区| 国产日韩一级二级三级| 欧美日韩亚洲综合在线| 国产精品一区二区免费不卡|