def unpacking(self, src_tensor, src_tensor_size): src_tensor = src_tensor.to(self.device) self.decompression_python.set() #torch.cuda.synchronize() src_element_num = self.element_num(src_tensor_size) add_elm = 32 - (src_element_num % 32) if src_element_num % 32 == 0: add_elm = 0 src_tensor = src_tensor.int() new_tensor = torch.ones(src_element_num + add_elm, device=self.device, dtype=torch.int32) new_tensor = new_tensor.view(32, -1) #torch.cuda.synchronize() self.decompression_python.record() self.decompression_cuda.set() #torch.cuda.synchronize() new_tensor = bit2byte.unpacking(src_tensor, new_tensor) #torch.cuda.synchronize() self.decompression_cuda.record() self.decompression_python.set() #torch.cuda.synchronize() new_tensor = new_tensor.view(-1) new_tensor = new_tensor[:src_element_num] new_tensor = new_tensor.view(src_tensor_size) new_tensor = -new_tensor.add_(-1) new_tensor = new_tensor.float() #torch.cuda.synchronize() self.decompression_python.record() return new_tensor.to(self.source_device)
def majority_vote(self, src_tensor_list): self.majority_vote_decompression.set() #torch.cuda.synchronize() voter_num = len(src_tensor_list) src_tensor = torch.stack(src_tensor_list) src_tensor = src_tensor.view(-1) full_size = 32 * len(src_tensor) new_tensor = torch.ones(full_size, device=self.device, dtype=torch.int32) new_tensor = new_tensor.view(32,-1) new_tensor = bit2byte.unpacking(src_tensor,new_tensor) new_tensor = - new_tensor.add_(-1) #torch.cuda.synchronize() self.majority_vote_decompression.record() #sum self.majority_vote_sum_calculation.set() #torch.cuda.synchronize() new_tensor = new_tensor.permute(1,0).contiguous().view(voter_num,-1) new_tensor = torch.sum(new_tensor,0) new_tensor = new_tensor.view(-1,32).permute(1,0) #torch.cuda.synchronize() self.majority_vote_sum_calculation.record() self.majority_vote_compression.set() #torch.cuda.synchronize() new_tensor = torch.sign(new_tensor) new_tensor = bit2byte.packing(new_tensor) new_tensor = new_tensor.to(dtype=torch.int32) #torch.cuda.synchronize() self.majority_vote_compression.record() return new_tensor
def unpacking(self, src_tensor, src_tensor_size): src_element_num = self.element_num(src_tensor_size) add_elm = 32 - (src_element_num % 32) if src_element_num % 32 == 0: add_elm = 0 src_tensor = src_tensor.int() new_tensor = torch.ones(src_element_num + add_elm, device=self.device, dtype=torch.int32) new_tensor = new_tensor.view(32,-1) new_tensor = bit2byte.unpacking(src_tensor,new_tensor) new_tensor = new_tensor.view(-1) new_tensor = new_tensor[:src_element_num] new_tensor = new_tensor.view(src_tensor_size) new_tensor = - new_tensor.add_(-1) new_tensor = new_tensor.float() return new_tensor
def majority_vote(self, src_tensor_list): voter_num = len(src_tensor_list) src_tensor = torch.stack(src_tensor_list) src_tensor = src_tensor.view(-1) full_size = 32 * len(src_tensor) new_tensor = torch.ones(full_size, device=src_tensor.device, dtype=torch.int32) new_tensor = new_tensor.view(32, -1) new_tensor = bit2byte.unpacking(src_tensor, new_tensor) new_tensor = -new_tensor.add_(-1) # sum new_tensor = new_tensor.permute(1, 0).contiguous().view(voter_num, -1) new_tensor = torch.sum(new_tensor, 0) new_tensor = new_tensor.view(-1, 32).permute(1, 0) new_tensor = torch.sign(new_tensor) new_tensor = bit2byte.packing(new_tensor) new_tensor = new_tensor.to(dtype=torch.int32) return new_tensor