* bug#14599: An option to make vector allocation aligned @ 2013-06-12 13:37 Jan Schukat 2013-06-12 14:59 ` Ludovic Courtès 2013-06-12 20:37 ` Andy Wingo 0 siblings, 2 replies; 11+ messages in thread From: Jan Schukat @ 2013-06-12 13:37 UTC (permalink / raw) To: 14599 Hello, If you want to access native uniform vectors from c, sometimes you really want guarantees about the alignment. Fortunately the the (byte)vector format and allocation makes that pretty easy to implement: just add a little padding between the header and the actual data. So for my own project, this is what I'm doing, and there shouldn't be much of a memory impact unless there are tons of small vectors used, which isn't very lispy anyway. This isn't necessarily true for vectors created from pre-existing buffers (the take_*vector functions), but there you have control over the pointer you pass, so you can make it true if needed. So if there is interest, maybe this could be integrated into the build system as a configuration like this: --- libguile/bytevectors.c 2013-04-11 02:16:30.000000000 +0200 +++ bytevectors.c 2013-06-12 14:45:16.000000000 +0200 @@ -223,10 +223,18 @@ c_len = len * (scm_i_array_element_type_sizes[element_type] / 8); +#ifdef SCM_VECTOR_ALIGN + contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES + c_len + SCM_VECTOR_ALIGN, + SCM_GC_BYTEVECTOR); + ret = PTR2SCM (contents); + contents += SCM_BYTEVECTOR_HEADER_BYTES; + contents += (addr + (SCM_VECTOR_ALIGN - 1)) & -SCM_VECTOR_ALIGN; +#else contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES + c_len, SCM_GC_BYTEVECTOR); ret = PTR2SCM (contents); contents += SCM_BYTEVECTOR_HEADER_BYTES; +#endif SCM_BYTEVECTOR_SET_LENGTH (ret, c_len); SCM_BYTEVECTOR_SET_CONTENTS (ret, contents); It could even be possible to make the alignment a run-time decision, but for that the api and read syntax for vectors need to be extended. Which could be worthwhile ... Apart from that, I see there are issues with the native mingw builds again, which I haven't noticed earlier since I primarily develop on linux, but I can reproduce the problem shown in #14361. Regards Jan Schukat ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 13:37 bug#14599: An option to make vector allocation aligned Jan Schukat @ 2013-06-12 14:59 ` Ludovic Courtès 2013-06-12 15:32 ` Jan Schukat 2013-06-12 21:14 ` Jan Schukat 2013-06-12 20:37 ` Andy Wingo 1 sibling, 2 replies; 11+ messages in thread From: Ludovic Courtès @ 2013-06-12 14:59 UTC (permalink / raw) To: Jan Schukat; +Cc: 14599, request severity 14599 wishlist thanks Hi! Jan Schukat <shookie@email.de> skribis: > If you want to access native uniform vectors from c, sometimes you > really want guarantees about the alignment. [...] > This isn't necessarily true for vectors created from pre-existing > buffers (the take_*vector functions), but there you have control over > the pointer you pass, so you can make it true if needed. > > So if there is interest, maybe this could be integrated into the build > system as a configuration like this: > > > --- libguile/bytevectors.c 2013-04-11 02:16:30.000000000 +0200 > +++ bytevectors.c 2013-06-12 14:45:16.000000000 +0200 > @@ -223,10 +223,18 @@ > > c_len = len * (scm_i_array_element_type_sizes[element_type] / 8); > > +#ifdef SCM_VECTOR_ALIGN > + contents = scm_gc_malloc_pointerless > (SCM_BYTEVECTOR_HEADER_BYTES + c_len + SCM_VECTOR_ALIGN, > + SCM_GC_BYTEVECTOR); > + ret = PTR2SCM (contents); > + contents += SCM_BYTEVECTOR_HEADER_BYTES; > + contents += (addr + (SCM_VECTOR_ALIGN - 1)) & -SCM_VECTOR_ALIGN; > +#else > contents = scm_gc_malloc_pointerless > (SCM_BYTEVECTOR_HEADER_BYTES + c_len, > SCM_GC_BYTEVECTOR); > ret = PTR2SCM (contents); > contents += SCM_BYTEVECTOR_HEADER_BYTES; > +#endif > > SCM_BYTEVECTOR_SET_LENGTH (ret, c_len); > SCM_BYTEVECTOR_SET_CONTENTS (ret, contents); I don’t think it should be a compile-time option, because it would be inflexible and inconvenient. Instead, I would suggest using the scm_take_ functions if allocating from C, as you noted. In Scheme, I came up with the following hack: --8<---------------cut here---------------start------------->8--- (use-modules (system foreign) (rnrs bytevectors) (ice-9 match)) (define (memalign len alignment) (let* ((b (make-bytevector (+ len alignment))) (p (bytevector->pointer b)) (a (pointer-address p))) (match (modulo a alignment) (0 b) (padding (let ((p (make-pointer (+ a (- alignment padding))))) ;; XXX: Keep a weak reference to B or it can be collected ;; behind our back. (pointer->bytevector p len)))))) --8<---------------cut here---------------end--------------->8--- Not particularly elegant, but it does the job. ;-) Do you think there’s additional support that should be provided? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 14:59 ` Ludovic Courtès @ 2013-06-12 15:32 ` Jan Schukat 2013-06-12 21:14 ` Jan Schukat 1 sibling, 0 replies; 11+ messages in thread From: Jan Schukat @ 2013-06-12 15:32 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 14599, request On 06/12/2013 04:59 PM, Ludovic Courtès wrote: > Instead, I would suggest using the scm_take_ functions if allocating > from C, as you noted. The whole point of me doing this is so I can use lisp files to define aligned data (and using lisp as a flexible text data format that can be compiled is the primary reason I use guile). So either I make normal vectors aligned, or I define a whole new set of datatypes of aligned vectors with their own read syntax. The former I just did today, the latter would take me probably a quite a bit of time to do properly. So, I'm gonna keep using my compile time option for now, and probably write a module of aligned vectors at some point in the future when I have more of an understanding what exactly the requirements for something like this would be. Jan ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 14:59 ` Ludovic Courtès 2013-06-12 15:32 ` Jan Schukat @ 2013-06-12 21:14 ` Jan Schukat 2013-06-13 13:31 ` Ludovic Courtès 1 sibling, 1 reply; 11+ messages in thread From: Jan Schukat @ 2013-06-12 21:14 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 14599 Thought a bit about it, and it would really be nice to have an aligned uniform vector API. ATM all are 8 byte aligned, so you probably would want also to be able to have at least 16 and 32 byte alignment (intel's AVX has 256bit registers that better work aligned). But even 64 and and more could be useful for cache line alignment, although that would require this to be a separate alignment, because the benefits of cache line alignment are kind of defeated if the header is in a different cache line. So I guess just one alignment, namely that of the first element is feasible without wasting whole cache lines. If you really need that you can still use the take_*vector functions, and it's pretty rare to do such things anyway. But being able to control the alignment of the first element allows you to properly use simd instructions on those vectors. You don't even really need any more space to store alignment information, since that can be directly inferred from the bytevector content pointer, although the bytevector flags still have more than enough space to store it. Extending the programming api to support this is a bit more tricky. I guess most straightforward and backward compatible would be to just at a set of make-aligned-*vector and aligned-*vector and *->aligned-*vector functions and their scm_* versions with an additional alignment parameter. Optional alignment parameters on the old functions could be nice too, but I guess that is just asking for compatibility trouble. The other question is the read syntax (one of the primary reasons I'm doing all this). If alignment is something that should be preserved in the permanent representation, you also need to store it in the flags, since the content pointer can be aligned by coincidence. I haven't looked at the compiling of bytevectors yet, to see if alignment can be handled easily there. As for the text representation, I think the simplest way is to add another reserved character with the alignment number that works for uniform vectors and arrays like #vu8>8(1 2 3 4 5 6) to have the first element at 8byte alignment (right now the allocation pretty much ensures 4 byte alignment of the first element on 32 bit machines and 8 byte at 64bit machines, because gc_malloc returns 8byte aligned blocks, but the array starts at cell word 3. Any 64 bit type vector like double and long is already guaranteed to be misaligned on 32 bit platforms. Which would be even more unfortunate on linux x32 abi systems that uses efficient 64 bit ints with 32 bit pointers, but cell size is determined by pointer size. Or to construct simd 4 element arrays #2f32:2:4>16((1 2 3 4)(1 2 3 4)). Maybe even have a default alignment of 16 when you just use > without a number so #2f32:2:4>((1 2 3 4)(1 2 3 4)) is the same thing. Or even more convenient #m128((1 2 3 4)(1.0 1.0 1.0 1.0) (2.0 2.0)) where you can freely mix the underlying types and the size of the elements is inferred by the amount of them in each group. So if there is interest for something like this in the main guile, I will make the patches. If not, I'll just stick to my crude hack for now and see if I need the full shebang :). Regards Jan Schukat On 06/12/2013 04:59 PM, Ludovic Courtès wrote: > severity 14599 wishlist > thanks > > Hi! > > Jan Schukat <shookie@email.de> skribis: > >> If you want to access native uniform vectors from c, sometimes you >> really want guarantees about the alignment. > [...] > >> This isn't necessarily true for vectors created from pre-existing >> buffers (the take_*vector functions), but there you have control over >> the pointer you pass, so you can make it true if needed. >> >> So if there is interest, maybe this could be integrated into the build >> system as a configuration like this: >> >> >> --- libguile/bytevectors.c 2013-04-11 02:16:30.000000000 +0200 >> +++ bytevectors.c 2013-06-12 14:45:16.000000000 +0200 >> @@ -223,10 +223,18 @@ >> >> c_len = len * (scm_i_array_element_type_sizes[element_type] / 8); >> >> +#ifdef SCM_VECTOR_ALIGN >> + contents = scm_gc_malloc_pointerless >> (SCM_BYTEVECTOR_HEADER_BYTES + c_len + SCM_VECTOR_ALIGN, >> + SCM_GC_BYTEVECTOR); >> + ret = PTR2SCM (contents); >> + contents += SCM_BYTEVECTOR_HEADER_BYTES; >> + contents += (addr + (SCM_VECTOR_ALIGN - 1)) & -SCM_VECTOR_ALIGN; >> +#else >> contents = scm_gc_malloc_pointerless >> (SCM_BYTEVECTOR_HEADER_BYTES + c_len, >> SCM_GC_BYTEVECTOR); >> ret = PTR2SCM (contents); >> contents += SCM_BYTEVECTOR_HEADER_BYTES; >> +#endif >> >> SCM_BYTEVECTOR_SET_LENGTH (ret, c_len); >> SCM_BYTEVECTOR_SET_CONTENTS (ret, contents); > I don’t think it should be a compile-time option, because it would be > inflexible and inconvenient. > > Instead, I would suggest using the scm_take_ functions if allocating > from C, as you noted. > > In Scheme, I came up with the following hack: > > --8<---------------cut here---------------start------------->8--- > (use-modules (system foreign) > (rnrs bytevectors) > (ice-9 match)) > > (define (memalign len alignment) > (let* ((b (make-bytevector (+ len alignment))) > (p (bytevector->pointer b)) > (a (pointer-address p))) > (match (modulo a alignment) > (0 b) > (padding > (let ((p (make-pointer (+ a (- alignment padding))))) > ;; XXX: Keep a weak reference to B or it can be collected > ;; behind our back. > (pointer->bytevector p len)))))) > --8<---------------cut here---------------end--------------->8--- > > Not particularly elegant, but it does the job. ;-) > > Do you think there’s additional support that should be provided? > > Thanks, > Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 21:14 ` Jan Schukat @ 2013-06-13 13:31 ` Ludovic Courtès 2013-06-14 1:33 ` Daniel Hartwig 0 siblings, 1 reply; 11+ messages in thread From: Ludovic Courtès @ 2013-06-13 13:31 UTC (permalink / raw) To: Jan Schukat; +Cc: 14599 Hi, Thanks for sharing your thoughts on this! Jan Schukat <shookie@email.de> skribis: > Extending the programming api to support this is a bit more tricky. I > guess most straightforward and backward compatible would be to just at > a set of make-aligned-*vector and aligned-*vector and > *->aligned-*vector functions and their scm_* versions with an > additional alignment parameter. Optional alignment parameters on the > old functions could be nice too, but I guess that is just asking for > compatibility trouble. What about something like ‘make-aligned-bytevector’? This should be enough, since bytevectors can be accessed through the SRFI-4 API (info "(guile) Bytevectors as Uniform Arrays"). (And it can already be implemented in Scheme, as I showed previously.) > The other question is the read syntax (one of the primary reasons I'm > doing all this). If alignment is something that should be preserved in > the permanent representation, you also need to store it in the flags, > since the content pointer can be aligned by coincidence. I haven't > looked at the compiling of bytevectors yet, to see if alignment can be > handled easily there. I agree that we’d need some sort of annotation to specify the alignment of literals, but adding read syntax for that scares me somewhat. What do people think? On the compilation side, I think alignment will be more easily handled in 2.2 (current ‘master’), which uses ELF (think of GCC’s ‘alignment’ attribute.) None of this really seems doable in the 2.0 stable series. So for now you’d have to resort to one of the options discussed. WDYT? Thanks, Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-13 13:31 ` Ludovic Courtès @ 2013-06-14 1:33 ` Daniel Hartwig 2013-06-14 8:32 ` Jan Schukat 0 siblings, 1 reply; 11+ messages in thread From: Daniel Hartwig @ 2013-06-14 1:33 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 14599, Jan Schukat On 13 June 2013 21:31, Ludovic Courtès <ludo@gnu.org> wrote: > Jan Schukat <shookie@email.de> skribis: >> The other question is the read syntax (one of the primary reasons I'm >> doing all this). If alignment is something that should be preserved in >> the permanent representation, you also need to store it in the flags, >> since the content pointer can be aligned by coincidence. I haven't >> looked at the compiling of bytevectors yet, to see if alignment can be >> handled easily there. > > I agree that we’d need some sort of annotation to specify the alignment > of literals, but adding read syntax for that scares me somewhat. What > do people think? I agree. The read syntax for vector-ish types in guile is already large enough. If alignment is important then use a procedural constructor and query. Alignment information not need to be printed with the default representation (read syntax), we dont also print the storage address, etc.. Regards ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-14 1:33 ` Daniel Hartwig @ 2013-06-14 8:32 ` Jan Schukat 2013-06-14 12:21 ` Ludovic Courtès 0 siblings, 1 reply; 11+ messages in thread From: Jan Schukat @ 2013-06-14 8:32 UTC (permalink / raw) To: Daniel Hartwig; +Cc: Ludovic Courtès, 14599 On 06/14/2013 03:33 AM, Daniel Hartwig wrote: > On 13 June 2013 21:31, Ludovic Courtès <ludo@gnu.org> wrote: >> Jan Schukat <shookie@email.de> skribis: >>> The other question is the read syntax (one of the primary reasons I'm >>> doing all this). If alignment is something that should be preserved in >>> the permanent representation, you also need to store it in the flags, >>> since the content pointer can be aligned by coincidence. I haven't >>> looked at the compiling of bytevectors yet, to see if alignment can be >>> handled easily there. >> I agree that we’d need some sort of annotation to specify the alignment >> of literals, but adding read syntax for that scares me somewhat. What >> do people think? > I agree. The read syntax for vector-ish types in guile is already > large enough. If alignment is important then use a procedural > constructor and query. > > Alignment information not need to be printed with the default > representation (read syntax), we dont also print the storage address, > etc.. > > Regards The more I think about it and hear what you have to say, the more I think alignment just needs to be tied to the type of the uniform array. Up to float and int 32 arrays nothing will change then. Double and int64 arrays get one word of padding on 32 bit machines to make them 8 byte aligned. And then introduce new type flags m128 and m256 for for simd types that are 16 or 32 byte bit aligned, possibly the complex arrays too. Since you can interpret uniform arrays as all types of uniform array this should solve all alignment problems where needed. The simd type arrays must be able to accept and recognize int and float immediates though, and you must be able to group them. That's not really much new syntax, and won't interfere with the old syntax. Also, now I lean more towards switching to 2.2 for myself and implement it on there, because as Ludovic said, the compiling will possibly preserve alignment there better. Regards Jan Schukat ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-14 8:32 ` Jan Schukat @ 2013-06-14 12:21 ` Ludovic Courtès 2013-06-17 10:04 ` Jan Schukat 0 siblings, 1 reply; 11+ messages in thread From: Ludovic Courtès @ 2013-06-14 12:21 UTC (permalink / raw) To: Jan Schukat; +Cc: 14599 Jan Schukat <shookie@email.de> skribis: > The more I think about it and hear what you have to say, the more I > think alignment just needs to be tied to the type of the uniform > array. I think it would be wrong. An array of floats is an array of floats, regardless of its alignment. > Also, now I lean more towards switching to 2.2 for myself and > implement it on there, because as Ludovic said, the compiling will > possibly preserve alignment there better. Well yeah, though you’d still need to come up with an annotation for that, and I’m not enthusiastic about changing the read syntax for that purpose. Now, I think the compiler should support a generic annotation mechanism, to allow users to specify various things (like ‘declare’ in some implementations.) That could be one possible use. Ludo’. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-14 12:21 ` Ludovic Courtès @ 2013-06-17 10:04 ` Jan Schukat 0 siblings, 0 replies; 11+ messages in thread From: Jan Schukat @ 2013-06-17 10:04 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 14599 On 06/14/2013 02:21 PM, Ludovic Courtès wrote: > Jan Schukat <shookie@email.de> skribis: > >> The more I think about it and hear what you have to say, the more I >> think alignment just needs to be tied to the type of the uniform >> array. > I think it would be wrong. An array of floats is an array of floats, > regardless of its alignment. For floats nothing would change anyway. Those are 4byte data types with 4byte alignment already. As for the larger types, you can still make them in any alignment with the take functions. Just the default would the optimized one when you add padding, and that's what it should be, since the scheme programmer doesn't care about the underlying memory layouts as much as the C programmer does. In normal guile uniform vector use you are completely oblivious to the underlying vector implementation, apart from the performance. In short: an array of floats is still an array of floats, and you can create them at any alignment, although cumbersomely. But the very point if creating arrays of native types is to better use the underlying hardware. And not taking advantage of alignment there unless you absolutely can't is negligent at best. >> Also, now I lean more towards switching to 2.2 for myself and >> implement it on there, because as Ludovic said, the compiling will >> possibly preserve alignment there better. > Well yeah, though you’d still need to come up with an annotation for > that, and I’m not enthusiastic about changing the read syntax for that > purpose. You don't need a special annotation if the default alignment is the native alignment of the native type. If you create arrays of native types that is what you want in the vast majority of cases. Overriding that should be the extra work and forced by external requirements, not by internal coincidental implementation details. And the interfaces to do that are already there. I wanna use native SIMD types, which are obviously less portable, but in the end where they do exist they are all more or less the same in memory layout: 4 32bit ieee floats, 4 32bit ints or 2 ieee doubles, all preferably aligned at 128 bit. That's true for sse, altivec and neon on x86, power and arm respectively. I can see why you wouldn't want SIMD types in the core modules. I can also see why you wouldn't want to change existing read syntax. What I can't see is why you wouldn't want native type arrays in native alignment by default. There is no downside, and the implementation makes doing that trivial. And having a module of uniform SIMD type arrays/vectors could be very valuable. I'll probably do that as an extension then, with a #, reader. Would just be a lot of code duplication and less nice. > > Now, I think the compiler should support a generic annotation mechanism, > to allow users to specify various things (like ‘declare’ in some > implementations.) That could be one possible use. > > Ludo’. Yes, that would have a lot of utility. Regards Jan Schukat ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 13:37 bug#14599: An option to make vector allocation aligned Jan Schukat 2013-06-12 14:59 ` Ludovic Courtès @ 2013-06-12 20:37 ` Andy Wingo 2013-06-13 7:07 ` Jan Schukat 1 sibling, 1 reply; 11+ messages in thread From: Andy Wingo @ 2013-06-12 20:37 UTC (permalink / raw) To: Jan Schukat; +Cc: 14599 On Wed 12 Jun 2013 15:37, Jan Schukat <shookie@email.de> writes: > If you want to access native uniform vectors from c, sometimes you > really want guarantees about the alignment. 16 bytes I guess? Guile's uniforms are 8-byte-aligned by default, as you probably know. Just wondering if there is a better default. > +#ifdef SCM_VECTOR_ALIGN > + contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES > + c_len + SCM_VECTOR_ALIGN, > + SCM_GC_BYTEVECTOR); > + ret = PTR2SCM (contents); > + contents += SCM_BYTEVECTOR_HEADER_BYTES; > + contents += (addr + (SCM_VECTOR_ALIGN - 1)) & -SCM_VECTOR_ALIGN; > +#else > contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES > + c_len, > SCM_GC_BYTEVECTOR); > ret = PTR2SCM (contents); > contents += SCM_BYTEVECTOR_HEADER_BYTES; > +#endif This is somewhat dangerous, as you could lose the pointer to the start, and then the contents get collected. I guess this can be fixed in master, if you set the "holder" field on a bytevector to the actual memory that you allocate. Andy -- http://wingolog.org/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#14599: An option to make vector allocation aligned 2013-06-12 20:37 ` Andy Wingo @ 2013-06-13 7:07 ` Jan Schukat 0 siblings, 0 replies; 11+ messages in thread From: Jan Schukat @ 2013-06-13 7:07 UTC (permalink / raw) To: Andy Wingo; +Cc: 14599 Hello again :) On 06/12/2013 10:37 PM, Andy Wingo wrote: > On Wed 12 Jun 2013 15:37, Jan Schukat <shookie@email.de> writes: > >> If you want to access native uniform vectors from c, sometimes you >> really want guarantees about the alignment. > 16 bytes I guess? Guile's uniforms are 8-byte-aligned by default, as > you probably know. Yes, 16 bytes. But more could be useful too. And as I have stated in my previous mail, the first element of the vector is guaranteed to be 4 byte aligned on 32 bit machines, because it starts directly after the 3 word header, which is allocated at 8 byte boundaries. And yes, I have tested this, but should be obvious from the code too. > > Just wondering if there is a better default. > >> +#ifdef SCM_VECTOR_ALIGN >> + contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES >> + c_len + SCM_VECTOR_ALIGN, >> + SCM_GC_BYTEVECTOR); >> + ret = PTR2SCM (contents); >> + contents += SCM_BYTEVECTOR_HEADER_BYTES; >> + contents += (addr + (SCM_VECTOR_ALIGN - 1)) & -SCM_VECTOR_ALIGN; >> +#else >> contents = scm_gc_malloc_pointerless (SCM_BYTEVECTOR_HEADER_BYTES >> + c_len, >> SCM_GC_BYTEVECTOR); >> ret = PTR2SCM (contents); >> contents += SCM_BYTEVECTOR_HEADER_BYTES; >> +#endif > This is somewhat dangerous, as you could lose the pointer to the start, > and then the contents get collected. > > I guess this can be fixed in master, if you set the "holder" field on a > bytevector to the actual memory that you allocate. > Don't really understand the danger here, isn't this allocated as a whole block and only collected as a whole block too? What am I missing? Having the arrays aligned according to their type by default could be a nice option, i.e. a word of padding for long and doubles on 32 bit machines, and then also introducing a new 16byte simd128 and 32 byte simd256 type id and their respective creation functions. Regards Jan Schukat ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-06-17 10:04 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-06-12 13:37 bug#14599: An option to make vector allocation aligned Jan Schukat 2013-06-12 14:59 ` Ludovic Courtès 2013-06-12 15:32 ` Jan Schukat 2013-06-12 21:14 ` Jan Schukat 2013-06-13 13:31 ` Ludovic Courtès 2013-06-14 1:33 ` Daniel Hartwig 2013-06-14 8:32 ` Jan Schukat 2013-06-14 12:21 ` Ludovic Courtès 2013-06-17 10:04 ` Jan Schukat 2013-06-12 20:37 ` Andy Wingo 2013-06-13 7:07 ` Jan Schukat
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).