<div dir="ltr">On 24 September 2013 15:31, Andrei Alexandrescu <span dir="ltr"><<a href="mailto:SeeWebsiteForEmail@erdani.org" target="_blank">SeeWebsiteForEmail@erdani.org</a>></span> wrote:<br><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On 9/23/13 9:56 PM, Manu wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
You can't go wasting GPU memory by overallocating every block.<br>
</blockquote>
<br></div>
Only the larger chunk may need to be overallocated if all allocations are then rounded up.</blockquote><div><br></div><div>I don't follow.</div><div>If I want to allocate 4k aligned, then 8k will be allocated (because it wants to store an offset).</div>
<div>Any smaller allocation let's say, 16 bytes, will round up to 4k. You can't waste precious gpu ram like that.</div><div><br></div><div>A minimum and a maximum (guaranteed without over-allocating) alignment may be useful.</div>
<div>But I think allocators need to be given the opportunity to do the best it can.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div class="im">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
It's definitely important that allocator's are able to receive an<br>
alignment request, and give them the opportunity to fulfill a dynamic<br>
alignment request without always resorting to an over-allocation strategy.<br>
</blockquote>
<br></div>
I'd need a bit of convincing. I'm not sure everybody needs to pay for a few, and it is quite possible that malloc_align suffers from the same fragmentation issues as the next guy. Also, there's always the possibility of leaving some bits to lower-level functions.</blockquote>
<div><br></div><div>What are they paying exactly? An extra arg to allocate that can probably be defaulted?</div><div><span style="font-family:arial,sans-serif;font-size:13px">  void[] allocate(size_t bytes, size_t align = this.alignment) shared;</span><br>
</div><div><br></div><div>Or is it the burden of adding the overallocation boilerplate logic to each allocator for simple allocators that don't want to deal with alignment in a conservative way?</div><div>I imagine that could possibly be automated, the boilerplate could be given as a library.</div>
<div><br></div><div>void[] allocate(size_t size, size_t align)</div><div>{</div><div>  size_t allocSize = std.allocator.getSizeCompensatingForAlignment(size, align);</div><div><br></div><div>  void[] mem = ...; // allocation logic using allocSize</div>
<div><br></div><div>  return std.allocator.alignAllocation(mem, align); // adjusts the range, and maybe write the offset to the prior bytes</div><div>}</div></div></div></div>