Skip to content

Commit

Permalink
pattern change
Browse files Browse the repository at this point in the history
  • Loading branch information
fgjeci committed Sep 5, 2024
1 parent 1f47bd4 commit f9bf8c7
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 11 deletions.
7 changes: 2 additions & 5 deletions setup/xapp-v2x/run_xapp_parallel.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,10 @@ def _schedule_data_and_save(data: dict, v2x_preopt_obj: V2XPreScheduling, v2x_sc
def _schedule_data(data: dict, v2x_preopt_obj: V2XPreScheduling, v2x_scheduling_obj: V2XFormulation, frame: int, subframe: int, slot: int)->List[SourceUserScheduling]:
# _buffer_status = data['buffer_status']
# _plmn = int(data[transform._JSON_PLMN])

# optimization afterwards which shall return the list of scheduled data
# v2x_source_scheduling_users: List[SourceUserScheduling] = v2x_scheduling_obj.schedule_slot(frame, subframe, slot)
v2x_source_scheduling_users: List[SourceUserScheduling] = v2x_scheduling_obj.schedule_only_new_data(frame, subframe, slot)
# store data in file to compare with data in ns3


return v2x_source_scheduling_users

def _rearrange_scheduling(sched_list: List[SourceUserScheduling]):
Expand Down Expand Up @@ -257,7 +254,7 @@ def _check_optimization_to_be_executed()->List[dict]:
_shared_list_data = shm.ShareableList(name="data")
_v_plmn_print = any(_shared_list_data_updated)
if _v_plmn_print:
logger.info("Plmn to be optimized ", end = "")
print("Plmn to be optimized ", end = "")
for _ind, _elem in enumerate(_shared_list_data_updated):
if _elem & (not _shared_list_being_optimized[_ind]):
_data = eval(str(_shared_list_data[_ind]))
Expand Down Expand Up @@ -521,7 +518,7 @@ def handle_optimization_thread(is_test_mode: bool=False):
if len(_l_to_be_optimized_sorted)>0:
# we put data to the queue
# distribute among initialized processes by putting data in the queue
logger.info("Queue size per plmn ", end="")
print("Queue size per plmn ", end="")

for _v_ind, _v_to_be_optimized in enumerate(_l_to_be_optimized_sorted):
_plmn = _v_to_be_optimized[transform._JSON_PLMN]
Expand Down
6 changes: 3 additions & 3 deletions setup/xapp-v2x/sl_slot_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing_extensions import Self
import logging

_NUMEROLOGY = 0
_NUMEROLOGY = 2

_RETRASMISSIONS = 1

Expand All @@ -26,8 +26,8 @@
# PATTERN = np.array([2, 2, 2, 1, 0, 0, 0, 0, 0, 0])
# BITMAP = np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1])

PATTERN = np.array([2, 0, 0, 0, 0, 0, 0, 0, 0, 0])
BITMAP = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
PATTERN = np.array([2, 2, 1, 0, 0, 0, 0, 0, 0, 0])
BITMAP = np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1])

class Tti:

Expand Down
6 changes: 5 additions & 1 deletion setup/xapp-v2x/v2x_optimization.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ def schedule_only_new_data(self, frame: int, subframe: int, slot: int)->List[Sou

logger.debug("\n")
logger.debug(f"Schedule slot ({frame}, {subframe}, {slot})")
logger.debug("schedule_only_new_data")
logger.debug(f"schedule_only_new_data")
logger.debug(f"Number of scheduling request {len(self._needed_rbs_per_buffer)}")
# logger.debug(f"Needed rbs per buffer {self._needed_rbs_per_buffer}")
logger.debug(f"Needed symbols per buffer { self._needed_symbols_per_buffer}")
Expand Down Expand Up @@ -520,10 +520,14 @@ def schedule_only_new_data(self, frame: int, subframe: int, slot: int)->List[Sou
elif _unserved_symbols_new_data_array[_unserved_symbols_new_data_array_ind]>_remaining_available_symbols:
_scheduled_symbols_new_data[_unserved_symbols_new_data_array_ind] = _remaining_available_symbols
_used_symbols_in_slot +=_remaining_available_symbols
# serve only 1 user in this slot to avoid collision of PSCCH
break
else:
_scheduled_symbols_new_data[_unserved_symbols_new_data_array_ind] = _unserved_symbols_new_data_array[_unserved_symbols_new_data_array_ind]
_used_symbols_in_slot += _unserved_symbols_new_data_array[_unserved_symbols_new_data_array_ind]
_unserved_symbols_new_data_array_ind+=1
# serve only 1 user in this slot to avoid collision of PSCCH
break

logger.debug(f"Scheduled symbols new data {_scheduled_symbols_new_data}")

Expand Down
18 changes: 16 additions & 2 deletions setup/xapp-v2x/v2x_pre_optimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def set_goodness_table(self, goodness_table: np.ndarray):
self.goodnes_table_of_resources = goodness_table

def update_user_preopt_data(self, data: MillicarUeSingleReport):
logger = logging.getLogger("")
# updating the user preoptimization data
# check if there are new head of line packet delay
self.position_x = data.position_x
Expand All @@ -59,6 +60,7 @@ def update_user_preopt_data(self, data: MillicarUeSingleReport):
# whenever new report comes we update entirely the interval data
self.head_of_line_packet_delay = []
self.retx_buffer_size = []
logger.debug(f"Delays {[str(delay) for delay in data.user_packet_delays.all_connections_delays]}")
for _con in data.user_packet_delays.all_connections_delays:
for _delay_intervals in _con.delayIntervals:
_interval_group_id = _delay_intervals.lowerInterval
Expand Down Expand Up @@ -92,11 +94,14 @@ def update_user_preopt_data(self, data: MillicarUeSingleReport):
# )
# )


def __str__(self) -> str:
return f"{self.ue_id} " + str(self.head_of_line_packet_delay)

class V2XPreScheduling:
def __init__(self) -> None:
self._single_user_preopt_list:List[UserPreoptimization]=[]
self._is_data_updated = False
# self._element_inserted = 0

def is_data_updated(self)->bool:
return self._is_data_updated
Expand All @@ -114,10 +119,17 @@ def _update_preoptimization_data(self, ue_id: int=-1, single_report:MillicarUeSi
# logger.debug("_update_preoptimization_data")
# logger.debug(single_report)
if _ue_preopt_item is None:
# self._element_inserted += 1
# user does not exist, thus we need to insert it
_new_ue_preopt_item = UserPreoptimization(ue_id=ue_id)
_new_ue_preopt_item.update_user_preopt_data(single_report)
self._single_user_preopt_list.append(_new_ue_preopt_item)
self._single_user_preopt_list[-1].update_user_preopt_data(single_report)
# logger.info(f"Ue id {ue_id}; Inserting {_new_ue_preopt_item} into preopt")

# if (self._element_inserted > 30):
# exit(1)

# self._single_user_preopt_list[-1].update_user_preopt_data(single_report)
else:
_ue_preopt_item.update_user_preopt_data(single_report)

Expand Down Expand Up @@ -149,8 +161,10 @@ def get_all_users_harq_buffer_status(self):

# get single user Preopt class instance
def _get_user_preopt(self, ue_id: int=-1) -> UserPreoptimization:
logger = logging.getLogger('')
_ue_id_list = list(filter(lambda _user_preopt: _user_preopt.ue_id == ue_id, self._single_user_preopt_list))
if len(_ue_id_list)==0:
logger.debug(f"Considering {ue_id}; List of user preopt: {[str(_sing_user) for _sing_user in self._single_user_preopt_list]}")
return None
else:
return _ue_id_list[0]
Expand Down

0 comments on commit f9bf8c7

Please sign in to comment.