Needs some "repairs" to be usable.
TParallelQueue.pop:
if index2<nbr1 then localindex:=index2+1
else localindex:=0;
if localindex > index1
then
begin
result:=false;
So, as soon as index1 wraps to 0 then there is nothing to pop anymore

More fundamentally, a fifo is supposed to pop the items in the same order as they where pushed. The problem is that the parallel use of different fifo's won't work. Example using 4 fifo's (your benchmark):
Thread 1 pushes values 1,2,3,4,5,6 and gets pre-empted pushing 7 between
index1:=localindex;
and
result:=queues[localindex mod len].push(tm);
So the 4 fifos contain:
The second thread pushes A,B,C,D,E,F. Since the 3rd fifo is "in use" by thread 1, A will be pushed starting with the next fifo: Result:
If now a 3rd thread kicks in and reads the fifo, the result is clearly wrong. Even when thread 1 comes first and finishes the push of 7, the result is still wrong (D before A):
A similar example can be created while popping from the stack.