多進程與單進程sample效率比較(測試)

import multiprocessing as tmp
import torch as t
import numpy as np
import time


def sample(args):
    rank,meta_works,batch_size,indexes,indexes2,dataset=args
    array = []
    for i in range(rank * meta_works, min((rank + 1) * meta_works, batch_size)):
        elem = dataset[indexes[i]:indexes2[i]]
        array.append(elem)
    return t.stack(array)
class SampleClass():
    def __init__(self):
        self.length=10000
        self.batch_size = 200
        self.dataset=t.zeros(size=(self.length,84,84)).type(t.uint8)+t.randint(256,size=(self.length,)).unsqueeze(-1).unsqueeze(-1).type(t.uint8)
        self.num_processes=8
        self.num_repeat=1000
        self.indexes = np.random.randint(self.length - 8, size=self.batch_size)
        self.indexes2 = self.indexes + 4
        self.meta_works=int(np.ceil(self.batch_size/self.num_processes))
        self.pool=tmp.Pool(processes=self.num_processes)

        self.result = self.pool.map_async(sample, [(i, self.meta_works, self.batch_size, self.indexes, self.indexes2, self.dataset) for i in range(self.num_processes)])

    def method1(self):
        # pool = tmp.Pool(processes=self.num_processes)
        for repeat in range(self.num_repeat):
            self.indexes = np.random.randint(self.length - 8, size=self.batch_size)
            self.indexes2 = self.indexes + 4
            self.result = self.pool.map_async(sample, [(i, self.meta_works, self.batch_size, self.indexes, self.indexes2, self.dataset) for i in range(self.num_processes)])
            result=self.result.get()
            result=t.cat(result)
            # print(result[0,0,0,0])
            # print(result.shape)

    def method2(self):
        for repeat in range(self.num_repeat):
            self.indexes = np.random.randint(self.length - 8, size=self.batch_size)
            self.indexes2 = self.indexes + 4
            array = []
            for batch_idx in range(self.batch_size):
                elem=self.dataset[self.indexes[batch_idx]:self.indexes2[batch_idx]]
                array.append(elem)
            array=t.stack(array)
            # print(array.shape)

sampleclass=SampleClass()
starttime=time.time()
sampleclass.method1()
spendtime=time.time()-starttime
print('method1 time: {:.6f}'.format(spendtime))

starttime=time.time()
sampleclass.method2()
spendtime=time.time()-starttime
print('method2 time: {:.6f}'.format(spendtime))

結果如下

method1 time: 16.703726
method2 time: 1.195947

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值