mersenneforum.org

mersenneforum.org (https://www.mersenneforum.org/index.php)
-   GpuOwl (https://www.mersenneforum.org/forumdisplay.php?f=171)
-   -   gpuOwL: an OpenCL program for Mersenne primality testing (https://www.mersenneforum.org/showthread.php?t=22204)

kriesel 2019-12-27 18:22

[QUOTE=paulunderwood;533618]I noticed a huge difference in running times on Linux between compiling with [c]make[/c] and [c]make gpuowl[/c].[/QUOTE]Please elaborate. Gpu models, relative timing values, which is faster, etc.

paulunderwood 2019-12-27 18:28

[QUOTE=kriesel;533637]Please elaborate. Gpu models, relative timing values, which is faster, etc.[/QUOTE]

GPU: Asus Radeon VII

make: 1243 us/it
make gpuowl: 760 us/it

I don't know if the same applies to [c]make gpuowl-win.exe[/c]

kriesel 2019-12-27 18:30

Windows build of v6.11-104-g91ef9a8
 
4 Attachment(s)
I'm about to spin up another recent version, to replace an old version that's about to finish an exponent, so why not the very latest? Build process is still generating lots of warnings. Help file attached.
I tried to run monitor.py as shown in the attachment monitor.txt, but ran into what looks like a hard obstacle to me, without knowing much about linux or msys2/mingw64.

Now if such a thing only required OpenCL, that would be great. Linux kernel modules, especially in a sort of emulator, are well out of my depth.

kriesel 2019-12-27 19:01

[QUOTE=paulunderwood;533639]GPU: Asus Radeon VII

make: 1243 us/it
make gpuowl: 760 us/it

I don't know if the same applies to [c]make gpuowl-win.exe[/c][/QUOTE]
No it does not. See [URL]https://www.mersenneforum.org/showpost.php?p=533006&postcount=1625[/URL] where I got my XFX Radeon VII to run under 800us/it on 5M fft, clocked fast and very hot, on a Windows 10 Pro system. Make alone presumably attempts to build a linux executable, and that does not go well in msys2/mingw64. There is no executable generated for comparison. Probably for good reason.[CODE]ken@condorella MINGW64 ~/gpuowl-compile/v6.11-104-g91ef9a8/gpuowl
$ make
echo \"`git describe --long --dirty --always`\" > version.new
diff -q -N version.new version.inc >/dev/null || mv version.new version.inc
echo Version: `cat version.inc`
Version: "v6.11-104-g91ef9a8"
g++ -o gpuowl Pm1Plan.o GmpUtil.o Worktodo.o common.o main.o Gpu.o clwrap.o Task.o checkpoint.o timeutil.o Args.o state.o Signal.o FFTConfig.o AllocTrac.o gpuowl-wrap.o -lstdc++fs -lOpenCL -lgmp -pthread -L/opt/rocm/opencl/lib/x86_64 -L/opt/amdgpu-pro/lib/x86_64-linux-gnu -L/c/Windows/System32 -L.
d000050.o:(.idata$5+0x0): multiple definition of `__imp___C_specific_handler'
d000044.o:(.idata$5+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o: In function `pre_c_init':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:146: undefined reference to `__p__fmode'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o: In function `__tmainCRTStartup':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:290: undefined reference to `_set_invalid_parameter_handler'
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:299: undefined reference to `__p__acmdln'
common.o:common.cpp:(.text+0x371): undefined reference to `__imp___acrt_iob_func'
common.o:common.cpp:(.text+0x92d): undefined reference to `__imp___acrt_iob_func'
Gpu.o:Gpu.cpp:(.text+0x2b5): undefined reference to `__imp___acrt_iob_func'
Gpu.o:Gpu.cpp:(.text+0x822e): undefined reference to `__imp___acrt_iob_func'
Args.o:Args.cpp:(.text+0x29): undefined reference to `__imp___acrt_iob_func'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-merr.o): In function `_matherr':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/merr.c:72: undefined reference to `__acrt_iob_func'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-pseudo-reloc.o): In function `__report_error':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/pseudo-reloc.c:149: undefined reference to `__acrt_iob_func'
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/pseudo-reloc.c:150: undefined reference to `__acrt_iob_func'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingwex.a(lib64_libmingwex_a-wassert.o): In function `_wassert':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/misc/wassert.c:35: undefined reference to `__acrt_iob_func'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingwex.a(lib64_libmingwex_a-mingw_vfprintf.o): In function `__mingw_vfprintf':
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/stdio/mingw_vfprintf.c:53: undefined reference to `_lock_file'
C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/stdio/mingw_vfprintf.c:55: undefined reference to `_unlock_file'
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:19: gpuowl] Error 1
[/CODE]The difference Paul reports looks similar to the difference between using optimized combinations of George's T2_shuffle, workingin, and workingout, -use directives, and using none of them.

paulunderwood 2019-12-27 19:08

have you tried [c]make clean[/c] followed by [c]make gpuowl-win.exe[/c]?

kriesel 2019-12-27 19:17

[QUOTE=paulunderwood;533648]have you tried [c]make clean[/c] followed by [c]make gpuowl-win.exe[/c]?[/QUOTE]No. I don't see the point of that. I start with an empty folder, git clone, then make gpuowl-win.exe for each build. What would clean gain there?

paulunderwood 2019-12-27 19:21

[QUOTE=kriesel;533649]I don't see the point of that. I start with an empty folder, git clone, then make gpuowl-win.exe for each build. What would clean gain there?[/QUOTE]


If that is what you do: making a clean directory then there is no need for make clean.

I see only "make" in your previous output.

[CODE]ken@condorella MINGW64 ~/gpuowl-compile/v6.11-104-g91ef9a8/gpuowl
$ make
[/CODE]

EDIT: my apology for not reading your post correctly. In the attachment you indeed do make gpuowl-win.exe.

kriesel 2019-12-27 19:42

[QUOTE=paulunderwood;533650]If that is what you do: making a clean directory then there is no need for make clean.[/QUOTE]The usual sequence, in a folder called gpuowl-compile:
mkdir latest
cd latest
git clone ...
make gpuowl-win.exe
(move the executable up a level from ./gpuowl/, run -h, create config.txt, close the compile window, rename latest folder to the version-and-commit, and test/use there, after copying to my server drive for zip/post)

The make (nul) test should perhaps have had make clean preceding it.
Redoing it that way produces its same outcome, build fail.

make clean followed by make gpuowl-win.exe produces a byte-for-byte match to the output of the usual sequence.

Make clean appears to me to only remove .o files in this case.

paulunderwood 2019-12-27 19:47

[QUOTE=kriesel;533654]The usual sequence, in a folder called gpuowl-compile:
mkdir latest
cd latest
git clone ...
make gpuowl-win.exe
(move the executable up a level from ./gpuowl/, run -h, create config.txt, close the compile window, rename latest folder to the version-and-commit, and test/use there, after copying to my server drive for zip/post)

The make (nul) test should perhaps have had make clean preceding it.
Redoing it that way produces its same outcome, build fail.

make clean followed by make gpuowl-win.exe produces a byte-for-byte match to the output of the usual sequence.

Make clean appears to me to only remove .o files in this case.[/QUOTE]

In Linux gpuowl.cl has to follow gpuowl around the file system. To be more explicit: if I move gpuowl into the production directory I must also move the file gpuowl.cl with it.

kracker 2019-12-27 21:19

[QUOTE=paulunderwood;533655]In Linux gpuowl.cl has to follow gpuowl around the file system. To be more explicit: if I move gpuowl into the production directory I must also move the file gpuowl.cl with it.[/QUOTE]

I'm pretty sure the kernels get put into the binary when compiling, the binary works literally alone. (wasn't always that way)

paulunderwood 2019-12-27 21:42

[QUOTE=kracker;533662]I'm pretty sure the kernels get put into the binary when compiling, the binary works literally alone. (wasn't always that way)[/QUOTE]

Quoting from [url]https://github.com/preda/gpuowl[/url]

[CODE]Usage

Make sure that the gpuowl.cl file is in the same folder as the executable
Get "PRP smallest available first time tests" assignments from GIMPS Manual Testing ( http://mersenne.org/ ).
Copy the assignment lines from GIMPS to a file named 'worktodo.txt'
Run gpuowl. It prints progress report on stdout and in gpuowl.log, and writes result lines to results.txt
Submit the result lines from results.txt to http://mersenne.org/ manual testing.

Build

To build simply invoke "make" (or look inside the Makefile for a manual build).

the library libgmp-dev
a C++ compiler (e.g. gcc, clang)
an OpenCL implementation (which provides the libOpenCL library). Recommended: an AMD GPU with ROCm 1.7.
[/CODE]

Is that all outdated? I have to do [c]make gpuowl[/c]!


All times are UTC. The time now is 23:13.

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