[OMPI users] Use of __float128 with openmpi
Hi all, I have a question on datatypes in openmpi: Is there an (easy?) way to use __float128 variables with openmpi? Specifically, functions like MPI_Allreduce seem to give weird results with __float128. Essentially all I found was http://beige.ucs.indiana.edu/I590/node100.html where they state MPI_LONG_DOUBLE This is a quadruple precision, 128-bit long floating point number. But as far as I have seen, MPI_LONG_DOUBLE is only used for long doubles. The Open MPI Version is 1.6.3 and gcc is 4.7.3 on a x86_64 machine. Any help or comment is very appreciated! Best regards, Patrick
Re: [OMPI users] Use of __float128 with openmpi
Hello Jeff, thank you a lot for your reply! On 01.02.2014, at 23:07, Jeff Hammond wrote: > See Section 5.9.5 of MPI-3 or the section named "User-Defined > Reduction Operations" but presumably numbered differently in older > copies of the MPI standard. > > An older but still relevant online reference is > http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report/node107.htm > In this example they construct this "datatype" - typedef struct { double real,imag; } Complex - and later - MPI_Datatype ctype; /* explain to MPI how type Complex is defined */ MPI_Type_contiguous(2, MPI_DOUBLE, &ctype); - Do I understand correctly that I have to find out how __float128 is constructed internally and convert it to a form which is compatible with the standard MPI Datatypes? In an analogue way as they do in the example. Up to now, I only found out that __float128 should be somehow the sum of two doubles. Again, I am grateful for any help! Best regards, Patrick > On Sat, Feb 1, 2014 at 2:28 PM, Tim Prince wrote: >> >> On 02/01/2014 12:42 PM, Patrick Boehl wrote: >>> >>> Hi all, >>> >>> I have a question on datatypes in openmpi: >>> >>> Is there an (easy?) way to use __float128 variables with openmpi? >>> >>> Specifically, functions like >>> >>> MPI_Allreduce >>> >>> seem to give weird results with __float128. >>> >>> Essentially all I found was >>> >>> http://beige.ucs.indiana.edu/I590/node100.html >>> >>> where they state >>> >>> MPI_LONG_DOUBLE >>> This is a quadruple precision, 128-bit long floating point number. >>> >>> >>> But as far as I have seen, MPI_LONG_DOUBLE is only used for long doubles. >>> >>> The Open MPI Version is 1.6.3 and gcc is 4.7.3 on a x86_64 machine. >>> >> It seems unlikely that 10 year old course notes on an unspecified MPI >> implementation (hinted to be IBM power3) would deal with specific details of >> openmpi on a different architecture. >> Where openmpi refers to "portable C types" I would take long double to be >> the 80-bit hardware format you would have in a standard build of gcc for >> x86_64. You should be able to gain some insight by examining your openmpi >> build logs to see if it builds for both __float80 and __float128 (or >> neither). gfortran has a 128-bit data type (software floating point >> real(16), corresponding to __float128); you should be able to see in the >> build logs whether that data type was used. >> >> >> ___ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users > > > > -- > Jeff Hammond > jeff.scie...@gmail.com > ___ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users
Re: [OMPI users] Use of __float128 with openmpi
Hello Tim, thank you for your reply! On 01.02.2014, at 21:28, Tim Prince wrote: > Where openmpi refers to "portable C types" I would take long double to be the > 80-bit hardware format you would have in a standard build of gcc for x86_64. > You should be able to gain some insight by examining your openmpi build logs > to see if it builds for both __float80 and __float128 (or neither). Unfortunately, these are not my machines, so I do not have access to any build logs. But I will talk to the admins and/or I try to compile openmpi myself. Best regards, Patrick
Re: [OMPI users] Use of __float128 with openmpi
Hello George, thank you a lot! Everything seems to work now! :) Best, Patrick On 02.02.2014, at 14:15, George Bosilca wrote: > Just go for the most trivial: > > MPI_Type_contiguous(sizeof(__float128), MPI_BYTE, &my__float128); > > A little bit more info about the optional quad-precision floating-point > format is available on Wikipedia > (https://en.wikipedia.org/wiki/Double-double_%28arithmetic%29#Double-double_arithmetic). > > George. > > > On Feb 2, 2014, at 13:41 , Patrick Boehl > wrote: > >> Hello Jeff, >> >> thank you a lot for your reply! >> >> On 01.02.2014, at 23:07, Jeff Hammond wrote: >> >>> See Section 5.9.5 of MPI-3 or the section named "User-Defined >>> Reduction Operations" but presumably numbered differently in older >>> copies of the MPI standard. >>> >>> An older but still relevant online reference is >>> http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report/node107.htm >>> >> >> In this example they construct this "datatype" >> >> - >> typedef struct { >> double real,imag; >> } Complex >> - >> >> and later >> >> - >> MPI_Datatype ctype; >> /* explain to MPI how type Complex is defined >> */ >> MPI_Type_contiguous(2, MPI_DOUBLE, &ctype); >> - >> >> Do I understand correctly that I have to find out how __float128 is >> constructed internally and >> convert it to a form which is compatible with the standard MPI Datatypes? >> In an analogue way as they do in the example. Up to now, I only found out >> that __float128 should >> be somehow the sum of two doubles. >> >> Again, I am grateful for any help! >> >> Best regards, >> Patrick >> >> >> >> >>> On Sat, Feb 1, 2014 at 2:28 PM, Tim Prince wrote: >>>> >>>> On 02/01/2014 12:42 PM, Patrick Boehl wrote: >>>>> >>>>> Hi all, >>>>> >>>>> I have a question on datatypes in openmpi: >>>>> >>>>> Is there an (easy?) way to use __float128 variables with openmpi? >>>>> >>>>> Specifically, functions like >>>>> >>>>> MPI_Allreduce >>>>> >>>>> seem to give weird results with __float128. >>>>> >>>>> Essentially all I found was >>>>> >>>>> http://beige.ucs.indiana.edu/I590/node100.html >>>>> >>>>> where they state >>>>> >>>>> MPI_LONG_DOUBLE >>>>> This is a quadruple precision, 128-bit long floating point number. >>>>> >>>>> >>>>> But as far as I have seen, MPI_LONG_DOUBLE is only used for long doubles. >>>>> >>>>> The Open MPI Version is 1.6.3 and gcc is 4.7.3 on a x86_64 machine. >>>>> >>>> It seems unlikely that 10 year old course notes on an unspecified MPI >>>> implementation (hinted to be IBM power3) would deal with specific details >>>> of >>>> openmpi on a different architecture. >>>> Where openmpi refers to "portable C types" I would take long double to be >>>> the 80-bit hardware format you would have in a standard build of gcc for >>>> x86_64. You should be able to gain some insight by examining your openmpi >>>> build logs to see if it builds for both __float80 and __float128 (or >>>> neither). gfortran has a 128-bit data type (software floating point >>>> real(16), corresponding to __float128); you should be able to see in the >>>> build logs whether that data type was used. >>>> >>>> >>>> ___ >>>> users mailing list >>>> us...@open-mpi.org >>>> http://www.open-mpi.org/mailman/listinfo.cgi/users >>> >>> >>> >>> -- >>> Jeff Hammond >>> jeff.scie...@gmail.com >>> ___ >>> users mailing list >>> us...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/users >> >> ___ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users > > ___ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users