![]() |
![]() |
#45 |
"Mihai Preda"
Apr 2015
144810 Posts |
![]()
Some information from my testing so far:
2 double-checks in 77M range were matches. (the following are all known primes) 24036583 failed once, successful once. 42643801 failed twice, successful twice. All these were successful on first run: 20996011, 25964951, 30402457, 32582657, 37156667, 74207281, 57885161. So empiric error rate about 20% (quite high IMO). The error rate may be affected by the temperature of the GPU. Up to now I was unable to find a cause for these errors in software. Especially that the software is supposed to be deterministic (produce the same result every time, without variation), and yet the results for the same exponent vary (meaning, either my assumption of determinism is wrong, or hardware errors are involved). Anyway, such a high error rate in bad news. An erroneous results becomes more likely as the computation length increases (higher exponents). It would be great to have a way to validate the result on every LL iteration ("error detection"). If a wrong iteration can be detected, it can simply be re-tried until correct, and the ghost of unreliable hardware goes away. (of course, there'd be some cost involved in error detection) |
![]() |
![]() |
![]() |
#46 | |
"Mihai Preda"
Apr 2015
23·181 Posts |
![]() Quote:
|
|
![]() |
![]() |
![]() |
#47 | |
Romulan Interpreter
"name field"
Jun 2011
Thailand
282D16 Posts |
![]() Quote:
![]() But yes, ALL residues have to be kept, if the user choose so, until he (the user) decides what to do with them. After a LL/DC match, one can (manually or automatically, from the batch file, tool, etc) delete them, or whatever. But there are many situations when one may need them. One may have the surprise that doing a DC, a non-match residue popos up, then he/she runs it again and gets the same non-match, will all residues matching all the way, and comparing them with cudaLucas or P95 -- that is how you find a hidden bug, in either gpuOwl, or cuddaLucas, or (why not?) P95. For example. Last fiddled with by LaurV on 2017-04-27 at 12:56 |
|
![]() |
![]() |
![]() |
#48 |
"Mihai Preda"
Apr 2015
23·181 Posts |
![]()
@LaurV, I understand that you want a track of the residues (the 64-bit values), that makes sense. Right now the residue sequence is saved to gpuowl.log (but, arguably, the tools may not know how to parse that?).
But do you also need to store the full 16MB checkpoints? the full checkpoint is only needed to allow a re-start from that point. Do you want to re-start from arbitrary points in time, or just need a full track of the residues? I would like the default behavior to be friendly for a non-expert user (i.e. not fill his storage by default). I'll think about it. |
![]() |
![]() |
![]() |
#49 |
I moo ablest echo power!
May 2013
5·7·53 Posts |
![]()
Why not keep only the two most recent checkpoints (so there's a backup in case the most recent is corrupted or something)? Since the residues are being kept elsewhere, it doesn't seem necessary to retain all the checkpoint files.
|
![]() |
![]() |
![]() |
#50 |
"Mihai Preda"
Apr 2015
23×181 Posts |
![]()
Yes, right now only two most recent are kept, in save-N.bin and save-N.old. But I'm open to changing that, just need a bit more thinking to what.
|
![]() |
![]() |
![]() |
#51 | |
"Mihai Preda"
Apr 2015
23×181 Posts |
![]() Quote:
I've tested by playing with running on the CPU. Surprisingly, it worked, but it was sooo slow.. something like 100times slower than mprime . Which shows both what a good implementation mprime has, and what a poor compiler OpenCL/cpu has. |
|
![]() |
![]() |
![]() |
#52 | |
∂2ω=0
Sep 2002
República de California
5·2,351 Posts |
![]() Quote:
|
|
![]() |
![]() |
![]() |
#53 | |
"Mihai Preda"
Apr 2015
23·181 Posts |
![]() Quote:
This works like this: On every iteration, a rounding error for every word is computed, and a global maximum of that is updated. On every logstep (20000), this global maximum is read, printed, and reset to 0. Thus, while the rounding error is computed on every iteration, it is only visible in aggregated (max) form on every logstep. But any error in rounding at any point should be caught. |
|
![]() |
![]() |
![]() |
#54 | |
Romulan Interpreter
"name field"
Jun 2011
Thailand
5·112·17 Posts |
![]() Quote:
We had all this "argument" for cudaLucas in the past, and I won't be very disapointed to win it again... ![]() Unuseful. The program is doing that right now. But the two files, they usually are both wrong, with 50% chance, unless the error happes in the very early stage of the test. When you test with two cards in parallel, one is usualy faster and it takes some advance (more than two checkpoints) when the other spits out a residue which is not matching. In that point, you have 50% chances that the error is from the slower card, and 50% that... you have to completely restart the other test from scratch? @Mihai: you can keep the interface as it is, simple for the normal user, keep the log and everything (very useful, but ok, for other programs you can - and I have to do it sometimes - redirect the output to a file) but please provide a "-save" switch (same as cudaLucas, youcan call it whatever) which will save all the checkpoints to a "backup" folder. See cudaLucas' .ini file. Like this: (mind that this files are even double in size - for nowadays disks I would't mind. Or, I can increase the number of iterations for checkpoints, to save space) Last fiddled with by LaurV on 2017-04-28 at 00:32 |
|
![]() |
![]() |
![]() |
#55 |
Romulan Interpreter
"name field"
Jun 2011
Thailand
5×112×17 Posts |
![]()
Grr.. replying to myself...
We have a bigger problem... Scratch the part with "the program is doing this right now". He is doing it only when you start it, then it resumes from .bin, instead of .new, therefore the progress of the last run is always lost, and you resume from the point where former run (the one before last) left. Code:
07610000 / 76453229 [9.95%], ms/iter: 4.653, ETA: 3d 16:58; 00000000c8e14255 error 0.207659 (max 0.256673) 07620000 / 76453229 [9.97%], ms/iter: 4.668, ETA: 3d 17:15; 00000000eca854d1 error 0.211343 (max 0.256673) 07630000 / 76453229 [9.98%], ms/iter: 4.674, ETA: 3d 17:21; 000000003f13c300 error 0.23212 (max 0.256673) ^C e:\99 - Prime\gpuOwl>gpuowl -logstep 10000 gpuOwL v0.1 GPU Lucas-Lehmer primality checker Tahiti - OpenCL 1.2 AMD-APP (2348.3) LL FFT 4096K (1024*2048*2) of 76453229 (18.23 bits/word) at iteration 710000 OpenCL setup: 1092 ms 00720000 / 76453229 [0.94%], ms/iter: 4.668, ETA: 4d 02:12; 000000007c15e2ce error 0.205605 (max 0.205605) ^C Last fiddled with by LaurV on 2017-04-28 at 13:12 |
![]() |
![]() |
![]() |
Thread Tools | |
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
mfakto: an OpenCL program for Mersenne prefactoring | Bdot | GPU Computing | 1720 | 2023-02-27 03:10 |
GPUOWL AMD Windows OpenCL issues | xx005fs | GpuOwl | 0 | 2019-07-26 21:37 |
Testing an expression for primality | 1260 | Software | 17 | 2015-08-28 01:35 |
Testing Mersenne cofactors for primality? | CRGreathouse | Computer Science & Computational Number Theory | 18 | 2013-06-08 19:12 |
Primality-testing program with multiple types of moduli (PFGW-related) | Unregistered | Information & Answers | 4 | 2006-10-04 22:38 |