On 29 May 2012 23:22, mark florisson <markflorisso...@gmail.com> wrote:
> On 29 May 2012 22:26, Robert Bradshaw <rober...@gmail.com> wrote:
>> On Mon, May 28, 2012 at 5:54 AM, mark florisson
>> <markflorisso...@gmail.com> wrote:
>>> On 28 May 2012 13:52, mark florisson <markflorisso...@gmail.com> wrote:
>>>> On 28 May 2012 13:49, mark florisson <markflorisso...@gmail.com> wrote:
>>>>> On 25 May 2012 21:53, Frédéric Bastien <no...@nouiz.org> wrote:
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>> Sorry for the delay, I had some schedule change.
>>>>>>
>>>>>> thanks for adding me. Should I subscribe to cython-dev? How much email
>>>>>> daily there is? I didn't found this on the archives. Fell free to add
>>>>>> me in CC again when you think it is appropriate.
>>>>>
>>>>> There is usually not so much traffic on cython-dev, unless something
>>>>> comes up that is debated to the death :)
>>>>>
>>>>>> I'll reply here to all email at the same time. Do you prefer that I
>>>>>> reply to each email individually if this happen again? I'll try to
>>>>>> reply faster next time.
>>>>>
>>>>> No worries, either way works fine, don't worry too much about protocol
>>>>> (the only thing to note is that we do bottom posting).
>>>>>
>>>>>> - About pickling theano, we currently can't pick Theano function. It
>>>>>> could be made to work in some cases, but not for all cases as there is
>>>>>> hardware dependent optimization in the Theano function. Currently it
>>>>>> is mostly CPU vs GPU operation. So if we stay on the CPU, we could do
>>>>>> some pickling, but we should make sure that the compiled c code into
>>>>>> python module are still there when we unpickle or recompile them.
>>>>>>
>>>>>> - I think it make sense to make a theano graph from cython ast,
>>>>>> optimize and redo a cython ast from the optimized graph. This would
>>>>>> allow using Theano optimizations.
>>>>>
>>>>> Ok, the important thing is that the graph can be pickled, it should be
>>>>> pretty straightforward to generate code to build the function again
>>>>> from the loaded graph.
>>>>>
>>>>>> - It also make sense to do the code generation in Theano and reuse it
>>>>>> in Cython. But this would make the Theano dependency much stronger.
>>>>>> I'm not sure you want this.
>>>>>>
>>>>>>
>>>>>> - Another point not raised, theano need to know at compile time is the
>>>>>> dtype, number of dimensions and witch dimensions are broadcastable for
>>>>>> each variable. I think that the last one could cause problem, but if
>>>>>> you use specialization for the dtype, the same can be done for the
>>>>>> broadcsatability of a dimensions.
>>>>>
>>>>> Hm, that would lead to kind of an explosion of combinations. I think
>>>>> we could specialize only on no broadcasting at all (except for
>>>>> operands with lesser dimensionality).
>>>>>
>>>>>> - The compyte(gpu nd array) project do collapsing of dimensions. This
>>>>>> is an important optimization on the GPU as doing the index computation
>>>>>> in parallel is costlier. I think on the CPU we could probably do
>>>>>> collapsing just of the inner dimensions to make it faster.
>>>>>>
>>>>>> - Theano don't generate intrinsect or assembly, but we suppose that
>>>>>> g++ will generate vectorized operation for simple loop. Recent version
>>>>>> of gcc/g++ do this.
>>>>>
>>>>> Right, the aim is definitely to specialize for contiguous arrays,
>>>>> where you collapse everything. Specializing statically for anything
>>>>> more would be unfeasible, and better handled by a runtime compiler I
>>>>> think. For the C backend, I'll start by generating simple C loops and
>>>>> see if the compilers vectorize that already.
>>>>>
>>>>>> - Our generated code for element-wise operation take care a little
>>>>>> about the memory access pattern. We swap dimensions to iterate on the
>>>>>> dimensions with the smallest strides. But we don't go further.
>>>>>>
>>>>>> - What do you mean by CSE? Constant  optimization?
>>>>>
>>>>> Yes, common subexpression elimination and also hoisting of unchanging
>>>>> expressions outside the loop.
>>>>>
>>>>>> Fred
>>>>>
>>>>> I started a new project, https://github.com/markflorisson88/minivect ,
>>>>> which currently features a simple C code generator. The specializer
>>>>> and astbuilder do most of the work of creating the right AST, so the
>>>>> code generator only has to implement code generation functions for
>>>>> simple expressions. Depending on how it progresses I will look at
>>>>> incorporating Theano's optimizations into it and having Theano use it
>>>>> as a C backend for compatible expressions.
>>>>
>>>> I forgot to mention, it's still pretty basic, but it works for simple
>>>> arithmetic expressions with non-overlapping (shifted) memory from
>>>> Cython: 
>>>> https://github.com/markflorisson88/cython/commit/2c316abdbc1228597bbdf480f737a59213ee9532#L4R1
>>>
>>> So basically, this project is to be used as a git submodule in Cython,
>>> and to be shipped directly in the source distribution. Is there any
>>> objection to that?
>>
>> I'm not sure this is the best long-term solution (the alternative
>> would be making it part of Cython or adding a dependency) but I think
>> that's fine for now. I'm assuming there that the end user doesn't
>> explicitly reference it, right? It's just an optimization if present.
>>
>> - Robert
>> _______________________________________________
>> cython-devel mailing list
>> cython-devel@python.org
>> http://mail.python.org/mailman/listinfo/cython-devel
>
> The only gotcha is that when you checkout Cython from github you will
> need to update the submodule. It's not really an optimization, it's an
> implementation, that is the Cython AST needs to be mapped onto the new
> AST, and then it generates the C code from that. I'm currently working
> on interweaving this AST with Cython's AST, to support operations on
> objects and complex numbers, as well as provide Cython semantics for
> division and such (complex numbers are working now).
>
> If it's all working, it might be possible to create an LLVM backend
> with reasonably ease as well for our vector expressions, to provide
> optimal just-in-time specializations.

(Eventually the project itself might support such things, but for now
this is easier, and it may be useful in other situations as well).
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to