Module: Enumerable

Defined in:
lib/parallelpipes.rb

Instance Method Summary collapse

Instance Method Details

#parallel_map(*args, &block) ⇒ Object



2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
# File 'lib/parallelpipes.rb', line 2376

def parallel_map(*args, &block)
	ncpus = number_of_processors_for_parallel_map
	if args[-1].class == Hash
		options = args.pop
		ncpus = options[:n_procs] if options[:n_procs]
	end
		
	ppipe = PPipe.new(ncpus, false)
	ppipe.fork(ncpus-1) 
	i = -1
	each(*args) do |*yargs|
# 				$stderr.puts i, ppipe.mpn
		i+=1
		next unless i%ncpus == ppipe.mpn 
		value = block.call(*yargs)
# 				$stderr.puts value
		ppipe.i_send(i, Marshal.dump(value), tp: 0)
		
	end
	(ppipe.die; exit) unless ppipe.is_root
	ppipe.waitall
	i = 0
	map(*args) do |*yargs|
		value = Marshal.load(ppipe.w_recv(i))
		i+=1
		value
	end
end