On Thu, Jun 30, 2022 at 03:21:15PM +0200, Jakub Jelinek via Gcc-patches wrote: > On Thu, Jun 30, 2022 at 01:40:24PM +0200, Jakub Jelinek via Gcc-patches wrote: > > > +/* The initial ICV values for the host, which are configured with > > > environment > > > + variables without a suffix, e.g. OMP_NUM_TEAMS. */ > > > +struct gomp_initial_icvs gomp_initial_icvs_none; > > > + > > > +/* Initial ICV values that were configured for the host and for all > > > devices by > > > + using environment variables like OMP_NUM_TEAMS_ALL. */ > > > +struct gomp_initial_icvs gomp_initial_icvs_all; > > > + > > > +/* Initial ICV values that were configured only for devices (not for the > > > host) > > > + by using environment variables like OMP_NUM_TEAMS_DEV. */ > > > +struct gomp_initial_icvs gomp_initial_icvs_dev; > > > > As I said last time, I don't like allocating these > > all the time in the data section of libgomp when at least for a few upcoming > > years, most users will never use those suffixes. > > Can't *_DEV and *_ALL go into the gomp_initial_icv_dev_list > > chain too, perhaps > > Sorry, forgot to finish sentence, I meant perhaps with dev_num of some magic > negative constants, and ensure that the all entry goes e.g. first in the > list, then dev and then the rest, so when filling up say what values to copy > to some device, it would start with the defaults, then if all is present > overwrite from selected all vars, then if non-host and dev is present, > overwrite from selected dev vars and finally overwrite from selected > specific device vars.
One more thing. If we go just with gomp_initia_icvs_none and the all/dev are in the list together with the rest, it would be enough not to use multi-bit flags, but just single bit, has this env var been specified here or not. So, as long as there are <= 32 vars (excluding the ones that don't have suffixed variants), we can use unsigned int bitmask indexed by the enum, or if we need <= 64 vars we could use unsigned long long int bitmask. And have one such bitmask next to gomp_initial_icvs_none and another one in each list node. Jakub