mpi-forum / mpi-forum-historic

Migration of old MPI Forum Trac Tickets to GitHub. New issues belong on mpi-forum/mpi-issues.
http://www.mpi-forum.org
2 stars 3 forks source link

MPI-3.0 errata: Solving the FORTRAN LOGICAL and BIND(C) problem. #364

Closed mpiforumbot closed 8 years ago

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-03 09:16:37 -0600


This ticket is withdrawn. Solutions are in new tickets:

MPI-3.0 has some inconsistencies in the new Fortran bindings, which must be corrected with MPI-3.0 errata.

The MPI-3.0 mpi_f08 module was based on the assumption that Fortran LOGICAL is interoperable with C. This is not the case in Fortran 2008 nor in the addendum TS 29113. With the proposed errata, it is no more required that LOGICAL is interoperable.

The inconsistencies, i.e., the reasons for the corrections, are also described within the 'solutions' section. See also the added advice to implementors.

Extended Scope

MPI-3.0 errata.

History

Proposed Solution (as MPI-3.0 errata)

(The underlining shows the changes: Removals are underlined in the cited existing text, new text is underlined in the proposed new text. [[BR]] The reasons should not be copied to the errata document on the web because they are only background information for the MPI Forum. [[BR]] The comments about an attached pdf are still placeholders.)

[[BR]]

[[BR]]

[[BR]]

[[BR]]

[[BR]]

[[BR]]

[BR]]

[[BR]]

[[BR]]

Because these changes are in within the MPI mpi_f08 interfaces, these errata must be applied before the new interfaces are implemented.

Impact on Applications / Users

When using the described MPI callback routine interfaces, the user should be aware of these errata, otherwise the compiler may return an error message.

Alternative Solutions

None.

Entry for the Change Log

To be done.

Voting category

This is a simple correction of an inconsistency.[[BR]] Therefore single reading+vote is recommended.

This ticket should be voted after it is checked in a first real MPI-3.0 Fortran mpi_f08 implementation.

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-07 03:49:11 -0600


I added an additional sentence at the end of the advice on page 209 to make clear that Column "Upgrade to TS 29113" is enough to achive MPI_SUBARRAYS_SUPORTED == .TRUE. .

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-07 07:01:58 -0600


Some typo corrections.

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-25 08:19:40 -0500


In this proposal #364, we remove BIND(C) from

MPI_Iprobe(source, tag, comm, flag, status, ierror) 
MPI_Request_get_status(request, flag, status, ierror) 
MPI_Test(request, flag, status, ierror) 
MPI_Testall(count, array_of_requests, flag, array_of_statuses, ierror) 
MPI_Testany(count, array_of_requests, index, flag, status, ierror) 
MPI_Test_cancelled(status, flag, ierror) 
MPI_Op_commutative(op, commute, ierror) 
MPI_Comm_get_attr(comm, comm_keyval, attribute_val, flag, ierror) 
MPI_Comm_test_inter(comm, flag, ierror) 
MPI_Intercomm_merge(intercomm, high, newintracomm, ierror) 
MPI_Type_get_attr(datatype, type_keyval, attribute_val, flag, ierror) 
MPI_Win_get_attr(win, win_keyval, attribute_val, flag, ierror) 
MPI_Cart_create(comm_old, ndims, dims, periods, reorder, comm_cart, ierror) 
MPI_Cart_get(comm, maxdims, dims, periods, coords, ierror) 
MPI_Cart_map(comm, ndims, dims, periods, newrank, ierror) 
MPI_Cart_sub(comm, remain_dims, newcomm, ierror) 
MPI_Dist_graph_create(comm_old, n, sources, degrees, destinations, weights, info, reorder, comm_dist_graph, ierror) 
MPI_Dist_graph_create_adjacent(comm_old, indegree, sources, sourceweights, outdegree, destinations, destweights, info, reorder, comm_dist_graph, ierror) 
MPI_Dist_graph_neighbors_count(comm, indegree, outdegree, weighted, ierror) 
MPI_Graph_create(comm_old, nnodes, index, edges, reorder, comm_graph, ierror) 
MPI_Finalized(flag, ierror) 
MPI_Initialized(flag, ierror) 
MPI_Info_get(info, key, valuelen, value, flag, ierror) 
MPI_Info_get_valuelen(info, key, valuelen, flag, ierror) 
MPI_Win_test(win, flag, ierror) 
MPI_Is_thread_main(flag, ierror) 
MPI_Status_set_cancelled(status, flag, ierror) 
MPI_File_get_atomicity(fh, flag, ierror) 
MPI_File_set_atomicity(fh, flag, ierror) 
MPI_Comm_create_keyval(comm_copy_attr_fn, comm_delete_attr_fn, comm_keyval, extra_state, ierror) 
MPI_Type_create_keyval(type_copy_attr_fn, type_delete_attr_fn, type_keyval, extra_state, ierror) 
MPI_Win_create_keyval(win_copy_attr_fn, win_delete_attr_fn, win_keyval, extra_state, ierror) 
MPI_Comm_create_errhandler(comm_errhandler_fn, errhandler, ierror) 
MPI_File_create_errhandler(file_errhandler_fn, errhandler, ierror) 
MPI_Win_create_errhandler(win_errhandler_fn, errhandler, ierror) 
MPI_Grequest_start(query_fn, free_fn, cancel_fn, extra_state, request, ierror) 
MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state, ierror) 
MPI_Op_create(user_fn, commute, op, ierror) 
MPI_COMM_DUP_FN(oldcomm, comm_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_COMM_NULL_COPY_FN(oldcomm, comm_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_COMM_NULL_DELETE_FN(comm, comm_keyval, attribute_val, extra_state, ierror) 
MPI_TYPE_DUP_FN(oldtype, type_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_TYPE_NULL_COPY_FN(oldtype, type_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_TYPE_NULL_DELETE_FN(datatype, type_keyval, attribute_val, extra_state, ierror) 
MPI_WIN_DUP_FN(oldwin, win_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_WIN_NULL_COPY_FN(oldwin, win_keyval, extra_state, attribute_val_in, attribute_val_out, flag, ierror) 
MPI_WIN_NULL_DELETE_FN(win, win_keyval, attribute_val, extra_state, ierror) 
MPI_CONVERSION_FN_NULL(userbuf, datatype, count, filebuf, position, extra_state, ierror)

i.e., from 48 out of 357 MPI routines.

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-25 08:37:34 -0500


I added a typo correction that is related to the routine groupes in the same section 17.1.5:

MPI_COMM_KEYVAL_CREATE --> MPI_COMM_CREATE_KEYVAL

mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-03-28 13:35:09 -0500


Another problem are the character string arguments in 32 routines.

Here the list of the routines:

MPI_Add_error_string(errorcode, string, ierror) 
MPI_Close_port(port_name, ierror) 
MPI_Comm_accept(port_name, info, root, comm, newcomm, ierror) 
MPI_Comm_connect(port_name, info, root, comm, newcomm, ierror) 
MPI_Comm_set_name(comm, comm_name, ierror) 
MPI_Comm_spawn(command, argv, maxprocs, info, root, comm, intercomm, array_of_errcodes, ierror) 
MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes, ierror) 
MPI_File_delete(filename, info, ierror) 
MPI_File_open(comm, filename, amode, info, fh, ierror) 
MPI_File_set_view(fh, disp, etype, filetype, datarep, info, ierror) 
MPI_Info_delete(info, key, ierror) 
MPI_Info_get_valuelen(info, key, valuelen, flag, ierror) 
MPI_Info_set(info, key, value, ierror) 
MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, outsize, position, ierror) 
MPI_Pack_external_size(datarep, incount, datatype, size, ierror) 
MPI_Publish_name(service_name, info, port_name, ierror) 
MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state, ierror) 
MPI_Type_set_name(datatype, type_name, ierror) 
MPI_Unpack_external(datarep, inbuf, insize, position, outbuf, outcount, datatype, ierror) 
MPI_Unpublish_name(service_name, info, port_name, ierror) 
MPI_Win_set_name(win, win_name, ierror) 
MPI_File_get_view(fh, disp, etype, filetype, datarep, ierror) 
MPI_Info_get_nthkey(info, n, key, ierror) 
MPI_Comm_get_name(comm, comm_name, resultlen, ierror) 
MPI_Error_string(errorcode, string, resultlen, ierror) 
MPI_Get_library_version(version, resultlen, ierror) 
MPI_Get_processor_name(name, resultlen, ierror) 
MPI_Open_port(info, port_name, ierror) 
MPI_Type_get_name(datatype, type_name, resultlen, ierror) 
MPI_Win_get_name(win, win_name, resultlen, ierror) 
MPI_Lookup_name(service_name, info, port_name, ierror) 
MPI_Info_get(info, key, valuelen, value, flag, ierror) 

Special cases are:

MPI_Comm_spawn(command, argv, maxprocs, info, root, comm, intercomm, array_of_errcodes, ierror) 
MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes, ierror) 
MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes, ierror) 

All these routines are currently in routine group MPI_COMM_RANK, except:

MPI_Info_get(info, key, valuelen, value, flag, ierror) 
MPI_Info_get_valuelen(info, key, valuelen, flag, ierror) 
MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state, ierror) 
mpiforumbot commented 8 years ago

Originally by RolfRabenseifner on 2013-08-13 08:24:54 -0500


This ticket was withdrawn and substituted by the new solution in ticket #388.