[squeak-dev] Smallapack

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Aug 12 22:07:38 UTC 2016


Thanks Yoshiki, new configuration published.

2016-08-12 22:59 GMT+02:00 Yoshiki Ohshima <Yoshiki.Ohshima at acm.org>:

> Ok, now I'm getting some success!
>
> I start over with the VM: Croquet Closure Cog VM [CoInterpreterPrimitives
> VMMaker.oscog-eem.1044] Squeak Cog Spur 5.0.3248
>
> and followed Nicolas' instruction in this thread.  The image is 32-bit 5.0
> image.  In this setting all tests passed.  Yay.  To run the above mentioned
> example:
>
> -------------------
> a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)).
> b := LapackDGEMatrix rows: #(#(1) (2) (3)).
> c := LapackLeastSquareProblem matrix: a rhsMatrix: b.
>
> c solution.
> -------------------
>
> I needed to fix the processSVD to make it work.  The changes are to change:
>
> rank := WordArray new: 1.
>
> into:
>
> rank := ExternalLongArray new: 1.
>
> (otherwise #arrayPointer is not understood by 'rank') and also the return
> value from gelssWithm: has to be stored in 'info' (otherwise it will be
> always nil).
>
>
>
> On Thu, Aug 11, 2016 at 6:05 PM, Yoshiki Ohshima <Yoshiki.Ohshima at acm.org>
> wrote:
>
>>  I have not reached the conclusion but would like to give some status
>> report.
>>
>> My test case is simple:
>>
>> -------------------
>> a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)).
>> b := LapackDGEMatrix rows: #(#(1) (2) (3)).
>> c := LapackLeastSquareProblem matrix: a rhsMatrix: b.
>>
>> c solution.
>> -------------------
>>
>> If I evaluate this, the external call for 'dgesvd_' in
>> CLapackDLibrary>>xgesvdWithjobu:jobvt:m:n:a:lda:s:u:ldu:vt:
>> ldvt:work:lwork:info:
>> fails.
>>
>> But if I fix it by rewriting the cdecl line to:
>>
>> <cdecl: long 'dgesvd_'( char * char * long * long * double * long *
>> double * double * long * double * long * double * long * long * )
>> module: 'libLAPACK'>
>>
>> from
>>
>> <cdecl: long 'dgesvd_'( char * char * long * long * double * long *
>> double * double * long * double * long * double * long * long * )>
>>
>> it passes.
>>
>> However,  the value that gets stored in the 's' instance variable of
>> LapackSVDecomposition is a LapackDGEMatrix, and when the resulting
>> value is used in the #defaultTolerance, I get DNU for '*".
>>
>>
>>
>> On Tue, Aug 9, 2016 at 3:26 PM, Yoshiki Ohshima <Yoshiki.Ohshima at acm.org>
>> wrote:
>> > Correction: (sorry)
>> >
>> > In a 64 bit image, TestCBlas runs fine but the ones listed above fails
>> > in a 32-bit image.
>> >
>> > On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima <
>> Yoshiki.Ohshima at acm.org> wrote:
>> >> Thanks!
>> >>
>> >> I am trying this from a vanilla 5.0 image and I see that
>> >> ConfigurationOfSmallapack-nice.18 is loaded.  Now, however, the
>> >> following tests from Smallapack-SUnitTests category fail:
>> >>
>> >> #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy'
>> >> 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans'
>> >> 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm'
>> >> 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum'
>> >> 'TestRandMatrix>>#testOperationTiming')
>> >>
>> >> As I wrote, TestCBlas used to be all green.  I'll check what has
>> >> changed since -nice.16...
>> >>
>> >> On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier
>> >> <nicolas.cellier.aka.nice at gmail.com> wrote:
>> >>> This should be fixed in ConfigurationOfSmallapack-nice.18
>> >>> BTW, I think you can provide the absolute path to the .dylib instead
>> of
>> >>> copying in local repository...
>> >>>
>> >>>
>> >>> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier
>> >>> <nicolas.cellier.aka.nice at gmail.com>:
>> >>>>
>> >>>> Hi Yoshiki,
>> >>>> thanks for reporting, I'll try better...
>> >>>>
>> >>>>
>> >>>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima <Yoshiki.Ohshima at acm.org>:
>> >>>>>
>> >>>>> I see you have some changes but it appears that evaluating the
>> >>>>> Installer do it goes into an infinite loop of #moduleName and
>> >>>>> #masOsxModuleName.
>> >>>>>
>> >>>>> (Thanks again!)
>> >>>>>
>> >>>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima
>> >>>>> <Yoshiki.Ohshima at acm.org> wrote:
>> >>>>> > But some of TestLapackMatrix tests fail.  A few external functions
>> >>>>> > cannot be found, it looks like.
>> >>>>> >
>> >>>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima
>> >>>>> > <Yoshiki.Ohshima at acm.org> wrote:
>> >>>>> >> Great!
>> >>>>> >>
>> >>>>> >> Before (I got into a meeting and then entered the "Friday mode",
>> I was
>> >>>>> >> going down the path of trying to call the Framework functions but
>> >>>>> >> copying files anyway was a simpler solution for now.
>> >>>>> >>
>> >>>>> >> Yes, I got all tests green.  Thank  you!
>> >>>>> >>
>> >>>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier
>> >>>>> >> <nicolas.cellier.aka.nice at gmail.com> wrote:
>> >>>>> >>> OK, what I did on my Mac:
>> >>>>> >>>
>> >>>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist
>> >>>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No"
>> >>>>> >>>    otherwise library loading is restricted to the Squeak app
>> bundle
>> >>>>> >>> 3) copy the veclib framework library files (dylib) in same
>> directory
>> >>>>> >>> as
>> >>>>> >>> squeak image
>> >>>>> >>> 4) launch Squeak
>> >>>>> >>> 5) install Smallapack
>> >>>>> >>>     follow instruction from
>> >>>>> >>>
>> >>>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/
>> SmallapackSqueak
>> >>>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' ->
>> >>>>> >>> 'libBlas.dylib'
>> >>>>> >>>     nowadays, cblas and blas are in the same dylib...
>> >>>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' ->
>> >>>>> >>> 'libLapack.dylib'
>> >>>>> >>>     idem
>> >>>>> >>> 8) re-initialize the cache (I know, I know, there are too
>> many...)
>> >>>>> >>>     CBlasLibrary install. CLapackLibrary install. LapackMatrix
>> >>>>> >>> resetBlasInterfaces; resetLapackInterfaces.
>> >>>>> >>> 9) run the TestCBlas suite
>> >>>>> >>>
>> >>>>> >>> It should be green
>> >>>>> >>> I will commit the changes later, and will probably implement
>> >>>>> >>> moduleNames as
>> >>>>> >>> a Preference (pragma oriented).
>> >>>>> >>> No need to override code anymore :)
>> >>>>> >>>
>> >>>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in
>> >>>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m
>> >>>>> >>>
>> >>>>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/
>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m
>> >>>>> >>> It would only look those frameworks:
>> >>>>> >>>
>> >>>>> >>>                 static char *frameworks[]=
>> >>>>> >>>                 {
>> >>>>> >>>                         "",
>> >>>>> >>>                         "/CoreServices.framework/Frameworks",
>> >>>>> >>>                         "/ApplicationServices.framewo
>> rk/Frameworks",
>> >>>>> >>>                         "/Carbon.framework/Frameworks",
>> >>>>> >>>                         0
>> >>>>> >>>                 };
>> >>>>> >>>
>> >>>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so
>> maybe
>> >>>>> >>> I'm
>> >>>>> >>> wrong...
>> >>>>> >>> Scanning all the frameworks is not a solution. And what if we
>> want a
>> >>>>> >>> specific version?
>> >>>>> >>> It would be far better to be able to specify the path to the
>> library
>> >>>>> >>> from
>> >>>>> >>> within the image like VW...
>> >>>>> >>>
>> >>>>> >>>
>> >>>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier
>> >>>>> >>> <nicolas.cellier.aka.nice at gmail.com>:
>> >>>>> >>>>
>> >>>>> >>>>
>> >>>>> >>>>
>> >>>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier
>> >>>>> >>>> <nicolas.cellier.aka.nice at gmail.com>:
>> >>>>> >>>>>
>> >>>>> >>>>>
>> >>>>> >>>>>
>> >>>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima
>> >>>>> >>>>> <Yoshiki.Ohshima at acm.org>:
>> >>>>> >>>>>>
>> >>>>> >>>>>> First question:
>> >>>>> >>>>>>
>> >>>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains
>> BLAS.
>> >>>>> >>>>>> But probably I still should compile those libraries, right?
>> >>>>> >>>>>>
>> >>>>> >>>>>
>> >>>>> >>>>> No, it's better to link to accelerated library.
>> >>>>> >>>>> I don't have a Mac handy here to verify how to link to it
>> though.
>> >>>>> >>>>> I'll be able to check latter in the evening
>> >>>>> >>>>>
>> >>>>> >>>>
>> >>>>> >>>>
>> >>>>> >>>> I've downloaded the code, and I see it now: the library names
>> are
>> >>>>> >>>> hardcoded (see implementors of moduleName).
>> >>>>> >>>> For Mac it is libblas.dylib and libcblas.dylib
>> >>>>> >>>> Also note that there is a preference for switching to cblas
>> (blas
>> >>>>> >>>> functions with C interface).
>> >>>>> >>>> This should be faster because we pass some parameters by value
>> >>>>> >>>> rather than
>> >>>>> >>>> allocating them and pass reference...
>> >>>>> >>>>
>> >>>>> >>>> Module names could also be replaced by Preferences eventually,
>> but
>> >>>>> >>>> by now,
>> >>>>> >>>> you'll have to override...
>> >>>>> >>>>
>> >>>>> >>>>>>
>> >>>>> >>>>>>
>> >>>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima
>> >>>>> >>>>>> <Yoshiki.Ohshima at acm.org> wrote:
>> >>>>> >>>>>> > Thanks!
>> >>>>> >>>>>> >
>> >>>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier
>> >>>>> >>>>>> > <nicolas.cellier.aka.nice at gmail.com> wrote:
>> >>>>> >>>>>> >> Hi Yoshiki,
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> Thanks for inquiring about Smallapack.
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> This problem has been solved in 2011 as the post tells.
>> >>>>> >>>>>> >> Moreover, it was about alignment of squeak objects that
>> was on
>> >>>>> >>>>>> >> multiple of 4
>> >>>>> >>>>>> >> on SqueakV3 memory.
>> >>>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also
>> vanished
>> >>>>> >>>>>> >> without any
>> >>>>> >>>>>> >> patch for those being patient :)
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own
>> >>>>> >>>>>> >> compiler,
>> >>>>> >>>>>> >> so it's
>> >>>>> >>>>>> >> a non issue.
>> >>>>> >>>>>> >> Maybe I should make the documentation more clear on
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> https://github.com/nicolas-cel
>> lier-aka-nice/smallapack/wiki/SmallapackSqueak
>> >>>>> >>>>>> >> ?
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in
>> >>>>> >>>>>> >> Lapack.
>> >>>>> >>>>>> >> If you know of a good package for that, it could be
>> integrated.
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> If you have other questions, don't hesitate to ask.
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> cheers
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> Nicolas
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima
>> >>>>> >>>>>> >> <Yoshiki.Ohshima at acm.org>:
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that
>> involves
>> >>>>> >>>>>> >>> to
>> >>>>> >>>>>> >>> solve
>> >>>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square
>> >>>>> >>>>>> >>> fit).
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> There was a message from Nicolas:
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> http://lists.squeakfoundation.
>> org/pipermail/squeak-dev/2011-August/161113.html
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> Is this where it stands today, too?  It looks like that
>> arg
>> >>>>> >>>>>> >>> count
>> >>>>> >>>>>> >>> problem is still there in 5.0, but is it in a way
>> non-issue as
>> >>>>> >>>>>> >>> it is
>> >>>>> >>>>>> >>> still FFI based?
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> Thanks!
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>> --
>> >>>>> >>>>>> >>> -- Yoshiki
>> >>>>> >>>>>> >>>
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >>
>> >>>>> >>>>>> >
>> >>>>> >>>>>> >
>> >>>>> >>>>>> >
>> >>>>> >>>>>> > --
>> >>>>> >>>>>> > -- Yoshiki
>> >>>>> >>>>>>
>> >>>>> >>>>>>
>> >>>>> >>>>>>
>> >>>>> >>>>>> --
>> >>>>> >>>>>> -- Yoshiki
>> >>>>> >>>>>>
>> >>>>> >>>>>
>> >>>>> >>>>
>> >>>>> >>>
>> >>>>> >>>
>> >>>>> >>>
>> >>>>> >>>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> --
>> >>>>> >> -- Yoshiki
>> >>>>> >
>> >>>>> >
>> >>>>> >
>> >>>>> > --
>> >>>>> > -- Yoshiki
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> -- Yoshiki
>> >>>>>
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> -- Yoshiki
>> >
>> >
>> >
>> > --
>> > -- Yoshiki
>>
>>
>>
>> --
>> -- Yoshiki
>>
>
>
>
> --
> -- Yoshiki
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/1571ea8d/attachment-0001.htm


More information about the Squeak-dev mailing list