amd / amd-fftw

FFTW code optimized for AMD based processors
GNU General Public License v2.0
48 stars 12 forks source link

fftw mpi does not compile #11

Open e-kwsm opened 3 months ago

e-kwsm commented 3 months ago
$ ./configure --enable-mpi
$ make -C mpi
make: Entering directory './mpi'
make  all-am
make[1]: Entering directory './mpi'
/bin/sh ../libtool  --tag=CC   --mode=compile mpicc -DHAVE_CONFIG_H -I. -I..  -I .. -I ../api   -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT transpose-pairwise-omc.lo -MD -MP -MF .deps/transpose-pairwise-omc.Tpo -c -o transpose-pairwise-omc.lo transpose-pairwise-omc.c
libtool: compile:  mpicc -DHAVE_CONFIG_H -I. -I.. -I .. -I ../api -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT transpose-pairwise-omc.lo -MD -MP -MF .deps/transpose-pairwise-omc.Tpo -c transpose-pairwise-omc.c  -fPIC -DPIC -o .libs/transpose-pairwise-omc.o
transpose-pairwise-omc.c: In function 'transpose_chunks':
transpose-pairwise-omc.c:108:115: error: passing argument 7 of 'MPI_Isend' from incompatible pointer type [-Wincompatible-pointer-types]
  108 |                    MPI_Isend(buf[j&0x1], (int) (sbs[pe]), FFTW_MPI_TYPE, pe, (my_pe * n_pes + pe) & 0xffff, comm, &send_status);
      |                                                                                                                   ^~~~~~~~~~~~
      |                                                                                                                   |
      |                                                                                                                   MPI_Status * {aka struct ompi_status_public_t *}
In file included from ifftw-mpi.h:28,
                 from mpi-transpose.h:22,
                 from transpose-pairwise-omc.c:32:
/usr/include/mpi.h:1783:67: note: expected 'struct ompi_request_t **' but argument is of type 'MPI_Status *' {aka 'struct ompi_status_public_t *'}
 1783 |                              int tag, MPI_Comm comm, MPI_Request *request);
      |                                                      ~~~~~~~~~~~~~^~~~~~~
transpose-pairwise-omc.c:109:116: error: passing argument 7 of 'MPI_Irecv' from incompatible pointer type [-Wincompatible-pointer-types]
  109 |                    MPI_Irecv(O + rbo[pe], (int) (rbs[pe]), FFTW_MPI_TYPE, pe, (pe * n_pes + my_pe) & 0xffff, comm, &recv_status);
      |                                                                                                                    ^~~~~~~~~~~~
      |                                                                                                                    |
      |                                                                                                                    MPI_Status * {aka struct ompi_status_public_t *}
/usr/include/mpi.h:1779:67: note: expected 'struct ompi_request_t **' but argument is of type 'MPI_Status *' {aka 'struct ompi_status_public_t *'}
 1779 |                              int tag, MPI_Comm comm, MPI_Request *request);
      |                                                      ~~~~~~~~~~~~~^~~~~~~
transpose-pairwise-omc.c:113:29: error: passing argument 1 of 'MPI_Wait' from incompatible pointer type [-Wincompatible-pointer-types]
  113 |                    MPI_Wait(&send_status, MPI_STATUS_IGNORE);
      |                             ^~~~~~~~~~~~
      |                             |
      |                             MPI_Status * {aka struct ompi_status_public_t *}
/usr/include/mpi.h:2099:42: note: expected 'struct ompi_request_t **' but argument is of type 'MPI_Status *' {aka 'struct ompi_status_public_t *'}
 2099 | OMPI_DECLSPEC  int MPI_Wait(MPI_Request *request, MPI_Status *status);
      |                             ~~~~~~~~~~~~~^~~~~~~
transpose-pairwise-omc.c:114:29: error: passing argument 1 of 'MPI_Wait' from incompatible pointer type [-Wincompatible-pointer-types]
  114 |                    MPI_Wait(&recv_status, MPI_STATUS_IGNORE);
      |                             ^~~~~~~~~~~~
      |                             |
      |                             MPI_Status * {aka struct ompi_status_public_t *}
/usr/include/mpi.h:2099:42: note: expected 'struct ompi_request_t **' but argument is of type 'MPI_Status *' {aka 'struct ompi_status_public_t *'}
 2099 | OMPI_DECLSPEC  int MPI_Wait(MPI_Request *request, MPI_Status *status);
      |                             ~~~~~~~~~~~~~^~~~~~~
transpose-pairwise-omc.c: In function 'apply':
transpose-pairwise-omc.c:177:36: warning: passing argument 11 of 'transpose_chunks' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
  177 |                ego->comm, O, I, ego->send_block_bufs);
      |                                 ~~~^~~~~~~~~~~~~~~~~
transpose-pairwise-omc.c:56:34: note: expected 'R **' {aka 'double **'} but argument is of type 'R * const*' {aka 'double * const*'}
   56 |                  R *I, R *O, R **bufs)
      |                              ~~~~^~~~
transpose-pairwise-omc.c:184:36: warning: passing argument 11 of 'transpose_chunks' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
  184 |                ego->comm, I, O, ego->send_block_bufs);
      |                                 ~~~^~~~~~~~~~~~~~~~~
transpose-pairwise-omc.c:56:34: note: expected 'R **' {aka 'double **'} but argument is of type 'R * const*' {aka 'double * const*'}
   56 |                  R *I, R *O, R **bufs)
      |                              ~~~~^~~~
transpose-pairwise-omc.c:193:36: warning: passing argument 11 of 'transpose_chunks' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
  193 |                ego->comm, I, I, ego->send_block_bufs);
      |                                 ~~~^~~~~~~~~~~~~~~~~
transpose-pairwise-omc.c:56:34: note: expected 'R **' {aka 'double **'} but argument is of type 'R * const*' {aka 'double * const*'}
   56 |                  R *I, R *O, R **bufs)
      |                              ~~~~^~~~
make[1]: *** [Makefile:576: transpose-pairwise-omc.lo] Error 1
make[1]: Leaving directory './mpi'
make: *** [Makefile:432: all] Error 2
make: Leaving directory './mpi'

As shown, MPI_Request must be passed. See MPI 4.1 Standard §3.7.2 Communication Initiation.