Date: Mon, 16 Jun 2003 14:59:59 -0700 (PDT) From: Julian Elischer <julian@elischer.org> To: Gareth Hughes <gareth@nvidia.com> Cc: Andy Ritger <ARitger@nvidia.com> Subject: RE: NVIDIA and TLS Message-ID: <Pine.BSF.4.21.0306161450140.19977-100000@InterJet.elischer.org> In-Reply-To: <2D32959E172B8F4D9B02F68266BE421401A6D7CD@mail-sc-3.nvidia.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 16 Jun 2003, Gareth Hughes wrote: > On Mon, 16 Jun 2003, Andy Ritger wrote: > > > > So from an OpenGL point of view, here are several alternatives that > > I see for atleast the near term: > > > > - make NVIDIA's OpenGL implementation not thread-safe (just > > use global data rather that thread-local data) > > > > - accept the performance hit of using pthread_getspecific() > > on FreeBSD. From talking to other OpenGL engineers, > > conservative estimates of the performance impact on > > applications like viewperf range from 10% - 15%. I'd like > > to quantify that, but certainly there will be a performance > > penalty. > > And these are *very* conservative estimates -- you're essentially adding a > function call into a path that is, on average, less than ten instructions > per OpenGL API call, where the number of API calls per frame is upward of 3 > million (3 calls per vertex, over a million vertices for some Viewperf > benchmarks). The API was designed this way for a reason, and fast > thread-local storage is a fundamental part of a high performance > implementation. Unfortunatly you are making an assumption about the threads that you are only able to make in Linux "by chance" as they did something else for their TLS. I gather that you don't keep a local variable pointed to your local drawing context, but just use the 'global' style of programming but using %gs as a 'roll-your-own' version of 'local context'. Can you just grab %gs on Microsoft? I thought they were going to be using it for their TLS too. BTW Have you looked at the speed of that? At one time it was a lot slower to dereference things through %gs than it was to simply have a normal register allocated to the task (e.g. %esi) as would be done normally. I don't know if that is true with any modern machines though. HOWEVER.. as far as we know we still have %fs unused.... Maybe we could just switch registers :-) (that too is of course non portable too but.....) BTW what do you do for ia64/alpha/amd64 archtectures? > > -- > Gareth Hughes (gareth@nvidia.com) > OpenGL Developer, NVIDIA Corporation > _______________________________________________ > freebsd-threads@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-threads > To unsubscribe, send any mail to "freebsd-threads-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0306161450140.19977-100000>