On Wed, Sep 26, 2012 at 2:25 PM, Florian Philipp <[email protected]> wrote:
> 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.

Fair point.

>
> 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/

Personally, I don't like compiler intrinsics; they're specific to
given compilers. I've tended to write code which is supposed to
compile on multiple compilers. (There's a world outside GCC...)

> And, just to nit-pick: OpenMP also works for Fortran.

True; this slipped my mind. :)

>
>> 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.

Haven't tried it, no. I've got a Radeon 6870, and I can only have one
OpenCL driver loaded at a time. (IBM has a middleman driver which
supports dispatching to multiple backends, but I believe its a for-pay
package.)

-- 
:wq

Reply via email to