Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
 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
Esempio n. 4
0
 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