I don't do much python so I might be wrong but to my understanding, this:
job = job_server.submit(rxx_func, (arg_n,), (), ())
just submits a single job but it doesn't automatically parallelize it. If you want to process the input in parallel you need to submit n
jobs each working on 1-nth of the input and then combine the results. I think your parallel execution code should look something like this:
slice_size = len(magn) / ncp;
# submit a job for each chunk
jobs = [job_server.submit(rxx_func, (magn,(i-1)*slice_size, slice_size), (), ()) for i in ncp]xrange(ncp)]
# combine the results into one list, requires #import itertools
rxx = list(itertools.chain.from_iterable([job() for job in jobs]))
You will have to change your rxx_func
to accept a start index and a count which defines for how many items it is responsible:
def rxx_func(amp, start_index, count):
N = len(amp)
rxx = [0]*count
for m in xrange(start_index, start_index + count - 1):
for n in xrange(N-m):
rxx[m]+=amp[n]*amp[n+m]
return rxx
I'm sure there is plenty which can be optimized in the above.