Dear Karl, Karl Rupp <r...@iue.tuwien.ac.at> writes: > * Installation: Works nicely from the PPA, no problems with my Linux > Mint Maya (based on Ubuntu 12.04, so this is expected).
Good! :) > * Found the PyViennaCL documentation, but it was *not* installed > automatically, but listed as 'suggested' package. I think this can be > addressed in the installation instructions and does not require a change > in behavior. Sure, I only listed it as suggested because the HTML docs are the same as what you get if you do "import pyviennacl; help(pyviennacl)" in the interpreter, which I expect people to do. > * Okay, so let's try to print individual elements of A and B: > A(1,1); # error! > A.item(1,1); # error! > A[1,1]; # returns pyviennacl.pycore.HostScalar information > print(A[1,1]); # works! > Okay, this was a bit lengthy, we should have some more 'newbie > information' in the docs :-) Hmm.. I think I might set it so that doing 'A[1,1]' at the interpreter prompt prints the object, rather than the class info; but see below for more about this. Also be aware that PyViennaCL supports ranges and slices :) > * Let's assign some elements: > A[1,1].assign(2.0); # error: Cannot assign to HostScalar > A[1,1] = 2.0; # same > Here I searched the docs and found that it's not possible to assign > stuff directly. Okay, so I created a numpy array (which I had to look up > how to do that, of course ;-) ) and got: > Drow = numpy.array([1, 2, 3, 4, 5]); For convenience, the numpy.array function is aliased in PyViennaCL as pyviennacl.array. Also, you can do this to be clear about the 'dtype': >>> Drow = p.array([1, 2, 3, 4, 5], dtype=p.float64) (which converts the integers to the float64 (double) type) > D = numpy.array([Drow, Drow, Drow, Drow, Drow]); > C = B + A; # error! > Type conversion tricked me, A became a matrix of integers. Here I see > the motivation for allowing mixed precision operations in ViennaCL > asap... Alright, so restart with > Drow = numpy.array([1.0, 2.0, 3.0, 4.0, 5.0]); > D = numpy.array([Drow, Drow, Drow, Drow, Drow]); > C = B + A; Did you mean >>> C = D + A ? Because that works, too! (ie, you can add PyViennaCL and NumPy matrices together, as long as they have compatible sizes and types) > Okay, let's stop here for now. Summary: Great, simple operations just > work nicely and it integrates well in the Python environment. What can > be done to make the user experience even better? > - Allow element-wise manipulation. Sure, this is terribly slow, but it > helps a lot with prototyping, which is an important use case with > Python. Mrrgh. OK :) > - Provide a few 'first steps' tutorials with the documentation. If > that's already there and I simply couldn't find it, make it more > visible. This way more emphasis is on the 'get simple stuff going' > rather than internals of the scheduler which people won't read through > for a start. Yes, I should probably do this. In large part, I was relying on people knowing NumPy and assuming that PyViennaCL would be similar -- but a few such tutorials certainly wouldn't go amiss. > - Ideally, each of the items in the linalg package has a short code > snippet on how to call/use it. > - Correct the version number in the 'PyViennaCL 1.5.0 documentation' > string in the HTML docs. ;-) OK. > - Think about numeric type conversions. If a numpy-array of numeric > type T1 is assigned to a PyViennaCL matrix of type T2, should the > PyViennaCL matrix change to T1? Maybe issue a warning? The thing is, in Python, you don't tend to create objects and then assign values to them -- both happen at the same time, and the things you manipulate are really just references. So if you create a Matrix A, and then try to use the = operator to assign something else to it, you just change the thing that A refers to (and if the old Matrix has no other references, it is deleted). I think this is what is happening when you talk about the PyViennaCL matrix "changing" :) In PyViennaCL, you can just about get around this, by doing something like `A[:,:] = B`, but that at least forces you to be explicit about the assignment. If you have A and B of different dtypes in this example, you get a TypeError exception saying "Cannot assign across different dtypes!". If you want to be very careful about the numeric types, you can wrap every number you write in a dtype: >>> a = p.Matrix(5, 5, p.float32(0.5)) * p.float32(2.0) >>> a.value array([[ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.]], dtype=float32) Also note that the way I recommend getting access to the values of objects at the interpreter is by using the ".value" attribute, because this does separate the container object A and whatever data A contains, and because the expression-tree representation of a lot of PyViennaCL stuff means that even if the object A contains matrix data, its type might not be Matrix, but an expression Node subclass, like Add.. In any case, as I say, I could change this -- but I think it should be easy to be aware of the slightly different semantics here, in case debugging is needed. I suppose people always have the "type" keyword... This does remind me that there is one thing I ought to fix: >>> A = p.Matrix(10, 10, 0.5) >>> B = p.Matrix(10, 10, 0.9) >>> C = A + B >>> D = p.Matrix(5, 5, 3.0) >>> C[0:5,6:10] = D Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'Add' object does not support item assignment >>> C[0:5, 6:10] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'Add' object has no attribute '__getitem__' > Anyway, I think we are pretty close to a release here, I'll give the > whole installation a try on Windows as well :-) Thanks. I've yet to try on Windows, so I suspect you'll have some errors... Best, Toby ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ ViennaCL-devel mailing list ViennaCL-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/viennacl-devel