рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХрд╛ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рд╕реНрддрд░ рдХреИрд╢ рд╣реИ?

рдХреЛрд░ i7 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ, рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдмрд╣реБрдд рдкреНрд░рд╕рд┐рджреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдмреАрдЪ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд▓рдЯрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдореЗрдВ рдХреЛрд░ рдХреЛрдб, рддреАрди рдЖрд░реЗрдЦ рдФрд░ рдХреЛрд░ i7 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдХреИрд╢ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рд╣реИрдВред рдХреЛрдИ рдХрд╡рд░ рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд▓рдЯрд╛ - рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЬрд╣рд╛рдВ рдПрдХ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдпрд╛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдирд┐рдореНрди-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдЪреНрдЪ-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдкрд░ рдкрд╣реБрдВрдЪ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдУрдПрд╕ рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЗрд╕рдХрд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛ рдЖрддреНрдореАрдпрддрд╛ рдФрд░ рдПрдордПрд╕рдЖрдИ-рдПрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдкрд╛рд╕ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ - рдПрдХ рдореЗрдореЛрд░реА рдирд┐рдпрдВрддреНрд░рдХ, рдХреНрдпреВрдкреАрдЖрдИ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддреГрддреАрдп-рд╕реНрддрд░реАрдп рдХреИрд╢ рдФрд░ рдкреАрд╕реАрдЖрдИ рдЙрдкрдХрд░рдгред рдореБрдЭреЗ PCIe рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдФрд░ рдХреНрдпреВрдкреАрдЖрдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд▓рдЯрд╛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ - рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдЪреНрдЪ-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдФрд░ рдХрдо-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзреБрдирд┐рдХ рдорд▓реНрдЯреА-рдЪреИрдирд▓ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдереНрд░реВрдкреБрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдореИрдВ рдХреИрд╢ рдкрд░ рд░рд╣реВрдВрдЧрд╛ред

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

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

рдпрджрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХрд╛ рдЕрдкрдирд╛ рдХреИрд╢ рд╣реИ, рдХрдо рд╕реЗ рдХрдо 256 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдЖрдХрд╛рд░ рдореЗрдВред .Text рдФрд░ .data рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рдХрдИ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдХрд╛рд░реНрдпред рдЦреИрд░, рдХрдо рд╕реЗ рдХрдо 32kb рдХрд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП + 32kb рдХрд╛ рдХреЛрдб рдХреИрд╢ рдореЗрдВ рдХрдИ рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЙрдЪреНрдЪ рд░рдХреНрддрдЪрд╛рдк рдФрд░ рдмрд┐рдЬрд▓реА рдкреНрд░рдмрдВрдзрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдЗрдХреНрд░реЛрдмреЗрдирдорд╛рд░реНрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ:

рд╣реЗрд▓реНрдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
#define POOL_SIZE_L1D_LINES 512 #define POOL_SIZE_L2_LINES 8192 // This can differ on your CPU. Check with CPUID or some system diagnostics tool #define POOL_SIZE_LLC_LINES 6*1024*1024/64 // Yes, I waste 3/4 of space for the sake of test simplicity // 1 cache line == 1 linked list item. // Pointer length is hard coded to 8 bytes (Intel 64) struct list_item { unsigned long long int tick; list_item *next; unsigned char padding[48]; }; // Build a linked list of size N with pseudo-random pattern void build_list(list_item *head, int N, int A, int B) { int C = B; list_item *current = head; for (int i = 0; i < N - 1; i++) { current->tick = 0; C = (A*C + B) % N; current->next = (list_item*)&(head[C]); current = current->next; } } // Touch first N elements in a linked list void warmup_list(list_item* current, int N) { bool write = (N > POOL_SIZE_L2_LINES) ? true : false; for(int i = 0; i < N - 1; i++) { current = current->next; //No write is needed to keep a line in L1,but looks like it is needed to keep it in L2! if (write) current->tick++; // FIXME AK: to check on HSW } } 

build_list рд╕реВрдЪреА рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░реАрдлрд╝реЗрдЪрд░ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрди рди рдорд┐рд▓реЗред рдЙрд╕реА рд╕рдордп, рдкреВрд░реА рд╕реВрдЪреА рдХреИрд╢ рдореЗрдВ рд╣реИ, рдЙрд╕ рд╕реНрддрд░ рдкрд░ рдЬрд╣рд╛рдВ рд╡рд╣ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдЕрдм рдирдВрдмрд░ 2 рдХрд░реНрдиреЗрд▓ рдкрд░, рд╣рдо рд╕реВрдЪреА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдкрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рд╕рдордп рдХрд┐рддрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд▓рд┐рдВрдХреНрдб рд╕реВрдЪреА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдЧрддрд┐ рдорд╛рдк
 void measure(list_item* head, int N) { unsigned __int64 i1, i2, avg = 0; for (int j = 0; j < 50; j++) { list_item* current = head; #if WARMUP_ON while(in_copy) warmup_list(head, N); #else while(in_copy) spin_sleep(1); #endif i1 = __rdtsc(); for(int i = 0; i < N; i++) { current->tick++; current = current->next; } i2 = __rdtsc(); avg += (i2-i1)/50; in_copy = true; } printf("%i\n", avg/N); } 


рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдХрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реВрдЪреА рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдк
 // We initialize the linked list only once, and make it big enough to make sure // we do not observe effects of spatial locality but only effects of temporal locality // Magic numbers 509, 509 <= Hull-Dobell Theorem criteria build_list(head, POOL_SIZE_LLC_LINES*2, 509, 509); for (int i = 10; i < POOL_SIZE_L1D_LINES; i+=5) { warmup(head, i); measure(head, i); }; for (int i = POOL_SIZE_L1D_LINES; i < POOL_SIZE_L2_LINES; i+=50) { warmup(head, i); measure(head, i); }; for (int i = POOL_SIZE_L2_LINES; i < POOL_SIZE_LLC_LINES*2; i+=1000) { warmup(head, i); measure(head, i); }; 


рддреАрд╕рд░реЗ рд╕реНрддрд░ рдореЗрдВ рдХреИрд╢ рдХреЛ рд░реЛрдХрддреЗ рд╣реБрдП рдПрдХ рджреВрд╕рд░реА рд╕реНрдЯреНрд░реАрдо рдЬреЛрдбрд╝реЗрдВ: рдЗрд╕реЗ рдХреЛрд░ рдирдВрдмрд░ 3 рдкрд░ рд╕реНрдкрд┐рди рдХрд░рдиреЗ рджреЗрдВ, рдФрд░ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ 18 рдПрдордмреА рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░реЗрдВред 18MB - LLC рд╕реНрдХреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдЗрд╕реЗ рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд┐рдирд▓реЙрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд▓рдд рдФрд░ рдЕрдХреНрд╖рдо рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдЙрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред)

рдПрдХ рдзрд╛рдЧрд╛ рдЬреЛ рджреВрд╕рд░реЗ рдХреЛрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдПрд▓рдПрд▓рд╕реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ
 list_item *area1 = (list_item *)malloc(POOL_SIZE_LLC_LINES*64*2); list_item *area2 = (list_item *)malloc(POOL_SIZE_LLC_LINES*64*2); while (true) { while(!in_copy) spin_sleep(1); #if DISRUPT_ON memcpy(area1, area2, POOL_SIZE_LLC_LINES*64*3); memcpy(area2, area1, POOL_SIZE_LLC_LINES*64*3); #else spin_sleep(10); #endif in_copy = false; }; 


рд╣рдо рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрди рдХрд░реЗрдВрдЧреЗ:
рдЫрд╡рд┐

рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рднреА рдЪрд▓рд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреАрдЯ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдбреЗрдЯрд╛ рдЕрдкрдиреЗ "рдПрд▓" рдПрд▓ 2 рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╣рд▓реЗ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреА рдХреА рдХреНрд░реЙрд▓ рдЧрддрд┐ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдерд╛ред (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдВрдШрд░реНрд╖ рдХреА рдпрд╛рджреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛)

рдпрд╣рд╛рдБ рдорд╛рдк рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
рдЫрд╡рд┐
рдХреНрд╖реИрддрд┐рдЬ - рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рд╕рдВрдЦреНрдпрд╛ред рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ - рд╕реАрдкреАрдпреВ рдЪрдХреНрд░ рдПрдХ рддрддреНрд╡ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, "рдЪрд░рдг" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдПрдХ рдЧреНрд░рд╛рдл рдЬрд┐рд╕ рдкрд░ рдХреИрд╢ рдХреА рд╕реАрдорд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ) рдЖрдкрдХреЛ рдмрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ, рд╕реНрдерд╛рдирд┐рдХ рдЗрд▓рд╛рдХреЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдореИрдВрдиреЗ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛, рдЙрд╕ рд╕рдордп рдореЗрдореЛрд░реА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреНрд▓рд┐рдХ рдкрд░ рдЦрд░реНрдЪ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИ
L1D_hit * P (L1D_hit) + L2_hit * P (L2_hit) + LLC_hit * P (LLC_hit) + DRAM_hit * P (DRAM_it) рдЬрд╣рд╛рдВ P рдЗрд╕ рдХреИрд╢ рд╕реНрддрд░ рдореЗрдВ рдЕрдЧрд▓реА рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╛рдиреА
P (L1D_hit) + P (L2_hit) + P (LLC_hit) + P (DRAM_hit) = 1
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдХреИрд╢ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реВрдЪреА рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ Vtune, oprofile рдпрд╛ Linux perf рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 16,384 рд╡рд╕реНрддреБрдУрдВ (512 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ) рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реВрдЪреА рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдПрдХ Vtune рд╕рдВрднрд╛рд╡рдирд╛ рдорд╛рдк рд╣реИред
рдЕрдмрд╛рдзрд┐рддрд╡реНрдпрд╛рдХреБрд▓рд╡рд╛рд░реНрдордЕрдк
L1 рд╣рд┐рдЯ%0.08063
L2 рд╣рд┐рдЯ%720.070.1
LLC рд╣рд┐рдЯ%252.622
DRAM рдиреЗ% рдорд╛рд░рд╛39715
DTLB рдорд┐рд╕%216637
Vtune рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рдмреНрд▓реВ" рдФрд░ "рдЧреНрд░реАрди" рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреЗ рдХрд╛рд░рдг рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рдХреИрд╢ рдореЗрдВ рдорд┐рд╕рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЙрдЪреНрдЪ-рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрд░ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрд╡рдпрдВ рдорд╛рдкрд╛ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдереАред "рдмреНрд▓реВ" рдХреЙрд▓рдо рдореЗрдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рд▓ рдореЗрдВ рдореБрдЭреЗ L1 рдореЗрдВ рдЕрдзрд┐рдХ рд╣рд┐рдЯ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдФрд░ "рд╣рд░реЗ" рдХреЙрд▓рдо рдореЗрдВ L2 рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣рд┐рдЯ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ 16k рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдЧреНрд░рд╛рдл рдкрд░ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдореБрдЭреЗ рдХреЛрд░ i7 рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред рдХреИрд╢ рдХрд╛ рдпрд╣ рд╕рдВрдЧрдарди (рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) (рдбреЗрд╕реНрдХрдЯреЙрдк, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рд▓реЛрдб) рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд▓рдЯрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕рдВрдХреАрд░реНрдг рд╡рд░реНрдЧ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реАрдлреИрдЪрд░реНрд╕ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╡реЗ рдЗрд╕ рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрддреЗ рдкрд░ рд╕рдВрдХреЗрдд рджрд┐рдП рд╣реИрдВред

рд╡рд╛рд╣! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдмрдбрд╝рд╛ рдкрд╛рда рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рд╛рд░ рдПрдХ рдЯреНрд╡реАрдЯ рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: тАЬрдЬрдм рдПрдХ рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдПрд▓рдПрд▓рд╕реА рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХреЛрд░ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реА рдХреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдПрд▓ 1 рдФрд░ / рдпрд╛ рдПрд▓ 2 рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВред рддреЛ рдХреИрд╢ рдХреЛ рдЧрд░реНрдо рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред "

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


All Articles