praxes / hexrd

Legacy hexrd repository (python2.7)
http://hexrd.readthedocs.org
14 stars 42 forks source link

efficency deficiency in findorientations.generate_orientation_fibers #74

Open ddale opened 9 years ago

ddale commented 9 years ago

I'm attempting to run find-orientations on a more interesting sample, one with a few hundred orientations as opposed to ~4. It takes about 3.5 minutes before find-orientations gets to the point where it starts multiprocessing on paintGrid. I think the bottleneck is in findorientations.generate_orientation_fibers. An abort yielded:

  File "/home/darren/Projects/hexrd/hexrd/findorientations.py", line 130, in generate_orientation_fibers
    qfib.append(mutil.uniqueVectors(qfib_tmp))
  File "/home/darren/Projects/hexrd/hexrd/matrixutil.py", line 530, in uniqueVectors
    if any(ivSrt[:, col] != ivSrt[:, col -1]):
KeyboardInterrupt

And inspecting the function, I see:

for i in range(len(pd_hkl_ids)):
    for ispot in range(numSpots[i]):

Seems like a candidate for optimization at some point.

joelvbernier commented 9 years ago

Agreed. For more densely populated samples it may be more efficient to skip the generation stage and load a fixed grid (an npz file perhaps) on orientation space. The machinery is there, we just have to decide where we would store the pretabulated grids

Sent from my iPhone

On Nov 25, 2014, at 9:15 AM, Darren Dale notifications@github.com wrote:

I'm attempting to run find-orientations on a more interesting sample, one with a few hundred orientations as opposed to ~4. It takes about 3.5 minutes before find-orientations gets to the point where it starts multiprocessing on paintGrid. I think the bottleneck is in findorientations.generate_orientation_fibers. An abort yielded:

File "/home/darren/Projects/hexrd/hexrd/findorientations.py", line 130, in generate_orientation_fibers qfib.append(mutil.uniqueVectors(qfib_tmp)) File "/home/darren/Projects/hexrd/hexrd/matrixutil.py", line 530, in uniqueVectors if any(ivSrt[:, col] != ivSrt[:, col -1]): KeyboardInterrupt And inspecting the function, I see:

for i in range(len(pd_hkl_ids)): for ispot in range(numSpots[i]): Seems like a candidate for optimization at some point.

— Reply to this email directly or view it on GitHub.

joelvbernier commented 9 years ago

Darren: the other issue for the seeded approach is not to take too fine of steps on the fiber. Heuristic ally, anything below 0.5 degree steps is probably overkill, and will lead to very large search spaces (>5e6 points) in which case a full grid would be more appropriate.

Sent from my iPhone

On Nov 25, 2014, at 9:15 AM, Darren Dale notifications@github.com wrote:

I'm attempting to run find-orientations on a more interesting sample, one with a few hundred orientations as opposed to ~4. It takes about 3.5 minutes before find-orientations gets to the point where it starts multiprocessing on paintGrid. I think the bottleneck is in findorientations.generate_orientation_fibers. An abort yielded:

File "/home/darren/Projects/hexrd/hexrd/findorientations.py", line 130, in generate_orientation_fibers qfib.append(mutil.uniqueVectors(qfib_tmp)) File "/home/darren/Projects/hexrd/hexrd/matrixutil.py", line 530, in uniqueVectors if any(ivSrt[:, col] != ivSrt[:, col -1]): KeyboardInterrupt And inspecting the function, I see:

for i in range(len(pd_hkl_ids)): for ispot in range(numSpots[i]): Seems like a candidate for optimization at some point.

— Reply to this email directly or view it on GitHub.

joelvbernier commented 9 years ago

Perhaps we should get Oscar involved in optimizing this function?