[Vm-dev] Reed Solomon plugins & performance slow down

Robert Withers robert.withers at pm.me
Fri Jun 4 18:52:06 UTC 2021


Hi Levente,

I hope you are having a great day! Are you in Budapest? That must be awesome! A very old city.

I thought I would post the Squeak code for this instantiatePoly primitive. My image still blows up on startUp:. I am grateful you have guided me through this!

> primitiveInitializePolyFieldSizeCoefficients
>
> <export: true>
> <var: 'coefficients' type: 'unsigned char*' >
>
> | coefficients count coefficientsOop fieldSize result |
> interpreterProxy methodArgumentCount = 2
> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadNumArgs ].
> fieldSize := interpreterProxy stackIntegerValue: 1.
> coefficientsOop := interpreterProxy stackObjectValue: 0.
>
> (interpreterProxy isIntegerValue: fieldSize)
> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
> (interpreterProxy isBytes: coefficientsOop)
> ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
> count := interpreterProxy stSizeOf: coefficientsOop.
> coefficients := interpreterProxy firstIndexableField: coefficientsOop.
>
> (count = 0)
> ifTrue: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
>
> result := self
> initializePolyFieldSize: fieldSize
> coefficients: coefficients
> coefficientsCount: count.
>
> ^ interpreterProxy failed
> ifTrue: [interpreterProxy primitiveFail]
> ifFalse: [interpreterProxy methodReturnValue: result].

Which is calling:

> initializePolyFieldSize: fieldSize coefficients: coefficients coefficientsCount: coefficientsCount
>
> <var: 'coefficients' type: #'unsigned char*'>
>
> | coefficientsLength firstNonZero mutableCoefficients |
> mutableCoefficients := coefficients.
> coefficientsLength := coefficientsCount.
> ((coefficientsLength > 1) & ((coefficients at: 1) = 0))
> ifTrue: [
> firstNonZero := 2.
> [(firstNonZero <= coefficientsLength) and: [(mutableCoefficients at: firstNonZero) = 0]]
> whileTrue: [firstNonZero := firstNonZero + 1].
> (firstNonZero > coefficientsLength)
> ifTrue: [
> mutableCoefficients := interpreterProxy
> instantiateClass: interpreterProxy classByteArray
> indexableSize: 1]
> ifFalse: [
> mutableCoefficients := interpreterProxy
> instantiateClass: interpreterProxy classByteArray
> indexableSize: (coefficientsLength - firstNonZero + 1).
> 0 to: (coefficientsLength - 1)
> do: [:index |
> coefficients at: index put: (mutableCoefficients at: index)]]].
> ^ mutableCoefficients.

---
Köszönöm,
Robert

On 6/4/21 1:38 PM, Robert Withers wrote:

> I am getting this warning when cross compiling the Squeak plugin to C code.
>
>> warning, signature of InterpreterProxy>>instantiateClass:indexableSize: does not match reference implementation.
>
> ---
> Kindly,
> Robert
>
> On 6/4/21 1:21 PM, Robert Withers wrote:
>
>> Nope, this wasn't it.
>>
>> ---
>> Kindly,
>> Robert
>>
>> On 6/4/21 12:36 PM, Robert wrote:
>>
>>> Oh! Heading for a coffee with my nurse. I realized I may be passing the field into the primitive instead of the field size. I’ll check it when I get back home!
>>>
>>> Kindly,
>>> Robert
>>> . .. ... ‘...^,^
>>>
>>> On Fri, Jun 4, 2021 at 12:12, Robert Withers <robert.withers at pm.me> wrote:
>>>
>>>>>
>>>>
>>>> Oh! I forgot to relocate leaves that have already been plugganized. This leaves (heh) 3 possible plugganizations that all instantiate ByteArrays. Here, I fixed it.
>>>>
>>>>> WITH GF & GFPOLY PRIMITIVES AND DECODER
>>>>>
>>>>> PRIMITIVES
>>>>>
>>>>> (
>>>>>
>>>>> 3
>>>>>
>>>>> asterix
>>>>>
>>>>> for
>>>>>
>>>>> in-progress plugganization)
>>>>>
>>>>> - 22194 tallies, 22648 msec.
>>>>>
>>>>> **Leaves**
>>>>> 29.1%
>>>>>
>>>>> {
>>>>>
>>>>> 6586
>>>>>
>>>>> ms} RSFECDecoderWithPlugin>>decode:twoS:
>>>>>
>>>>> 14.7
>>>>>
>>>>> % {
>>>>>
>>>>> 3329
>>>>>
>>>>> ms} RSFECGenericGFPoly
>>>>>
>>>>> class
>>>>>
>>>>>>
>>>>>
>>>>>>newField:coefficients:
>>>>>
>>>>> 1.0
>>>>>
>>>>> % {
>>>>>
>>>>> 237
>>>>>
>>>>> ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
>>>>
>>>> Calls to plugganized GF/GFPoly methods, so I think these are as optimized as possible:
>>>>
>>>>> 7.3
>>>>>
>>>>> % {
>>>>>
>>>>> 1646
>>>>>
>>>>> ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize:
>>>>>
>>>>> 2.9
>>>>>
>>>>> % {
>>>>>
>>>>> 654
>>>>>
>>>>> ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations:
>>>>>
>>>>> 1.4
>>>>>
>>>>> % {
>>>>>
>>>>> 317
>>>>>
>>>>> ms} RSFECGenericGFWithPlugin>>
>>>>>
>>>>> log
>>>>>
>>>>> :
>>>>
>>>> ---
>>>> Kindly,
>>>> Robert
>>>>
>>>> On 6/4/21 12:02 PM, Robert Withers wrote:
>>>>
>>>>>> WITH GF & GFPOLY PRIMITIVES AND DECODER
>>>>>>
>>>>>> PRIMITIVES
>>>>>>
>>>>>> (
>>>>>>
>>>>>> 3
>>>>>>
>>>>>> asterix
>>>>>>
>>>>>> for
>>>>>>
>>>>>> in-progress plugganization)
>>>>>>
>>>>>> - 22194 tallies, 22648 msec.
>>>>>>
>>>>>> **Leaves**
>>>>>> 29.1%
>>>>>>
>>>>>> {
>>>>>>
>>>>>> 6586
>>>>>>
>>>>>> ms} RSFECDecoderWithPlugin>>decode:twoS:
>>>>>>
>>>>>> 14.7
>>>>>>
>>>>>> % {
>>>>>>
>>>>>> 3329
>>>>>>
>>>>>> ms} RSFECGenericGFPoly
>>>>>>
>>>>>> class
>>>>>>
>>>>>>>
>>>>>>
>>>>>>>newField:coefficients:
>>>>>>
>>>>>> 7.3
>>>>>>
>>>>>> % {
>>>>>>
>>>>>> 1646
>>>>>>
>>>>>> ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize:
>>>>>>
>>>>>> 2.9
>>>>>>
>>>>>> % {
>>>>>>
>>>>>> 654
>>>>>>
>>>>>> ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations:
>>>>>>
>>>>>> 1.0
>>>>>>
>>>>>> % {
>>>>>>
>>>>>> 237
>>>>>>
>>>>>> ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
>>>>>
>>>>> Calls to plugganized GF/GFPoly methods:
>>>>>
>>>>>> 1.4% {317ms} RSFECGenericGFWithPlugin>>log:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20210604/27eaad51/attachment.html>


More information about the Vm-dev mailing list