Bug 1389016

Summary: Review Request: libxsmm - Library for small matrix-matrix multiplications on Intel x86_64 (e.g. for cp2k)
Product: [Fedora] Fedora Reporter: Dave Love <dave.love>
Component: Package ReviewAssignee: Antonio T. (sagitter) <anto.trande>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: anto.trande, hans.pabst, orion, package-review, rc040203
Target Milestone: ---Flags: anto.trande: fedora-review+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-12-23 12:19:40 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Dave Love 2016-10-26 16:37:57 UTC
Spec URL: https://loveshack.fedorapeople.org/review/libxsmm.spec
SRPM URL: https://loveshack.fedorapeople.org/review/libxsmm-1.5-4.el6.src.rpm
Description: 
Library for small matrix-matrix multiplications targeting Intel
Architecture (x86).  The library generates code for the instruction
set extensions Intel SSE3, Intel AVX, Intel AVX2, IMCI (KNCni) for
Intel Xeon Phi coprocessors ("KNC"), and Intel AVX-512 as found in the
Intel Xeon Phi processor family ("KNL") and future Intel Xeon
processors.

cp2k is the Fedora package for which this is currently relevant.

Fedora Account System Username: loveshack

See https://copr.fedorainfracloud.org/coprs/loveshack/livhpc/package/libxsmm/ for builds.

Comment 1 Antonio T. (sagitter) 2016-10-26 16:47:25 UTC
If you can 'numcosmo' is ready for reviewing: https://bugzilla.redhat.com/show_bug.cgi?id=1387927

Comment 2 Antonio T. (sagitter) 2016-10-26 17:20:29 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed


Issues:
=======
- Default compiler flags are not honored.

- doc sub-package does not provide any license.

- libxsmm-debuginfo.x86_64: E: debuginfo-without-sources

- libxsmm 1.5.1 is available

- W: mixed-use-of-spaces-and-tabs

- OMP support is disabled, but libs are linked to libgomp anyway.
  Can unused-direct-shlib-dependency warnings be silenced?


===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[ ]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "BSD (3 clause)", "Unknown or generated". 57 files have unknown
     license. Detailed output of licensecheck in
     /home/sagitter/1389016-libxsmm/licensecheck.txt
[!]: License file installed when any subpackage combination is installed.
[!]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[!]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 61440 bytes in 1 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in libxsmm-
     doc , libxsmm-debuginfo
[ ]: Package functions as described.
[!]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[?]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: libxsmm-1.5-4.fc26.x86_64.rpm
          libxsmm-devel-1.5-4.fc26.x86_64.rpm
          libxsmm-doc-1.5-4.fc26.noarch.rpm
          libxsmm-debuginfo-1.5-4.fc26.x86_64.rpm
          libxsmm-1.5-4.fc26.src.rpm
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: no-documentation
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-debuginfo.x86_64: E: debuginfo-without-sources
libxsmm.src: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.src:23: W: mixed-use-of-spaces-and-tabs (spaces: line 23, tab: line 12)
5 packages and 0 specfiles checked; 1 errors, 8 warnings.




Rpmlint (debuginfo)
-------------------
Checking: libxsmm-debuginfo-1.5-4.fc26.x86_64.rpm
libxsmm-debuginfo.x86_64: E: debuginfo-without-sources
1 packages and 0 specfiles checked; 1 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-debuginfo.x86_64: E: debuginfo-without-sources
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmext.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmnoblas.so.1.5 /lib64/libgomp.so.1
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmnoblas.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmgen.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 sgemm_
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libm.so.6
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libgcc_s.so.1
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libquadmath.so.0
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 sgemm_
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: no-documentation
4 packages and 0 specfiles checked; 1 errors, 17 warnings.



Requires
--------
libxsmm-devel (rpmlib, GLIBC filtered):
    libc.so.6()(64bit)
    libpthread.so.0()(64bit)
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)
    rtld(GNU_HASH)

libxsmm-doc (rpmlib, GLIBC filtered):

libxsmm-debuginfo (rpmlib, GLIBC filtered):

libxsmm (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libdl.so.2()(64bit)
    libgcc_s.so.1()(64bit)
    libgfortran.so.3()(64bit)
    libgfortran.so.3(GFORTRAN_1.0)(64bit)
    libgomp.so.1()(64bit)
    libgomp.so.1(GOMP_1.0)(64bit)
    libgomp.so.1(GOMP_2.0)(64bit)
    libgomp.so.1(GOMP_4.0)(64bit)
    libgomp.so.1(OMP_1.0)(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    libquadmath.so.0()(64bit)
    librt.so.1()(64bit)
    libxsmm.so.1()(64bit)
    rtld(GNU_HASH)



Provides
--------
libxsmm-devel:
    libxsmm-devel
    libxsmm-devel(x86-64)

libxsmm-doc:
    libxsmm-doc

libxsmm-debuginfo:
    libxsmm-debuginfo
    libxsmm-debuginfo(x86-64)

libxsmm:
    libxsmm
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)



Source checksums
----------------
https://github.com/hfp/libxsmm/archive/1.5.tar.gz#/libxsmm-1.5.tar.gz :
  CHECKSUM(SHA256) this package     : c52568c5e0e8dc9d8fcf869a716d73598e52f71c3d83af5a4c0b3be81403b423
  CHECKSUM(SHA256) upstream package : c52568c5e0e8dc9d8fcf869a716d73598e52f71c3d83af5a4c0b3be81403b423


Generated by fedora-review 0.6.1 (f03e4e7) last change: 2016-05-02
Command line :/usr/bin/fedora-review -m fedora-rawhide-x86_64 -b 1389016
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP
Disabled flags: EXARCH, DISTTAG, EPEL5, BATCH, EPEL6

Comment 3 Dominik 'Rathann' Mierzejewski 2016-10-26 17:23:10 UTC
I was planning to package this, actually, so thanks for being here first! Please update to 1.5.1 which fixes a serious bug in 1.5:

https://github.com/hfp/libxsmm/releases/tag/1.5.1
[...] fixed bug in the Fortran interface (SMM functionality), where requesting a JIT kernel never returned a suitable PROCEDURE POINTER (always NULL).

I'll be happy to build cp2k with libxsmm support on x86_64 once this package approved. Please add me (FAS: rathann) to co-maintainers list if you don't mind.

Comment 4 Dave Love 2016-10-27 13:22:27 UTC
(In reply to Antonio Trande from comment #1)
> If you can 'numcosmo' is ready for reviewing:
> https://bugzilla.redhat.com/show_bug.cgi?id=1387927

That was fast!  I'm not sure about reviewing something from a subject area I don't know anything about, but I'll see what I can make of it if there's no-one better qualified.

Comment 5 Dave Love 2016-10-27 13:28:50 UTC
(In reply to Antonio Trande from comment #2)

I don't know why I didn't see these myself with fedora-review.  Anyhow I'll look into the others, thanks.

> - Default compiler flags are not honored.

Surely that's not sensible in something like this?  I could justify them in the spec file as chosen by Intel for performance.

> - libxsmm 1.5.1 is available

Only just (!), but thanks for spotting it -- will update.

>   Can unused-direct-shlib-dependency warnings be silenced?

I looked into it (and probably should have noted so), and it looked as if probably not, as it seemed the linkage was intentional.  I'll try to find that again, though it was in an earlier version.

Comment 6 Dave Love 2016-10-27 13:37:21 UTC
(In reply to Dominik 'Rathann' Mierzejewski from comment #3)
> I was planning to package this, actually, so thanks for being here first!

Happy to oblige -- I tried to make things findable in copr and could be persuaded to push other things there that are useful.  There's at least one other cp2k add-on available now.

> I'll be happy to build cp2k with libxsmm support on x86_64 once this package
> approved. Please add me (FAS: rathann) to co-maintainers list if you don't
> mind.

Sure.  Do you know if an openmp version should be used for the relevant builds of cp2k?  I should have had a more thorough check, but it looked as if serial was OK.

Comment 7 Ralf Corsepius 2016-10-27 14:58:53 UTC
(In reply to Dave Love from comment #5)
> > - Default compiler flags are not honored.
> 
> Surely that's not sensible in something like this? 
No. I regret, this is a non-negotiable must.

Comment 8 Hans Pabst 2016-10-27 18:52:53 UTC
Thank you all for reviewing/maintaining this package!

I was looking at Dave's work/logs since he wrapped it up as a package for the first time, and tried to "anticipate" what could be useful for his next wrap. Over time this became (but is not limited to):

* Fairly generic target (by default) when building the library (SSE3) to cover a general Linux distribution i.e., critical code is CPUID dispatched.
* Previously static decisions made at build time became CPUID dispatched.
* Versioned .so files to adhere to standards (major, minor scheme).
* Warnings during build for "sophisticated" (over-specified) build options, which could have inadvertent effects e.g. OMP=1 when building the library.

However, this indirect interaction has some limits. Please do not hesitate to bring up any issue or annoyance you would like to see fixed (https://github.com/hfp/libxsmm/issues). As a side-note, the relatively sophisticated GCC build flags are mostly paranoid and present due to "good practice". Though, any critical code is either independent of the compiler used (JIT) or hand-crafted.

As a (likely repeated) comment: the library (under Linux) is agnostic with respect to a specific LAPACK/BLAS implementation. Perhaps your (copr) dependence on OpenBLAS is just to trigger a presence for *some* BLAS...

I wonder about the item "Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files." - to me it looks like 3 files with below 200KB in total.

If you don't mind, perhaps you guys can adjust the package description (see below for convenience). This is because the functionality now covers deep learning primitives, and small JIT generated convolutions as well.

---
Short description: Library targeting Intel Architecture (x86) for small, dense or sparse matrix multiplications, and small convolutions.

Description: LIBXSMM is a library for small dense and small sparse matrix-matrix multiplications as well as for deep learning primitives such as small convolutions targeting Intel Architecture (x86). The library is generating code for the following instruction set extensions: Intel SSE, Intel AVX, Intel AVX2, IMCI (KNCni) for Intel Xeon Phi coprocessors ("KNC"), and Intel AVX‑512 as found in the Intel Xeon Phi processor family ("KNL") and future Intel Xeon processors. Small convolutions are currently only optimized for Intel AVX‑512. Historically the library was solely targeting the Intel Many Integrated Core Architecture "MIC") using intrinsic functions, meanwhile optimized assembly code is targeting all aforementioned instruction set extensions (static code generation), and Just‑In‑Time (JIT) code generation is targeting Intel AVX and beyond.

Comment 9 Dave Love 2016-10-28 11:15:06 UTC
(In reply to Hans Pabst from comment #8)
> Thank you all for reviewing/maintaining this package!

Apologies for not referring to it previously.  I hadn't got round to making the bug report where I just have done before getting back to the review.

Thanks for commenting.

> I was looking at Dave's work/logs since he wrapped it up as a package for
> the first time, and tried to "anticipate" what could be useful for his next
> wrap. Over time this became (but is not limited to):

It's likely I should have paid more attention to your changes...

> * Fairly generic target (by default) when building the library (SSE3) to
> cover a general Linux distribution i.e., critical code is CPUID dispatched.

Unfortunately an SSE2 baseline is necessary for packaging.  (There are actually AMD Barcelonas -- and older! -- still running here which don't have it, though they have a variety of sse4a.)

> * Versioned .so files to adhere to standards (major, minor scheme).

I don't know if it's intentional, but the .so links are the wrong way round, which causes confusion with ldconfig, and I don't think is specific to Fedora: see the patch for it in the package which I should probably have reported as well.

> * Warnings during build for "sophisticated" (over-specified) build options,
> which could have inadvertent effects e.g. OMP=1 when building the library.

Should the options be changed, do you think?  I'm still not sure whether OMP=1 is worthwhile.

A problem with the build, which I've just fixed in response to what I'd missed in fedora-review, is that make install actually builds things, which meant sse3 and openmp were being used inadvertently.  I haven't got round to finding out why, but have fixed it up in the spec.

> However, this indirect interaction has some limits. Please do not hesitate
> to bring up any issue or annoyance you would like to see fixed
> (https://github.com/hfp/libxsmm/issues). As a side-note, the relatively
> sophisticated GCC build flags are mostly paranoid and present due to "good
> practice". Though, any critical code is either independent of the compiler
> used (JIT) or hand-crafted.

Thanks.  I was assuming there was some highly-optimized C for which they were important -- life's too short to understand things at the level a packager probably should...

> As a (likely repeated) comment: the library (under Linux) is agnostic with
> respect to a specific LAPACK/BLAS implementation. Perhaps your (copr)
> dependence on OpenBLAS is just to trigger a presence for *some* BLAS...

Yes, but it's silly to use anything else, and the Makefile looks for openblas as far as I remember.  I don't understand why rpmlint complains about the reference to dgemm (?), though.

> I wonder about the item "Large documentation must go in a -doc subpackage.
> Large could be size (~1MB) or number of files." - to me it looks like 3
> files with below 200KB in total.

Thanks.  It was meant to include the samples (which are large).  Is that worthwhile?  Otherwise, I agree.

> If you don't mind, perhaps you guys can adjust the package description (see
> below for convenience). This is because the functionality now covers deep
> learning primitives, and small JIT generated convolutions as well.

Fine for the description, but the summary is too long for the packaging-defined limit.  (The current one says x86_64 because ix86 currently doesn't build.)  How about something like

Small dense or sparse matrix multiplications and convolutions for x86

I don't think the historical reference in the description is useful, but don't feel strongly about it, and I'd Anglicize a phrase or two.

Thanks, and thanks to Intel for all the free software like this being made available recently, in contrast to some competitors.  (Just a pity we're currently missing optimized KNL BLAS.)

I'll wait for any more comments before putting up a new package.

Comment 10 Hans Pabst 2016-10-28 12:02:46 UTC
> Unfortunately an SSE2 baseline is necessary for packaging.
Well, SSE2 is "nothing" wrt 64-bit since it's already part of the 64-bit ABI.

> There are actually AMD Barcelonas
They support SSE3; no problem!

> they have a variety of sse4a.
which includes SSE3. I have selected SSE3 as a baseline on purpose to not exclude such systems.

> -- and older!
Hmm, for systems without SSE3 you need to go back pretty far. I doubt that any of those systems run 64-bit, and if -- they are unlikely interested in LIBXSMM. More important, they value of the library goes towards zero since JIT is only supported with AVX and beyond. Also, statically generating our SMM kernels won't help either since our baseline there is SSE3 as well (inline assembly). There is some value left, but it's more on the edge of what the library aims to provide.

> I'm still not sure whether OMP=1 is worthwhile.
Sorry my comment might have been misleading. The library warns if you use OMP=1 since it's meant to be agnostic wrt threading runtime. The OpenMP compiler flags is automatically applied only for libxsmmext, which is meant to keep the OpenMP dependency separate. In the early times of LIBXSMM, OMP=1 (when applied) meant to use OpenMP synchronization primitives for the code registry (instead of OS-level primitives or Pthreads). The warning I was mentioning is related to the latter.

> Yes, but it's silly to use anything else
There OpenBLAS is the default I am looking for (just learned people would take it in any case). However, RefLAPACK/BLAS is surprisingly good (I believe for small matrices it even better than OpenBLAS). But sure, relying on OpenBLAS makes much sense.

> I don't understand why rpmlint complains about the reference to dgemm (?)
This is a real dependency on the ?gemm_ symbol. Anyhow, this symbol is still satisfied by any kind BLAS (OpenBLAS, RefLAPACK/BLAS, MKL, ATLAS, etc.)

> It was meant to include the samples (which are large).
> Is that worthwhile?
No it's not worth. People who want the dev-package would typically need to copy the sample source code anyways into a writable destination. If the sample source code would not compile then (or easy to get it to) -- the impression of the library will be ruined (which is not your problem :-).

> Small dense or sparse matrix multiplications and convolutions for x86
Sure go ahead! I am not on particular words e.g., this NA Digest (http://www.netlib.org/na-digest-html/16/v16n38.html; search for LIBXSMM) says:
"Library for small convolutions (Machine Learning), and small dense or sparse matrix multiplications."  (which leaves out the mighty x86 ;-)

> Just a pity we're currently missing optimized KNL BLAS.
I guess the MKL community download is somewhat inconvenient?
As a side-note, LIBXSMM makes some attempt to come up with regular BLAS sizes as well (status may be here: https://github.com/hfp/libxsmm/issues/99#issuecomment-255314392). First signs are the libxsmm_gemm_omp functions and the "blkgemm" sample code. A lot of work is still left.

Comment 11 Dave Love 2016-10-28 16:02:58 UTC
(In reply to Hans Pabst from comment #10)
> > Unfortunately an SSE2 baseline is necessary for packaging.
> Well, SSE2 is "nothing" wrt 64-bit since it's already part of the 64-bit ABI.

Yes, that's the point.  This is a policy issue for packaging, not anything to do with practical reality for HPC.  (However, there were first generation (?) opterons online here until a PSU blew recently...)

> > There are actually AMD Barcelonas
> They support SSE3; no problem!

[Oh, I see it's included in "PNI" if I look at cpuid rather than cpuinfo.]

> > I'm still not sure whether OMP=1 is worthwhile.
> Sorry my comment might have been misleading. The library warns if you use
> OMP=1 since it's meant to be agnostic wrt threading runtime. The OpenMP
> compiler flags is automatically applied only for libxsmmext, which is meant
> to keep the OpenMP dependency separate. In the early times of LIBXSMM, OMP=1
> (when applied) meant to use OpenMP synchronization primitives for the code
> registry (instead of OS-level primitives or Pthreads). The warning I was
> mentioning is related to the latter.
> 
> > Yes, but it's silly to use anything else
> There OpenBLAS is the default I am looking for (just learned people would
> take it in any case). However, RefLAPACK/BLAS is surprisingly good (I
> believe for small matrices it even better than OpenBLAS). But sure, relying
> on OpenBLAS makes much sense.
> 
> > I don't understand why rpmlint complains about the reference to dgemm (?)
> This is a real dependency on the ?gemm_ symbol. Anyhow, this symbol is still
> satisfied by any kind BLAS (OpenBLAS, RefLAPACK/BLAS, MKL, ATLAS, etc.)

Yes, I just couldn't see why the warning was emitted when the blas is linked.

> > It was meant to include the samples (which are large).
> > Is that worthwhile?
> No it's not worth. People who want the dev-package would typically need to
> copy the sample source code anyways into a writable destination. If the
> sample source code would not compile then (or easy to get it to) -- the
> impression of the library will be ruined (which is not your problem :-).

Examples from the distributed source are typically included in -doc rpms, or a separate -examples one, though I don't remember specific policy on that, and there's only any point if they are useful.  However, I don't understand why the samples are included if they are problematic -- I'm doubtless mis-understanding.

> > Small dense or sparse matrix multiplications and convolutions for x86
> Sure go ahead! I am not on particular words e.g., this NA Digest
> (http://www.netlib.org/na-digest-html/16/v16n38.html; search for LIBXSMM)
> says:
> "Library for small convolutions (Machine Learning), and small dense or
> sparse matrix multiplications."  (which leaves out the mighty x86 ;-)

OK.  I assumed there was a desire to say "Intel" as much as possible and I
only took that out of the summary to shorten it -- but slightly undo that by
saying x86_64, as the packaging is specific.

> > Just a pity we're currently missing optimized KNL BLAS.
> I guess the MKL community download is somewhat inconvenient?

It's obviously not usable for Fedora or OK for general use on a cluster.  (I read the conditions, unlike most people...)

> As a side-note, LIBXSMM makes some attempt to come up with regular BLAS
> sizes as well (status may be here:
> https://github.com/hfp/libxsmm/issues/99#issuecomment-255314392). First
> signs are the libxsmm_gemm_omp functions and the "blkgemm" sample code. A
> lot of work is still left.

Thanks for the pointer (and the rest); I'll pass it on.

A new srpm may have to wait until Monday now.

Comment 12 Hans Pabst 2016-10-29 17:29:50 UTC
> Examples from the distributed source are typically included [...]

Ok, I think it was a misunderstanding again. I thought you've pre-compiled the sample code and thereby got beyond this magic 2MB barrier (hence the comment that this is not useful IMHO, etc.). Now, I remember the issue you probably tapped into: the SeisSol sample folder (samples/seissol) is rather large due to accompanying data (*.bound, *.neigh, *.orient, *.sides, *.size). If you rely on the Git clone, you get all that data. However, if you rely on the source code archive (from the release download page), this large data set is left out (due to .gitattributes). As a good compromise, the SeisSol sample always contains a script, which downloads this large data set (proxy_download_data.sh). This script downloads from the original GitHub location.

Though, I had same problem with somewhat inconveniently large source code package as offered by our release page. This was a burden when these package were redistributed for certain applications. For example CP2K's installer uses https://www.cp2k.org/static/downloads/. At that URL, you can see that v1.1, v1.2, are v1.3 rather large ("burden") but later versions dropped to a reasonable size.

Comment 13 Dave Love 2016-10-31 14:08:35 UTC
(In reply to Hans Pabst from comment #12)
> > Examples from the distributed source are typically included [...]
> 
> Ok, I think it was a misunderstanding again.

I obviously have a talent!  The samples seem sufficiently large without
the SeisSol stuff.

I've added the samples (not built) on the assumption they are useful, with a
note about modifying the make files.  I don't think the extra rpmlint warnings
are worth worrying about, but I can fix them if required.  These should address
other comments too:

SRPM URL: https://loveshack.fedorapeople.org/review/libxsmm-1.5.1-1.el6.src.rpm
Spec URL: https://loveshack.fedorapeople.org/review/libxsmm.spec

Comment 14 Antonio T. (sagitter) 2016-10-31 15:15:53 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed


Issues:
=======

- gfortran and link commands still do not use default flags.

- Some minor warnings from rpmlint.

- Python?
BuildRequires: gcc-gfortran gcc-c++ python

===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "BSD (3 clause)", "Unknown or generated". 60 files have unknown
     license. Detailed output of licensecheck in
     /home/sagitter/1389016-libxsmm/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[!]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 61440 bytes in 1 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in libxsmm-
     doc , libxsmm-debuginfo
[ ]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[x]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: libxsmm-1.5.1-1.fc26.x86_64.rpm
          libxsmm-devel-1.5.1-1.fc26.x86_64.rpm
          libxsmm-doc-1.5.1-1.fc26.noarch.rpm
          libxsmm-debuginfo-1.5.1-1.fc26.x86_64.rpm
          libxsmm-1.5.1-1.fc26.src.rpm
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: no-documentation
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-doc.noarch: W: spurious-executable-perm /usr/share/doc/libxsmm-doc/samples/spmdm/compile_skx
libxsmm-doc.noarch: W: spurious-executable-perm /usr/share/doc/libxsmm-doc/samples/spmdm/compile_bdx
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/smm/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/smm/.make
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/cp2k/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/cp2k/.make
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/nek/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/nek/.make
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_overfeat.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_deepbench.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/pyfr/test.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_googlenetv1.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/wrap/dgemm-test.sh /bin/bash
libxsmm.src: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
5 packages and 0 specfiles checked; 3 errors, 17 warnings.




Rpmlint (debuginfo)
-------------------
Checking: libxsmm-debuginfo-1.5.1-1.fc26.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-doc.noarch: W: spurious-executable-perm /usr/share/doc/libxsmm-doc/samples/spmdm/compile_bdx
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/smm/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/smm/.make
libxsmm-doc.noarch: W: spurious-executable-perm /usr/share/doc/libxsmm-doc/samples/spmdm/compile_skx
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/nek/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/nek/.make
libxsmm-doc.noarch: W: hidden-file-or-dir /usr/share/doc/libxsmm-doc/samples/cp2k/.make
libxsmm-doc.noarch: E: zero-length /usr/share/doc/libxsmm-doc/samples/cp2k/.make
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_deepbench.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_googlenetv1.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_overfeat.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/pyfr/test.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/wrap/dgemm-test.sh /bin/bash
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmnoblas.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmext.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 sgemm_
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 sgemm_
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libm.so.6
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libgcc_s.so.1
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libquadmath.so.0
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmgen.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: no-documentation
4 packages and 0 specfiles checked; 3 errors, 26 warnings.



Requires
--------
libxsmm-devel (rpmlib, GLIBC filtered):
    libc.so.6()(64bit)
    libpthread.so.0()(64bit)
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)
    rtld(GNU_HASH)

libxsmm-doc (rpmlib, GLIBC filtered):
    /bin/bash
    /bin/sh

libxsmm-debuginfo (rpmlib, GLIBC filtered):

libxsmm (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libdl.so.2()(64bit)
    libgcc_s.so.1()(64bit)
    libgfortran.so.3()(64bit)
    libgfortran.so.3(GFORTRAN_1.0)(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    libquadmath.so.0()(64bit)
    librt.so.1()(64bit)
    libxsmm.so.1()(64bit)
    rtld(GNU_HASH)



Provides
--------
libxsmm-devel:
    libxsmm-devel
    libxsmm-devel(x86-64)

libxsmm-doc:
    libxsmm-doc

libxsmm-debuginfo:
    libxsmm-debuginfo
    libxsmm-debuginfo(x86-64)

libxsmm:
    libxsmm
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)



Source checksums
----------------
https://github.com/hfp/libxsmm/archive/1.5.1.tar.gz#/libxsmm-1.5.1.tar.gz :
  CHECKSUM(SHA256) this package     : 9e2a400e63b6fb2d4954e53536090eb8eb6f0ca25d0f34dd3a4f166802aa3d54
  CHECKSUM(SHA256) upstream package : 9e2a400e63b6fb2d4954e53536090eb8eb6f0ca25d0f34dd3a4f166802aa3d54


Generated by fedora-review 0.6.1 (f03e4e7) last change: 2016-05-02
Command line :/usr/bin/fedora-review -m fedora-rawhide-x86_64 -b 1389016
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP
Disabled flags: EXARCH, DISTTAG, EPEL5, BATCH, EPEL6

Comment 15 Hans Pabst 2016-10-31 16:27:03 UTC
One more comment about the OMP build key. It's actually a "tristate":
(1) OMP=1: default (note: -fopenmp [or equivalent] only applies to libxsmmext)
(2) OMP=0: non-default, turns OpenMP off (even for libxsmmext!)
(3) OMP build key is not specified -> similar to #1
I recommend to stay with #3.

Other comments about the build specification:
- STATIC=0: that's fine if you want shared libraries. Btw, you can build static libraries in addition if needed.
- PREFETCH=1: superfluous, it's the default anyways (CPUID-based prefetch strategy).
- SYM=1: non-default but just fine (if symbols are needed/policy).
- SSE=0: turns generating SSE3 instructions off; fine if that's the policy.
Regarding the latter, in particular critical code is CPUID-dispatched e.g., using CRC32 instruction/s (SSE4.2) for the JIT-code registry.

One more comment regarding the package warnings: .make files are indeed empty, those are build artifacts and do not need to be packaged. The spelling of "coprocessor" (as opposed to co-processor) is intentionally wrt to KNC. Regarding the "spurious-executable-perm", i may rename these scripts to .sh if that helps (though this sample needs to be scrubbed a bit anyways ;-).

Comment 16 Dave Love 2016-11-01 12:11:46 UTC
(In reply to Antonio Trande from comment #14)

> - gfortran and link commands still do not use default flags.

I'll check.

> - Some minor warnings from rpmlint.

Which ones do you want removed?  I wasn't convinced they were worth bothering with.

> - Python?
> BuildRequires: gcc-gfortran gcc-c++ python

What's the problem?  It's not in at least the f24 mock root.

Comment 17 Dave Love 2016-11-01 12:26:22 UTC
(In reply to Hans Pabst from comment #15)
> (3) OMP build key is not specified -> similar to #1
> I recommend to stay with #3.

Thanks -- I'd meant to change that.

> Other comments about the build specification:
> - STATIC=0: that's fine if you want shared libraries. Btw, you can build
> static libraries in addition if needed.

They're normally omitted in Fedora.

> - PREFETCH=1: superfluous, it's the default anyways (CPUID-based prefetch
> strategy).

Thanks.  I thought it was documented as building a separate interface, but I hadn't checked.

> - SYM=1: non-default but just fine (if symbols are needed/policy).

It's needed for the debuginfo package, i.e. what you install to use gdb.

> One more comment regarding the package warnings: .make files are indeed
> empty, those are build artifacts and do not need to be packaged.

Thanks.

> The
> spelling of "coprocessor" (as opposed to co-processor) is intentionally wrt
> to KNC. Regarding the "spurious-executable-perm", i may rename these scripts
> to .sh if that helps (though this sample needs to be scrubbed a bit anyways
> ;-).

Most of what rpmlint reports isn't actual speling erors and can be ignored.
(It does grate if I have to use US/Cambridge English per policy.)

I don't think there's anything particularly wrong with the executable scripts.
I think the complaint is about them not starting with #! but the ones I checked don't actually need to.  (There's typically rpmlint noise about the contents of doc/example packages.)

Thanks for the expert comments generally.  One question: is it a bug that "make install" actually builds things after the build stage has run?  Ideally it wouldn't, but I didn't think it was worth worrying about.

Comment 18 Hans Pabst 2016-11-01 13:08:48 UTC
I will look into the "make install" thing as well as resolving the issue about the version stamps. For the latter, I will make the major.minor-file a real file while the non-decorated file becomes a symlink.

Comment 19 Antonio T. (sagitter) 2016-11-01 16:21:06 UTC
(In reply to Dave Love from comment #16)
> (In reply to Antonio Trande from comment #14)
> 
> > - Some minor warnings from rpmlint.
> 
> Which ones do you want removed?  I wasn't convinced they were worth
> bothering with.

'spurious-executable-perm', 'zero-length'.
doc sub-package contains source files to compile samples. Is it the right place for them?

> 
> > - Python?
> > BuildRequires: gcc-gfortran gcc-c++ python
> 
> What's the problem?  It's not in at least the f24 mock root.

Why does need python?

Comment 20 Hans Pabst 2016-11-01 16:36:47 UTC
> Why does need python?

It's used by the build system. It's also used to "print code" when statically generating specialized kernels (non-JIT). The latter is not used by the way the library is built for general distribution, but the former is (used by the build system).

There is also the "build key" called PYTHON, which allows to specify the Python interpreter e.g.,
$ make PYTHON=python3.4
(Btw, the Python scripts are scrubbed to be compatible with Python 2.4-3.x.)

In a narrow sense, Python is not needed after the library is built. However, from a (library-)user's point of view there is also some sample code (samples/pyfr), which relies on Python...

Comment 21 Hans Pabst 2016-11-03 12:29:45 UTC
Version 1.5.2 addresses the soname issue, avoids building code as part of the "install" target, and also resolves other (minor) issues or glitches. More details can be found at https://github.com/hfp/libxsmm/releases/tag/1.5.2

Comment 22 Dave Love 2016-11-03 16:28:57 UTC
(In reply to Antonio Trande from comment #19)
> (In reply to Dave Love from comment #16)
> > (In reply to Antonio Trande from comment #14)
> > 
> > > - Some minor warnings from rpmlint.
> > 
> > Which ones do you want removed?  I wasn't convinced they were worth
> > bothering with.
> 
> 'spurious-executable-perm', 'zero-length'.

I'm not convinced the permission is spurious, since they are scripts.
The .make files are cleaned up now

> doc sub-package contains source files to compile samples. Is it the right
> place for them?

I don't know.  I thought that's OK, but I can't find any relevant policy.
I'll do something else reasonable with them if you say what.

I'll update to 1.5.2 when I get a chance (thanks).

Comment 23 Dave Love 2016-11-08 13:29:59 UTC
I need to know what to do about the samples, but here's an update to the current version anyway.

SRPM URL: https://loveshack.fedorapeople.org/review/libxsmm-1.5.2-1.el6.src.rpm
Spec URL: https://loveshack.fedorapeople.org/review/libxsmm.spec

Comment 24 Orion Poplawski 2016-11-08 14:59:13 UTC
FWIW - samples in -doc seems entirely appropriate to me.

Comment 25 Antonio T. (sagitter) 2016-11-08 17:38:15 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed


Issues:
=======
>I need to know what to do about the samples,

If you want provide those files under %doc, executable permissions must be removed.
https://fedoraproject.org/wiki/Packaging:Guidelines#Documentation

===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "BSD (3 clause)", "Unknown or generated". 60 files have unknown
     license. Detailed output of licensecheck in
     /home/sagitter/1389016-libxsmm/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 61440 bytes in 1 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in libxsmm-
     doc , libxsmm-debuginfo
[ ]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[-]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: libxsmm-1.5.2-1.fc26.x86_64.rpm
          libxsmm-devel-1.5.2-1.fc26.x86_64.rpm
          libxsmm-doc-1.5.2-1.fc26.noarch.rpm
          libxsmm-debuginfo-1.5.2-1.fc26.x86_64.rpm
          libxsmm-1.5.2-1.fc26.src.rpm
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: no-documentation
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_conv_generator
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_deepbench.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/pyfr/test.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_overfeat.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/wrap/dgemm-test.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_googlenetv1.sh /bin/bash
libxsmm.src: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
5 packages and 0 specfiles checked; 0 errors, 13 warnings.




Rpmlint (debuginfo)
-------------------
Checking: libxsmm-debuginfo-1.5.2-1.fc26.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
libxsmm-devel.x86_64: W: only-non-binary-in-usr-lib
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_conv_generator
libxsmm-devel.x86_64: W: no-manual-page-for-binary libxsmm_gemm_generator
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/pyfr/test.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_deepbench.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_overfeat.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/dnn/run_conv_googlenetv1.sh /bin/bash
libxsmm-doc.noarch: W: doc-file-dependency /usr/share/doc/libxsmm-doc/samples/wrap/dgemm-test.sh /bin/bash
libxsmm.x86_64: W: spelling-error %description -l en_US coprocessors -> co processors, co-processors, microprocessors
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmext.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 dlerror
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 dlsym
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmmf.so.1.5 sgemm_
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libm.so.6
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libgcc_s.so.1
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmf.so.1.5 /lib64/libquadmath.so.0
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 dgemm_
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 dlerror
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 dlsym
libxsmm.x86_64: W: undefined-non-weak-symbol /usr/lib64/libxsmm.so.1.5 sgemm_
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmm.so.1.5 exit.5
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmgen.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: shared-lib-calls-exit /usr/lib64/libxsmmgen.so.1.5 exit.5
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmnoblas.so.1.5 /lib64/libgomp.so.1
libxsmm.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libxsmmnoblas.so.1.5 /lib64/libpthread.so.0
libxsmm.x86_64: W: no-documentation
4 packages and 0 specfiles checked; 0 errors, 27 warnings.



Requires
--------
libxsmm-devel (rpmlib, GLIBC filtered):
    libc.so.6()(64bit)
    libpthread.so.0()(64bit)
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)
    rtld(GNU_HASH)

libxsmm-doc (rpmlib, GLIBC filtered):
    /bin/bash
    /bin/sh

libxsmm-debuginfo (rpmlib, GLIBC filtered):

libxsmm (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.3.1)(64bit)
    libgfortran.so.3()(64bit)
    libgfortran.so.3(GFORTRAN_1.0)(64bit)
    libgomp.so.1()(64bit)
    libgomp.so.1(GOMP_1.0)(64bit)
    libgomp.so.1(GOMP_2.0)(64bit)
    libgomp.so.1(GOMP_4.0)(64bit)
    libgomp.so.1(OMP_1.0)(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    libquadmath.so.0()(64bit)
    librt.so.1()(64bit)
    libxsmm.so.1()(64bit)
    rtld(GNU_HASH)



Provides
--------
libxsmm-devel:
    libxsmm-devel
    libxsmm-devel(x86-64)

libxsmm-doc:
    libxsmm-doc

libxsmm-debuginfo:
    libxsmm-debuginfo
    libxsmm-debuginfo(x86-64)

libxsmm:
    libxsmm
    libxsmm(x86-64)
    libxsmm.so.1()(64bit)
    libxsmmext.so.1()(64bit)
    libxsmmf.so.1()(64bit)
    libxsmmgen.so.1()(64bit)
    libxsmmnoblas.so.1()(64bit)



Source checksums
----------------
https://github.com/hfp/libxsmm/archive/1.5.2.tar.gz#/libxsmm-1.5.2.tar.gz :
  CHECKSUM(SHA256) this package     : a037b7335932921960d687ef3d49b50ee38a83e0c8ad237bc20d3f4a0523f7d3
  CHECKSUM(SHA256) upstream package : a037b7335932921960d687ef3d49b50ee38a83e0c8ad237bc20d3f4a0523f7d3


Generated by fedora-review 0.6.1 (f03e4e7) last change: 2016-05-02
Command line :/usr/bin/fedora-review -m fedora-rawhide-x86_64 -b 1389016
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP
Disabled flags: EXARCH, DISTTAG, EPEL5, BATCH, EPEL6

Comment 26 Dave Love 2016-11-09 16:14:58 UTC
(In reply to Antonio Trande from comment #25)

> If you want provide those files under %doc, executable permissions must be
> removed.
> https://fedoraproject.org/wiki/Packaging:Guidelines#Documentation

That's not what it says, and the previous version doesn't install extra dependencies, but I removed the shell dependencies from:

SRPM URL: https://loveshack.fedorapeople.org/review/libxsmm-1.5.2-2.el6.src.rpm
Spec URL: https://loveshack.fedorapeople.org/review/libxsmm.spec

Comment 27 Antonio T. (sagitter) 2016-11-09 17:25:20 UTC
Package approved.

Comment 28 Gwyn Ciesla 2016-11-10 15:04:18 UTC
Package request has been approved: https://admin.fedoraproject.org/pkgdb/package/rpms/libxsmm

Comment 29 Fedora Update System 2016-11-14 18:05:03 UTC
libxsmm-1.5.2-2.fc24 has been submitted as an update to Fedora 24. https://bodhi.fedoraproject.org/updates/FEDORA-2016-e9e3962e27

Comment 30 Fedora Update System 2016-11-14 18:05:13 UTC
libxsmm-1.5.2-2.el7 has been submitted as an update to Fedora EPEL 7. https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2016-02fb3b4515

Comment 31 Fedora Update System 2016-11-14 18:05:19 UTC
libxsmm-1.5.2-2.fc25 has been submitted as an update to Fedora 25. https://bodhi.fedoraproject.org/updates/FEDORA-2016-120603edb4

Comment 32 Fedora Update System 2016-11-14 18:05:26 UTC
libxsmm-1.5.2-2.fc23 has been submitted as an update to Fedora 23. https://bodhi.fedoraproject.org/updates/FEDORA-2016-041c46cdc9

Comment 33 Fedora Update System 2016-11-15 13:27:40 UTC
libxsmm-1.5.2-2.fc25 has been pushed to the Fedora 25 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-120603edb4

Comment 34 Fedora Update System 2016-11-15 14:23:37 UTC
libxsmm-1.5.2-2.el7 has been pushed to the Fedora EPEL 7 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2016-02fb3b4515

Comment 35 Fedora Update System 2016-11-15 17:54:48 UTC
libxsmm-1.5.2-2.fc23 has been pushed to the Fedora 23 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-041c46cdc9

Comment 36 Fedora Update System 2016-11-20 19:52:48 UTC
libxsmm-1.5.2-2.fc24 has been pushed to the Fedora 24 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-e9e3962e27

Comment 37 Fedora Update System 2016-12-07 17:28:34 UTC
libxsmm-1.6.1-1.el7 has been submitted as an update to Fedora EPEL 7. https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2016-89d6a0cf1b

Comment 38 Fedora Update System 2016-12-07 17:28:48 UTC
libxsmm-1.6.1-1.fc24 has been submitted as an update to Fedora 24. https://bodhi.fedoraproject.org/updates/FEDORA-2016-043d784a2b

Comment 39 Fedora Update System 2016-12-07 17:28:58 UTC
libxsmm-1.6.1-1.fc25 has been submitted as an update to Fedora 25. https://bodhi.fedoraproject.org/updates/FEDORA-2016-0d598f3556

Comment 40 Fedora Update System 2016-12-07 17:29:08 UTC
libxsmm-1.6.1-1.fc23 has been submitted as an update to Fedora 23. https://bodhi.fedoraproject.org/updates/FEDORA-2016-1d69950d26

Comment 41 Fedora Update System 2016-12-08 19:23:28 UTC
libxsmm-1.6.1-1.fc24 has been pushed to the Fedora 24 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-043d784a2b

Comment 42 Fedora Update System 2016-12-08 19:25:07 UTC
libxsmm-1.6.1-1.fc23 has been pushed to the Fedora 23 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-1d69950d26

Comment 43 Fedora Update System 2016-12-08 19:25:33 UTC
libxsmm-1.6.1-1.fc25 has been pushed to the Fedora 25 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2016-0d598f3556

Comment 44 Fedora Update System 2016-12-09 04:20:26 UTC
libxsmm-1.6.1-1.el7 has been pushed to the Fedora EPEL 7 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2016-89d6a0cf1b

Comment 45 Fedora Update System 2016-12-23 12:19:40 UTC
libxsmm-1.6.1-1.fc25 has been pushed to the Fedora 25 stable repository. If problems still persist, please make note of it in this bug report.

Comment 46 Fedora Update System 2016-12-23 13:50:29 UTC
libxsmm-1.6.1-1.fc24 has been pushed to the Fedora 24 stable repository. If problems still persist, please make note of it in this bug report.

Comment 47 Fedora Update System 2016-12-27 17:17:06 UTC
libxsmm-1.6.1-1.el7 has been pushed to the Fedora EPEL 7 stable repository. If problems still persist, please make note of it in this bug report.