<div dir="ltr"><br><div>Hello,</div><div><br></div><div>I have a project in mind and seek feedback.</div><div><br></div><div>Disclaimer: I hope I am not abusing of this mailing list with this idea. If so, please ignore.</div><div><br></div><div>As a thought experiment, and to have a bit of fun, I am currently writing/thinking on writing, a small (modern) C++ wrapper around PETSc.</div><div><br></div><div><span style="line-height:15.6px">Premise: PETSc is awesome, I love it and use in many projects. Sometimes I am just not super comfortable writing C. (I know my idea goes against PETSc's design philosophy).</span><br></div><div><br></div><div>I know there are many around, and there is not really a need for this (especially since PETSc has his own object-oriented style), but there are a few things I would like to <span style="line-height:1.5">really include in this wrapper, that I found nowhere):</span></div><div><span style="line-height:1.5">- I am currently only thinking about the Vector/Matrix/KSP/DM part of the Framework, there are many </span><span style="line-height:1.5">other cool things that PETSc does that I do not have the brainpower to consider those as well.</span></div><div>- expression templates (in my opinion this is where C++ shines): this would replace all code bloat that a user might need with cool/easy to read expressions (this could increase the number of axpy-like routines);</div><div>- those expression templates should use SSE and AVX whenever available;</div><div>- expressions like x += alpha * y should fall back to BLAS axpy (tough sometimes this is not even faster than a simple loop);</div><div>- all calls to PETSc should be less verbose, more C++-like:</div><div>  * for instance a VecGlobalToLocalBegin could return an empty object that calls VecGlobalToLocalEnd <span style="line-height:1.5">when it is destroyed.</span></div><div>  * some cool idea to easily write GPU kernels.</div><div>- the idea would be to have safer routines<span class="inbox-inbox-Apple-converted-space" style="line-height:15.6px"> </span><span style="line-height:15.6px">(at compile time)</span><span style="line-height:1.5">, by means of RAII etc.</span></div><div><br></div><div>I aim for zero/near-zero/negligible overhead with full optimization, for that I include benchmarks and extensive test units.</div><div><br></div><div>So my question is:</div><div>- anyone that would be interested (in the product/in developing)?</div><div>- anyone that has suggestions (maybe that what I have in mind is nonsense)?</div><div><br></div><div>If you have read up to here, thanks.</div></div>