Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17060 Discussions

MPI related error in offload

aketh_t_
Beginner
384 Views

Hi All,

I am trying to offload a do loop onto the intel MIC.

for every function call at its definition I added this.

!dir$ attributes offload:mic :: <function name>

The function turned out to be nested i.e each function had multiple function call within it.

Continuing I have reached a point where I got this error and I have no idea how to solve it.

/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(82): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_STATUS_IGNORE]
       INTEGER MPI_STATUS_IGNORE(MPI_STATUS_SIZE)
---------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(83): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_STATUSES_IGNORE]
       INTEGER MPI_STATUSES_IGNORE(MPI_STATUS_SIZE,1)
---------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(84): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_ERRCODES_IGNORE]
       INTEGER MPI_ERRCODES_IGNORE(1)
---------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(85): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_ARGVS_NULL]
       CHARACTER*1 MPI_ARGVS_NULL(1,1)
-------------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(86): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_ARGV_NULL]
       CHARACTER*1 MPI_ARGV_NULL(1)
-------------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(603): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_BOTTOM]
       INTEGER*4 MPI_BOTTOM, MPI_IN_PLACE, MPI_UNWEIGHTED
-----------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(603): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_IN_PLACE]
       INTEGER*4 MPI_BOTTOM, MPI_IN_PLACE, MPI_UNWEIGHTED
-----------------------------^
/opt/intel/impi/5.0.3.048/intel64/include/mpif.h(603): error #8687: A variable appearing in a DECLARE TARGET directive it must not be an element of a common block or appear in an EQUIVALENCE statement.   [MPI_UNWEIGHTED]
       INTEGER*4 MPI_BOTTOM, MPI_IN_PLACE, MPI_UNWEIGHTED

 

Thanks,

Aketh

0 Kudos
1 Reply
Frances_R_Intel
Employee
384 Views

Question - are you making calls to the MPI library from inside code that has been offloaded to the coprocessor?  If so, you might need to rethink your programming model.

When using offload, create one (or if you have multiple coprocessors, one or more) MPI ranks on the host. Within that rank, offload work to the coprocessor and use OpenMP to multitask the work.

When you want to run multiple ranks on the coprocessor or use MPI to communicate with MPI ranks on the host(s) or other coprocessors, instead of offload, compile your code to run natively on the coprocessor (and natively on the host, if needed.)

0 Kudos
Reply