Re: BLAS (was Matlisp tests)

Akshay Srinivasan <[email protected]> Wed, 14 Mar 2012 09:24:27 +0530
Newsgroups gmane.lisp.matlisp.devel
Message-ID <[email protected]>
On 03/14/2012 08:49 AM, Akshay Srinivasan wrote:
> On 03/14/2012 07:30 AM, Raymond Toy wrote:
>> On 3/13/12 9:45 AM, Akshay Srinivasan wrote:
>>> On 03/12/2012 12:18 AM, Raymond Toy wrote:
>>>> On 3/11/12 11:11 AM, Akshay Srinivasan wrote:
>>>>> On 03/11/2012 12:37 PM, Raymond Toy wrote:
>>>>>> On 3/10/12 7:03 PM, Akshay Srinivasan wrote:
>>>>>>> On 03/10/2012 11:16 PM, Raymond Toy wrote:
>>>>>>>> On 3/10/12 8:40 AM, Akshay Srinivasan wrote:
>>>>>>>> 
>>>>>>>>>> It would be nice to be able to detect either
>>>>>>>>>> mode and have the ffi do the right thing, but I
>>>>>>>>>> think many lisps do not support structure returns
>>>>>>>>>> the way gcc is doing it now.
>>>>>>>>> It returns a struct ? I never could get hold of the
>>>>>>>>>  documentation for that.
>>>>>>>> That's my understanding.  And when I look at the 
>>>>>>>> disassembly for a simple Fortran function, it
>>>>>>>> returns the real and imaginary parts in xmm0 and xmm1
>>>>>>>> (at least on OSX).
>>>>>>> Hmm. Too clumsy and non-portable to support all that,
>>>>>>> no ?
>>>>>> It would be good if cffi supported that, but I suspect 
>>>>>> not.
>>>>>>>>>> We also have an alternative: Add simple C
>>>>>>>>>> wrappers that use the f2c-mode return and call
>>>>>>>>>> the Fortran routine directly.
>>>>>>>>> CBLAS :) (not the netlib version).
>>>>> After some more thinking, I vote for adding wrapper 
>>>>> subroutine around zdotu/zdotc in F77. It'll be far too
>>>>> much boring work to migrate to CBLAS, given that I seem to
>>>>> be able to handle ordering quite well within lisp itself.
>>>>> There aren't any other complex returning functions in BLAS,
>>>>> are there ?
>>>> Let me do a grep....Nope.  Looks like those are the only
>>>> two.
>>>> 
>>>> Not quite sure what you're going to do here.  You want to
>>>> write two C wrapper functions that call zdotu/zdotc
>>>> correctly, and have the wrapper use the f2c convention?
>>>> 
>>>> Since we already detect if we need -ff2c, what is the
>>>> utility for this when matlisp builds its own libraries?  Of
>>>> course, for atlas, I can see that we would want this if we've
>>>> determined that atlas is not compatible.  That would be a
>>>> nice enhancement.
>>>>> We probably don't need any other f2c features, since most 
>>>>> functions I know only take character arguments instead of 
>>>>> string ones.
>>>> Fortunately, matlisp is in control of that because I think
>>>> it is valid fortran to pass in, say, 'Transpose', instead of
>>>> 'T'.
>>> I have to flip back on my words. I now think CBLAS is the only 
>>> way forward. I was writing a wrapper for dgemv (y <- alpha * A
>>> . x + beta y) today and really couldn't figure out a way to
>>> support row-ordered
>> 
>> Can you give an example?  You can't just transpose A?  Oh.
>> Maybe not because the elements still need to be in column-major
>> order?
> 
> That will only work when A is square though.
Sorry I should've thought this through, more carfully. Yes transpose
will actually do the trick. I guess we don't need CBLAS after all.

I found the source code of:
http://netlib.org/blas/blast-forum/cblas.tgz
useful.

zdotc/zdotu works beautifully by the way (with and without ATLAS).

Akshay

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/