nmoehrle / mvs-texturing

Algorithm to texture 3D reconstructions from multi-view stereo images
Other
933 stars 328 forks source link

NEON/Pure CPU backend for mapmap branch? #78

Closed donlk closed 6 years ago

donlk commented 7 years ago

I suspect the development of this library is moving forward to dropping GCO and mrf, replacing both with mapmap. As of now (to my knowledge) only SSE/AVX support is available for the CPU backend of mapmap , which immediately locks out other major architectures, like ARM. Are there any plans to provide a NEON contribution to mapmap or add a local, pure CPU graph solver alternative?

regards, donlk

dthuerck commented 7 years ago

As the main developer of mapmap, I might be able to help here.

First, mapmap detects your system's vector width at compile time by exploiting gcc's -march=native command. If neither SSE nor AVX1/2 is detected, it reverts back to vector width 1 (aka float/double), thus compiling and executing the mapmap part should be possible.

Second, we depend on TBB for parallelization. My experiments with OpenMP have definitely shown an advantage for TBB, so I'd like to keep it. That being said, compiling and using TBB on ARM platforms is definitely possible. Here's a quick how-to for TBB 4.4 on the Raspberry Pi (an ARM machine, AFAIK): Intel TBB on Raspberry Pi.

All in all, there should be no immediate problems with executing mapmap on ARM platforms. If you encounter any though, we'd love your feedback ;)

[BTW: A NEON path for mapmap would be absolutely awesome - unfortunately, I don't have enough time on my hands. Any help here is appreciated :)]

donlk commented 6 years ago

Thanks for your input! I'll definitely keep an eye on mapmap.