mersenneforum.org

mersenneforum.org (https://www.mersenneforum.org/index.php)
-   Mlucas (https://www.mersenneforum.org/forumdisplay.php?f=118)
-   -   ARM builds and SIMD-assembler prospects (https://www.mersenneforum.org/showthread.php?t=21992)

ET_ 2017-03-11 07:08

[QUOTE=VictordeHolland;454658]I think you both mean ARM Cortex A53 (or A57). A58 doesnt exist (yet) ;).
List of ARM Cortex A:
[url]http://www.arm.com/products/processors/cortex-a[/url][/QUOTE]

A53, that's correct :redface:

ET_ 2017-03-11 09:23

[QUOTE=ewmayer;454652]Hi, Luigi:

Cortex-A58 ... so 128-bit vector instructions OK, but they actually get executed 64-bits at a time?

Thanks for the kind offer of help - a remote-access account would be great, but no biggie since the fewer-core dev-boards are cheap. If you could LMK which precise dev-board I should get to get true 128-bit exec capability, that would be helpful.

Post a pic of your rig once it's set up![/QUOTE]


Yesterday I downloaded the hardware guide and programming manuals for both the A53 and the NEON/NE[sub]10[/sub] system, I will let you know how the A53 (or other processors) performs on 128 bits. IIRC, LaurV is the guru on such processors.

As per the remote access, I don't have a public IP right now, but I can request it if needed.

Lorenzo 2017-03-11 17:31

Hi!

Finally i received my PINE64 device. Looks great!!!
[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1$ lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 4
CPU max MHz: 1344.0000
CPU min MHz: 480.0000
ubuntu@pine64:~/Solaris/mlucas-14.1$ cat /proc/cpuinfo
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
processor : 1
processor : 2
processor : 3
Features : fp asimd aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: AArch64
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

Hardware : sun50iw1p1
[/CODE]But I can't compile mlucas.

[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1$ sudo make
make all-am
make[1]: Entering directory '/home/ubuntu/Solaris/mlucas-14.1'
CC $NORMAL_O $THREADS_O
Makefile:2984: recipe for target 'NORMAL_O-THREADS_O.stamp' failed
make[1]: *** [NORMAL_O-THREADS_O.stamp] Error 1
make[1]: Leaving directory '/home/ubuntu/Solaris/mlucas-14.1'
Makefile:2084: recipe for target 'all' failed
make: *** [all] Error 2[/CODE]Is here something special for ARM? Or in generally i can't compile mlucas on arm?

ET_ 2017-03-11 17:58

[QUOTE=Lorenzo;454690]Hi!

Finally i received my PINE64 device. Looks great!!!
[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1$ lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 4
CPU max MHz: 1344.0000
CPU min MHz: 480.0000
ubuntu@pine64:~/Solaris/mlucas-14.1$ cat /proc/cpuinfo
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
processor : 1
processor : 2
processor : 3
Features : fp asimd aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: AArch64
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4

Hardware : sun50iw1p1
[/CODE]But I can't compile mlucas.

[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1$ sudo make
make all-am
make[1]: Entering directory '/home/ubuntu/Solaris/mlucas-14.1'
CC $NORMAL_O $THREADS_O
Makefile:2984: recipe for target 'NORMAL_O-THREADS_O.stamp' failed
make[1]: *** [NORMAL_O-THREADS_O.stamp] Error 1
make[1]: Leaving directory '/home/ubuntu/Solaris/mlucas-14.1'
Makefile:2084: recipe for target 'all' failed
make: *** [all] Error 2[/CODE]Is here something special for ARM? Or in generally i can't compile mlucas on arm?[/QUOTE]

Did you try
[code]./configure[/code] before running make?

Lorenzo 2017-03-11 18:04

Yes. Sure.

[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1$
ubuntu@pine64:~/Solaris/mlucas-14.1$ sudo ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
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 whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... none
checking for library containing ceil, log, pow, sqrt, sincos, floor, lrint, atan... -lm
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -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 fenv.h usability... yes
checking fenv.h presence... yes
checking for fenv.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking mach/mach.h usability... no
checking mach/mach.h presence... no
checking for mach/mach.h... no
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for unistd.h... (cached) yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for inline... inline
checking for pid_t... yes
checking for size_t... yes
checking for uint64_t... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible realloc... yes
checking for clock_gettime... yes
checking for gethrtime... no
checking for gettimeofday... yes
checking for memset... yes
checking for pow... yes
checking for sqrt... yes
checking for strerror... yes
checking for strstr... yes
checking for strtoul... yes
checking whether _LARGEFILE_SOURCE is declared... no
checking build system type... aarch64-unknown-linux-gnu
checking host system type... aarch64-unknown-linux-gnu
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands

ubuntu@pine64:~/Solaris/mlucas-14.1$ sudo make
make all-am
make[1]: Entering directory '/home/ubuntu/Solaris/mlucas-14.1'
CC $NORMAL_O $THREADS_O
Makefile:2984: recipe for target 'NORMAL_O-THREADS_O.stamp' failed
make[1]: *** [NORMAL_O-THREADS_O.stamp] Error 1
make[1]: Leaving directory '/home/ubuntu/Solaris/mlucas-14.1'
Makefile:2084: recipe for target 'all' failed
make: *** [all] Error 2
[/CODE]

VictordeHolland 2017-03-11 18:14

Did you download the .tar from the mlucas main page or the debian package from Vang?

Lorenzo 2017-03-11 18:21

[QUOTE=VictordeHolland;454693]Did you download the .tar from the mlucas main page or the debian package from Vang?[/QUOTE]
I have dowloaded from here: [url]http://www.mersenneforum.org/mayer/README.html[/url]

ewmayer 2017-03-11 22:56

[QUOTE=Lorenzo;454694]I have dowloaded from here: [url]http://www.mersenneforum.org/mayer/README.html[/url][/QUOTE]

Since you're using the auto-make version (which first appeared in v14), that's the correct one.

I've contacted my ARM-build guru - same fellow who put together the auto-make stuff - about your make failure, will let you know as soon as we get a clue.

I do know we needed to fiddle the platform.h file for some ARM systems, but that appears unrelated to your issue. If you do end up needing a not-yet-released version of said .h file, I'll post it here.

ewmayer 2017-03-11 23:05

David Willmore - another ARM user who I cc'ed on my mail to Alex Vong - says:
[i]
Have him start over and this time don't build as root. Then we might get a better idea.[/i]

I suggest you try that and post the output here. Assuming that also fails, you can try a manual-build; cd to the src dir of the install where all the .h and .c files reside, 'mkdir MY_OBJ' and cd into that dir, then first try just a single-file compile:

gcc -c -Os -m64 -DUSE_THREADS ../Mlucas.c

If that succeeds, try all the sourcefiles, here with output piped to a logfile:

gcc -c -Os -m64 -DUSE_THREADS ../*.c >& build.log

You can 'grep -i error build.log' to check for compile errors - if there are any, post the logfile here. If no compile errors, try linking:

gcc -o Mlucas *.o -lm -lpthread -lrt

Lorenzo 2017-03-12 09:11

1 Attachment(s)
I've tried first part of manual instruction but without success.
[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1/src/MY_OBJ$ gcc -c -Os -m64 -DUSE_THREADS ../Mlucas.c
gcc: error: unrecognized command line option ‘-m64’
ubuntu@pine64:~/Solaris/mlucas-14.1/src/MY_OBJ$ gcc -c -Os -DUSE_THREADS ../Mlucas.c
In file included from ../types.h:30:0,
from ../align.h:29,
from ../Mlucas.h:29,
from ../Mlucas.c:26:
../platform.h:1072:4: error: #error Multithreading currently only supported for Linux/GCC builds!
#error Multithreading currently only supported for Linux/GCC builds!
^
../Mlucas.c: In function ‘ernstMain’:
../Mlucas.c:1170:88: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
"WARN: Mlucas.c: a[] = 0x%08X not aligned on 128-byte boundary!\n", (uint32)a);
^
../Mlucas.c:459:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(in_line, STR_MAX_LEN, fp);
^
[/CODE]
So looks like -m64 option don't allow here. I did a list of allowed options (please have a look at attached file).

ET_ 2017-03-12 09:20

[QUOTE=Lorenzo;454734]I've tried first part of manual instruction but without success.
[CODE]ubuntu@pine64:~/Solaris/mlucas-14.1/src/MY_OBJ$ gcc -c -Os -m64 -DUSE_THREADS ../Mlucas.c
gcc: error: unrecognized command line option ‘-m64’
ubuntu@pine64:~/Solaris/mlucas-14.1/src/MY_OBJ$ gcc -c -Os -DUSE_THREADS ../Mlucas.c
In file included from ../types.h:30:0,
from ../align.h:29,
from ../Mlucas.h:29,
from ../Mlucas.c:26:
../platform.h:1072:4: error: #error Multithreading currently only supported for Linux/GCC builds!
#error Multithreading currently only supported for Linux/GCC builds!
^
../Mlucas.c: In function ‘ernstMain’:
../Mlucas.c:1170:88: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
"WARN: Mlucas.c: a[] = 0x%08X not aligned on 128-byte boundary!\n", (uint32)a);
^
../Mlucas.c:459:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
fgets(in_line, STR_MAX_LEN, fp);
^
[/CODE]
So looks like -m64 option don't allow here. I did a list of allowed options (please have a look at attached file).[/QUOTE]

try
[code] uname -a[/code]

Raspberry PI 3 has a 64-bit enabled CPU, but works with 32-bit raspbian and ARMv7 subsystem. I'm mostly sure Pine64 comes configured with a 64-bit OS, but that would clear every doubt about it :smile:

Also check the march= and mtune= values.
And mcpu=native


All times are UTC. The time now is 04:24.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.