Hi, > It seems like we could save several thousands of lines of code > (and gain > a lot of clarity) by using the C++ API directly. > > > Well, I'm not so sure about that actually. I'd more conservatively > estimate it in the range of hundreds. > > > Actually, I think that most of the code bloat comes from the > ClGet*Info() calls. There are dozens of methods in ocl::device() to > handle this, while this could be simply handled using a proper templated > method. I notice that I already did that work in viennacl/ocl/infos.hpp > but that it is somewhat not used. Is there any drawback with using : > viennacl::ocl::info<CL_DEVICE_NAME>(viennacl::ocl::device const & d); > instead of > viennacl::ocl::device::name() ?
Yes, we discussed that. The reason is that with info<>() one cannot buffer the results. > Perhaps we could rename it so that the call becomes > viennacl::ocl::info<VIENNACL_DEVICE_NAME>(viennacl::ocl::device const > &), so that VIENNACL_DEVICE_NAME could be used with CUDA/OpenMP devices > too if ever needed. I think that's never needed. > -> We could save literally thousands of lines of code. I'm ready > to bet > that it could relieve the compiler and reduce the compilation times > > > Hundreds ;-) I bet against your bet that compilation times reduce > notably for two reasons: > - the OpenCL C++ API just adds yet another type-hierarchy > - most of the compilation time is spent in other parts of the library > However, feel free to prove me wrong ;-) > > > It's true, most of the time is spent in template instantiation rather > than parsing. I remember having benchmarked it on an older version of > ViennaCL. I think that 1000 lines could be saved by using > viennacl::ocl::infos<> instead of > viennacl::ocl::{device|program|kernel|chocolatebar}::*(). Yes and no. We might save some milliseconds from this, but it's getting harder for us to document and users will have a harder time finding it. Also, return values cannot be buffered, see above. That was the point of dropping infos<>. I can dig out the other thread if you like. > -> It would be easier to maintain. There is a whole community > bugfixing > the cl.hpp file, and we are more likely to have bugs in our C calls > rather than our C++ calls > > > How do you intend to deal with bugs or warnings obtained from > cl.hpp? We can handle all bugs and warnings in our codes, but we > might have a hard time dealing with warnings or even errors in older > versions of cl.hpp. Yes, it won't be noticed by 99% of our users, > but I also care about the remaining one percent. > > > We actually had a warning in cl.h recently (or was it in cl.hpp?), > didn't we? :P So we might have to deal with warnings in cl.h as well. I > agree that we don't want a riot with angry people shouting "We are the 1%". Yes, it was a warning in the OpenCL 1.1 headers, which is fixed in OpenCL 1.2. This was in a trivial C-header. You can imagine how things can get worse with C++. > -> I think that when we need to deal with more complicated > things such > as multiple devices, we'll gain in productivity and robustness > by using > the C++ API. > > > Robustness might be true. In which way are we going to gain in > productivity? I understand that you may gain in productivity when > dealing with the generator, but most other parts of ViennaCL are > sitting on top of a backend-agnostic layer, not getting in touch > with OpenCL directly. So the question is whether you consider the > additional effort of replacing the current use of the C-API worth it. > > > Actually, I came accross a lot of inconveniences while plugging a simple > caching mechanism into viennacl::ocl::context::add_program(). It's not > at all about the generator ;) The inconveniences however had to do with > unintegrated use of STL vectors and cumbersome clGet*Info. Adding > methods would not have solved the problem because the corresponding > viennacl objects were not created at this point (but the cl handles were) This sounds to me like the OpenCL C++ API won't make a difference here ;-) > On the other hand, I cannot see any functionnality in the C API > which > isn't wrapped in the C++ one. It sure would take quite a bit of > work, > but I'm ready to handle it myself if there is no objection. > > > I'm not objecting to a change, but I also want to submit that I > don't think it is worth the effort. If you're fine with the effort > (including the testing and bugfixes to bring it to a state > comparable to the current), please go ahead :-) > > > I think you're right... Plus, we need information such as the device > macro-architecture, which will probably never be provided by the OpenCL > standards. To get informations such as NUMA-domains, we might even have to resort to libraries such as hwloc, yes. > I'm however in favor of a small refactoring which would involve using > viennacl::ocl::infos<> instead of the corresponding methods. What do you > think about it? See above :-) There are good reasons for dropping infos<>(), particularly as we cannot assume that each OpenCL SDK returns the requested information as rapidly as we might need it. 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