World: r3wp
[rebcode] Rebcode discussion
older newer | first last |
Cyphre 24-Oct-2005 [739] | you can see that stats in Rebol shows 'normal' values but in the last test case the memory allocation under Windows increase by 300MB!! |
Geomol 24-Oct-2005 [740] | A note about speed: I've made an exponont function like this: exponent: rebcode [b [decimal!] x [decimal!]] [ eqd x 0.0 braf 2 return 1.0 log-e b muld b x exp b return b ] It can then be used in a rebcode function, e.g.: apply result exponent [2.0 4.0] An alternative way is to make a normal REBOL function: exponent: func [b x][b ** x] which can be used the same way: apply result exponent [2.0 4.0] It turns out, that using a normal REBOL function is faster in this example. It then occured to me, that it could be even faster, if APPLY was changed to support operators. Like this: apply result ** [2.0 4.0] Is that a good request? |
Ladislav 24-Oct-2005 [741] | I will check it |
BrianH 24-Oct-2005 [742] | Apply doesn't support operators? |
Geomol 24-Oct-2005 [743] | no |
BrianH 24-Oct-2005 [744x2] | How well does apply res power [b x] work? That's the regular native equivalent to **. |
All operators have native equivalents. | |
Geomol 24-Oct-2005 [746] | it's faster than using a REBOL function. It works with POWER as it should with the operator **, so I'm happy. (I just noticed, POWER wasn't an operator. Didn't know that.) |
Ladislav 24-Oct-2005 [747] | Kru: this really seems to be APPLY related, because the following code crashes too: mulr: rebcode [][return 4] mull: rebcode [][loop 10000000 [apply a mulr []] return a] mull |
Rebolek 24-Oct-2005 [748x2] | Geomol, POWER may seem faster that rebcode version, but this is again thanks to apply. From my tests it looks like apply/POWER version is cca 5% faster than apply/rebcode version but rebcode version only (loop is inside rebcode and no apply) is cca 3.8x faster than apply/rebcode version |
APPLY may be good for thinks like reading from network or so, that cannot be done in rebcode, but it's not useable as subroutine call in rebcode, it's too slow. | |
Geomol 24-Oct-2005 [750] | Kru, ok I'll check with the bezier function, I'm doing here... |
Pekr 24-Oct-2005 [751x2] | guys, how well does parse play with rebcode? It was said that parse is VM in itself, it is very right, but now we have some discussion about zlib support. Let's suppose we have rebol version on rebol.org and that we would like to speed it up. We can simple extend the idea to any other datatype (= in amiga terms, simply a file format, or protocol one). you will surely want to use parse. The question is, if you can speed up some things using rebcode? |
Imagine e.g. doing image loader/saver .... | |
Geomol 24-Oct-2005 [753] | Kru, I calculate apply/power to be 5% faster than inline rebcode exponential function in my case. So I find: apply/power is fastest, then inline rebcode exponential, then apply/REBOL function, then apply/rebcode function , when it comes to exponential function in my case. |
Rebolek 24-Oct-2005 [754] | Geomol can I see your test code? |
Geomol 24-Oct-2005 [755x6] | Kru, I write it to you privately... |
Using APPLY with POWER may be a special case, because the equivalent is 10-11 lines of rebcode. So in this case, calling POWER with APPLY is actually faster than programming the POWER function inline in rebcode. (I hope, I make sense.) | |
I also find apply result power [b x] to be faster than do result [b ** x] | |
Correction: power 0.0 0.0 gives result 0.0. I check for that in my code and give result 1.0. With that check before calling POWER, the inline rebcode version becomes the fastest, *not* apply/power With rebcode, optimization suddently becomes science. | |
Wow! Making the factorial inline speeded it up 245%! New bezier: | |
bezier: rebcode [ t [decimal!] P [block!] /local result m n n! i a b c d idx ][ do result [copy [0.0 0.0]] length? n P div n 2 set m n sub n 1 ;apply n! factorial [n] set n! 1 repeat x n [ mul n! x ] repeatz i m [ to-dec a n! ;apply b factorial [i] set b 1 repeat x i [ mul b x ] to-dec b b divd a b set b n sub b i ;apply c factorial [b] set c 1 repeat x b [ mul c x ] to-dec c c divd a c eq i 0 braf i-not-0 set d 1.0 bra muld-d-a label i-not-0 to-dec c i set d t ;apply d power [t c] log-e d muld d c exp d label muld-d-a muld d a set a 1.0 subd a t eq b 0 braf b-not-0 set a 1.0 bra muld-a-c label b-not-0 to-dec b b ;apply a power [a b] log-e a muld a b exp a label muld-a-c muld a d set idx i mul idx 2 pickz b P idx muld b a pick c result 1 addd b c poke result 1 b add idx 1 pickz b P idx muld b a pick c result 2 addd b c poke result 2 b ] return result ] | |
Pekr 24-Oct-2005 [761] | how long would it take to calculate an image histogram? |
Geomol 24-Oct-2005 [762x5] | ops, my last 2 messages should have been to Kru. |
Pekr, with this histogram function: histogram: rebcode [rgb result /local r n a b c] [ length? n rgb div n 3 repeatz i n [ set a i mul a 3 pickz b rgb a add a 1 pickz c rgb a add b c add a 1 pickz c rgb a add b c div b 3 pickz c result b add c 1 pokez result b c ] return result ] it takes 0.094 seconds on my machine to get histogram of 640x480 pixel image. | |
0.406 seconds for 1280x1024 image. | |
You can try it like this: | |
img: make image! 1280x1024 result: copy [] loop img/size/x * img/size/y [insert tail result 0] histogram img/rgb result | |
Oldes 24-Oct-2005 [767] | this code is not histogram:) |
Pekr 24-Oct-2005 [768] | shouldn't histogram basically count pixels of 0- 255 channel values? :-) |
Oldes 24-Oct-2005 [769] | yes |
Geomol 24-Oct-2005 [770x3] | The histogram, I posted, count combined rgb values (or light value if you like). To count rgb values individually, a little change is needed. |
(And you need more data structures to hold the results.) | |
I guess, Pekr's original question was about, if it's reasonable fast with rebcode, and I would say, that it is. | |
Pekr 24-Oct-2005 [773x2] | yes, thanks :-) |
you know, when we originally developed high-end astronomy CCD camera, it returns you per-pixel value of 1 to 65535, according of how much current counts in the individual pixels ... you ten need to convert it to image, so you have to get minimu,maximum, and divide it into 256 zones .... when I did it using plain rebol, it was painfully slow. Imagine having lucrative in-camera ethernet + ip, downloading image using rebol in 1 sec or so, and then waiting 19 secs tojust view the image :-) If we would do this device nowadays, with Rebcode, I believe I would not hesistate to use rebol for all operations .... | |
Oldes 24-Oct-2005 [775] | Was anybody testing if what is faster, if rebcode or c-code call using dll? |
Geomol 24-Oct-2005 [776] | Right. I once talked with an astronomer working in Lund, Sweden. He told me about the software, they use. It's mostly based in code written in the 70'ies (in FORTH, if I remember correctly). It's good, well-tested software of course, but the user interfaces are terrible, often just a command-line. It could be interesting doing modern versions of some of that software using REBOL. But the scientists have to be 100% sure, the output is correct and the same as they get from the software, they use now. If the right function libraries were developed in REBOL (rebcode), I think scientists could be a good user-base (developer-base) for the REBOL language. |
Graham 24-Oct-2005 [777x2] | Geomol, they are probably using a domain specific language to drive their telescopes ... something forth pioneered. |
They also use Forth to control the robotic arms on the space shuttles. | |
Oldes 24-Oct-2005 [779] | I think Rebol would be better for teachers than scientists, as in Rebol you can much more easily explore how programing works |
Graham 24-Oct-2005 [780] | Yeah, I would leave the scientists alone ... it's like trying to wean a unix user from their command line tools! |
Oldes 24-Oct-2005 [781] | I live in command line with Rebol and I'm happy:) |
Tomc 24-Oct-2005 [782] | these days telescope control should all be "ASCOM" compliant http://ascom-standards.org/index.html |
Pekr 24-Oct-2005 [783x2] | most of the stuff we met was crappy ... |
even big SBIG used parallel port back in the time we used ethernet. The sad thing is - no money, no music ... 4 ppl working part-time can't beat 80 full-time workers. But we did, for ourselves - I have our camera in my table ;-) And we build quite a few telescopes - REBOL is COOL for astronomy - dialects etc. wow ... the thing is, if it would be adopted .... | |
OneTom 24-Oct-2005 [785x2] | pekr, did i understand that u were using rebol 4 astronomy? could show me/us some of ur worx? a collegue of mine - whom i really want to b converted from php to rebol - is an amateur astronomist and such a stuff can give him the final pulse to start learning&using rebol |
jfyi i use forth regulary for writing pic microcontrolers applications (small ones usually) | |
Pekr 24-Oct-2005 [787] | tomorrow, or I will write to you privately, too tired now, time to sleep :-) |
OneTom 24-Oct-2005 [788] | sure. thanks in advance! |
older newer | first last |