Commit Graph

1260 Commits

Author SHA1 Message Date
Field G. Van Zee
65fae95074 Implemented bli_setrm, _setim, _setrv, _setiv.
Details:
- Defined new wrappers to setm/setv operations in frame/base/bli_setri.c
  that will target only the real or only the imaginary parts of a
  matrix/vector object.
- Updated bli_obj_real_part() so that the complex-specific portions of
  the function are not executed if the object is real.
- Defined bli_obj_imag_part().
  - Caveat: If bli_obj_imag_part() is called on a real object, it does
    nothing, leaving the destination object untouched. The caller must
    take care to only call the function on complex objects.
- Reordered some of the static functions in bli_obj_macro_defs.h related
  to aliasing.
2018-06-07 17:41:09 -05:00
Field G. Van Zee
513138b1a1 Defined/implemented bli_projv().
Details:
- Added an implementation for bli_projv() to go along with the
  implementation of bli_projm() added in 0a4a27e. The only difference
  between the two is that bli_projv() may only be used on vectors,
  whereas bli_projm() is general-purpose.
- Added a _check() function corresponding to bli_projv().
2018-06-07 12:24:47 -05:00
Field G. Van Zee
5f71c1e719 Merge branch 'dev' of github.com:flame/blis into dev 2018-06-06 19:06:14 -05:00
Field G. Van Zee
b5a641e968 Added char-to-dt and dt-to-char mapping functions.
Details:
- Defined additional functions in bli_param_map.c:
    bli_param_map_char_to_blis_dt()
    bli_param_map_blis_to_char_dt()
  which will map a char to its corresponding num_t, or vice versa.
2018-06-06 19:05:37 -05:00
Field G. Van Zee
0a4a27e1a4 Defined/implemented bli_projm().
Details:
- Defined a new operation in frame/base/bli_proj.c, bli_projm(), which
  behaves like bli_copym(), except that operands a and b are allowed to
  contain data of differing domains (e.g. a is real while b is complex,
  or vice versa). The file is named bli_proj.c, rather than bli_projm.c,
  with the intention that a 'v' vector version of the function may be
  added to the same file (at some point in the future).
- Added supporting bli_check_*() functions in bli_check.c to confirm
  consistent precisions between to datatypes/objects, as well as the
  appropriate error message in bli_error.c and a new error code in
  bli_type_defs.h.
- Wrote a bli_projm_check() function to go along with bli_projm().
- Defined static function bli_obj_real_part() in bli_obj_macro_defs.h,
  which will initialize an obj_t alias to the real part of the source
  object.
- Fixed a bug in the static function bli_dt_proj_to_complex(), found
  in bli_param_macro_defs.h. Thankfully, there were no calls to the
  function to produce buggy behavior.
2018-06-06 19:02:29 -05:00
Field G. Van Zee
3df39b37a0 Fixed recently broken input.operations.fast.
Details:
- Removed "test sequential front-end" lines from microkernel test
  entries of input.operations.fast. This change was meant for inclusion
  in bd02c4e but was missed due to slightly different wording of the
  comment (I used "sed //d" to remove the lines). This fixes the broken
  'make checkblis-fast' (and 'make check') targets.
2018-06-06 15:35:05 -05:00
Field G. Van Zee
3f48c38164 Cosmetic fix to configure output in config.mk.
Details:
- Fixed configure so that MK_ENABLE_MEMKIND is assigned "no" when the
  option is disabled due to libmemkind not being present. This wasn't
  affecting anything since the one use of the variable (in common.mk)
  was formulated as "ifeq ($(MK_ENABLE_MEMKIND),yes)". That is, the
  variable being empty was effectively equivalent to it being set to
  "no".
- Comment updates to build/config.mk.in, common.mk.
2018-06-05 16:52:35 -05:00
Field G. Van Zee
5df201260f Merge branch 'master' into dev 2018-06-05 16:14:19 -05:00
Field G. Van Zee
1b9af85ec9 Updated ref99 call to _cntx_set_thrloop_from_env().
Details:
- Reordered the arguments in the ref99 sandbox's call to
  bli_cntx_set_thrloop_from_env() to be consistent with the updated
  function signature from f97a86f. Thanks to Devangi Parikh for
  reporting this issue.
2018-06-05 16:07:13 -05:00
Tyler Michael Smith
96d2774b4c Make bli_auxinfo_next_b() return b_next, not a_next (#216) 2018-06-05 07:17:39 -05:00
Field G. Van Zee
bd02c4e9f7 Cleanups to testsuite, input.operations format.
Details:
- Removed the line in each operation entry in input.operations titled
  "test sequential front-end" and the corresponding support for the lines
  in the testsuite input parsing code. This line was included in the some
  of the earliest versions of the testsuite, back when I intended to
  eventually have separate multithreaded APIs. Specifically, I envisioned
  that multithreaded and sequential testing could be enabled or disabled
  on an operation level. However, BLIS evolved in a different direction
  and still does not have multithreaded-specific APIs (even if it will
  eventually someday). But even if it did have such APIs, I doubt I would
  allow the user to enable/disable them on an operation level. Thus, this
  was a zombie future parameter that was never used and never made sense
  to begin with. The one instance of the front_seq variable, used in the
  various libblis_test_<operation>() functions to guard the call to the
  operation test driver, that remains was commented out instead of
  deleted so that someday it could be easily changed via sed, if desired.
- Various minor cleanups to the testsuite code, including consolidating
  use of DISABLE and DISABLE_ALL and reexpressing certain conditional
  expressions in the libblis_test_<operation>() functions in terms of
  boolean functions.
2018-06-04 13:42:17 -05:00
Field G. Van Zee
2c6d99b99e Fixed names out of alphabetical order in CREDITS. 2018-06-03 18:13:36 -05:00
Field G. Van Zee
7a207e8f2c Disabled indirect blacklisting (issue #214).
Details:
- Return early from function, pass_config_kernel_registries(), that
  implements indirect blacklisting of subconfigurations (during pass 0).
  In short, I realized that indirect blacklisting is not needed in the
  situations I envisioned, and can actually cause problems under certain
  circumstances. Thanks to Tony Skjellum for reporting the issue (#214)
  that led to this commit, and to Devin Matthews for prompting me to
  realize that indirect blacklisting was unnecessary, at least as
  originally envisioned.
2018-06-03 18:04:27 -05:00
Field G. Van Zee
d7fb326820 Fixed syntax artifacts from 4b36e85 in examples.
Details:
- Fixed artifacts of malformed recursive sed expressions used when
  preparing 4b36e85, in which most function-like macros were converted
  to static functions. The syntactically defective code was contained
  entirely in examples/oapi. Thanks to Tony Skjellum for reporting this
  issue.
- Update to CREDITS file.
2018-06-03 13:20:37 -05:00
Field G. Van Zee
ed7dedfd4a Merge branch 'master' into dev 2018-06-02 20:29:53 -05:00
Field G. Van Zee
f97a86f322 Updated setting/querying pack schema (cntx->cntl).
- Query pack schemas in level-3 bli_*_front() functions and store those
  values in the schema bitfields of the correponding obj_t's when the
  cntx's method is not BLIS_NAT. (When method is BLIS_NAT, the default
  native schemas are stored to the obj_t's.)
- In bli_l3_cntl_create_if(), query the schemas stored to the obj_t's in
  bli_*_front(), clear the schema bitfields, and pass the queried values
  into bli_gemm_cntl_create() and bli_trsm_cntl_create().
- Updated APIs for bli_gemm_cntl_create() and bli_trsm_cntl_create() to
  take schemas for A and B, and use these values to initialize the
  appropriate control tree nodes. (Also cpp-disabled the panel-block cntl
  tree creation variant, bli_gemmpb_cntl_create(), as it has not been
  employed by BLIS in quite some time.)
- Simplified querying of schema in bli_packm_init() thanks to above
  changes.
- Updated openmp and pthreads definitions of bli_l3_thread_decorator()
  so that thread-local aliases of matrix operands are guaranteed, even
  if aliasing is disabled within the internal back-end functions (e.g.
  bli_gemm_int.c). Also added a comment to bli_thrcomm_single.c
  explaining why the extra aliasing is not needed there.
- Change bli_gemm() and level-3 friends so that the operation's ind()
  function is called only if all matrix operands have the same datatype,
  and only if that datatype is complex. The former condition is needed
  in preparation for work related to mixed domain operands, while the
  latter helps with readability, especially for those who don't want to
  venture into frame/ind.
- Reshuffled arguments in bli_cntx_set_thrloop_from_env() to be
  consistent with BLIS calling conventions (modified argument(s) are
  last), and updated all invocations in the level-3 _front() functions.
- Comment updates to bli_cntx_set_thrloop_from_env().
2018-06-02 20:28:20 -05:00
Field G. Van Zee
965db85d29 Updated macro invocations in bli_gemm_ker_var2.c.
Details:
- Updated "get next a/b micropanel" macro invocations in
  bli_gemm_ker_var2.c according to changes in 9588625.
- Comment update in bli_cntx.c.
2018-06-01 12:32:15 -05:00
Field G. Van Zee
8749fa0b48 Cleanups to ref99/README.md, test/3m4m/Makefile.
Details:
- Minor edits to sandbox/ref99/README.md.
- Removed cpp guards in sandbox/ref99/thread/blx_gemm_thread.h to be
  consistent with other headers in sandbox/ref99.
- Additional targets and related cleanups in test/3m4m/Makefile.
2018-05-31 12:34:01 -05:00
Field G. Van Zee
9588625c43 Renamed "next micropanel" macros in _l3_thrinfo.h.
Details:
- Renamed several macros defined in bli_l3_thrinfo.h designed to compute
  the values of a_next and b_next to insert into an auxinfo_t struct in
  level-3 macrokernels. (Previously, the macros did not use a bli_
  prefix.)
- Updated instances of above macro usage within various macrokernels.
2018-05-30 15:19:53 -05:00
Field G. Van Zee
e442059122 Merge branch 'dev' of github.com:flame/blis into dev 2018-05-29 17:12:22 -05:00
Field G. Van Zee
34f974d1a8 More tweaks/updates to sandbox/ref99/README.md. 2018-05-29 17:11:52 -05:00
Devin Matthews
850a8a46c0 Test all x86_64 configurations*... (#212)
* Add custom SDE cpuid files.

* Set up testing of all x86_64 architectures (except bulldozer) using SDE.

* Update .travis.yml

[ci skip]

* Update do_testsuite.sh

[ci skip]

* Updated .travis.yml with my secret token.

Details:
- Replaced Devin's temporary secret token with my own, which is used by
  Travis when accessing the Intel SDE via Dropbox.

* Work around CPUID dispatch in glibc/libm by patching ld.so.

* Detect path of loader at runtime.

* Attempt to make SDE run on Travis

* Allow unpatched ld.so if we don't know how to patch it.

I *think* this only happens for older glibc without the multi-arch stuff (e.g. Ubuntu 14.04 on Travis), but who knows?

* Upgrade Travis to gcc-6 and binutils-2.26.

* Try to get Travis to use the right assembler.

* Apparently you need ld-2.26 too.

* Try to also patch ld.so from Ubuntu 14.04.

* Take the nuclear option.

* Account for non-absolute dependencies in ldd output.

* String manipulation fail.

* Update patch-ld-so.py

* Add Zen to SDE testing.

* Removed dead variable from travis/do_testsuite.sh.

Details:
- Removed 'BLIS_ENABLE_TEST_OUTPUT=yes' from make invocations in
  travis/do_testsuite.sh. This variable is no longer present in the
  BLIS build system (if it ever was?), and therefore has no effect.
2018-05-29 13:51:21 -05:00
Field G. Van Zee
42ea02a34e Renamed c99 sandbox to ref99.
Details:
- Renamed sandbox/c99 to sandbox/ref99. I wanted to name the sandbox so
  that it would be thought of as a "reference" sandbox. I kept the "99"
  to differientiate it from future reference sandboxes that may be
  written in another language (such as C++).
- Updates to sandbox/ref99/README.md.
2018-05-29 12:48:14 -05:00
Field G. Van Zee
0e7205ccef Remove sandbox/.gitkeep now that dir is non-empty. 2018-05-29 12:36:13 -05:00
Field G. Van Zee
3a4603858e More README.md updates to sandbox/c99.
Details:
- Added a section that walks the reader through how to configure BLIS to
  use a gemm sandbox.
2018-05-26 15:51:08 -05:00
Field G. Van Zee
2bad97f6bd Updates to CREDITS, sandbox/c99/README.md. 2018-05-26 15:31:16 -05:00
Field G. Van Zee
2b4a447526 Initial implementation of c99 "reference" sandbox.
Details:
- Added a c99 sandbox (in sandbox/c99) to serve as a starting point for
  others looking to experiment with alternative implementations of gemm
  in BLIS. Note that this sandbox implementation is a first draft and
  will be refined over time.
- Minor updates to Makefile and common.mk to restrict what source files
  get recompiled when sandbox files are touched.
- Added an initial draft of a README.md in sandbox/c99.
2018-05-25 18:51:23 -05:00
Field G. Van Zee
469727d4f8 Very minor comment updates. 2018-05-25 16:17:13 -05:00
Field G. Van Zee
66dbe69a0f Converted macros to static funcs in _packm_cntl.h.
Details:
- Converted various macros in frame/1m/packm/bli_packm_cntl.h (designed
  to access fields of a packm_params_t struct) to static functions.
2018-05-25 15:45:53 -05:00
Field G. Van Zee
22deef2f54 Support alternative gemm implementation sandboxes.
Detail:
- configure:
  - add support for --enable-sandbox=NAME to configure script, where NAME
    is a subdirectory of a new 'sandbox' directory that contains an
    alternative implementation of gemm. (For now, only implementations of
    gemm may be provided via a sandbox.);
  - add support for C++ compiler. C++ compilers are handled in a manner
    similar to that of C compilers, in that a default search order is
    used, and that CXX is searched for first, if the variable is set. In
    practice, the C++ compiler that is selected should correspond to the
    selected C compiler. (Example: If gcc is selected for C, g++ should
    be selected for C++.) The result of the search is output to config.mk
    via build/config.mk.in. NOTE: The use of C++ in BLIS is still
    hypothetical, but may eventually move to being experimental. This
    support was intended only for use of C++ within a gemm sandbox.
- build/config.mk.in:
  - define SANDBOX variable containing sandbox subdirectory name.
- build/bli_config.in:
  - define either of the BLIS_ENABLE_SANDBOX or BLIS_DISABLE_SANDBOX
    macros in bli_config.h.
- common.mk:
  - include makefile fragments that were propagated into the specified
    sandbox subdirectory;
  - generate different CFLAGS for sandboxes, as well as a separate
    CXXFLAGS variable for sandboxes when C++ source files are compiled;
  - isolate into a single location lists of file suffixes for various
    purposes.
  - reorganized/clean up code related to identifying header files and
    paths.
- Makefile:
  - generate object filepaths for and compile source code files found in
    sandbox sub-directory;
  - remove makefile fragments placed in sandbox sub-directory (cleanmk);
  - various other cleanups.
- Added .cc, .cpp, and .cxx to list of suffixes of files to recognize in
  makefile fragments (via build/gen-make-frags/suffix_list).
- Updated blis.h to conditionally #include bli_sandbox.h (via a new file,
  bli_sbox.h), which each sandbox is assumed to use for any type
  definitions and function prototypes it wishes to export out to blis.h.
- Conditionally disable bli_gemmnat() implementation in frame/3 when
  BLIS_ENABLE_SANDBOX is defined.
2018-05-24 14:28:55 -05:00
Field G. Van Zee
25e3501ed5 Merge branch 'master' into dev 2018-05-24 13:57:16 -05:00
Field G. Van Zee
5140ee3424 Updated types of bli_is_[un]aligned_to() functions.
Details:
- Changed the void* arguments of the following static functions:
    bli_is_aligned_to()
    bli_is_unaligned_to()
    bli_offset_past_alignment()
  to siz_t, and the return type of bli_offset_past_alignment() from
  guint_t to siz_t. This allows for more versatile usage of these
  functions (e.g. when aligning both pointers and leading dimension).
- Updated all invocations of these functions, mostly in kernels/penryn
  but also in kernels/bgq, to include explicit typecasts to siz_t when
  pointer arguments are passed in.
- Thanks to Devin Matthews for pointing out this potential bug (via issue
  #211).
- Deleted a few trailing spaces in various penryn kernels.
- Removed duplicate instances of the words "derived" and "THEORY" from
  various kernel license headers, likely from a malformed recursive sed
  performed long ago.
2018-05-23 16:56:14 -05:00
Field G. Van Zee
216a4cb9cb Minor update to flatten-headers.[py|sh] help text.
Details:
- Fixed a typo and removed some outdated language from the help text of
  flatten-headers.py and flatten-headers.sh.
2018-05-18 18:47:03 -05:00
Field G. Van Zee
962a706a6f Updated LICENSE file to mention HP Enterprise.
Details:
- Added HP Enterprise to the LICENSE file. Previously, only the source
  files touched by HPE contained the corresponding copyright notices.
  (This oversight was unintentional.)
- Updated file-level copyright notices to include a comma, to match
  the formatting used for UT and AMD copyrights.
2018-05-18 18:19:40 -05:00
Field G. Van Zee
efa43e13ef More updates to CREDITS and RELEASING files. 2018-05-18 12:20:40 -05:00
Field G. Van Zee
f94ab97af8 Update to CREDITS file. 2018-05-17 17:45:31 -05:00
Field G. Van Zee
4919b10c00 Minor changes to README.md and CONTRIBUTING.md. 2018-05-17 16:38:49 -05:00
Field G. Van Zee
b89451187e README.md update.
Details:
- Added "Contributing" section with relevant links.
2018-05-17 16:23:06 -05:00
Field G. Van Zee
af244194e7 Removed explicit critical sec. from bli_memsys.c.
Details:
- Removed critical sections protecting the initialization/finalization of
  bli_memsys.c. These synchronization mechanisms are no longer needed now
  that BLIS initializes all APIs via pthread_once().
2018-05-17 15:38:02 -05:00
Field G. Van Zee
10c9e8f952 Cache hardware's arch_t id after querying once.
Details:
- Added logic to bli_arch.c that will call what was previously the body
  of bli_arch_query_id() only once and then cache the value in a static
  variable local to the file. (Previously, the arch_t associated with
  the hardware/configuration was queried every time bli_arch_query_id()
  was called, which was at least once per level-3 function call. Thanks
  to Devin Matthews for suggesting this feature via issue #175.
- Added -lpthread to the compile/link command line of the compiler
  invocation that compiles build/detect/config/config_detect.c, which
  prints the string identifying the detected configuration, since it
  is now needed due to new pthread_once() logic in bli_arch.c.
- Implementation note: I chose to implement this arch_t caching feature
  via pthread_once(), using a separate pthread_once_t variable local to
  the file, rather than calling bli_init_once(). The reason is that I
  did not want to require bli_init() as a prerequisite to this function.
  bli_init() already calls several sub-components, some of which make use
  of bli_arch_query_id(), and therefore it would be easy to fall into a
  circular self-init situation (which usually causes pthreads to hang
  indefinitely).
2018-05-17 15:22:51 -05:00
Francisco Igual
f28a152938 Fixed clobber list bug in ARMv8 ukernel 2018-05-17 09:26:14 +00:00
Field G. Van Zee
2e31dd7852 Inserted missing integer typecasting into ukernels.
Details:
- Inserted missing safeguards into most microkernels to ensure that the
  integers read by the microkernel's assembly instructions are of the
  appropriate size. In many cases, this bug was going undetected likely
  because the compiler was inserting zero padding before the integers
  in the calling function, allowing the assembly code to read 64-bits
  in a way that did not corrupt the "lower" 32 integer bits with garbage
  in the higher bits. Thanks to Francisco Igual and Devangi Parikh for
  finding this issue.
2018-05-16 17:28:33 -05:00
Field G. Van Zee
12dfa95164 Fixed a bug in determining default integer size.
Details:
- Fixed a bug that would cause configurations to inadvertantly define
  their integers to be 32 bits when those environments actually call for
  64-bit integers. While either BLIS_ARCH_64 or BLIS_ARCH_32 is defined
  in bli_system.h (based on whether preprocessor macros such as __x86_64
  or __aarch64__ are defined by the environment), bli_system.h was being
  #included *after* bli_config_macro_defs.h, in which the BLIS_ARCH_64
  macro was used to choose an integer type size in the event that
  BLIS_INT_TYPE_SIZE was not already defined by configure via
  bli_config.h. And due to the structure of the cpp code in that file,
  the 32-bit integer case was being chosen. Thanks to Francisco Igual
  and Devangi Parikh for their help in isolating this bug.
- Moved the #include of hbwmalloc.h and related preprocessor code to
  bli_kernel_macro_defs.h to facilitate the reshuffling of the #include
  for bli_system.h in blis.h.
2018-05-16 12:46:57 -05:00
Field G. Van Zee
f930cec0f3 More tweaks to CONTRIBUTING.md. 2018-05-15 17:47:08 -05:00
Field G. Van Zee
173e30ff7d Added initial draft of CONTRIBUTING.md file.
Details:
- Thanks to the Ruby on Rails project for providing a good template off
  of which to build.
2018-05-15 14:48:34 -05:00
Nico Schlömer
6e25e758b4 Debian config (#206)
* add debian config

* correct wording in the README
2018-05-15 07:03:20 -05:00
Alex Arslan
fcf6c6a3c8 Fix shared library builds on platforms other than Linux and macOS (#209)
* Fix detection of systems other than Linux and macOS

The way the logic is currently laid out, any platform that isn't Linux
gets assigned the .dylib shared library extension and the macOS-specific
compiler flags. This reverses the logic to check for macOS first, and
have the fallback use the Linux definitions, which apply to most other
systems as well.

* Use SHLIB_EXT instead of SO_SUF

The former is more standard, as jakirkham pointed out in a comment.
2018-05-14 20:41:03 -05:00
Field G. Van Zee
6f7f51048c Echo cc_vendor when printing compiler version.
Details:
- Echo the ${cc_vendor} when informing the user of the compiler's version.
  Previously, the actual ${cc} (which could be a path to the executable)
  was being printed, which has already been printed by that point in the
  configure script.
2018-05-14 18:41:56 -05:00
Field G. Van Zee
ad67dc4e34 Communicate cc, cc_vendor to make via config.mk.
Details:
- Historically, the compiler selection has happened statically in the
  various make_defs.mk and would only be overriden by setting CC (either
  prior to running configure or as a configure argument). However, in
  the last couple months, configure has evolved to contain rather
  sophisticated compiler detection logic for the purposes of blacklisting
  sub-configurations. It only makes sense that configure now fully take
  over the responsibility of selecting a compiler from the GNU make side
  of the build system. Thanks to Alex Arslan for his help exposing this
  issue.
- Substitute found_cc into CC in config.mk via configure.
- Set a new variable, CC_VENDOR, in config.mk via substitution from
  configure, and disable the corresponding CC_VENDOR code in common.mk.
- Disabled default compiler selection (usually gcc) in the sub-configs'
  various make_def.mk files.
2018-05-14 18:35:28 -05:00
Field G. Van Zee
20af119fc9 Added README.md to 'config' directory.
Details:
- Added a brief README.md file to the config directory to redirect those
  who may be exploring the source tree to the ConfigurationHowTo wiki.
  (Included is a very brief explanation of configurations for those who
  don't have time to read the wiki.) Thanks to Nico Schlömer for this
  suggestion.
2018-05-14 17:44:58 -05:00