Exemplo n.º 1
0
 public _MultiWorkerIter(WorkerPool worker_pool, Func <NDArrayList, NDArrayList> batchify_fn,
                         BatchSampler batch_sampler,
                         bool pin_memory = false, int pin_device_id     = 0, WorkerFn worker_fn        = null,
                         int prefetch    = 0, Dataset <NDArray> dataset = null, DataLoader data_loader = null)
 {
     _worker_pool   = worker_pool;
     _batchify_fn   = batchify_fn;
     _batch_sampler = batch_sampler;
     _data_buffer   = new Dictionary <int, NDArrayList>();
     _rcvd_idx      = 0;
     _sent_idx      = 0;
     _iter          = _batch_sampler.GetEnumerator();
     _worker_fn     = worker_fn;
     _pin_memory    = pin_memory;
     _pin_device_id = pin_device_id;
     _dataset       = dataset;
     _data_loader   = data_loader;
     foreach (var item in Enumerable.Range(0, prefetch))
     {
         PushNext();
     }
 }
 public _RandomTransformMultiWorkerIter(Func <NDArray, NDArray>[] transform_fns, int interval, WorkerPool worker_pool, Func <NDArrayList, NDArrayList> batchify_fn, BatchSampler batch_sampler, bool pin_memory = false, int pin_device_id = 0, WorkerFn worker_fn = null, int prefetch = 0) : base(worker_pool, batchify_fn, batch_sampler, pin_memory, pin_device_id, worker_fn, prefetch)
 {
     throw new NotImplementedException();
 }
        public _MultiWorkerIterV1(int num_workers, Dataset <NDArray> dataset, Func <NDArrayList, NDArrayList> batchify_fn,
                                  BatchSampler batch_sampler, bool pin_memory = false, int pin_device_id = 0, WorkerFn worker_fn = null)
        {
            if (num_workers == 0)
            {
                throw new Exception($"_MultiWorkerIter is not for {num_workers} workers");
            }

            _num_workers      = num_workers;
            _dataset          = dataset;
            _batchify_fn      = batchify_fn;
            _batch_sampler    = batch_sampler;
            _key_queue        = new Queue <int>();
            _data_queue       = new Queue <NDArray>();
            _data_buffer      = new Dictionary <int, NDArrayList>();
            _data_buffer_lock = new object();
            _rcvd_idx         = 0;
            _sent_idx         = 0;
            _iter             = _batch_sampler.GetEnumerator();
            _shutdown         = false;

            _workers = new List <Thread>();
            for (var i = 0; i < _num_workers; i++)
            {
                var t = new Thread(obj => { worker_fn(_dataset, _key_queue, _data_queue, _batchify_fn); });

                t.IsBackground = true;
                t.Start();
                _workers.Add(t);
            }

            _fetcher = new Thread(obj =>
            {
                DataLoader.FetcherLoopV1(_data_queue, _data_buffer, pin_memory, pin_device_id, _data_buffer_lock);
            });

            _fetcher.IsBackground = true;
            _fetcher.Start();

            for (var i = 0; i < 2 * _num_workers; i++)
            {
                PushNext();
            }
        }