рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ

рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдЗрдВрдЯреЗрд▓ рдХреЗ рд╕реАрдкреАрдпреВ рджреЛрдиреЛрдВ рдмреНрд▓реЗрдбреЛрдВ рдкрд░ рдПрдПрдордбреА рдбрд╛рд▓ рджреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рдбрд╝рд╛рдИ рдХреЗ рд╣рд░рд╛ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рдкрд╕рдВрдж рдиреЗ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛?

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 256-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ 128-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкрд░реАрдХреНрд╖рдг рдХреЛ 1 рдмрд┐рд▓рд┐рдпрди рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдХреЗрд╡рд▓ 12 рд╕реЗ 85 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрд╕реЗрд╕рд░ AMD FX-8150 3.60GHz рдФрд░ Intel Core i5 2500 3.30GHz рдереЗред рдХреЛрдИ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ, рдХреЛрдИ рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рдирд╣реАрдВред

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдХрд▓рдХ рдЗрдВрдЯреЗрд▓ рдкреИрд░реЗрд▓рд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ XE рд╕рдВрд╕реНрдХрд░рдг 12.0.0.104 рдмрд┐рд▓реНрдб 20101006, рдЗрд╕рдХреЗ рдирдП рдкреБрдирд░реНрдЬрдиреНрдо 12.1.5.344 рдмрд┐рд▓реНрдб 20120612, рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдФрд░ рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 (рдореЗрдЯреНрд░реЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ CAPSLOCK рдореЗрдиреВ рдХреЗ рд╕рд╛рде) рдереЗ, рдпрд╣ C ++ 11.0 рд░рд┐рд▓реАрдЬрд╝ рдЙрдореНрдореАрджрд╡рд╛рд░ рднреА рд╣реИред рд╣рдо -O2 рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рддреЗ, рдпрд╣ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдФрд░ Intel рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдпрд╣ -O2 рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, Intel рдХреЗ рд▓рд┐рдП -O3 рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рд╣реИред

рдореИрдВ рдЦреБрдж рд╣реА рдЯреЗрд╕реНрдЯ рджреВрдВрдЧрд╛ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ 64-рдмрд┐рдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмреАрдПрди_рд╡реЙрд░реНрдб рдХреЛ __int64 рдХреЗ рдмрд░рд╛рдмрд░ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдмреАрдПрди_рд╡реЙрд░реНрдб рдХреЛ рдирд┐рдореНрди рдФрд░ рдЙрдЪреНрдЪ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕ рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ _mul128 рдирд╛рдордХ рдЖрдВрддрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛ рдХрд░реЗрдВ, рдЬреЛ рдЗрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдпрд╣ рд╕рдм рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрдХрд▓рдХ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рдЧреБрдгрди рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдорд┐рдердХ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рд╣реИред

#include <stdio.h> #include <windows.h> #define QUANTITY 4 typedef unsigned int BN_WORD; typedef unsigned __int64 BN_DWORD; void Mul(BN_WORD *C, BN_WORD *A, BN_WORD *B ) { BN_WORD Carry = 0; BN_WORD h = *(B++); int i, j; union { BN_DWORD sd; BN_WORD sw[2]; } s; for( i = QUANTITY; i > 0; --i) { s.sd = (BN_DWORD) *(A++) * h + Carry; *C++ = s.sw[0]; Carry = s.sw[1]; } *C = Carry; for ( j = QUANTITY-1; j > 0; --j ) { A -= QUANTITY; h = *(B++); C -= QUANTITY-1; Carry = 0; for( i = QUANTITY; i > 0; --i ) { s.sd = (BN_DWORD) *(A++) * h + *C + Carry; *C++ = s.sw[0]; Carry = s.sw[1]; } *C = Carry; } } typedef void (*my_proc)(BN_WORD*, BN_WORD*, BN_WORD*); void put_addr(void) { FILE *f=fopen("tmp.$$$", "wb"); my_proc proc = Mul; fwrite(&proc, 1, sizeof(proc), f); fclose(f); } my_proc get_addr(void) { FILE *f=fopen("tmp.$$$", "rb"); my_proc proc = NULL; fread(&proc, 1, sizeof(proc), f); fclose(f); return proc; } int main(void) { int i,j; LARGE_INTEGER lFrequency, lStart, lEnd; double dfTime1; BN_WORD A[QUANTITY], B[QUANTITY], C[QUANTITY*2]; BN_WORD RES[QUANTITY*2]={0xd7a44a41, 0xf6e4895c, 0x1624c878, 0x35650795, 0xa55cb22f, 0x861c7313, 0x66dc33f7, 0x479bf4db }; // ,   inline    Mul   main void (*mul)( BN_WORD *C, BN_WORD *A, BN_WORD *B ); put_addr(); mul = get_addr(); for( i=0; i<QUANTITY; ++i) { A[i] = B[i] = 0x87654321; } QueryPerformanceFrequency(&lFrequency); QueryPerformanceCounter(&lStart); for( i=0; i<1000; ++i) { for( j=0; j<1000000; ++j) { mul(C, A, B); } if (memcmp(RES, C, sizeof(RES))!=0) { printf("Something wrong!\n"); } } QueryPerformanceCounter(&lEnd); dfTime1 = (double)(lEnd.QuadPart - lStart.QuadPart) / (double)lFrequency.QuadPart; printf("Time = %g sec\n", dfTime1); } 


рдкрд░рд┐рдгрд╛рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ:
AMD FX-8150 3.60GHz 64 рдмрд┐рдЯAMD FX-8150 3.60GHz 32 рдмрд┐рдЯрдХреЛрд░ i5-2500 3.30GHz 64 рдмрд┐рдЯрдХреЛрд░ i5-2500 3.30GHz 32 рдмрд┐рдЯ
рдЗрдВрдЯреЗрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ XE 12.0.0.104 рдмрд┐рд▓реНрдб 2010100622.6235 рд╕реЗрдХрдВрдб25.913 рд╕реЗрдХрдВрдб13.0921 рд╕реЗрдХрдВрдб23.1986 рд╕реЗрдХрдВрдб
рдЗрдВрдЯреЗрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ XE 12.1.5.344 рдмрд┐рд▓реНрдб 2012061222.2398 рд╕реЗрдХрдВрдб26.0347 рд╕реЗрдХрдВрдб12.9242 рд╕реЗрдХрдВрдб23.1603 рд╕реЗрдХрдВрдб
рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 C ++ 10.0 SP122.5853 рд╕реЗрдХ84.1714 рд╕реЗрдХреЗрдВрдб12.4991 рд╕реЗрдХрдВрдб53.633 рд╕реЗрдХрдВрдб
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рд╕реА ++ 11.0 рд░рд┐рд▓реАрдЬрд╝ рдЙрдореНрдореАрджрд╡рд╛рд░22.2952 рд╕реЗрдХрдВрдб72.8279 рд╕реЗрдХрдВрдб12.6212 рд╕реЗрдХрдВрдб47.1136 рд╕реЗрдХрдВрдб


64-рдмрд┐рдЯ рдХреЛрдб рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрдиреЛрдВ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдЗрдВрдЯреЗрд▓ 32 рдмрд┐рдЯ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЬреАрддрддрд╛ рд╣реИ, VS2010 рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдмреБрдирд╛рдИ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд╡реАрдирддрдо VS2012 рд╕реНрдерд┐рд░ рд╡рд┐рдХрд╛рд╕ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрдВрдЯреЗрд▓ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

рдПрдПрдордбреА рдФрд░ рдХреЛрд░ рдЖрдИ 5 рдкрд░ рдХрд╛рдо рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред 7000 рд░реВрдмрд▓ рдХреА рд╕рдорд╛рди рдХреАрдордд рдкрд░, рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ 32-рдмрд┐рдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд░рд╣реА рдереА рдХрд┐ рд╕рд┐рдВрдЧрд▓ рдереНрд░реЗрдбреЗрдб рдЯреЗрд╕реНрдЯ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЛрд░ i5 рдХрд╛ рдлрд╛рдпрджрд╛ рд░рд╣реЗрдЧрд╛ред 8 рдПрдПрдордбреА рдХреЛрд░ рдХреА рдкреВрд░реНрдг рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдЙрд╕рдХреЗ рдЬреАрддрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ 8 рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛрд░ (рд▓реЗрдХрд┐рди 4 рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдХреЛрд░) рдмрдирд╛рдо 4 рдХреЛрд░ рдХреЛрд░ 5 рдореЗрдВ рд╣реИрдВ, рдорд▓реНрдЯреА-рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЛрд░ i5 рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрд╡рдпрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ: рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП, 64-рдмрд┐рдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рднреА рдЕрдкрдиреЗ рд╕рднреА рдмрд▓реЛрдВ рдХреЛ 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдЬрдмрдХрд┐ рдЗрдВрдЯреЗрд▓ рдиреЗ рдПрдПрдордбреА рдХреЛ рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд┐рдердХ рдкрд░ рдмрд╣рд╕ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗрд╡рд▓ рдЗрдВрдЯреЗрд▓ рдкрд░ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдПрдордбреА (2 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдзреАрдореА) рдкрд░ рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ 32-рдмрд┐рдЯ рдХреЛрдб рдкрд░ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдПрдордбреА рд╕реЗ рдЗрдВрдЯреЗрд▓ рд╕реАрдкреАрдпреВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдкрд░ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реАрдПрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрд░ рдЖрдИ 5 рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд╡рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдЕрдЧрд░ рд╡реАрдПрд╕ рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреЛрдВ?)

UPD1ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рд╛рдордиреЗ рдЖрдИ рдХрд┐ рдЪрд╛рд▓рд╛рдХ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░рдг, VS2010 рдиреЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдХреЛрдб 5.5 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рд╛ред рдЕрдм рд╕реНрд░реЛрдд рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ (f-ju Mul рдХреЗ рд▓рд┐рдП mul рдкреЙрдЗрдВрдЯрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореВрд░реНрдЦ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдЦрд╛ / рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ), рдкрд░рд┐рдгрд╛рдо рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ _WORD рдХреЛ рдкреВрд░реА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП BN_WORD рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдПред

Source: https://habr.com/ru/post/In147272/


All Articles