рдПрдХ рд╕рд╛рдзрд╛рд░рдг llvm / libjit рдкрд░реАрдХреНрд╖рдг рднрд╛рдЧ III, рдЕрдм рддреЛрддрд╛ рднреА рд╣реИ

рдпрд╣ рд▓реЗрдЦ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИ:

рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг libjit рдмрдирд╛рдо llvm

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрд╕реНрдЯ llvm / libjit part II, рд╡рд╣реА + рдЧрдиреНрдиреВ рд▓рд╛рдЗрдЯрдирд┐рдВрдЧ ред



рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рджрд╣реА





рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, ervosthenes рдХреА рдЫрд▓рдиреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП llvm, libjit рдФрд░ gnu lightning рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдереАред рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЖрдЧ рдХреА рджрд░ рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдЕрд╕реЗрдВрдмрд▓рд░ рд╣реИрдВ, рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдЕрдиреНрдп рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдкрдиреЗ рдбреАрдПрд╕рдПрд▓ рдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдЕрдкреНрд░реИрд▓ рдлреВрд▓ рдХрд╛ рдордЬрд╛рдХ - рддреЛрддреЗ рдХрд╛ рдЬрдиреНрдо - рднрд╡рд┐рд╖реНрдп рдХреЗ рдореЛрддреА рдХрд╛ рдЖрдзрд╛рд░ред



рдХрдИ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рддрд╛рд░, рд╣реИрд╢ рдЯреЗрдмрд▓, рдЖрдпрд╛рдо рд░рд╣рд┐рдд рд╕рд░рдгрд┐рдпрд╛рдБ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣, рдХрдВрд╕реЛрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓ I / O, рдФрд░ рдЕрдиреНрдп рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдкреНрд░рд╢реНрди - рдЗрди рд╕рднреА рдЕрдЪреНрдЫреЗ рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ) рдХреНрдпрд╛ рд╣реИ?



рдЖрдЗрдпреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВред



рдПрд░рд╛рдЯреЛрд╕реНрдердиреАрдЬ рддреЛрддреЗ рдкрд░ рдЫрд▓рдиреА




рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдпреЗ рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ (erato) рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ (рдореБрдЦреНрдп) 1 рд╕реЗ 50_000 рддрдХ рдХреЗ рдЕрдкрд░рд╛рдзреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 100_000 рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред



.loadlib 'trans_ops'

.loadlib 'math_ops'



.sub 'erato'

.param int n

$P0 = new 'ResizableIntegerArray' # a = P0

$P0 = n

$N0 = sqrt n # q = I0

$I0 = floor $N0 # i = I1

$I1 = 2

for_cond:

if $I1 > $I0 goto for_end

$I2 = $P0[$I1]

if $I2 == 1 goto end_if

$I3 = $I1 * $I1 # j = I3

while_cond:

if $I3 > n goto while_end

$P0[$I3] = 1

$I3 += $I1

goto while_cond

while_end:

end_if:

$I1 += 1

goto for_cond

for_end:

.end



.sub main :main

$I10 = 0

for_test1:

if $I0>100000 goto for_end1

erato(50000)

$I0 += 1

goto for_test1

for_end1:

.end











рдФрд░ - рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреЛ рдпрд╣ рд╕рдм рдЪрд▓рд╛рддрд╛ рд╣реИ:



001 : #include <parrot/embed.h>

002: #include <parrot/extend.h>

003:


004: int main ( int argc, char * argv[])

005: {

006: Parrot_Interp interp;

007: Parrot_PackFile pf;

008:

009: interp = Parrot_new( NULL );

010: if ( ! interp) {

011: return 1 ;

012: }

013:

014: pf = Parrot_pbc_read(interp, "erato.pbc" , 0 );

015: Parrot_pbc_load(interp, pf);

016: Parrot_runcode(interp, argc, argv);

017:

018: Parrot_destroy(interp);

019:

020: return 0 ;

021: }

022:








рдЗрд╕рд▓рд┐рдП, рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:

parrot -o erato.pbc erato.ptr

gcc -O2 erato.c -I /usr/include/parrot/2.0.0/ -lparrot -o erato







рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

/usr/bin/time -f "%U" ./erato

2361.2







рд▓реЗрдЦрдХ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдЖрдВрджреЛрд▓рди рдХреЗ рдЙрддреНрдкрд╛рдж рдФрд░ рдлрд▓



рдХреБрд▓, рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдкрддреНрд░ рд▓реЗрддреА рд╣реИ:



рд╡реАрдПрдо рд╕реЗрдХрдВрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп, (рдХрдо = рдмреЗрд╣рддрд░)
LLVM 13.77
LIBJIT 14.17
GNU рд▓рд╛рдЗрдЯрд┐рдВрдЧ 32.59
рддреЛрддрд╛ 2361
рдФрд░ рд╕рд┐рд░реНрдл рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП:
gcc -O0 50.09
gcc -O1 13.79
рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкрд░реНрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо 4288




рдпрд╣реА рд╣реИ, рддреЛрддрд╛ рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЬреАрдЯ рдорд╢реАрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 150 рдЧреБрдирд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореЛрддреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреЛрддреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдореЛрддреА рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдЖрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рддреЛрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЕрдВрддрд┐рдо рд░рд╛рдЧ





рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рддреЛрддрд╛ рдПрдХ _very_ рд╕реБрдЦрдж рдЫрд╛рдк рдЫреЛрдбрд╝ рдЧрдпрд╛, рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдереЗ, рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╕рдореБрджреНрд░ рд╣реИрдВ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдЕрдЪреНрдЫрд╛ рд╣реИред Llvm рдХреЗ рдмрд╛рдж рдЙрд╕ рдкрд░ рд▓рд┐рдЦрдирд╛ рдПрдХ рдЦреБрд╢реА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛:






All Articles