|
地板
楼主 |
发表于 2020-8-21 11:30:10
|
只看该作者
解决方法:当使用spawn的时候 要用 if __name__ == "__main__"
这样改就可以了
- import torch
- import torch.multiprocessing as mp
- from torch.multiprocessing import set_start_method
- def sub_processes(A, B, D, i, j, size):
- D[(j * size):((j + 1) * size), i] = torch.mul(B[:, i], A[j, i])
- def task(A, B):
- size1 = A.shape
- size2 = B.shape
- D = torch.zeros([size1[0] * size2[0], size1[1]]).cuda()
- D.share_memory_()
- for i in range(1):
- processes = []
- for j in range(size1[0]):
- p = mp.Process(target=sub_processes, args=(A, B, D, i, j, size2[0]))
- p.start()
- processes.append(p)
- for p in processes:
- p.join()
- return D
- if __name__ == "__main__":
- set_start_method("spawn")
- A = torch.rand(3, 3).cuda()
- B = torch.rand(3, 3).cuda()
- C = task(A, B)
- print(C)
复制代码 |
|