How is GHC.Prim.unpackInt8X64# meant to be used?
Luite Stegeman
stegeman at gmail.com
Mon Sep 28 08:33:59 UTC 2020
The complication for arbitrary sized unboxed tuples in the interpreter
was mainly because we don't want to generate new Cmm on the fly for
each tuple size. That one probably doesn't apply here, but maybe
others do.
It looks like a fully general solution would require a change to the
calling convention, which required more changes than I hoped. For now
it there will be a limitation in tuple size; the number of words
passed on the stack in the native calling convention:
https://gitlab.haskell.org/luite/ghc/-/commit/f83d08f0247bd7fd590b9be450c6d2d0968caa3c#6ca006a5d6dfdfdb97d0dd72db322e3f6eaa6214_198_217
It's probably not a big problem if GHCi has some size limit here, even
if GHC doesn't (or has a higher limit)
Bumping tuple size limits a bit to make the primops usable (testable?)
looks okay to me.
Luite
On Sat, Sep 26, 2020 at 2:39 PM Moritz Angermann
<moritz.angermann at gmail.com> wrote:
>
> Luite is currently working on unboxed tuple support in the interpreter. This will also be limited, as getting a generic solution for arbitrary sized tuples raises a lot of complications.
>
> Thus form a practical point of view, I’d go for (1) ;-)
>
> We’ll need to rethink and get SIMD proper support at some point though, the lack of such is rather sad.
>
> On Sat, 26 Sep 2020 at 8:27 PM, Ryan Scott <ryan.gl.scott at gmail.com> wrote:
>>
>> I had a feeling that this might be the case. Unfortunately, this technology preview is actively blocking progress on
>>
>> !4097, which leaves me at a loss for what to do. I can see two ways forward:
>>
>> 1. Remove
>>
>> unpackInt8X64#
>>
>>
>>
>> and friends.
>> 2. Reconsider whether the tuple size limit should apply to unboxed tuples. Perhaps this size limit only makes sense for boxed tuples? This comment [1] suggests that defining a boxed tuple of size greater than 62 induces a segfault, but it's unclear to me if the same thing happens for unboxed tuples.
>>
>> Ryan S.
>> -----
>> [1] https://gitlab.haskell.org/ghc/ghc/-/blob/a1f34d37b47826e86343e368a5c00f1a4b1f2bce/libraries/ghc-prim/GHC/Tuple.hs#L170
>>
>>
>>
>>
>> On Sat, Sep 26, 2020 at 7:54 AM Ben Gamari <ben at smart-cactus.org> wrote:
>>>
>>> On September 25, 2020 6:21:23 PM EDT, Ryan Scott <ryan.gl.scott at gmail.com> wrote:
>>>
>>>
>>> ...
>>>
>>>
>>> >However, I discovered recently that there are places where GHC *does*
>>>
>>>
>>> >use
>>>
>>>
>>> >unboxed tuples with arity greater than 62. For example, the
>>>
>>>
>>> >GHC.Prim.unpackInt8X64# [2] function returns an unboxed tuple of size
>>>
>>>
>>> >64. I
>>>
>>>
>>> >was confused for a while about how this was even possible, but I
>>>
>>>
>>> >realized
>>>
>>>
>>> >later than GHC only enforces the tuple size limit in expressions and
>>>
>>>
>>> >patterns [3]. Simply having a type signature with a large unboxed tuple
>>>
>>>
>>> >is
>>>
>>>
>>> >fine in and of itself, and since unpackInt8X64# is implemented as a
>>>
>>>
>>> >primop,
>>>
>>>
>>> >no large unboxed tuples are ever used in the "body" of the function.
>>>
>>>
>>> >(Indeed, primops don't have function bodies in the conventional sense.)
>>>
>>>
>>> >Other functions in GHC.Prim that use unboxed tuples of arity 64 include
>>>
>>>
>>> >unpackWord8X64# [4], packInt8X64# [5], and packWord8X64# [6].
>>>
>>>
>>> >
>>>
>>>
>>> >But this makes me wonder: how on earth is it even possible to *use*
>>>
>>>
>>> >unpackInt8X64#?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> I strongly suspect that the answer here is "you can't yet no one has noticed until now." The SIMD operations were essentially introduced as a technology preview and therefore never had proper tests added. Only a subset of these operations have any tests at all and I doubt anyone has attempted to use the 64-wide operations, which are rather specialized.
>>>
>>>
>>>
>>>
>>>
>>> Cheers,
>>>
>>>
>>>
>>>
>>>
>>> - Ben
>>>
>>>
>>
>>
>> _______________________________________________
>>
>> ghc-devs mailing list
>>
>> ghc-devs at haskell.org
>>
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>
More information about the ghc-devs
mailing list