এল 2 এইচডাব্লু প্রিফেটর কি সত্যিই সহায়ক?


10

আমি হুইস্কি লেকে আই 7-8565U তে রয়েছি এবং পারফ কাউন্টারগুলি এবং 512 কিবি ডেটা (এল 2 ক্যাশের আকারের চেয়ে দ্বিগুণ) অনুলিপি করার জন্য সময় বিশ্লেষণ করেছি এবং এল 2 এইচডাব্লু প্রিফেটারের কাজ সম্পর্কিত কিছু ভুল বোঝাবুঝির সম্মুখীন হয়েছে।

ইন ইন্টেল ম্যানুয়াল Vol.4 MSR সেখানে MSR হয় 0x1A4বিট 0 (নিষ্ক্রিয় করতে 1) ও L2 এইচ ডব্লিউ prefetcher controlloing জন্য হয়।


নিম্নলিখিত মানদণ্ড বিবেচনা করুন:

memcopy.h:

void *avx_memcpy_forward_lsls(void *restrict, const void *restrict, size_t);

memcopy.S:

avx_memcpy_forward_lsls:
    shr rdx, 0x3
    xor rcx, rcx
avx_memcpy_forward_loop_lsls:
    vmovdqa ymm0, [rsi + 8*rcx]
    vmovdqa [rdi + rcx*8], ymm0
    vmovdqa ymm1, [rsi + 8*rcx + 0x20]
    vmovdqa [rdi + rcx*8 + 0x20], ymm1
    add rcx, 0x08
    cmp rdx, rcx
    ja avx_memcpy_forward_loop_lsls
    ret

main.c:

#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#include <x86intrin.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include "memcopy.h"

#define ITERATIONS 1000
#define BUF_SIZE 512 * 1024

_Alignas(64) char src[BUF_SIZE];
_Alignas(64) char dest[BUF_SIZE];

static void __run_benchmark(unsigned runs, unsigned run_iterations,
                    void *(*fn)(void *, const void*, size_t), void *dest, const void* src, size_t sz);

#define run_benchmark(runs, run_iterations, fn, dest, src, sz) \
    do{\
        printf("Benchmarking " #fn "\n");\
        __run_benchmark(runs, run_iterations, fn, dest, src, sz);\
    }while(0)

int main(void){
    int fd = open("/dev/urandom", O_RDONLY);
    read(fd, src, sizeof src);
    run_benchmark(20, ITERATIONS, avx_memcpy_forward_lsls, dest, src, BUF_SIZE);
}

static inline void benchmark_copy_function(unsigned iterations, void *(*fn)(void *, const void *, size_t),
                                               void *restrict dest, const void *restrict src, size_t sz){
    while(iterations --> 0){
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
        fn(dest, src, sz);
    }
}

static void __run_benchmark(unsigned runs, unsigned run_iterations,
                    void *(*fn)(void *, const void*, size_t), void *dest, const void* src, size_t sz){
    unsigned current_run = 1;
    while(current_run <= runs){
        benchmark_copy_function(run_iterations, fn, dest, src, sz);
        printf("Run %d finished\n", current_run);
        current_run++;
    }
}

সংকলিত 2 রান বিবেচনা করুন main.c

আমি ।

MSR:

$ sudo rdmsr -p 0 0x1A4
0

Run:

$ taskset -c 0 sudo ../profile.sh ./bin 

 Performance counter stats for './bin':

    10 486 164 071      L1-dcache-loads                                               (12,13%)
    10 461 354 384      L1-dcache-load-misses     #   99,76% of all L1-dcache hits    (12,05%)
    10 481 930 413      L1-dcache-stores                                              (12,05%)
    10 461 136 686      l1d.replacement                                               (12,12%)
    31 466 394 422      l1d_pend_miss.fb_full                                         (12,11%)
   211 853 643 294      l1d_pend_miss.pending                                         (12,09%)
     1 759 204 317      LLC-loads                                                     (12,16%)
            31 007      LLC-load-misses           #    0,00% of all LL-cache hits     (12,16%)
     3 154 901 630      LLC-stores                                                    (6,19%)
    15 867 315 545      l2_rqsts.all_pf                                               (9,22%)
                 0      sw_prefetch_access.t1_t2                                      (12,22%)
         1 393 306      l2_lines_out.useless_hwpf                                     (12,16%)
     3 549 170 919      l2_rqsts.pf_hit                                               (12,09%)
    12 356 247 643      l2_rqsts.pf_miss                                              (12,06%)
                 0      load_hit_pre.sw_pf                                            (12,09%)
     3 159 712 695      l2_rqsts.rfo_hit                                              (12,06%)
     1 207 642 335      l2_rqsts.rfo_miss                                             (12,02%)
     4 366 526 618      l2_rqsts.all_rfo                                              (12,06%)
     5 240 013 774      offcore_requests.all_data_rd                                     (12,06%)
    19 936 657 118      offcore_requests.all_requests                                     (12,09%)
     1 761 660 763      offcore_response.demand_data_rd.any_response                                     (12,12%)
       287 044 397      bus-cycles                                                    (12,15%)
    36 816 767 779      resource_stalls.any                                           (12,15%)
    36 553 997 653      resource_stalls.sb                                            (12,15%)
    38 035 066 210      uops_retired.stall_cycles                                     (12,12%)
    24 766 225 119      uops_executed.stall_cycles                                     (12,09%)
    40 478 455 041      uops_issued.stall_cycles                                      (12,05%)
    24 497 256 548      cycle_activity.stalls_l1d_miss                                     (12,02%)
    12 611 038 018      cycle_activity.stalls_l2_miss                                     (12,09%)
        10 228 869      cycle_activity.stalls_l3_miss                                     (12,12%)
    24 707 614 483      cycle_activity.stalls_mem_any                                     (12,22%)
    24 776 110 104      cycle_activity.stalls_total                                     (12,22%)
    48 914 478 241      cycles                                                        (12,19%)

      12,155774555 seconds time elapsed

      11,984577000 seconds user
       0,015984000 seconds sys

২।

MSR:

$ sudo rdmsr -p 0 0x1A4
1

Run:

$ taskset -c 0 sudo ../profile.sh ./bin

 Performance counter stats for './bin':

    10 508 027 832      L1-dcache-loads                                               (12,05%)
    10 463 643 206      L1-dcache-load-misses     #   99,58% of all L1-dcache hits    (12,09%)
    10 481 296 605      L1-dcache-stores                                              (12,12%)
    10 444 854 468      l1d.replacement                                               (12,15%)
    29 287 445 744      l1d_pend_miss.fb_full                                         (12,17%)
   205 569 630 707      l1d_pend_miss.pending                                         (12,17%)
     5 103 444 329      LLC-loads                                                     (12,17%)
            33 406      LLC-load-misses           #    0,00% of all LL-cache hits     (12,17%)
     9 567 917 742      LLC-stores                                                    (6,08%)
     1 157 237 980      l2_rqsts.all_pf                                               (9,12%)
                 0      sw_prefetch_access.t1_t2                                      (12,17%)
           301 471      l2_lines_out.useless_hwpf                                     (12,17%)
       218 528 985      l2_rqsts.pf_hit                                               (12,17%)
       938 735 722      l2_rqsts.pf_miss                                              (12,17%)
                 0      load_hit_pre.sw_pf                                            (12,17%)
         4 096 281      l2_rqsts.rfo_hit                                              (12,17%)
     4 972 640 931      l2_rqsts.rfo_miss                                             (12,17%)
     4 976 006 805      l2_rqsts.all_rfo                                              (12,17%)
     5 175 544 191      offcore_requests.all_data_rd                                     (12,17%)
    15 772 124 082      offcore_requests.all_requests                                     (12,17%)
     5 120 635 892      offcore_response.demand_data_rd.any_response                                     (12,17%)
       292 980 395      bus-cycles                                                    (12,17%)
    37 592 020 151      resource_stalls.any                                           (12,14%)
    37 317 091 982      resource_stalls.sb                                            (12,11%)
    38 121 826 730      uops_retired.stall_cycles                                     (12,08%)
    25 430 699 605      uops_executed.stall_cycles                                     (12,04%)
    41 416 190 037      uops_issued.stall_cycles                                      (12,04%)
    25 326 579 070      cycle_activity.stalls_l1d_miss                                     (12,04%)
    25 019 148 253      cycle_activity.stalls_l2_miss                                     (12,03%)
         7 384 770      cycle_activity.stalls_l3_miss                                     (12,03%)
    25 442 709 033      cycle_activity.stalls_mem_any                                     (12,03%)
    25 406 897 956      cycle_activity.stalls_total                                     (12,03%)
    49 877 044 086      cycles                                                        (12,03%)

      12,231406658 seconds time elapsed

      12,226386000 seconds user
       0,004000000 seconds sys

আমি কাউন্টার লক্ষ্য করেছি:

12 611 038 018 cycle_activity.stalls_l2_miss বনাম / সেকেন্ড
25 019 148 253 cycle_activity.stalls_l2_miss

প্রস্তাবিত যে এমএসআরটি অক্ষম করে এল 2 এইচডাব্লু প্রিফেটর প্রয়োগ করা হচ্ছে। এছাড়াও অন্যান্য এল 2 / এলএলসি সম্পর্কিত স্টাফগুলি উল্লেখযোগ্যভাবে পৃথক হয়। পার্থক্যটি বিভিন্ন রান জুড়ে পুনরুত্পাদনযোগ্য । সমস্যাটি total timeএবং চক্রগুলির মধ্যে প্রায় কোনও পার্থক্য নেই :

48 914 478 241 cycles বনাম / সেকেন্ড
49 877 044 086 cycles

12,155774555 seconds time elapsed বনাম / সেকেন্ড
12,231406658 seconds time elapsed

প্রশ্ন:
অন্যান্য পারফরম্যান্স সীমাবদ্ধ দ্বারা কী এল 2 মিস করে?
যদি তা হয় তবে আপনি কী কাউন্টারগুলি এটি বোঝার জন্য দেখার পরামর্শ দিতে পারেন?


4
থাম্বের নিয়ম হিসাবে: যে কোনও অ-অস্বাভাবিকভাবে প্রয়োগ করা মেমরি অনুলিপি মেমরির সীমাবদ্ধ। এমনকি যখন এটি কেবল এল 1 ক্যাশে হিট হয়। যে কোনও মেমোরি অ্যাক্সেসের ওভারহেডগুলি দু'জন এবং একসাথে যুক্ত করতে সিপিইউ লাগে তার চেয়ে অনেক বেশি। আপনার ক্ষেত্রে, আপনি অনুলিপি নির্দেশিকাগুলি প্রতি অনুলিপি বাইট প্রতি নির্দেশের পরিমাণ হ্রাস করতে ব্যবহার করছেন। আপনার ডেটা যেখানেই পাওয়া যাবে (এল 1, এল 2, এলএলসি, মেমরি), সম্পর্কিত মেমোরি উপাদানটির থ্রুপুট আপনার অটল হবে।
— মাস্টার -

উত্তর:


5

হ্যাঁ, L2 স্ট্রিমারটি অনেক সময় সত্যই সহায়ক।

মেমকিপি আড়াল করার জন্য কোনও গণনামূলক প্রচ্ছন্নতা নেই, সুতরাং আমি অনুমান করি যে OoO এক্সিকিউট রিসোর্সগুলি (আরওবি আকার) আপনি আরও L2 মিস থেকে যে অতিরিক্ত লোড লেটেন্সি পেতে পারেন তা পরিচালনা করতে পারে, কমপক্ষে এই ক্ষেত্রে যেখানে আপনি সমস্ত এল 3 হিট পেয়ে যান মাঝারি আকারের ওয়ার্কিং সেট (1MiB) ব্যবহার করে যা L3- এ ফিট করে, L3 হিটগুলি তৈরি করতে কোনও প্রিফেচিংয়ের প্রয়োজন নেই।

এবং একমাত্র নির্দেশাবলী লোড / স্টোর (এবং লুপ ওভারহেড), সুতরাং ওও উইন্ডোতে বেশ এগিয়ে যাওয়ার জন্য চাহিদা বোঝা অন্তর্ভুক্ত।

আইডিকে যদি এল 2 স্পেসিয়াল প্রিফেটচার এবং এল 1 ডি প্রিফেচার এখানে কোনওরকম সহায়তা করে থাকে।


এই অনুমান পরীক্ষা করার পূর্বাভাস : আপনার অ্যারেটিকে আরও বড় করুন যাতে আপনি এল 3 মিস করেন এবং আপনি সম্ভবত সামগ্রিক সময়ের মধ্যে একটি পার্থক্য দেখতে পাবেন একবার ওও এক্সিকিউট ডিআরএমে যাওয়ার সমস্ত উপায়ের লোড লেটেন্সিটি গোপন করার জন্য যথেষ্ট নয়। আরও এগিয়ে এইচডাব্লু প্রিফেচ কিছুটিকে সহায়তা করতে পারে।

এইচডাব্লু প্রিফেচিংয়ের অন্যান্য বড় সুবিধাগুলি আসে যখন তা পারে আপনার গণনার সাথে সামঞ্জস্য রাখতে , সুতরাং আপনি এল 2 হিট পান। (একটি লুপের মাঝারি দৈর্ঘ্যের সাথে লুপের বাহিত নির্ভরতা শৃঙ্খলার সাথে গণনা রয়েছে))

আরওবি ক্ষমতার উপর অন্য চাপ না থাকলে ডিমান্ড লোড এবং ওও এক্সিকিউশন উপলভ্য (একক থ্রেডযুক্ত) মেমরি ব্যান্ডউইদথ ব্যবহার করা পর্যন্ত অনেক কিছু করতে পারে।


এছাড়াও নোট করুন যে ইন্টেল সিপিইউগুলিতে, প্রতিটি ক্যাশে মিসের উপর নির্ভরশীল উফগুলির একটি ব্যাক-এন্ড রিপ্লে (আরএস / সিডিউলার থেকে) ব্যয় হতে পারে , যখন ডেটা আসার কথা হয় তখন এল 1 ডি এবং এল 2 মিস হয় না। এবং এর পরে, এল 3 থেকে ডেটা আসার অপেক্ষায় আপাতত মূলটি আশাবাদীভাবে উওসগুলিকে স্প্যাম করে।

( Https://chat.stackoverflow.com/rooms/206639/discussion-on-question-by-beeonrope-are-load-ops-deallocated-from-the-rs-wen-th এ দেখুন এবং লোড অপসগুলি অপসারণ করা হয়েছে আরএস যখন তারা প্রেরণ, সম্পূর্ণ বা অন্য কোন সময়? )

ক্যাশে-মিস লোড নিজেই নয়; এই ক্ষেত্রে এটি স্টোর নির্দেশাবলী হবে। আরও সুনির্দিষ্টভাবে, বন্দরের 4 এর জন্য স্টোর-ডেটা ইউওপ That এটি এখানে কোনও বিষয় নয়; 32-বাইট স্টোর এবং এল 3 ব্যান্ডউইদথের বাটনিঙ্কিং ব্যবহার করার অর্থ আমরা প্রতি ঘড়িতে 1 পোর্ট 4 উওপের কাছাকাছি নেই।


2
@ সেন্ট আন্টারিও: হাহ? ওটা কোন অর্থ প্রকাশ করে না; আপনি মেমরির সাথে আবদ্ধ তাই আপনার সামনের প্রান্তের বাধা নেই যাতে এলএসডি অপ্রাসঙ্গিক। (এটি কিছুটা শক্তি সঞ্চয় করে, উওপ ক্যাশে থেকে তাদের পুনরায় আনতে এড়ানো হবে)। তারা আরওবিতে অবসর নেওয়ার আগ পর্যন্ত জায়গা নেয়। তারা নও যে উল্লেখযোগ্য, কিন্তু না তুচ্ছ পারেন।
— পিটার কর্ডেস

2
আপনার অ্যারেটিকে আরও বড় করুন যাতে আপনি এল 3 মিস করেন এবং আপনি সম্ভবত একটি তাত্পর্য দেখবেন যে আমি 16MiBবাফার এবং 10পুনরাবৃত্তিগুলির সাথে অনেকগুলি পরীক্ষা চালিয়েছি এবং সত্যই 14,186868883 secondsবনাম 43,731360909 secondsএবং 46,76% of all LL-cache hitsবনাম পেয়েছি 99,32% of all LL-cache hits; 1 028 664 372 LLC-loadsবনাম 1 587 454 298 LLC-loads ।
— সেন্ট এন্টারিও

4
@ সেন্ট অ্যান্টারিও: নাম রেজিস্টার করে! এটি ওও এক্সিকিউরিটির অন্যতম গুরুত্বপূর্ণ টুকরো, বিশেষত এক্স 86 এর মতো নিবন্ধী-দরিদ্র আইএসএতে। দেখুন কেন আগায়ের নির্দেশ সারণী থেকে পৃথক, গাছে গাছে হাসওয়ালে কেবলমাত্র 3 টি চক্র নেয়? (একাধিক সংযোজক সহ এফপি লুপগুলি তালিকাভুক্ত করা) । এবং বিটিডাব্লু, সাধারণত আপনি 2 লোড করতে চান তারপর 2 স্টোর, লোড / স্টোর লোড / স্টোর নয়। 4 কে অ্যালিয়াসিং স্টলগুলি এড়ানো বা প্রশমিত করার আরও ভাল সুযোগ কারণ পরবর্তী লোডগুলি (যে এইচডাব্লুটিকে আগের স্টোরগুলিকে ওভারল্যাপিং হিসাবে সনাক্ত করতে হবে বা না) এটি আরও দূরে রয়েছে।
— পিটার কর্ডেস

2
@ সেন্ট অ্যান্টারিও: হ্যাঁ, অবশ্যই অগ্নার ফগের অপ্টিমাইজেশান গাইড ওজিও এক্সিকিউটারকেও রেজিস্ট্রার নামকরণের সাথে ব্যাখ্যা করে, উইকিপিডিয়াও করে। বিটিডাব্লু, নিবন্ধভুক্ত নামকরণও ডাব্লুএডাব্লু বিপত্তি এড়িয়ে চলে, কেবলমাত্র সত্য নির্ভরতা (আরএডাব্লু) রেখে। সুতরাং একই স্থাপত্য নিবন্ধের লিখন শেষ করার জন্য পূর্বের লোডের জন্য অপেক্ষা না করে লোডগুলি অর্ডারও শেষ করে দিতে পারে । এবং হ্যাঁ, একমাত্র লুপ বহনকারী ডিপ চেইনটি আরসিএক্সের মাধ্যমে হয়, যাতে চেইনটি এগিয়ে যেতে পারে। এজন্য ঠিকানাগুলি প্রথম দিকে প্রস্তুত হতে পারে, যখন লোড / স্টোর ইউপগুলি পোর্ট 2/3 থ্রুপুটটিতে এখনও বাধা দেওয়া হয়।
— পিটার কর্ডেস

3
আমি অবাক হয়েছি যে এল 3-তে প্রিফেকিং মেমকিটির জন্য সহায়তা করে নি। আমি অনুমান করি যে 10/12 এলএফবি সেই ক্ষেত্রে "যথেষ্ট"। যদিও অদ্ভুত বলে মনে হচ্ছে: সেখানে সীমাবদ্ধ ফ্যাক্টরটি কী? মূল -> এল 2 সময়টি এল 2 -> এল 3 সময়ের চেয়ে কম হওয়া উচিত, সুতরাং আমার মানসিক মডেলটিতে দ্বিতীয় লেগের জন্য আরও বেশি বাফার (আরও বেশি মোট পেশা) থাকা উচিত।
— বিওনরোপ

3

হ্যাঁ, এল 2 এইচডাব্লু প্রিফেটর খুব সহায়ক!

উদাহরণস্বরূপ, আমার মেশিনের নীচে ফলাফলগুলি সন্ধান করুন (i7-6700HQ) টিনিমেম্বঞ্চ চালাচ্ছেন । ফলাফলগুলির প্রথম কলামটি সমস্ত উপস্থাপকদের সাথে রয়েছে, দ্বিতীয় ফলাফলের কলামটি এল 2 স্ট্রিমার বন্ধ রয়েছে (তবে অন্য সমস্ত প্রিফেটচারি এখনও চালু আছে)।

এই পরীক্ষায় 32 টি এমআইবি উত্স এবং গন্তব্য বাফার ব্যবহার করা হয়, যা আমার মেশিনের এল 3 এর চেয়ে অনেক বড়, সুতরাং এটি ডিআরএএম-এ বেশিরভাগ ক্ষেত্রেই মিস করবে।

==========================================================================
== Memory bandwidth tests                                               ==
==                                                                      ==
== Note 1: 1MB = 1000000 bytes                                          ==
== Note 2: Results for 'copy' tests show how many bytes can be          ==
==         copied per second (adding together read and writen           ==
==         bytes would have provided twice higher numbers)              ==
== Note 3: 2-pass copy means that we are using a small temporary buffer ==
==         to first fetch data into it, and only then write it to the   ==
==         destination (source -> L1 cache, L1 cache -> destination)    ==
== Note 4: If sample standard deviation exceeds 0.1%, it is shown in    ==
==         brackets                                                     ==
==========================================================================

                                                       L2 streamer ON            OFF
 C copy backwards                                     :   7962.4 MB/s    4430.5 MB/s
 C copy backwards (32 byte blocks)                    :   7993.5 MB/s    4467.0 MB/s
 C copy backwards (64 byte blocks)                    :   7989.9 MB/s    4438.0 MB/s
 C copy                                               :   8503.1 MB/s    4466.6 MB/s
 C copy prefetched (32 bytes step)                    :   8729.2 MB/s    4958.4 MB/s
 C copy prefetched (64 bytes step)                    :   8730.7 MB/s    4958.4 MB/s
 C 2-pass copy                                        :   6171.2 MB/s    3368.7 MB/s
 C 2-pass copy prefetched (32 bytes step)             :   6193.1 MB/s    4104.2 MB/s
 C 2-pass copy prefetched (64 bytes step)             :   6198.8 MB/s    4101.6 MB/s
 C fill                                               :  13372.4 MB/s   10610.5 MB/s
 C fill (shuffle within 16 byte blocks)               :  13379.4 MB/s   10547.5 MB/s
 C fill (shuffle within 32 byte blocks)               :  13365.8 MB/s   10636.9 MB/s
 C fill (shuffle within 64 byte blocks)               :  13588.7 MB/s   10588.3 MB/s
 -
 standard memcpy                                      :  11550.7 MB/s    8216.3 MB/s
 standard memset                                      :  23188.7 MB/s   22686.8 MB/s
 -
 MOVSB copy                                           :   9458.4 MB/s    6523.7 MB/s
 MOVSD copy                                           :   9474.5 MB/s    6510.7 MB/s
 STOSB fill                                           :  23329.0 MB/s   22901.5 MB/s
 SSE2 copy                                            :   9073.1 MB/s    4970.3 MB/s
 SSE2 nontemporal copy                                :  12647.1 MB/s    7492.5 MB/s
 SSE2 copy prefetched (32 bytes step)                 :   9106.0 MB/s    5069.8 MB/s
 SSE2 copy prefetched (64 bytes step)                 :   9113.5 MB/s    5063.1 MB/s
 SSE2 nontemporal copy prefetched (32 bytes step)     :  11770.8 MB/s    7453.4 MB/s
 SSE2 nontemporal copy prefetched (64 bytes step)     :  11937.1 MB/s    7712.1 MB/s
 SSE2 2-pass copy                                     :   7092.8 MB/s    4355.2 MB/s
 SSE2 2-pass copy prefetched (32 bytes step)          :   7001.4 MB/s    4585.1 MB/s
 SSE2 2-pass copy prefetched (64 bytes step)          :   7055.1 MB/s    4557.9 MB/s
 SSE2 2-pass nontemporal copy                         :   5043.2 MB/s    3263.3 MB/s
 SSE2 fill                                            :  14087.3 MB/s   10947.1 MB/s
 SSE2 nontemporal fill                                :  33134.5 MB/s   32774.3 MB/s

এই পরীক্ষাগুলিতে L2 স্ট্রিমার থাকা কখনও ধীর হয় না এবং প্রায়শই দ্বিগুণ দ্রুত হয়।

সাধারণভাবে, আপনি ফলাফলগুলিতে নিম্নলিখিত নিদর্শনগুলি লক্ষ্য করতে পারেন:

  • কপিগুলি সাধারণত পূরণের চেয়ে বেশি প্রভাবিত বলে মনে হয়।
  • standard memsetএবং STOSB fill(এই প্ল্যাটফর্মে একই জিনিস এইসব ফোঁড়া নিচে), অন্তত আক্রান্ত prefetched ফলাফলের মাত্র কয়েক% ছাড়া তুলনায় দ্রুততর হচ্ছে সঙ্গে আছে।
  • স্ট্যান্ডার্ডটি memcpyসম্ভবত এখানে একমাত্র অনুলিপি যা 32-বাইট অ্যাভিএক্স নির্দেশাবলী ব্যবহার করে এবং এটি অনুলিপিগুলির মধ্যে সবচেয়ে কম প্রভাবিত হয় - তবে প্রিফেচিং করা এখনও বাহিরের চেয়ে 40% বেশি দ্রুত।

আমি অন্য তিনটি প্রিফেটচারার চালু এবং বন্ধ করার চেষ্টাও করেছি, তবে সাধারণত তারা এই বেঞ্চমার্কের জন্য প্রায় কোনও পরিমাপযোগ্য প্রভাব ফেলেনি।


(মজাদার ঘটনা: vmovdqa"পূর্ণসংখ্যক" হওয়া সত্ত্বেও এটিএভিএক্স 1)) আপনি কী ভাবেন যে ওপি-র লুপটি গ্লিবসি মেমকির চেয়ে কম ব্যান্ডউইদথ দিচ্ছিল? এবং এজন্যই এল 2 থেকে অতিরিক্ত এমএলপি </> এল 3 স্ট্রিমিউর দখল রাখতে পারে যা এল 2 থেকে অতিরিক্ত এমএলপির সুবিধা না নিয়ে 12 এলএফবিগুলি ডি -3-তে চলে যাওয়া চাহিদা লোড রাখার জন্য যথেষ্ট ছিল? সম্ভবত এটিই আপনার পরীক্ষার পার্থক্য। এল 3 কোর হিসাবে একই গতিতে চালানো উচিত; আপনার দুজনেরই কোয়াড-কোর স্কাইলেক-ক্লায়েন্টের সমতুল্য মাইক্রোর্কিটেকচারগুলি সম্ভবত একই রকম এল 3 লেটেন্সি?
— পিটার কর্ডেস

@ পিটারকর্ডস - দুঃখিত, আমার সম্ভবত পরিষ্কার হওয়া উচিত: এই পরীক্ষাটি 32 এমআইবি বাফারের মধ্যে ছিল, সুতরাং এটি ডিআরএএমকে এল 3 হিট না হিট পরীক্ষা করছে। আমি যদিও টিএমএম আউটপুটটি বাফার আকারে দেখি, তবে আমি এটি দেখতে পাই না - ওফ! এটি ইচ্ছাকৃত ছিল: আমি ওপি-র 512 কিবি দৃশ্যের সঠিক ব্যাখ্যা দেওয়ার চেষ্টা করছিলাম না, তবে এল 2 স্ট্রিমার এটির মতো একটি দৃশ্যের সাথে কার্যকর কিনা এটির শিরোনাম প্রশ্নের উত্তর দিয়েছি। আমি অনুমান করি যে আমি একটি ছোট বাফার আকার ব্যবহার করেছি যাতে আমি কমবেশি ফলাফলগুলি পুনরুত্পাদন করতে পারি (আমি ইতিমধ্যে uarch-benchমন্তব্যে উল্লিখিত একটি অনুরূপ ফলাফল দেখেছি )।
— BeeOnRope

1
আমি উত্তরে বাফার আকার যুক্ত করেছি।
— BeeOnRope

1
@ সেন্ট অ্যান্টারিও: না, এটি কোনও সমস্যা নয়। আপনি কেন ভাবছেন যে এটি কোনও সমস্যা হতে পারে ; এটি এভিএক্স 1 এবং এভিএক্স 2 নির্দেশাবলী মিশ্রণের জন্য কোনও জরিমানার মতো নয়। আমার মন্তব্যের মূল বক্তব্যটি ছিল যে এই লুপটির জন্য কেবল এভিএক্স 1 প্রয়োজন, তবুও এই উত্তরে এভিএক্স 2 নির্দেশাবলী ব্যবহারের উল্লেখ রয়েছে। ইন্টেল এভিএক্স 2 চালু করার সাথে সাথে এল 1 ডি লোড / স্টোর ডেটা পাথগুলি 32 বাইটে প্রশস্ত করতে পেরেছিল, সুতরাং আপনি রানটাইম প্রেরণা করছেন তবে আপনি কীভাবে একটি মেমকি বাস্তবায়ন নির্বাচন করেন তার অংশ হিসাবে আপনি অ্যাভিএক্স 2 এর উপলব্ধতা ব্যবহার করতে পারেন ...
— পিটার কর্ডস

1
আপনি কীভাবে উপস্থাপক বন্ধ করেছিলেন এবং কোনটি? এটি কি সফটওয়্যার । ফোরাম সফটওয়্যার.টেন.টেল / en-us/forums/intel-isa- extensions/ topic/… বলেছেন যে কিছু বিটের আলাদা অর্থ রয়েছে।
— osgx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.