Update to PLPA v1.2b3. Sorry again for the mid-day configure change...
This commit was SVN r19292.
Этот коммит содержится в:
родитель
5946d84023
Коммит
a6e0589f01
@ -429,13 +429,7 @@ PLPA_INIT *must* be invoked if using the m4 macros):
|
|||||||
--enable-included-mode command line switch.
|
--enable-included-mode command line switch.
|
||||||
|
|
||||||
- PLPA_INCLUDED
|
- PLPA_INCLUDED
|
||||||
or
|
Force the building of PLPA in included mode.
|
||||||
PLPA_INCLUDED(config-prefix)
|
|
||||||
NOTE: 1-argument form is deprecated and will be removed in PLPA
|
|
||||||
v1.2
|
|
||||||
Force the building of PLPA in included mode. See PLPA_INIT for a
|
|
||||||
description of config-prefix (note that passing config-prefix
|
|
||||||
through PLPA_INIT is the preferred way to set it).
|
|
||||||
|
|
||||||
- PLPA_SET_SYMBOL_PREFIX(foo)
|
- PLPA_SET_SYMBOL_PREFIX(foo)
|
||||||
Tells the PLPA to prefix all types and public symbols with "foo"
|
Tells the PLPA to prefix all types and public symbols with "foo"
|
||||||
@ -467,19 +461,15 @@ PLPA_INIT *must* be invoked if using the m4 macros):
|
|||||||
executables.
|
executables.
|
||||||
|
|
||||||
- PLPA_INIT(config-prefix, action-upon-success, action-upon-failure)
|
- PLPA_INIT(config-prefix, action-upon-success, action-upon-failure)
|
||||||
or
|
|
||||||
PLPA_INIT(action-upon-success, action-upon-failure)
|
|
||||||
NOTE: 2-argument form is deprecated and will be removed in PLPA
|
|
||||||
v1.2
|
|
||||||
Invoke the PLPA tests and setup the PLPA to build. A traversal of
|
Invoke the PLPA tests and setup the PLPA to build. A traversal of
|
||||||
"make" into the PLPA directory should build everything (it is safe
|
"make" into the PLPA directory should build everything (it is safe
|
||||||
to list the PLPA directory in the SUBDIRS of a higher-level
|
to list the PLPA directory in the SUBDIRS of a higher-level
|
||||||
Makefile.am, for example). PLPA_INIT must be invoked after the
|
Makefile.am, for example). ***PLPA_INIT must be invoked after the
|
||||||
INCLUDED / STANDALONE / SET_SYMBOL_PREFIX macros. The first
|
STANDALONE, INCLUDED, SET_SYMBOL_PREFIX, DISABLE_EXECUTABLES, and
|
||||||
argument is the 3-argument form is the prefix to use for AC_OUTPUT
|
ENABLE_EXECUTABLES macros.*** The first argument is the prefix to
|
||||||
files. Hence, if your embedded PLPA is located in the source tree
|
use for AC_OUTPUT files. Hence, if your embedded PLPA is located in
|
||||||
at contrib/plpa, you'd pass [contrib/plpa] as the first argument.
|
the source tree at contrib/plpa, you should pass [contrib/plpa] as
|
||||||
The 2-argument form assumes the prefix ".".
|
the first argument.
|
||||||
|
|
||||||
- PLPA_DO_AM_CONDITIONALS
|
- PLPA_DO_AM_CONDITIONALS
|
||||||
If you embed PLPA in a larger project and build it conditionally
|
If you embed PLPA in a larger project and build it conditionally
|
||||||
@ -494,17 +484,17 @@ PLPA_INIT *must* be invoked if using the m4 macros):
|
|||||||
Here's an example of integrating with a larger project named sandbox:
|
Here's an example of integrating with a larger project named sandbox:
|
||||||
|
|
||||||
shell$ cd sandbox
|
shell$ cd sandbox
|
||||||
shell$ cp -r /somewhere/else/plpa-<version> .
|
shell$ cp -r /somewhere/else/plpa-<version> plpa
|
||||||
shell$ edit acinclude.m4
|
shell$ edit acinclude.m4
|
||||||
...add the line "m4_include(plpa-<version>/config/plpa.m4)"...
|
...add the line "m4_include(plpa/config/plpa.m4)"...
|
||||||
shell$ edit Makefile.am
|
shell$ edit Makefile.am
|
||||||
...add "plpa-<version>" to SUBDIRS...
|
...add "plpa" to SUBDIRS...
|
||||||
...add "$(top_builddir)/plpa-<version>/src/libplpa/libplpa_included.la" to
|
...add "$(top_builddir)/plpa/src/libplpa/libplpa_included.la" to
|
||||||
my executable's LDADD line...
|
my executable's LDADD line...
|
||||||
shell$ edit configure.ac
|
shell$ edit configure.ac
|
||||||
...add "PLPA_INCLUDED" line...
|
...add "PLPA_INCLUDED" line...
|
||||||
...add "PLPA_SET_SYMBOL_PREFIX(sandbox_plpa_)" line...
|
...add "PLPA_SET_SYMBOL_PREFIX(sandbox_plpa_)" line...
|
||||||
...add "PLPA_INIT(plpa_happy=yes, plpa_happy=no)" line...
|
...add "PLPA_INIT([./plpa], [plpa_happy=yes], [plpa_happy=no])" line...
|
||||||
...add error checking for plpa_happy=no case...
|
...add error checking for plpa_happy=no case...
|
||||||
shell$ edit src/my_program.c
|
shell$ edit src/my_program.c
|
||||||
...add #include <plpa.h>...
|
...add #include <plpa.h>...
|
||||||
|
@ -16,7 +16,7 @@ release=0
|
|||||||
# requirement is that it must be entirely printable ASCII characters
|
# requirement is that it must be entirely printable ASCII characters
|
||||||
# and have no white space.
|
# and have no white space.
|
||||||
|
|
||||||
greek=b2
|
greek=b3
|
||||||
|
|
||||||
# If want_svn=1, then the SVN r number will be included in the overall
|
# If want_svn=1, then the SVN r number will be included in the overall
|
||||||
# PLPA version number in some form.
|
# PLPA version number in some form.
|
||||||
@ -33,4 +33,4 @@ want_svn=0
|
|||||||
# distribution tarball is being made from an SVN checkout, the value
|
# distribution tarball is being made from an SVN checkout, the value
|
||||||
# of svn_r in this file is replaced with the output of "svnversion".
|
# of svn_r in this file is replaced with the output of "svnversion".
|
||||||
|
|
||||||
svn_r=r192
|
svn_r=r197
|
||||||
|
@ -199,17 +199,31 @@ int PLPA_NAME(map_to_processor_id)(int socket_id, int core_id,
|
|||||||
int PLPA_NAME(map_to_socket_core)(int processor_id,
|
int PLPA_NAME(map_to_socket_core)(int processor_id,
|
||||||
int *socket_id, int *core_id);
|
int *socket_id, int *core_id);
|
||||||
|
|
||||||
/* Returns both the number of processors (cores) in a system and the
|
/* Returns both the total number of processors in a system and the
|
||||||
maximum Linux virtual processor ID (because it may be higher than
|
maximum Linux virtual processor ID (because it may be higher than
|
||||||
the number of processors if there are "holes" in the available
|
the number of processors if there are "holes" in the available
|
||||||
Linux virtual processor IDs). Returns 0 upon success. */
|
Linux virtual processor IDs). Returns 0 upon success. */
|
||||||
int PLPA_NAME(get_processor_info)(int *num_processors, int *max_processor_id);
|
int PLPA_NAME(get_processor_info)(int *num_processors, int *max_processor_id);
|
||||||
|
|
||||||
|
/* Typedefs for specifying which processors / sockets / cores to count
|
||||||
|
in get_processor_id() */
|
||||||
|
typedef enum {
|
||||||
|
/* Only count online processors */
|
||||||
|
PLPA_NAME_CAPS(COUNT_ONLINE),
|
||||||
|
/* Only count offline processors */
|
||||||
|
PLPA_NAME_CAPS(COUNT_OFFLINE),
|
||||||
|
/* Count all processors (online and offline) */
|
||||||
|
PLPA_NAME_CAPS(COUNT_ALL)
|
||||||
|
} PLPA_NAME(count_specification_t);
|
||||||
|
|
||||||
/* Returns the Linux processor ID for the Nth processor. For example,
|
/* Returns the Linux processor ID for the Nth processor. For example,
|
||||||
if the Linux processor IDs have "holes", use this function to say
|
if the Linux processor IDs have "holes", use this function to say
|
||||||
"give me the Linux processor ID of the 4th processor." Returns 0
|
"give me the Linux processor ID of the 4th processor." count_spec
|
||||||
upon success. */
|
specifies whether to count online, offline, or all processors when
|
||||||
int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id);
|
looking for the processor_num'th processor. Returns 0 upon
|
||||||
|
success. */
|
||||||
|
int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id,
|
||||||
|
PLPA_NAME(count_specification_t) count_spec);
|
||||||
|
|
||||||
/* Check to see if a given Linux processor ID exists / is online.
|
/* Check to see if a given Linux processor ID exists / is online.
|
||||||
Returns 0 on success. */
|
Returns 0 on success. */
|
||||||
@ -222,7 +236,10 @@ int PLPA_NAME(get_socket_info)(int *num_sockets, int *max_socket_id);
|
|||||||
|
|
||||||
/* Returns the Linux socket ID for the Nth socket. For example, if
|
/* Returns the Linux socket ID for the Nth socket. For example, if
|
||||||
the socket IDs have "holes", use this function to say "give me the
|
the socket IDs have "holes", use this function to say "give me the
|
||||||
Linux socket ID of the 2nd socket." Returns 0 upon success. */
|
Linux socket ID of the 2nd socket." Linux does not specify the
|
||||||
|
socket/core tuple information for offline processors, so a
|
||||||
|
plpa_count_specification_t parameter is not used here. Returns 0
|
||||||
|
upon success. */
|
||||||
int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id);
|
int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id);
|
||||||
|
|
||||||
/* Return both the number of cores and the max code ID for a given
|
/* Return both the number of cores and the max code ID for a given
|
||||||
@ -233,7 +250,9 @@ int PLPA_NAME(get_core_info)(int socket_id, int *num_cores, int *max_core_id);
|
|||||||
/* Given a specific socket, returns the Linux core ID for the Nth
|
/* Given a specific socket, returns the Linux core ID for the Nth
|
||||||
core. For example, if the core IDs have "holes", use this function
|
core. For example, if the core IDs have "holes", use this function
|
||||||
to say "give me the Linux core ID of the 4th core on socket ID 7."
|
to say "give me the Linux core ID of the 4th core on socket ID 7."
|
||||||
Returns 0 upon success. */
|
Linux does not specify the socket/core tuple information for
|
||||||
|
offline processors, so a plpa_count_specification_t parameter is
|
||||||
|
not used here. Returns 0 upon success. Returns 0 upon success. */
|
||||||
int PLPA_NAME(get_core_id)(int socket_id, int core_num, int *core_id);
|
int PLPA_NAME(get_core_id)(int socket_id, int core_num, int *core_id);
|
||||||
|
|
||||||
/* Check to see if a given Linux (socket_id,core_id) tuple exists / is
|
/* Check to see if a given Linux (socket_id,core_id) tuple exists / is
|
||||||
@ -241,7 +260,8 @@ int PLPA_NAME(get_core_id)(int socket_id, int core_num, int *core_id);
|
|||||||
int PLPA_NAME(get_core_flags)(int socket_id, int core_id,
|
int PLPA_NAME(get_core_flags)(int socket_id, int core_id,
|
||||||
int *exists, int *online);
|
int *exists, int *online);
|
||||||
|
|
||||||
/* Set PLPA's cache behavior. Returns 0 upon success. */
|
/* Typedefs for specifying the cache behavior via
|
||||||
|
plpa_set_cache_behavior() */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* Use the cache (default behavior); fills the cache right now if
|
/* Use the cache (default behavior); fills the cache right now if
|
||||||
it's not already full */
|
it's not already full */
|
||||||
@ -252,6 +272,8 @@ typedef enum {
|
|||||||
/* Refresh the cache right now */
|
/* Refresh the cache right now */
|
||||||
PLPA_NAME_CAPS(CACHE_REFRESH)
|
PLPA_NAME_CAPS(CACHE_REFRESH)
|
||||||
} PLPA_NAME(cache_behavior_t);
|
} PLPA_NAME(cache_behavior_t);
|
||||||
|
|
||||||
|
/* Set PLPA's cache behavior. Returns 0 upon success. */
|
||||||
int PLPA_NAME(set_cache_behavior)(PLPA_NAME(cache_behavior_t));
|
int PLPA_NAME(set_cache_behavior)(PLPA_NAME(cache_behavior_t));
|
||||||
|
|
||||||
/* Shut down PLPA. This function releases resources used by the PLPA.
|
/* Shut down PLPA. This function releases resources used by the PLPA.
|
||||||
|
@ -126,6 +126,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct tuple_t_ {
|
typedef struct tuple_t_ {
|
||||||
int processor_id, socket_id, core_id, online;
|
int processor_id, socket_id, core_id, online;
|
||||||
@ -633,9 +634,11 @@ int PLPA_NAME(get_processor_info)(int *num_processors_arg,
|
|||||||
|
|
||||||
/* Returns the Linux processor ID for the Nth processor (starting with
|
/* Returns the Linux processor ID for the Nth processor (starting with
|
||||||
0). */
|
0). */
|
||||||
int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id)
|
int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id,
|
||||||
|
PLPA_NAME(count_specification_t) count_spec)
|
||||||
{
|
{
|
||||||
int ret, i, count;
|
int ret, i, count;
|
||||||
|
bool match;
|
||||||
|
|
||||||
/* Initialize if not already done so */
|
/* Initialize if not already done so */
|
||||||
if (!PLPA_NAME(initialized)) {
|
if (!PLPA_NAME(initialized)) {
|
||||||
@ -667,9 +670,29 @@ int PLPA_NAME(get_processor_id)(int processor_num, int *processor_id)
|
|||||||
/* Find the processor_num'th processor */
|
/* Find the processor_num'th processor */
|
||||||
for (count = i = 0; i <= max_processor_id; ++i) {
|
for (count = i = 0; i <= max_processor_id; ++i) {
|
||||||
if (map_processor_id_to_tuple[i].processor_id >= 0) {
|
if (map_processor_id_to_tuple[i].processor_id >= 0) {
|
||||||
if (count++ == processor_num) {
|
match = false;
|
||||||
*processor_id = map_processor_id_to_tuple[i].processor_id;
|
switch (count_spec) {
|
||||||
return 0;
|
case PLPA_NAME_CAPS(COUNT_ONLINE):
|
||||||
|
if (map_processor_id_to_tuple[i].online) {
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PLPA_NAME_CAPS(COUNT_OFFLINE):
|
||||||
|
if (!map_processor_id_to_tuple[i].online) {
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PLPA_NAME_CAPS(COUNT_ALL):
|
||||||
|
match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
if (count++ == processor_num) {
|
||||||
|
*processor_id = map_processor_id_to_tuple[i].processor_id;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -781,7 +804,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id)
|
|||||||
|
|
||||||
/* Check for bozo arguments */
|
/* Check for bozo arguments */
|
||||||
if (NULL == socket_id) {
|
if (NULL == socket_id) {
|
||||||
printf("get_socket_id bad 1\n");
|
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -792,7 +814,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id)
|
|||||||
|
|
||||||
/* Check for out of range params */
|
/* Check for out of range params */
|
||||||
if (socket_num < 0 || socket_num > num_sockets) {
|
if (socket_num < 0 || socket_num > num_sockets) {
|
||||||
printf("get_socket_id bad 2\n");
|
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +835,6 @@ int PLPA_NAME(get_socket_id)(int socket_num, int *socket_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Didn't find it */
|
/* Didn't find it */
|
||||||
printf("get_socket id bad 3\n");
|
|
||||||
return ENODEV;
|
return ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,8 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stderr, "plpa_get_processor_info failed\n");
|
fprintf(stderr, "plpa_get_processor_info failed\n");
|
||||||
} else {
|
} else {
|
||||||
for (num_offline = i = 0; i < num_processors; ++i) {
|
for (num_offline = i = 0; i < num_processors; ++i) {
|
||||||
if (0 != PLPA_NAME(get_processor_id)(i, &processor_id)) {
|
if (0 != PLPA_NAME(get_processor_id)(i, &processor_id,
|
||||||
|
PLPA_NAME_CAPS(COUNT_ALL))) {
|
||||||
fprintf(stderr, "pla_get_processor_id failed\n");
|
fprintf(stderr, "pla_get_processor_id failed\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user