- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
This useful new feature seams only possible on explicit do loops. Why was it not thought to be useful for implicit loops, i.e array assignment ? Is it too hard to implement ?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have this question about !$omp simd also, although the need for the directive is less than for explicit do loops.
I think there are 3 main ways it would be used:
1) to assert no overlap between source and destination operands, avoiding a temporary allocation and copy
2) to assert alignment. This makes me wonder how serious the designers of OpenMP 4 were. Among other things, the align clause would be more useful if it accepted a designation of which element of an array is aligned, as some of the Intel proprietary directives do. Also, I haven't found out whether the alignment clause is likely to do anything with various other compilers.
3) to suspend exception handling when using MERGE, like Intel directives VECTOR ALWAYS|ALIGNED|UNALIGNED. I use all of these. gfortran, for example, has a different mode of operation. They use compiler flags such as -ffast-math to permit suspension of exception handling, but even gfortran experts have reservations about these options. I've learned to prefer to write MERGE operations where possible such that exception handling isn't an issue, and ifort has learned not to require the directives in that case.
The question leads into the deficiencies of OpenMP in dealing with DO CONCURRENT, WHERE.. ELSEWHERE, and the like. Maybe they learned from getting bit with OpenMP 2.5 and wanted to draw the line consistently short of supporting F90.
Another point on which OpenMP falls short is the lack of a simd firstprivate clause, which seems strange when there are parallel firstprivate and simd lastprivate clauses.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In the older compilers !DIR$ VECTOR ALWAYS placed in front of an array assignment would tend to use SIMD instructions. Therefore, if you are having issues of using !DIR$ SIMD in front of an array assignment statement I suggest you try the !DIR$ VECTOR ALWAYS and then check the disassembly code (either in Debug window or from VTune).
Jim Dempsey

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page