Hi Karli,

Karl Rupp <r...@iue.tuwien.ac.at> writes:
>> At the moment, my proposed schedule outline looks like this:
>>
>> * Expose remaining ViennaCL mathematical API (Week 1 - 2)
>> * Features from SciPy / NumPy that would be useful (Week 3)
>> * Performance optimisation (Weeks 4 - 5)
>> * Multi-platform support (Week 6 - 7)
>> * PyOpenCL (+ PyCUDA) Integration (Weeks 8 - 9)
>> * Scheduler integration and linking (Weeks 10 - 11)
>> * Misc.: docs, tests, examples, binaries, marketing (Week 12)
>
>
> The agenda looks good, yet it's certainly ambitious. I'd assign more 
> time for the 'misc' part, since it's better to get a comprehensive, 
> well-documented release out on time with less features rather than 
> having to deal with a (potentially large) delay.
>
> Other suggestions worth considering:
>   - Get rid of Boost.uBLAS to simplify (and speed up) 
> installation/compilation

This one is a bit tricky, and as long as I'm using boost.python and
boost.numpy, not that urgent (what's the burden of a couple more boost
files in the external submodule on top of that?). I have been thinking
about progressively changing the C++ parts of the wrapper away from
boost.python (despite its elegant API!), and towards another method,
perhaps by using libviennacl, perhaps Cython.

But I think that's something that can happen gradually, and I'd rather
work on features and fixes for now.

>   - Windows installer.

Oh, yeah. That's really easy! It should be just 'python setup.py
bdist_msi', and then you just need to build versions to match users'
Python versions. So it should work already.

I think.

Did you get a chance to test out the Windows build? I'd like to release
a PyViennaCL 1.0.1 with the build system change :)


>> Performance optimisation (Weeks 4 - 5)  [ perhaps weeks 4 - 6 .. ]
>> ======================================
>>
>> + PyViennaCL benchmarks
>>    + vs equivalent operations in NumPy / SciPy, Theano..
>>
>> + Profiling and optimising common code paths
>>
>> + More caching, as for the sparse matrices, but for dense matrices and
>>    proxies
>>    + for instance, instead of doing direct elementwise modifications, do
>>      them in batch
>
> I suggest not to assign too much time to this. Sure, you should check 
> that overheads from the Python wrapper don't get excessive, but for 
> sufficiently large data it is always the ViennaCL part where time is spent.

Yeah, you're right. I'll cut it down to one week, and expand the
misc. section by a week. I think it would be good, though, to get a
couple of measurements done!

>> PyOpenCL (+ PyCUDA) Integration (Weeks 8 - 9)
>> ---------------------------------------------
>>
>> + Want to take advantage of PyOpenCL's int_ptr to access ViennaCL
>>    objects in other (Py)OpenCL code and vice versa.
>>
>> + need to get the underlying OpenCL pointers out of ViennaCL --
>>    and be able to pass them back in
>>
>> + where PyOpenCL is not available, provide compatible minimal
>>    surrogate classes
>>    + in this case, integration functionality is clearly unnecessary
>>    + don't want to depend on too many external bits, but also want to
>>      provide useful functionality!
>>
>> + convert between Matrix and pyopencl.array.Array types?
>>
>> + "The functionality in the module pyopencl.elementwise contains
>>     tools to help generate kernels that evaluate multi-stage
>>     expressions on one or several operands in a single pass"
>>     -- http://documen.tician.de/pyopencl/algorithm.html
>>     + sounds familiar? This is what we do in ViennaCL!
>
> Nice. you may want to start working on that a little earlier (e.g. work 
> on this first before running performance optimizations)

That's a good suggestion. In fact, I can put performance optimisation
before the misc work, and then be free to adjust the relative timings
for "general polishing work".


>> Scheduler integration and linking (Weeks 10 - 11)
>> -------------------------------------------------
>>
>> + users able to define a custom Node class
>>    + useful for prototyping algorithm implementations!
>>    + so: useful to expose an API similar to the underlying
>>          ViennaCL structure so that prototypes can be ported
>>          to the core without too much hassle
>>
>> + user-given class info determines dtypes, arguments and return type
>>
>> + class provides kernel (source, binary, whatever supported by
>>    back-end)
>>    + device-specific kernel support?
>>
>> + PyViennaCL registers custom Node with ViennaCL scheduler,
>>    assigning the Node an ID
>>
>> + ViennaCL then has a mapping of (ID, custom operation) pairs
>>
>> + when the scheduler is called with the relevant ID, argument types
>>    are checked and operation is scheduled for dispatch
>>    + how is the return value created?
>>
>> + posible to harness the generator usefully?
>>    + how to avoid temporaries in the expression tree, when using
>>      custom nodes?
>>    + while we can do metaprogramming in Python, the generator does
>>      the metaprogramming in C++
>>      + how flexible is it?
>>      + what source / metadata does it use?
>
> This will remove quite some pressure on the build system, because the 
> time is then spent on building a shared libviennacl-library rather 
> compiling lots of stuff within the PyViennaCL wrappers. It's good to 
> schedule this towards the end of GSoC, since it will take some time 
> until the ViennaCL side of things is ready.

Great. I don't mind helping with any work on ViennaCL necessary because
of my plans!

>> Misc.: docs, tests, examples, binaries, marketing (Week 12)
>> ===========================================================
>>
>> + need to think of use case examples for the above
>> + eig tests
>> + Add __all__, so that docs are prettier
>> + Fix sphinx warnings
>> + Windows installers -- really easy to create!
>>    + just setup.py bdist_msi
>
> Don't underestimate the efforts required here. Better to assign at least 
> a second week. Documentation is so important, so it should get the 
> necessary attention :-)

You're right. I should take some inspiration from your blog post, and
Andreas' various docs, which are excellent. I think an important point
to bear in mind is that good documentation takes it slowly.

>> Nice-to-have
>> ============
>>
>> + PyPy support for even more acceleration!
>
> Let's see how it goes...

:-)


Cheers,

Toby


------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel

Reply via email to