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

📄 paffinity_linux.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-2005 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$ *//** * @file * * Processor affinity for Linux. * * Linux sucks.  There are at least 3 different ways that * sched_setaffinity is implemented (only one of which -- the most * outdated -- is documented in the sched_setaffinity(2) man page): * *----------------------------------------------------------------- * 1. int sched_setaffinity(pid_t pid, unsigned int len, unsigned * long *mask); * * This originated in 2.5 kernels (which we won't worry about) and * some distros back-ported it to their 2.4 kernels.  It's unknown if * this appears in any 2.6 kernels. * * 2. int sched_setaffinity (pid_t __pid, size_t __cpusetsize, * const cpu_set_t *__cpuset); * * This appears to be in recent 2.6 kernels (confirmed in Gentoo * 2.6.11).  I don't know when #1 changed into #2.  However, this * prototype is nice -- the cpu_set_t type is accompanied by * fdset-like CPU_ZERO(), CPU_SET(), CPU_ISSET(), etc. macros. * * 3. int sched_setaffinity (pid_t __pid, const cpu_set_t *__mask); * * (note the missing len parameter) This is in at least some Linux * distros (e.g., MDK 10.0 with a 2.6.3 kernel, and SGI Altix, even * though the Altix uses a 2.4-based kernel and therefore likely * back-ported the 2.5 work but modified it for their needs).  Similar * to #2, the cpu_set_t type is accompanied by fdset-like CPU_ZERO(), * CPU_SET(), CPU_ISSET(), etc. macros. *----------------------------------------------------------------- * * This component has to figure out which one to use.  :-\ * * Also note that at least some distros of Linux have a broken * CPU_ZERO macro (a pair of typos in /usr/include/bits/sched.h). * MDK 9.2 is the screaming example, but it's pretty old and * probably only matters because one of the developers uses that as * a compilation machine :-) (it also appears to have been fixed in * MDK 10.0, but they also changed from #2 to #3 -- arrgh!). * However, there's no way of knowing where these typos came from * and if they exist elsewhere.  So it seems safest to extend this * configure script to check for a bad CPU_ZERO macro.  #$%#@%$@!!! */#ifndef MCA_PAFFINITY_LINUX_EXPORT_H#define MCA_PAFFINITY_LINUX_EXPORT_H#include "opal_config.h"#include "opal/mca/mca.h"#include "opal/mca/paffinity/paffinity.h"/** * Determine whether we have a working CPU_ZERO() macro or not.  If * not, use memset(). */#ifdef HAVE_CPU_ZERO#define OMPI_CPU_ZERO(foo) CPU_ZERO(foo)#else#include <string.h>#define OMPI_CPU_ZERO(foo) memset(foo, 0, sizeof(*foo))#endif#if defined(c_plusplus) || defined(__cplusplus)extern "C" {#endif    /**     * Globally exported variable     */    OPAL_DECLSPEC extern const opal_paffinity_base_component_1_0_0_t        mca_paffinity_linux_component;    /**     * paffinity query API function     */    const opal_paffinity_base_module_1_0_0_t *        opal_paffinity_linux_component_query(int *query);#if defined(c_plusplus) || defined(__cplusplus)}#endif#endif /* MCA_PAFFINITY_LINUX_EXPORT_H */

⌨️ 快捷键说明

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