public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Kwok Yeung <kcy@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-12] libgomp: autodetect page sizes in pinned memory tests Date: Wed, 29 Jun 2022 14:46:16 +0000 (GMT) [thread overview] Message-ID: <20220629144616.2AEB8384F025@sourceware.org> (raw) https://gcc.gnu.org/g:02b4955747ddf2e32f7d01eef19e294f36462ade commit 02b4955747ddf2e32f7d01eef19e294f36462ade Author: Andrew Stubbs <ams@codesourcery.com> Date: Wed Apr 13 10:10:10 2022 +0100 libgomp: autodetect page sizes in pinned memory tests There's not one number that works everywhere. This also fixes the failure mode on non-Linux hosts. libgomp/ChangeLog: * testsuite/libgomp.c/alloc-pinned-1.c: Autodetect page size. * testsuite/libgomp.c/alloc-pinned-2.c: Likewise. * testsuite/libgomp.c/alloc-pinned-3.c: Likewise. * testsuite/libgomp.c/alloc-pinned-4.c: Likewise. * testsuite/libgomp.c/alloc-pinned-5.c: Likewise. * testsuite/libgomp.c/alloc-pinned-6.c: Likewise. * testsuite/libgomp.c/alloc-pinned-7.c: Clean up. Diff: --- libgomp/ChangeLog.omp | 10 ++++++++++ libgomp/testsuite/libgomp.c/alloc-pinned-1.c | 24 +++++++++++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-2.c | 24 +++++++++++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-3.c | 15 ++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-4.c | 15 ++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-5.c | 24 +++++++++++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-6.c | 15 ++++++++++----- libgomp/testsuite/libgomp.c/alloc-pinned-7.c | 9 +++------ 8 files changed, 100 insertions(+), 36 deletions(-) diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index 1693c212a12..e3ae0b33e82 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,13 @@ +2022-04-13 Andrew Stubbs <ams@codesourcery.com> + + * testsuite/libgomp.c/alloc-pinned-1.c: Autodetect page size. + * testsuite/libgomp.c/alloc-pinned-2.c: Likewise. + * testsuite/libgomp.c/alloc-pinned-3.c: Likewise. + * testsuite/libgomp.c/alloc-pinned-4.c: Likewise. + * testsuite/libgomp.c/alloc-pinned-5.c: Likewise. + * testsuite/libgomp.c/alloc-pinned-6.c: Likewise. + * testsuite/libgomp.c/alloc-pinned-7.c: Clean up. + 2022-04-02 Andrew Stubbs <ams@codesourcery.com> * testsuite/libgomp.c/usm-6.c: Add omp_target_alloc. diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-1.c b/libgomp/testsuite/libgomp.c/alloc-pinned-1.c index 0a6360cda29..79792b16d83 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-1.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-1.c @@ -4,13 +4,23 @@ /* Test that pinned memory works. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> +#include <sys/resource.h> + +#define PAGE_SIZE sysconf(_SC_PAGESIZE) +#define CHECK_SIZE(SIZE) { \ + struct rlimit limit; \ + if (getrlimit (RLIMIT_MEMLOCK, &limit) \ + || limit.rlim_cur <= SIZE) \ + fprintf (stderr, "unsufficient lockable memory; please increase ulimit\n"); \ + } int get_pinned_mem () @@ -34,6 +44,9 @@ get_pinned_mem () abort (); } #else +#define PAGE_SIZE 1 /* unknown */ +#define CHECK_SIZE(SIZE) fprintf (stderr, "OS unsupported\n"); + int get_pinned_mem () { @@ -43,12 +56,13 @@ get_pinned_mem () #include <omp.h> -/* Allocate more than a page each time, but stay within the ulimit. */ -#define SIZE 10*1024 - int main () { + /* Allocate at least a page each time, but stay within the ulimit. */ + const int SIZE = PAGE_SIZE; + CHECK_SIZE (SIZE*3); + const omp_alloctrait_t traits[] = { { omp_atk_pinned, 1 } }; diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-2.c b/libgomp/testsuite/libgomp.c/alloc-pinned-2.c index 8fdb4ff5cfd..228c656b715 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-2.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-2.c @@ -4,13 +4,23 @@ /* Test that pinned memory works (pool_size code path). */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> +#include <sys/resource.h> + +#define PAGE_SIZE sysconf(_SC_PAGESIZE) +#define CHECK_SIZE(SIZE) { \ + struct rlimit limit; \ + if (getrlimit (RLIMIT_MEMLOCK, &limit) \ + || limit.rlim_cur <= SIZE) \ + fprintf (stderr, "unsufficient lockable memory; please increase ulimit\n"); \ + } int get_pinned_mem () @@ -34,6 +44,9 @@ get_pinned_mem () abort (); } #else +#define PAGE_SIZE 1 /* unknown */ +#define CHECK_SIZE(SIZE) fprintf (stderr, "OS unsupported\n"); + int get_pinned_mem () { @@ -43,12 +56,13 @@ get_pinned_mem () #include <omp.h> -/* Allocate more than a page each time, but stay within the ulimit. */ -#define SIZE 10*1024 - int main () { + /* Allocate at least a page each time, but stay within the ulimit. */ + const int SIZE = PAGE_SIZE; + CHECK_SIZE (SIZE*3); + const omp_alloctrait_t traits[] = { { omp_atk_pinned, 1 }, { omp_atk_pool_size, SIZE*8 } diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-3.c b/libgomp/testsuite/libgomp.c/alloc-pinned-3.c index 943dfea5c9b..90539ffe3e0 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-3.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-3.c @@ -2,15 +2,18 @@ /* Test that pinned memory fails correctly. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> #include <sys/resource.h> +#define PAGE_SIZE sysconf(_SC_PAGESIZE) + int get_pinned_mem () { @@ -45,6 +48,8 @@ set_pin_limit (int size) } #else int +#define PAGE_SIZE 10000*1024 /* unknown */ + get_pinned_mem () { return 0; @@ -58,12 +63,12 @@ set_pin_limit () #include <omp.h> -/* This should be large enough to cover multiple pages. */ -#define SIZE 10000*1024 - int main () { + /* This needs to be large enough to cover multiple pages. */ + const int SIZE = PAGE_SIZE*4; + /* Pinned memory, no fallback. */ const omp_alloctrait_t traits1[] = { { omp_atk_pinned, 1 }, diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-4.c b/libgomp/testsuite/libgomp.c/alloc-pinned-4.c index d9cb8dfe1fd..534e49eefc4 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-4.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-4.c @@ -2,15 +2,18 @@ /* Test that pinned memory fails correctly, pool_size code path. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> #include <sys/resource.h> +#define PAGE_SIZE sysconf(_SC_PAGESIZE) + int get_pinned_mem () { @@ -45,6 +48,8 @@ set_pin_limit (int size) } #else int +#define PAGE_SIZE 10000*1024 /* unknown */ + get_pinned_mem () { return 0; @@ -58,12 +63,12 @@ set_pin_limit () #include <omp.h> -/* This should be large enough to cover multiple pages. */ -#define SIZE 10000*1024 - int main () { + /* This needs to be large enough to cover multiple pages. */ + const int SIZE = PAGE_SIZE*4; + /* Pinned memory, no fallback. */ const omp_alloctrait_t traits1[] = { { omp_atk_pinned, 1 }, diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-5.c b/libgomp/testsuite/libgomp.c/alloc-pinned-5.c index 8355ca83790..315c7161a39 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-5.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-5.c @@ -4,13 +4,23 @@ /* Test that ompx_pinned_mem_alloc works. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> +#include <sys/resource.h> + +#define PAGE_SIZE sysconf(_SC_PAGESIZE) +#define CHECK_SIZE(SIZE) { \ + struct rlimit limit; \ + if (getrlimit (RLIMIT_MEMLOCK, &limit) \ + || limit.rlim_cur <= SIZE) \ + fprintf (stderr, "unsufficient lockable memory; please increase ulimit\n"); \ + } int get_pinned_mem () @@ -34,6 +44,9 @@ get_pinned_mem () abort (); } #else +#define PAGE_SIZE 1 /* unknown */ +#define CHECK_SIZE(SIZE) fprintf (stderr, "OS unsupported\n"); + int get_pinned_mem () { @@ -43,12 +56,13 @@ get_pinned_mem () #include <omp.h> -/* Allocate more than a page each time, but stay within the ulimit. */ -#define SIZE 10*1024 - int main () { + /* Allocate at least a page each time, but stay within the ulimit. */ + const int SIZE = PAGE_SIZE; + CHECK_SIZE (SIZE*3); + // Sanity check if (get_pinned_mem () != 0) abort (); diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-6.c b/libgomp/testsuite/libgomp.c/alloc-pinned-6.c index 80fd37ab875..bbe20c04875 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-6.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-6.c @@ -2,15 +2,18 @@ /* Test that ompx_pinned_mem_alloc fails correctly. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> #include <sys/resource.h> +#define PAGE_SIZE sysconf(_SC_PAGESIZE) + int get_pinned_mem () { @@ -44,6 +47,8 @@ set_pin_limit (int size) abort (); } #else +#define PAGE_SIZE 10000*1024 /* unknown */ + int get_pinned_mem () { @@ -58,12 +63,12 @@ set_pin_limit () #include <omp.h> -/* This should be large enough to cover multiple pages. */ -#define SIZE 10000*1024 - int main () { + /* Allocate at least a page each time, but stay within the ulimit. */ + const int SIZE = PAGE_SIZE*4; + /* Ensure that the limit is smaller than the allocation. */ set_pin_limit (SIZE/2); diff --git a/libgomp/testsuite/libgomp.c/alloc-pinned-7.c b/libgomp/testsuite/libgomp.c/alloc-pinned-7.c index 6fd19b46a5c..8dc19055038 100644 --- a/libgomp/testsuite/libgomp.c/alloc-pinned-7.c +++ b/libgomp/testsuite/libgomp.c/alloc-pinned-7.c @@ -5,11 +5,12 @@ /* Test that pinned memory works. */ +#include <stdio.h> +#include <stdlib.h> + #ifdef __linux__ #include <sys/types.h> #include <unistd.h> -#include <stdio.h> -#include <stdlib.h> #include <sys/mman.h> @@ -28,7 +29,6 @@ get_pinned_mem () int val; if (sscanf (buf, "VmLck: %d", &val)) { - printf ("lock %d\n", val); fclose (proc); return val; } @@ -47,9 +47,6 @@ get_pinned_mem () #include <omp.h> -/* Allocate more than a page each time, but stay within the ulimit. */ -#define SIZE 10*1024 - int main () {
reply other threads:[~2022-06-29 14:46 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220629144616.2AEB8384F025@sourceware.org \ --to=kcy@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).