Hi!

On 2020-06-29T13:16:52-0700, Julian Brown <jul...@codesourcery.com> wrote:
> This patch implements an algorithm to lay out local data-share (LDS) space.  
> It currently works for AMD GCN.  At the moment, LDS is used for three things:
>
>   1. Gang-private variables
>   2. Reduction temporaries (accumulators)
>   3. Broadcasting for worker partitioning
>
> After the patch is applied, (2) and (3) are placed at preallocated
> locations in LDS, and (1) continues to be handled by the backend (as it
> is at present prior to this patch being applied). LDS now looks like this:
>
>   +--------------+ (gang local size + 1024, = 1536)
>   | free space   |
>   |    ...       |
>   | - - - - - - -|
>   | worker bcast |
>   +--------------+
>   | reductions   |
>   +--------------+ <<< -mgang-local-size=<number> (def. 512)
>   | gang private |
>   |    vars      |
>   +--------------+ (32)
>   | low LDS vars |
>   +--------------+ LDS base
>
> So, gang-private space is fixed at a constant amount at compile time
> (which can be increased with a command-line switch if necessary
> for some given code). [...]

> --- a/gcc/config/gcn/gcn.c
> +++ b/gcc/config/gcn/gcn.c

> @@ -5240,14 +5286,14 @@ gcn_print_lds_decl (FILE *f, tree var)
>        if (size > align && size > 4 && align < 8)
>       align = 8;
>
> -      machfun->lds_allocated = ((machfun->lds_allocated + align - 1)
> -                             & ~(align - 1));
> +      gangprivate_hwm = ((gangprivate_hwm + align - 1) & ~(align - 1));
>
> -      machfun->lds_allocs->put (var, machfun->lds_allocated);
> -      fprintf (f, "%u", machfun->lds_allocated);
> -      machfun->lds_allocated += size;
> -      if (machfun->lds_allocated > LDS_SIZE)
> -     error ("local data-share memory exhausted");
> +      lds_allocs.put (var, gangprivate_hwm);
> +      fprintf (f, "%u", gangprivate_hwm);
> +      gangprivate_hwm += size;
> +      if (gangprivate_hwm > gang_local_size_opt)
> +     error ("gang-private data-share memory exhausted (increase with "
> +            "-mgang-local-size=<number>)");
>      }
>  }

In a new case (to be discussed later), we're running into this error.
OK to push to master branch the attached
'GCN: Make "gang-private data-share memory exhausted" error more verbose'?


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 
München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas 
Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht 
München, HRB 106955
>From 3f57f1d975dcb859a8203bebadb2b2bfbfba24b9 Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <tho...@codesourcery.com>
Date: Tue, 26 Apr 2022 13:05:19 +0200
Subject: [PATCH] GCN: Make "gang-private data-share memory exhausted" error
 more verbose
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

    [...]: error: 512 bytes of gang-private data-share memory exhausted (increase with ‘-mgang-private-size=560’, for example)

	gcc/
	* config/gcn/gcn.cc (gcn_print_lds_decl): Make "gang-private
	data-share memory exhausted" error more verbose.
---
 gcc/config/gcn/gcn.cc | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
index 90cc8edc5b4..19e9f424efc 100644
--- a/gcc/config/gcn/gcn.cc
+++ b/gcc/config/gcn/gcn.cc
@@ -5588,8 +5588,9 @@ gcn_print_lds_decl (FILE *f, tree var)
       fprintf (f, "%u", gang_private_hwm);
       gang_private_hwm += size;
       if (gang_private_hwm > gang_private_size_opt)
-	error ("gang-private data-share memory exhausted (increase with "
-	       "%<-mgang-private-size=<number>%>)");
+	error ("%d bytes of gang-private data-share memory exhausted"
+	       " (increase with %<-mgang-private-size=%d%>, for example)",
+	       gang_private_size_opt, gang_private_hwm);
     }
 }
 
-- 
2.25.1

Reply via email to