Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Misdetection of endianness in Rosetta; opportunistic linking to OpenBLAS #48

Open
barracuda156 opened this issue Feb 10, 2023 · 3 comments

Comments

@barracuda156
Copy link

Detection of endianness is broken in Rosetta (ppc is Big-endian):

* installing *source* package ‘float’ ...
** package ‘float’ successfully unpacked and MD5 sums checked
** using staged installation
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for sinf in -lm... yes
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /opt/local/bin/ggrep
checking for egrep... /opt/local/bin/ggrep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking whether byte ordering is bigendian... no
checking size of int... 4
checking for gcc option to support OpenMP... -fopenmp
checking for echo... yes
checking for grep... yes
checking for sgemm_ in -lRblas... no
checking for sgetrf_ in -lRblas... no
checking for sgetrf_ in -lRlapack... no
checking for sgemm_ in -lopenblas... yes
checking for sgetrf_ in -lopenblas... yes
 
******************* Results of float package configure *******************
* OpenMP Report:
    >> OPENMP_CFLAGS=-fopenmp
    >> OMPFLAGS_C=$(SHLIB_OPENMP_CFLAGS)
    >> OMPFLAGS_F=$(SHLIB_OPENMP_FFLAGS)
* byte order: little endian
* using system OpenBLAS library
    >> BLAS_LIBFLAGS=-lopenblas
* using system OpenBLAS library
    >> LAPACK_LIBFLAGS=-lopenblas
*************************************************************************

In addition, it does not find Accelerate (with which R is built), but instead opportunistically links to OpenBLAS (generally undesirable behavior on older macOS).

@barracuda156
Copy link
Author

One of tests fail then:

R version 4.2.2 (2022-10-31) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: powerpc-apple-darwin10.8.0 (32-bit)

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> suppressPackageStartupMessages(library(float))
> set.seed(1234)
> 
> tester = function(s, x, fun)
+ {
+   test = dbl(fun(s, na.rm=TRUE))
+   truth = fun(x, na.rm=TRUE)
+   stopifnot(all.equal(test, truth, tol=tol))
+   
+   test = dbl(fun(s, na.rm=FALSE))
+   truth = fun(x, na.rm=FALSE)
+   stopifnot(all.equal(test, truth, tol=tol))
+ }
> 
> tol = 1e-6
> m = 5
> n = 3
> 
> x1 = matrix(stats::rnorm(m*n), m, n)
> x2 = x1
> x2[1, 1] = NA_real_
> x2[3, 2] = NaN
> 
> s1 = fl(x1)
> s2 = fl(x2)
> 
> 
> 
> tester(s1, x1, colSums)
> tester(s2, x2, colSums)
Error in tester(s2, x2, colSums) : test and truth are not equal:
  'is.NA' value mismatch: 2 in current 1 in target
Calls: tester -> stopifnot
Execution halted

@barracuda156
Copy link
Author

It is still broken: it does not find Rblas, does not find Accelerate, but finds – if OpenBLAS is deactivated – Altas instead:

hecking for sgemm_ in -lRblas... no
checking for sgetrf_ in -lRblas... no
checking for sgetrf_ in -lRlapack... no
checking for sgemm_ in -lopenblas... no
checking for sgemm_ in -lmkl... no
checking for sgemm_ in -latlas... yes
checking for sgetrf_ in -lopenblas... no
checking for sgetrf_ in -lmkl... no
checking for sgetrf_ in -latlas... yes
 
******************* Results of float package configure *******************
* OpenMP Report:
    >> OPENMP_CFLAGS=-fopenmp
    >> OMPFLAGS_C=$(SHLIB_OPENMP_CFLAGS)
    >> OMPFLAGS_F=$(SHLIB_OPENMP_FFLAGS)
* byte order: big endian
* using system Atlas library
    >> BLAS_LIBFLAGS=-latlas
* using system Atlas library
    >> LAPACK_LIBFLAGS=-latlas

@barracuda156
Copy link
Author

@wrathematics @snoweye Could this be fixed? Ideally there should be a configure option, not a random choice of a script.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant