guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

OpenBLAS and INTERFACE64=1


From: Eric Brown
Subject: OpenBLAS and INTERFACE64=1
Date: Sun, 09 Sep 2018 17:25:13 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Dear List,

During the course of creating a port for OpenMolcas, I discovered that
it requires the 64-bit interface to OpenBLAS. My understanding is that
this promotes INTEGER to be 64-bit, so that arrays longer than 2**32-1
are supported. It was easy enough to shoe-horn in INTERFACE64=1 to
OpenBLAS:

maths.scm (openblas):
---------------------
 ,@(let ((system (or (%current-target-system) (%current-system))))
      (cond
       ((string-prefix? "i686" system)
        '("DYNAMIC_ARCH=1"))
        ((string-prefix? "x86_64" system)
        '("DYNAMIC_ARCH=1" "INTERFACE64=1"))
       ;; On MIPS we force the "SICORTEX" TARGET, as for the other
       ;; two available MIPS targets special extended instructions
       ;; for Loongson cores are used.
       ((string-prefix? "mips" system)
        '("TARGET=SICORTEX" "INTERFACE64=1"))
       ;; On aarch64 force the generic 'armv8-a' target
       ((string-prefix? "aarch64" system)
        '("TARGET=ARMV8" "INTERFACE64=1"))
       (else '()))))

and OpenMolcas compiles and passes all tests.

I then set about to ensure that dependents also compiled without issue,
and in fact all do (at least, no *new* failures) except for python-numpy
and python-scipy, which Segmentation Fault on at least one test when
linked with an OpenBLAS defined with 64-bit integers.

Of course, it would be nice if each package can build, and also be
possible for Fortran routines to handle large arrays.

A few thoughts come to mind, perhaps in combination:

* add a variant to the current openblas package 

* add compiler flags such as -fdefault-integer-8 to gfortran

* create a new package, e.g. openblas64, perhaps with a suffix to the
  library name which distinguishes a 64-bit version from a 32-bit
  version

(I'd like to have e.g. python-scipy and OpenMolcas on my machine at the
same time, so I'm worried about collisions in case 32-bit must be
present sometimes. Though on my 64-bit bit machines, I can say that I
never want 32-bit limitations of data size.)

On the web, people have mentioned all of the above, even adding a suffix
"_64" to each function in the API.  I just don't see how this would be
workable given the number of packages that Guix aims to deliver.

Just a few thoughts which rekado has asked me to post to this list.
Hopefully someone has some ideas about the optimal way to proceed.

Best regards,
Eric



reply via email to

[Prev in Thread] Current Thread [Next in Thread]