English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés
Σ: 16 post

kemi  (statz) Főfasz
#2, Főfasz (2970)
4356 | #2460 | ^ | Idézet | Sun, 17 Mar 2013 22:24:36 +01
94.21.*.* Linux x86 Google Chrome Hungary *.pool.digikabel.hu
Ugyanaz a teszt, OOP vs imperatív megoldás, default, meg -O3 kapcsolókkal fordítva:

rnd2.h
#ifndef RND2_H_
#define RND2_H_

void srnd2(unsigned long int seed);
unsigned long int rnd2();

#endif

rnd2.cpp
unsigned long int __seed0, __seed1, __seed2, __seed3;

unsigned long int __rol(unsigned long int value, unsigned char offset)
{
	offset = offset & 0x1f;
	return (value << offset) | (value >> (0x20 - offset));
}

unsigned long int __ror(unsigned long int value, unsigned char offset)
{
	offset = offset & 0x1f;
	return (value >> offset) | (value << (0x20 - offset));
}

void srnd2(unsigned long int seed)
{
	__seed0 = seed;
	__seed1 = __seed0 ^ 0xaaaaaaaa;
	__seed1 = __rol(__seed1 >> 11, __seed1);
	__seed1 = __seed1 ^ (__seed1 >> 21);
	__seed2 = __seed0 ^ 0x55555555;
	__seed2 = __ror(__seed2 << 6, __seed2);
	__seed2 = __seed2 ^ (__seed2 >> 22);
	__seed3 = (__seed2 << 16) | (__seed1 >> 16);
}

unsigned long int rnd2()
{
	__seed1 = __rol(__seed1, 5);
	__seed2 = __ror(__seed2, 9);
	__seed0 = __rol(__seed0, 11);
	__seed0 ^= __seed1;
	__seed0 ^=  __rol(__seed1, 8) << 11;
	__seed0 ^= __ror(__seed2, 8) & 63;
	__seed0 ^= __rol(__seed3, 8) >> 5;
	__seed0 = __ror(__seed0, 14);
	__seed0 ^= __seed3;
	__seed1 ^= __seed3;
	__seed2 ^= __seed3;
	__seed3 = __ror(__seed3, __seed0);
	return __seed0;
}

imp.cpp
#include <cstdlib>
#include <ctime>
#include "rnd2.h"

int main() {
    srnd2(time(NULL));
    int table[256];
    int i, j, k, r, temp;
    for (i = 0; i < 1000; i++) {
	for (j = 0; j < 1000; j++) {
	    for (k = 0; k < 256; k++) table[k] = k;
	    for (k = 0; k < 256; k++) {
		r = rnd2() & 255;
		temp = table[r];
		table[k] = temp;
	    }
	}
    }
    return 0;
}


CRnd2.h
#ifndef CRND2_H_
#define CRND2_H_

class CRnd2 {
public:
    void srnd2(unsigned long int seed);
    unsigned long int rnd2();
private:
    unsigned long int __seed0;
    unsigned long int __seed1;
    unsigned long int __seed2;
    unsigned long int __seed3;

    unsigned long int __rol(unsigned long int value, unsigned char offset);
    unsigned long int __ror(unsigned long int value, unsigned char offset);

};

#endif

CRnd2.cpp
#include "CRnd2.h"

unsigned long int CRnd2::__rol(unsigned long int value, unsigned char offset)
{
	offset = offset & 0x1f;
	return (value << offset) | (value >> (0x20 - offset));
}

unsigned long int CRnd2::__ror(unsigned long int value, unsigned char offset)
{
	offset = offset & 0x1f;
	return (value >> offset) | (value << (0x20 - offset));
}

void CRnd2::srnd2(unsigned long int seed)
{
	__seed0 = seed;
	__seed1 = __seed0 ^ 0xaaaaaaaa;
	__seed1 = __rol(__seed1 >> 11, __seed1);
	__seed1 = __seed1 ^ (__seed1 >> 21);
	__seed2 = __seed0 ^ 0x55555555;
	__seed2 = __ror(__seed2 << 6, __seed2);
	__seed2 = __seed2 ^ (__seed2 >> 22);
	__seed3 = (__seed2 << 16) | (__seed1 >> 16);
}

unsigned long int CRnd2::rnd2()
{
	__seed1 = __rol(__seed1, 5);
	__seed2 = __ror(__seed2, 9);
	__seed0 = __rol(__seed0, 11);
	__seed0 ^= __seed1;
	__seed0 ^=  __rol(__seed1, 8) << 11;
	__seed0 ^= __ror(__seed2, 8) & 63;
	__seed0 ^= __rol(__seed3, 8) >> 5;
	__seed0 = __ror(__seed0, 14);
	__seed0 ^= __seed3;
	__seed1 ^= __seed3;
	__seed2 ^= __seed3;
	__seed3 = __ror(__seed3, __seed0);
	return __seed0;
}

oop.cpp
#include <cstdlib>
#include <ctime>
#include "CRnd2.h"

int main() {
    CRnd2 rnd = CRnd2();
    rnd.srnd2(time(NULL));
    int table[256];
    int i, j, k, r, temp;
    for (i = 0; i < 1000; i++) {
	for (j = 0; j < 1000; j++) {
	    for (k = 0; k < 256; k++) table[k] = k;
	    for (k = 0; k < 256; k++) {
		r = rnd.rnd2() & 255;
		temp = table[r];
		table[k] = temp;
	    }
	}
    }
    
    return 0;
}


kemi242@linuxmint ~/a $ time ./imp

real	0m21.088s
user	0m21.077s
sys	0m0.004s
kemi242@linuxmint ~/a $ time ./imp_O3

real	0m2.430s
user	0m2.424s
sys	0m0.000s
kemi242@linuxmint ~/a $ time ./oop

real	0m29.269s
user	0m29.266s
sys	0m0.000s
kemi242@linuxmint ~/a $ time ./oop_O3

real	0m2.454s
user	0m2.444s
sys	0m0.004s
kemi242@linuxmint ~/a $ 
Úgy látszik, az O3 kapcsoló nagyrészt kioptimalizálja az OOP hátrányait, ahol tudja.


TCH  (statz) Főfasz
#1, Főfasz (10443)
227 | #2461 | ^ | Idézet | Sun, 17 Mar 2013 22:46:24 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@kemi:
Úgy látszik, az O3 kapcsoló nagyrészt kioptimalizálja az OOP hátrányait, ahol tudja.
Ehen. De amúgy elég beszédes az eredmény, nem? Így egy kissé jobban érthető, miért preferálom az ojjektummentes dolgokat, nem? :P


kemi  (statz) Főfasz
#2, Főfasz (2970)
192 | #2462 | ^ | Idézet | Mon, 18 Mar 2013 07:47:50 +01
188.143.*.* Linux x86 Google Chrome Hungary *.pool.digikabel.hu
Az OOP megoldásnak megvan az az előnye, hogy tudsz egyszerre több egymástól független randomgenerátort használni. És elég jól kioptimalizálódott, hiszen csak néhány századmásodperccel lassabb.


TCH  (statz) Főfasz
#1, Főfasz (10443)
585 | #2463 | ^ | Idézet | Mon, 18 Mar 2013 12:23:47 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@kemi:
Az OOP megoldásnak megvan az az előnye, hogy tudsz egyszerre több egymástól független randomgenerátort használni.
Imperatív megoldásnál talán nem?
@kemi:
És elég jól kioptimalizálódott, hiszen csak néhány századmásodperccel lassabb.
Egy algoritmusnál és egy objektumnál. Minél több ojjektum lesz benne, annál lassabb lesz. És ugye nem csak simán ojjektum, mert az még hagyján, de amikor az ojjektumból is ojjektum nyílik és a kiterjesztés kiterjesztésének a kiterjesztését is kiterjesztjük, akkor egy idő után utólérjük a dzsuva ciszta duót, hiszen azok műküdnek így.


kemi  (statz) Főfasz
#2, Főfasz (2970)
933 | #2464 | ^ | Idézet | Mon, 18 Mar 2013 15:18:45 +01
193.224.*.* winhate Google Chrome Hungary 193.224.*.*
@TCH:
Imperatív megoldásnál talán nem?
Nehezebb. Mondjuk hogy oldod meg, hogy lehessen egy eljárásban random számokat előállítani két különböző seeddel?
@TCH:
És ugye nem csak simán ojjektum, mert az még hagyján, de amikor az ojjektumból is ojjektum nyílik és a kiterjesztés kiterjesztésének a kiterjesztését is kiterjesztjük, akkor egy idő után utólérjük a dzsuva ciszta duót, hiszen azok műküdnek így.
Az Object-től minden osztály örökli a default konstruktort, destruktort, meg a default operátorokat. De azért ne felejtsd el, hogy ez gépi kódra fordul, és nem valami virtuális gép által értelmezett bytecode-ra.
Van egy Blender nevű modellező progim, megvan a forráskódja is, szépen ledokumentálva. Írni kéne egy libraryt ami azt oldaná meg, hogy kívülről elérhetővé és manipulálhatóvá teszi a Blender belső objektumainak az adatait. Hogy fogjak hozzá? Május 15.-ig le kéne adni, ami itt van a nyakamon. :P


TCH  (statz) Főfasz
#1, Főfasz (10443)
490 | #2465 | ^ | Idézet | Mon, 18 Mar 2013 18:33:01 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@kemi:
Mondjuk hogy oldod meg, hogy lehessen egy eljárásban random számokat előállítani két különböző seeddel?
Átadom a seedet is paramként?
@kemi:
Az Object-től minden osztály örökli a default konstruktort, destruktort, meg a default operátorokat.
Plusz adatszerkezetet is ugye.
@kemi:
De azért ne felejtsd el, hogy ez gépi kódra fordul, és nem valami virtuális gép által értelmezett bytecode-ra.
Oké, ez igaz, de a gépi kód is sokkal trágyább lesz a ménkű sok ojjektumtól.


gelesztamás  (statz) Balfasz
#24, Balfasz (26)
757 | #2466 | ^ | Idézet | Mon, 18 Mar 2013 19:13:38 +01
80.99.*.* Ubuntu x86 Mozilla Firefox Hungary *.catv.broadband.hu
Ocsmányirodás kaland: Útlevél lejárt, irány az okmányiroda, sorszámhúzógép: "Rábasztál, nincs sorszám, nyaralni van a személyzet. Sry bro" Hát, a csudába, kénytelen vagyok hazamenni üres kézzel.

Kijárat mellett volt egy utcára néző képernyő amin mindenféle hasznos hülyeség lett volna kiírva, ehelyett egy winfos 7 asztal volt rajta, a negyedét egy szöveges ablak foglalta el, tele mindenféle irománnyal. Az irományokat nem olvastam el, de gondolom ha az utca népének szólt volna, akkor egy formázott teljes képernyős szöveg lett volna, mint általában, ezért gondoltam, biztos egy hibaüzenet vagy ilyesmi. Azon gondolkoztam, hogy miért kell minden hivatalos intézménynek jópénzért windowst venni, amikor úgyis csak hibaüzeneteket nyom ki folyton?


TCH  (statz) Főfasz
#1, Főfasz (10443)
938 | #2467 | ^ | Idézet | Mon, 18 Mar 2013 21:59:47 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@gelesztamás:
sorszámhúzógép: "Rábasztál, nincs sorszám, nyaralni van a személyzet. Sry bro"
Akkor hogy a fárasba jutottál be az épületbe?
@gelesztamás:
Azon gondolkoztam, hogy miért kell minden hivatalos intézménynek jópénzért windowst venni, amikor úgyis csak hibaüzeneteket nyom ki folyton?
Azért, mert az a ménkű sok pénzből amit a mikrofos a kormányoktól kap visszatol egy kicsit a megfelelő zsebekbe. Ellátogat a megfelelő mikrofosos üzletkötőTM Országunk Vezéréhez, vagy hét évvel ezelőtt a Gyártelep Fenegyerekéhez és megkötteték az üzlet, miszerint szegény magyar adófizetők zsebéből most informatikai beruházás címszó alatt circa 25 milliárd forint kivándorol a mikrofos zsebébe és utána a mikrofos ebből visszacsorgat a politikusok zsebébe 2-3 milliárdot.
Na ezért van minden állami helyen (hivatalokban, iskolákban, védelmi szerveken, kórházakban) winfos meg officka.


kemi  (statz) Főfasz
#2, Főfasz (2970)
390 | #2468 | ^ | Idézet | Tue, 19 Mar 2013 12:18:40 +01
188.143.*.* Linux x86 Google Chrome Hungary *.pool.digikabel.hu
@TCH:
Oké, ez igaz, de a gépi kód is sokkal trágyább lesz a ménkű sok ojjektumtól.
GTK-ban, meg Qt-ben is a GUI eleve OOP, meg a már említett képfeldolgozót az összes objektumstruktúrával együtt, sorról sorra fordítottam C#-ból C++-ba, és még úgy is 50-szer gyorsabb lett. A .NET/Java virtuális gép elég szűk keresztmetszet. Annál mindig gyorsabb lesz ugyanakkora komplexitás mellett.


TCH  (statz) Főfasz
#1, Főfasz (10443)
384 | #2469 | ^ | Idézet | Tue, 19 Mar 2013 13:01:29 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@kemi:
GTK-ban, meg Qt-ben is a GUI eleve OOP, meg a már említett képfeldolgozót az összes objektumstruktúrával együtt, sorról sorra fordítottam C#-ból C++-ba, és még úgy is 50-szer gyorsabb lett. A .NET/Java virtuális gép elég szűk keresztmetszet. Annál mindig gyorsabb lesz ugyanakkora komplexitás mellett.
Én ezt nem vitatom, de az OOP mentes kód még annál is gyorsabb lenne.


gelesztamás  (statz) Balfasz
#24, Balfasz (26)
170 | #246a | ^ | Idézet | Tue, 19 Mar 2013 15:21:54 +01
80.99.*.* Ubuntu x86 Mozilla Firefox Hungary *.catv.broadband.hu
@TCH:
Akkor hogy a fárasba jutottál be az épületbe?


az épületben kell sorszámot húzni, és ott a váróterem, onnan hívogassák be az embert az ügyintéző elvtársakhoz


kemi  (statz) Főfasz
#2, Főfasz (2970)
3677 | #246b | ^ | Idézet | Tue, 19 Mar 2013 17:55:10 +01
188.143.*.* winnyogsz Google Chrome Hungary *.pool.digikabel.hu
Kíváncsi voltam melyik fordít hatékonyabb kódot, az fpc, vagy a gcc.
rnd2.pas
unit Rnd2;

interface

procedure srnd2(seed: Longint);
function rand2: Longint;

implementation

var
	__seed0, __seed1, __seed2, __seed3: Longint;
	
function __rol(value: Longint; offset: Byte): Longint;
begin
	offset := offset and $1F;
	__rol := (value shl offset) or (value shr ($20 - offset));
end;

function __ror(value: Longint; offset: Byte): Longint;
begin
	offset := offset and $1F;
	__ror := (value shr offset) or (value shl ($20 - offset));
end;

procedure srnd2(seed: Longint);
begin
	__seed0 := seed;
	__seed1 := __seed0 xor $AAAAAAAA;
	__seed1 := __rol(__seed1 shr 11, __seed1);
	__seed1 := __seed1 xor (__seed1 shr 21);
	__seed2 := __seed0 xor $55555555;
	__seed2 := __ror(__seed2 shl 6, __seed2);
	__seed2 := __seed2 xor (__seed2 shr 22);
	__seed3 := (__seed2 shl 16) or (__seed1 shr 16);
end;

function rand2: Longint;
begin
	__seed1 := __rol(__seed1, 5);
	__seed2 := __ror(__seed2, 9);
	__seed0 := __rol(__seed0, 11);
	__seed0 := __seed0 xor __seed1;
	__seed0 := __seed0 xor  __rol(__seed1, 8) shl 11;
	__seed0 := __seed0 xor __ror(__seed2, 8) and 63;
	__seed0 := __seed0 xor __rol(__seed3, 8) shr 5;
	__seed0 := __ror(__seed0, 14);
	__seed0 := __seed0 xor __seed3;
	__seed1 := __seed0 xor __seed3;
	__seed2 := __seed0 xor __seed3;
	__seed3 := __ror(__seed3, __seed0);
	rand2 := __seed0;
end;

end.

pas.pas
program pas;
uses Crt, Rnd2, SysUtils, DateUtils;
var
	st: TSystemTime;
	table: Array[0..255] of Integer;
	i, j, k, r, temp: Integer;
    
begin
	DateTimeToSystemTime(Now, st);
	srnd2(st.MilliSecond);
	for i := 0 to 999 do
	begin
		for j := 0 to 999 do
		begin
			for k := 0 to 255 do table[k] := k;
			for k := 0 to 255 do
			begin
				r := rand2 and 255;
				temp := table[r];
				table[k] := temp;
			end;
		end;
	end;
end.


PS C:\Users\kemi242\Desktop\csc> measure-command {.\c.exe}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 20
Milliseconds      : 646
Ticks             : 206461548
TotalDays         : 0,000238960125
TotalHours        : 0,005735043
TotalMinutes      : 0,34410258
TotalSeconds      : 20,6461548
TotalMilliseconds : 20646,1548



PS C:\Users\kemi242\Desktop\csc> measure-command {.\pas.exe}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 23
Milliseconds      : 625
Ticks             : 236252006
TotalDays         : 0,000273439821759259
TotalHours        : 0,00656255572222222
TotalMinutes      : 0,393753343333333
TotalSeconds      : 23,6252006
TotalMilliseconds : 23625,2006



PS C:\Users\kemi242\Desktop\csc> measure-command {.\c_O3.exe}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 938
Ticks             : 9389131
TotalDays         : 1,08670497685185E-05
TotalHours        : 0,000260809194444444
TotalMinutes      : 0,0156485516666667
TotalSeconds      : 0,9389131
TotalMilliseconds : 938,9131



PS C:\Users\kemi242\Desktop\csc> measure-command {.\pas_O3.exe}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 21
Milliseconds      : 641
Ticks             : 216414951
TotalDays         : 0,000250480267361111
TotalHours        : 0,00601152641666667
TotalMinutes      : 0,360691585
TotalSeconds      : 21,6414951
TotalMilliseconds : 21641,4951


Konklúzió: Hát bizony a Pascalos verzió lassabb lett, és az optimalizáció is csak néhány másodpercet dobott rajta. De nembaj, itt az rnd2 Pascal implementációja, használjátok egész seggel.


TCH  (statz) Főfasz
#1, Főfasz (10443)
543 | #246c | ^ | Idézet | Tue, 19 Mar 2013 23:30:53 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
@gelesztamás:
az épületben kell sorszámot húzni, és ott a váróterem, onnan hívogassák be az embert az ügyintéző elvtársakhoz
Jó én ezt értem, de ha nincs személyzet, akkor miért hagynak egyáltalán sorszámot húzni?
@kemi:
Konklúzió: Hát bizony a Pascalos verzió lassabb lett, és az optimalizáció is csak néhány másodpercet dobott rajta. De nembaj, itt az rnd2 Pascal implementációja, használjátok egész seggel.
Köszi.
Viszont nem értem miért olyan lassú a Pascalos verzió. Szerintem nem az rnd2 miatt. Megmutatod a C teszt kódot is?


TCH  (statz) Főfasz
#1, Főfasz (10443)
167 | #246d | ^ | Idézet | Wed, 20 Mar 2013 01:27:17 +01
78.92.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
Brékingnyúz, az EU szerint nem okozunk kárt, ha zenét töltünk le.


kemi  (statz) Főfasz
#2, Főfasz (2970)
93 | #246e | ^ | Idézet | Wed, 20 Mar 2013 09:39:38 +01
193.224.*.* winhate Mozilla Firefox Hungary *.uni-obuda.hu
@TCH:
Megmutatod a C teszt kódot is?
Ott van fent az előző postomban. Nem változtattam.


Prometheus  (statz) Főfasz
#3, Főfasz (1824)
45 | #246f | ^ | Idézet | Wed, 20 Mar 2013 09:49:29 +01
195.191.*.* winhate Mozilla Firefox Hungary *.halozatszolgaltatas.hu
TCH, pont most akartam ezt a cikket linkelni.


English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés

Név: (max 255 byte)

Email: (max 255 byte) Nem kötelező!

Üzenet: (max 65536 kar.) 65536-0=65536




crap_vkn v4.34.0 by TCH
Thx to saxus for the escaped string decoder function (PHP), the realIP function (PHP) & the SQL handle layer (PHP), to thookerov for the int_divide function (PHP), to Jeff Anderson for the getSelText function (JS), to Alex King for the insertAtCursor function (JS), Flood3r for the new CSS styles, Pety for the spamprotection idea and some design and comfort ideas, MaxMind for the IP2Country database, famfamfam for the flags of countries and an unknown PHP programmer for the removeAccents function.



Kecskebaszók ide!