On Mon, Jun 22, 2009 at 11:16, Jan Hidders<[email protected]> wrote:
>>> So it will now say that if a processor iterates over [["a","b"],[], >>> ["c"]] the iteration for position 1 will not start until the messages >>> for position 1.1 (the string "a"), position 1.2 (the string "b") and >>> position 1 (closing the list). This would be correct, yes? >> I am confused, this depends on the depth of the input ports. If input >> ports are all depth 0, no invocation would be done, as the second >> input port is presented with [] - iteration over an empty list yields >> no iterations. > Sorry. I assumed nesting depth 1 for the port. OK, now I get you :-) Then yeah, it would wait until a full list was available, either ["a", "b"], [] or ["c"] (if these are made by iterations, and multithreading or merges are in effect above, [] or ["c"] might come first). The full list is always sent AFTER the individual items inside it, so it would implicitly mean after "a" and "b" have been produced. > We thought you meant (when we discussed pipelined services) pipelining > at a lower level than the level at which the iteration happens. Let me > try to explain. Assume a processor P with one input and one output > port. Suppose we iterate over the list ["a", "b"]. The input port has > nesting depth 1 so P iterates over the strings. No - there would be no iteration in this case if the port depth is 1, remember 1 is list of values, depth 0 is an individual value. I assume below that you mean the port has depth 0, which means there would be two iterations. > Let's say for the > first iteration (for value "a") the result is ["x", "y"]. for the > second iteration (for value "b") the result is ["u"]. OK, so the output port does have depth 1. > Currently we > allow that the "x" can rise through the invocation stack and could > even be already consumed by another processor. So we don't wait for > the "y" value to arrive or the list to be closed. Yes, this can happen with pipelining processors, like BioMart. The processor would have to return, assuming the outputport is called "o1": [0]: o1="x" [1]: o1="y" []: o1 = ["x", "y"] [0] or [1] can come in any order, but the [] must come after them. (In an extended version with depth 2 indexes, [2,1] must come before [2] - but that does not mean that [3,4] can't come before [2]. ) > We assumed that this > is the kind of pipelining you wanted. What we already had is that the > value ["x", "y"] is produced and can be consumed by the next processor > without waiting for ["u"]. OK, I got confused and thought you meant different output ports. In this example there's only one input port and one output port. Unless the next processor is expecting depth 2 (lists of lists) then yes, it can start crunching on ["x", "y"] before ["u"] is produced. If the processor is expecting depth 0 it can even start before "y" is produced (but this would mean that the producing processor needs to support activity pipelining). -- Stian Soiland-Reyes, myGrid team School of Computer Science The University of Manchester ------------------------------------------------------------------------------ Are you an open source citizen? Join us for the Open Source Bridge conference! Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. Need another reason to go? 24-hour hacker lounge. Register today! http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org _______________________________________________ taverna-hackers mailing list [email protected] Web site: http://www.taverna.org.uk Mailing lists: http://www.taverna.org.uk/taverna-mailing-lists/ Developers Guide: http://www.mygrid.org.uk/tools/developer-information
