⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bindings.h

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 H
字号:
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2006 The University of Tennessee and The University *                         of Tennessee Research Foundation.  All rights *                         reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,  *                         University of Stuttgart.  All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. *                         All rights reserved. * $COPYRIGHT$ *  * Additional copyrights may follow *  * $HEADER$ */#ifndef OMPI_C_BINDINGS_H#define OMPI_C_BINDINGS_H#include "ompi_config.h"#include "mpi.h"#include "ompi/communicator/communicator.h"#include "ompi/datatype/datatype.h"#include "ompi/runtime/params.h"#if defined(c_plusplus) || defined(__cplusplus)extern "C" {#endif/* If compiling in the profile directory, then we don't have weak   symbols and therefore we need the defines to map from MPI->PMPI.   NOTE: pragma weak stuff is handled on a file-by-file basis; it   doesn't work to simply list all of the pragmas in a top-level   header file. *//* These macros have to be used to check the corectness of the datatype depending on the * operations that we have to do with them. They can be used on all functions, not only * on the top level MPI functions, as they does not trigger the error handler. Is the user * responsability to do it. */#define OMPI_CHECK_DATATYPE_FOR_SEND( RC, DDT, COUNT )                  \    do {                                                                \        /* (RC) = MPI_SUCCESS; */                                       \        if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \        else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT;                    \        else if( !ompi_ddt_is_committed((DDT)) ) (RC) = MPI_ERR_TYPE;   \        else if( !ompi_ddt_is_valid((DDT)) ) (RC) = MPI_ERR_TYPE;       \    } while (0)#define OMPI_CHECK_DATATYPE_FOR_RECV( RC, DDT, COUNT )                  \    do {                                                                \        /* (RC) = MPI_SUCCESS; */                                        \        if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \        else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT;                    \        else if( !ompi_ddt_is_committed((DDT)) ) (RC) = MPI_ERR_TYPE;   \        /* XXX Fix flags else if( ompi_ddt_is_overlapped((DDT)) ) (RC) = MPI_ERR_TYPE; */ \        else if( !ompi_ddt_is_valid((DDT)) ) (RC) = MPI_ERR_TYPE;       \    } while (0)    #define OMPI_CHECK_DATATYPE_FOR_ONE_SIDED( RC, DDT, COUNT )             \    do {                                                                \        /*(RC) = MPI_SUCCESS; */                                        \        if( NULL == (DDT) || MPI_DATATYPE_NULL == (DDT) ) (RC) = MPI_ERR_TYPE; \        else if( (COUNT) < 0 ) (RC) = MPI_ERR_COUNT;                    \        else if( !ompi_ddt_is_committed((DDT)) ) (RC) = MPI_ERR_TYPE;   \        else if( ompi_ddt_is_overlapped((DDT)) ) (RC) = MPI_ERR_TYPE;   \        else if( !ompi_ddt_is_acceptable_for_one_sided((DDT)) ) (RC) = MPI_ERR_TYPE; \        else if( !ompi_ddt_is_valid((DDT)) ) (RC) = MPI_ERR_TYPE;       \    } while(0)/* This macro has to be used to check the correctness of the user buffer depending on the datatype.  * This macro expects that the DDT parameter is a valid pointer to an ompi datatype object. */#define OMPI_CHECK_USER_BUFFER(RC, BUFFER, DDT, COUNT)                  \    do {                                                                \        if ( NULL == (BUFFER) && 0 < (COUNT) && MPI_SUCCESS == (RC) ) { \            if ( (DDT)->flags & DT_FLAG_PREDEFINED ) {                  \                (RC) = MPI_ERR_BUFFER;                                  \            } else {                                                    \                size_t size = 0;                                        \                ptrdiff_t true_lb       = 0;                            \                ptrdiff_t true_extended = 0;                            \                ompi_ddt_type_size((DDT), &size);                       \                ompi_ddt_get_true_extent((DDT), &true_lb, &true_extended); \                if ( 0 < size && 0 == true_lb ) {                       \                    (RC) = MPI_ERR_BUFFER;                              \                }                                                       \            }                                                           \        }                                                               \    } while (0)    #if defined(c_plusplus) || defined(__cplusplus)}#endif#endif /* OMPI_C_BINDINGS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -