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

Robert Withers robert.withers at pm.me
Sat Jun 5 12:34:28 UTC 2021


I consolidated the RS Plugins into 1 RSPlugin class. Here is the new load script:

> Installer ss
> project: 'Cryptography';
> install: 'ProCrypto-1-1-1';
> install: 'ProCryptoTests-1-1-1';
> install: 'CryptographyRSPlugin'.

---
Kindly,
Robert

On 6/4/21 2:51 PM, Robert Withers wrote:

> 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/20210605/7e4a597f/attachment-0001.html>


More information about the Vm-dev mailing list