Am 25.09.2012 17:01, schrieb Michael Mol: > On Tue, Sep 25, 2012 at 10:42 AM, James <[email protected]> wrote: >> Hello, >> >> background: >> It seems there is a major push now to put openmp: >> [1,2] into embedded systems [3]. >> >> So I looked at these [4] packages to find something >> interesting to look deeper into related to openMP. >> >> Blender immediately jumped out at me as a good example, >> cause an old friend Ken Hughes is, imho, one of the >> world's most amazing C programmers, and a stalwart at >> the blender project. >> >> >> OK, here's the question, I went to emerge blender >> and found that the openmp flag is already set. {?} >> Yet I looked everywhere and did not see the openmp flag >> set (/etc/make.conf, /etc/portage/package.use) >> so where is it getting set on my AMD workstation? >> >> [ebuild N ] media-gfx/blender-2.49b-r2 USE="ffmpeg >> nls ogg openmp -blender-game -openal -verse" >> >> I feel like I should know (profiles etc) but, I'm a little >> bit brain_dead this am, so any help is appreciated. > > Packages can choose to have USE flags enabled or disabled for them by > default. So blender likely has openmp enabled by default, without that > affecting any other packages. > >> >> OH, anyone is encouraged to "chime in" about openmp >> and your thoughts as to it's viability and usefulness. >> Do you believe it will become a core technology, >> embedded into GCC? Used widely? > > If you can use it, use it. OpenMP is little more than a set of > extensions to C (and C++) which allows the normally-scalar language to > do some things in a parallel fashion without resorting to the costs of > multithreading. This is good, because vector instructions have been > available in x86 since MMX came out, and improvements to the vector > instructions available to x86 still goes on. >
I guess this is just poorly phrased but to clarify: OpenMP *does* use multithreading and nothing else. It does not, in any way, make more use of vector instructions than GCC without -fopenmp. I guess what you mean is avoiding the costs of *manual* multithreading using POSIX threads and the like. If you want to use vector instructions for your own code, you should look into compiler intrinsics (i.e. vector instructions as built-in C functions). http://ds9a.nl/gcc-simd/ And, just to nit-pick: OpenMP also works for Fortran. > Related are CUDA and OpenCL, which are two other systems for > parallelizing code. CUDA assumes you have access to an nVidia GPU (and > have a CUDA-enabled driver installed). OpenCL is a big more generic, > and supports dispatching to CUDA, CPU vector instructions or even > thread pools. > > Personally, my recommendation is to enable everything you can get > working (be it, OpenMP, CUDA or OpenCL); vector processing is going to > be generally more efficient than scalar processing. You don't need to > worry about which is better unless you're a software developer. (And > if you're a software developer, go study up on their differences; > tradeoffs happen.) > +1 By the way: Did anyone get good results out of dev-util/intel-ocl-sdk for OpenCL? Some time ago I tested it with a package that supported both OpenMP and OpenCL (not sure which) and OpenCL didn't really make an impact on my Core i5. Regards, Florian Philipp
signature.asc
Description: OpenPGP digital signature

