<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><blockquote type="cite" class="">working out dispatch in MatCreate_XXX() instead of for each function.</blockquote><div class=""><br class=""></div>Or use compiler extensions for multiversioned functions (I recall GCC has something similar):<div class=""><div class=""><a href="https://clang.llvm.org/docs/AttributeReference.html#target" class="">https://clang.llvm.org/docs/AttributeReference.html#target</a></div><div class=""><br class=""><div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div>Best regards,<br class=""><br class="">Jacob Faibussowitsch<br class="">(Jacob Fai - booss - oh - vitch)<br class="">Cell: (312) 694-3391</div></div>

</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On Feb 14, 2021, at 17:07, Jed Brown <<a href="mailto:jed@jedbrown.org" class="">jed@jedbrown.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Barry Smith <<a href="mailto:bsmith@petsc.dev" class="">bsmith@petsc.dev</a>> writes:<br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">On Feb 14, 2021, at 12:13 PM, Jed Brown <<a href="mailto:jed@jedbrown.org" class="">jed@jedbrown.org</a>> wrote:<br class=""><br class="">Barry Smith <<a href="mailto:bsmith@petsc.dev" class="">bsmith@petsc.dev</a>> writes:<br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">This is a reasonable message to print on the screen, but I don’t think this is a reasonable flag to impose by default.<br class="">You are basically asking all package managers to add a new flag (-march=generic) which was previously not needed.<br class=""></blockquote><br class=""> This is a tough constraint, package managers should not have to do anything to get portability but users get great performance without needing to be sophisticated. Seems to put the burden on the unsophisticated folks (all users) and not on the sophisticated folks (packages). <br class=""></blockquote><br class="">The sophisticated folks are us, the upstream developers who know what needs to be optimized for specific hardware (src/mat/impls/) and what does not (most of the rest of PETSc). We've been typical self-centered scientific software developers who just assume people who care about performance will build a custom library for each machine they run on.<br class=""></blockquote><br class="">  I'm still bit confused. We need to build fat binaries otherwise the stuff in src/mat/impls/ will either be not portable or will be generic and potentially slower, right? Are you saying it is not worth building fat binaries for most of the source? So we mark either by directory or file where we want fat binaries built?<br class=""></blockquote><br class="">Yes, binaries only need multiple versions for specific parts (kernels that benefit from vectorization). That keeps them smaller and the build fast. We can do a better job than "fat" compiler flags by working out dispatch in MatCreate_XXX() instead of for each function.<br class=""></div></div></blockquote></div><br class=""></div></div></body></html>