Hi again, the problem was 'just' a missing return statement, through which the returned vector wasn't created properly. I pushed a fix already, and another commit which adds '-Wextra' to the list of compilation flags if ENABLE_PEDANTIC is set. It is not enabled by default in order not to shy away users who clone our developer repository, yet I hope that everybody intending to commit code to the repository will have the flag enabled. (Exception: When building CUDA code, -Wextra is hopeless, as nvcc produces tons of warnings in the generated code)
Best regards, Karli On 05/22/2014 01:12 AM, Philippe Tillet wrote: > I'm just realizing that, while such checks make sense in the case of > self-assignement, we probably shouldn't do it for inner_prod(), since it > should technically result in a different expression tree. The good way > to implement it would be through a pre-processor for > scheduler::statement (like in Theano), but we're not there yet. So, > i'll just perform an additional check within CG for now > > Philippe > > > 2014-05-21 23:04 GMT+02:00 Philippe Tillet <phil.til...@gmail.com > <mailto:phil.til...@gmail.com>>: > > Hi, > > Ok thanks, i'll do it! > I did this trick: > > template<typename VectorType, typename PreconditionerType> > class z_handler{ > public: > z_handler(VectorType & residual) : z_(residual){ } > VectorType & get() { return z_; } > private: > VectorType z_; > }; > > template<typename VectorType> > class z_handler<VectorType, viennacl::linalg::no_precond>{ > public: > z_handler(VectorType & residual) : presidual_(&residual){ } > VectorType & get() { return *presidual_; } > private: > VectorType * presidual_; > }; > > And then, in the code: > > z_handler<VectorType, PreconditionnerType> zh(residual); > VectorType& z = zh.get(); > > The rest can either be done as if(&z == &residual) or by checking > self-assignments, and the address of the arguments of norm. I've > chosen the latter option, since I don't see any drawback to > redirecting inner_prod to norm2 when the two arguments are the same, > or returning *this directly for a self-assignment. Plus, some users > might end up doing similar things too, so it's better to have it > handled internally > > Philippe > > > > 2014-05-21 21:35 GMT+02:00 Karl Rupp <r...@iue.tuwien.ac.at > <mailto:r...@iue.tuwien.ac.at>>: > > Hi, > > > > I've slightly modified the CG implementation to handle > preconditionned > > CG and unpreconditionned CG in the same routine (without > adding any > extra allocation/copy), but I can't find a routine to test > that I > haven't introduced a bug. Running > grep "cg_tag" tests/src/* > returns no result. > Do we have a test for the iterative solvers, or just examples? > > > unfortunately there is no native test in ViennaCL itself. Some > other Vienna-libraries test their solvers against viennacl-dev, > so this part of functionality is checked indirectly. > > The easiest way to verify proper operation 'by hand' is to check > the residuals reported through 'solverbench'. > > Btw: How does your unified implementation behave > performance-wise? I think the reason this was not unified is > that a plain CG somewhere saves a memory transfer (norm() > instead of inner_prod() or related). On the other hand, the > pipelined CG version I'll push soon will require some extra > tweaks for ViennaCL-types, so it's good to have a single > 'generic' implementation for non-ViennaCL types. > > Best regards, > Karli > > > ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ ViennaCL-devel mailing list ViennaCL-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/viennacl-devel