private void receive_pairs_iteration(IPortTypeIterator output_instance, int senders_size, IDictionary<int,Tuple<int,int>> unit_ref)
		{
			while (true)    // next iteration
			{
				int count_finished_streams = 0;
				while (count_finished_streams == 0)     // take next chunk ... 
				{  
					// PERFORM
					for (int i = 0; i < senders_size; i++) 
					{
						IList<object /*IKVPairInstance<ORK,ORV>*/> buffer;
						CompletedStatus status;
						Split_channel.Receive (unit_ref [i], MPI.Communicator.anyTag, out buffer, out status);
						foreach (object /*IKVPairInstance<ORK,ORV>*/ kv in buffer)
							output_instance.put (kv);
						if (status.Tag == TAG_SPLIT_PAIR_FINISH)
							count_finished_streams++;
					}	
					output_instance.finish ();

					Debug.Assert (count_finished_streams == 0 || count_finished_streams == senders_size);

					// CHUNK_READY
					Task_port_split.invoke (ITaskPortAdvance.CHUNK_READY);
				}

				// send empty iterator to inform the mappers the end of the iteration ...
				output_instance.finish ();

			}
		}
コード例 #2
0
        private void file_reader()
        {
            string fileName = System.Environment.GetEnvironmentVariable("PATH_GRAPH_FILE");

            IInputFormatInstance extractor_input_format = (IInputFormatInstance)server.fetchFileContentObject();

            extractor_input_format.PARTITION_SIZE = partition_size;
            IDictionary <int, IInputFormatInstance> sub_formats = extractor_input_format.extractBins(fileName);

            this.PartitionTABLE = extractor_input_format.PartitionTABLE;

            foreach (IInputFormatInstance shard in sub_formats.Values)
            {
                IKVPairInstance <IInteger, IInputFormat> item = (IKVPairInstance <IInteger, IInputFormat>)client.createItem();
                int first_vertex_id_from_partition            = shard.firstVertex(shard.PARTID);
                ((IIntegerInstance)item.Key).Value = first_vertex_id_from_partition;                 //counter_write_global;
                item.Value = shard;
                client.put(item);

                counter_write_chunk++;                 //counter_write_global++;

                if (counter_write_chunk >= CHUNK_SIZE)
                {
                    Console.WriteLine("NEW CHUNK size=" + counter_write_chunk);
                    counter_write_chunk = 0;
                    client.finish();
                }
            }

            client.finish();

            client.finish();

            Console.WriteLine("FINISHING READING DATA SOURCE");
        }
コード例 #3
0
        private void receive_pairs_iteration(IPortTypeIterator output_instance, int senders_size, Tuple <int, int> unit_ref)
        {
            CompletedStatus status;

            do
            {
                Console.WriteLine("SPLITER WRITE SINK 7-1 facet=" + unit_ref.Item1 + "/rank=" + unit_ref.Item2);
                IList <IKVPairInstance <OKey, OValue> > buffer;
                lock (cs_recv) Split_channel.Receive(unit_ref, MPI.Communicator.anyTag, out buffer, out status);
                foreach (IKVPairInstance <OKey, OValue> kv in buffer)
                {
                    output_instance.put(kv);
                }
                Console.WriteLine("SPLITER WRITE SINK 7-2 facet=" + unit_ref.Item1 + "/rank=" + unit_ref.Item2);
            } while (status.Tag == TAG_SPLIT_NEW_CHUNK);


            Console.WriteLine("SPLITER WRITE SINK - OUTPUT RECEIVED");
        }