დაიწყეთ Intel Trace ანალიზატორით და კოლექტორით

Get-Started-with-Intel-Trace-Analyzer-and-Collector-product

დაიწყეთ Intel® Trace ანალიზატორით და კოლექტორით

გამოიყენეთ ეს დაწყების დოკუმენტი და წინასწარ შეგროვებული კვალი file გაიაროს ძირითადი MPI შესრულების ანალიზი Intel® Trace Analyzer-ით და Collector-ით.
Intel Trace Analyzer and Collector გეხმარებათ შევისწავლოთ შეტყობინებების გადაცემის ინტერფეისის (MPI) გამოყენების ეფექტურობა და იდენტიფიციროთ კომუნიკაციის ცხელი წერტილები, სინქრონიზაციის შეფერხებები და დატვირთვის დაბალანსება. პროდუქტის შესახებ დამატებითი ინფორმაციისთვის იხილეთ Intel Trace Analyzer and Collector პროდუქტის გვერდი.

ჩამოტვირთეთ Intel Trace Analyzer და Collector

  • როგორც Intel® oneAPI HPC Toolkit-ის ნაწილი
  • როგორც დამოუკიდებელი ინსტრუმენტი

წინაპირობები

  • Intel Trace Analyzer-ისა და Collector-ის გაშვებამდე, დარწმუნდით, რომ დააინსტალირეთ უახლესი Intel® MPI ბიბლიოთეკა და Intel® oneAPI DPC++/C++ შემდგენელი ან Intel® Fortran შემდგენელი.
  • ეს ადგენს გარემოს საჭირო ცვლადებს შემდგენელებისთვის, Intel MPI ბიბლიოთეკისთვის და Intel Trace Analyzer და Collector-ისთვის და თქვენ მზად ხართ თქვენი აპლიკაციების თვალყურის დევნებისთვის.
  • დამატებითი ინფორმაციისთვის იხილეთ: Intel® oneAPI HPC Toolkit სისტემის მოთხოვნები.

გაიგე სამუშაო პროცესი

  1. თვალყური ადევნეთ თქვენს აპლიკაციას
  2. გაანალიზეთ ყველაზე აქტიური MPI ფუნქციები
  3. პრობლემური ურთიერთქმედებების იდენტიფიცირება
  4. გააუმჯობესეთ თქვენი აპლიკაციის შესრულება პრობლემის გამომწვევი ფუნქციის შეცვლით

აკონტროლეთ თქვენი MPI აპლიკაცია

შექმენით კვალი file მოვლენის ჟურნალების შეგროვება შემდეგი განაცხადის ქცევის ანალიზისთვის.

  1. დააყენეთ გარემო Intel® Trace Analyzer-ის და კოლექტორის გასაშვებად setvars სკრიპტის გაშვებით oneAPI ინსტალაციის დირექტორიდან.
    შენიშვნა
    ნაგულისხმევად, Intel Trace Analyzer and Collector დაინსტალირებულია /opt/intel/oneapi/itac Linux* OS-ისთვის და პროგრამისთვის Files (x86)\Intel\oneAPI\itac\უახლესი Windows* OS-ისთვის.
    Linux-ზე:
    $ წყარო /opt/intel/oneapi/setvars.sh
    Windows-ზე:
    „C:\პროგრამა Files (x86)\Intel\oneAPI\setvars.bat”
  2. გაუშვით თქვენი MPI აპლიკაცია და შექმენით კვალი -trace ოფციით.
    Linux-ზე:
    $ mpirun -trace -n 4 ./poisson_sendrecv.single
    Windows-ზე:
    შეადგინეთ აპლიკაცია და შეაგროვეთ კვალი.
    Intel OneAPI DPC++/C++ შემდგენელისთვის, გაუშვით:
    > mpiicc -კვალი poisson_sendrecv.single.c
    Intel Fortran Compiler-ისთვის გაუშვით:
    > mpiifort -კვალი poisson_sendrecv.single.f
    ეს ყოფილიample წარმოქმნის კვალს (stf*) როგორცample poisson_sendrcv.single MPI აპლიკაცია
  3. გახსენით გენერირებული .stf file Intel Trace Analyzer-ით Intel Trace ანალიზატორით და კოლექტორით.
    Linux-ზე:
    $ traceanalyzer ./ poisson_sendrecv.single.stf
    Windows-ზე:
    traceanalyzer poisson_sendrecv.single.stf

შენიშვნა
ტესტირების მიზნით, შეგიძლიათ ჩამოტვირთოთ წინასწარ შეგროვებული კვალი file poisson_sendrecv.single.stf ამ დოკუმენტში გამოყენებული პოისონისთვის და გახსენით Intel Trace Analyzer-ით და კოლექტორით.
.სტფ file იხსნება შემაჯამებელ გვერდზე view, რომელიც წარმოადგენს ზოგად ინფორმაციას თქვენი აპლიკაციის მუშაობის შესახებ:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-1Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-2შენიშვნა Intel Trace Analyzer-ისა და Collector-ის ფუნქციონალურობის შესახებ დამატებითი ინფორმაციისთვის იხილეთ შეიტყვეთ მეტი.

გაანალიზეთ ყველაზე აქტიური MPI ფუნქციები

გააანალიზეთ MPI აპლიკაციის ქცევა, იპოვნეთ შეფერხებები და იდენტიფიცირეთ სერიალიზაცია, რათა იპოვოთ აპლიკაციის მუშაობის გაუმჯობესების გზები.

  1. შემაჯამებელი გვერდიდან გახსენით ღონისძიების ვადები view დააწკაპუნეთ გაგრძელება > დიაგრამები > მოვლენის ქრონოლოგია საუკეთესო MPI ფუნქციების ღრმა ანალიზისთვის.
    დიაგრამა აჩვენებს პროცესის ინდივიდუალურ აქტივობებს დროთა განმავლობაში.
    აპლიკაციის მუშაობა განმეორებადია, სადაც თითოეული გამეორება შედგება გამოთვლითი ნაწილისა და MPI კომუნიკაციებისგან.
  2. იდენტიფიცირეთ ერთი გამეორება, რომელზეც ფოკუსირება და მასშტაბირება ხდება საჭირო დროის ინტერვალზე მაუსის გადაადგილებით:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-3კვალი view აჩვენებს განყოფილებას თქვენს მიერ არჩეული კვალის ფარგლებში. მოვლენის ქრონოლოგიის დიაგრამა აჩვენებს მოვლენებს, რომლებიც აქტიური იყო არჩეული გამეორების დროს.
    • ჰორიზონტალური ზოლები წარმოადგენს პროცესებს ამ პროცესებში მოწოდებული ფუნქციებით.
    • შავი ხაზები მიუთითებს პროცესებს შორის გაგზავნილ შეტყობინებებს. ეს ხაზები აკავშირებს გაგზავნისა და მიღების პროცესებს.
    • ლურჯი ხაზები წარმოადგენს კოლექტიურ ოპერაციებს, როგორიცაა ოპერაციების გადაცემა ან შემცირება.
  3. გადაერთეთ Flat Pro-ზეfile ჩანართი (A), რათა დაათვალიეროთ თქვენს მიერ შესრულებული ფუნქციები (მოვლენის ქრონიკაში არჩეული).Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-4
  4. გააჯგუფეთ MPI ფუნქციები თქვენს აპლიკაციაში MPI პროცესის აქტივობის გასაანალიზებლად.
    ამისათვის დააწკაპუნეთ მარჯვენა ღილაკით All Processes > Group MPI (B) Flat Pro-შიfile და აირჩიეთ UngroupMPI. ეს ოპერაცია ავლენს ინდივიდუალურ MPI ზარებს.
  5. გაანალიზეთ პროცესები, რომლებიც აკავშირებენ მათ უშუალო მეზობლებთან MPI_Sendrecv-ის გამოყენებით, გამეორების დასაწყისში. მაგampლე:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-5
    • ა. სampმაგალითად, MPI_Sendrecv მონაცემთა გაცვლას აქვს შეფერხება: პროცესი არ ცვლის მონაცემებს მის შემდეგ მეზობელთან, სანამ არ დასრულდება წინასთან გაცვლა. ღონისძიების ვადები view აჩვენებს ამ ბოთლს, როგორც კიბეს.
    • ბ. გამეორების ბოლოს MPI_Allreduce ახდენს ყველა პროცესის ხელახალი სინქრონიზაციას; ამიტომ ამ ბლოკს აქვს საპირისპირო კიბეების იერი.
  6. სერიულიზაციის იდენტიფიცირება Function Pro-ის გამოყენებითfile და Message Profile views.
    • ა. გახსენით ჩარტები ერთდროულად:
      ფუნქცია Pro-შიfile სქემა, გახსენით Load Balancetab.
    • გადადით დიაგრამების მენიუში Message Pro-ის გასახსნელადfile.
    • ბ. Load Balance ჩანართში გააფართოვეთ MPI_Sendrecv და MPI_Allreduce. Load Balancing მიუთითებს, რომ MPI_Sendrecv-ში გატარებული დრო იზრდება პროცესის რაოდენობასთან ერთად, ხოლო MPI_Allreduce-ის დრო მცირდება.
    • გ. შეამოწმეთ Message Profile დიაგრამა ქვედა მარჯვენა კუთხეში.
      ბლოკების ფერადი კოდირება მიუთითებს იმაზე, რომ შეტყობინებებს, რომლებიც მიემგზავრებიან უფრო მაღალი რანგიდან ქვედა რანგში, პროპორციულად მეტი დრო სჭირდებათ, ხოლო ქვედა რანგიდან უფრო მაღალი რანგისკენ მიმავალი შეტყობინებები ავლენს სუსტ ლუწი-კენტის ტიპის შაბლონს:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-6

შედარებითი ანალიზის შედეგები აჩვენებს, რომ განაცხადში არ არის რთული გაცვლის ნიმუშები, გაცვლა ხორციელდება მხოლოდ მეზობელ პროცესებთან. ინფორმაცია არსებითი იქნება თქვენი აპლიკაციის მუშაობის გასაუმჯობესებლად კომუნიკაციების შეცვლით საფეხურისთვის, აპლიკაციის საკომუნიკაციო მოდელის ოპტიმიზაციისთვის.

დაუბალანსებელი კომუნიკაციების იდენტიფიცირება

უყურეთ თქვენს აპლიკაციას იდეალურ პირობებში და შეადარეთ ორიგინალური კვალი file იდეალიზებულთან პრობლემური ურთიერთქმედებების იზოლირებისთვის.

  1. შექმენით იდეალიზებული file:
    • ა. აირჩიეთ Advanced > Idealization ან დააწკაპუნეთGet-Started-with-Intel-Trace-Analyzer-and-Collector-fig-7 (იდეალიზაცია) ხელსაწყოთა ზოლის ღილაკი.
    • ბ. შეამოწმეთ იდეალიზაციის პარამეტრები Idealization დიალოგურ ფანჯარაში (იდეალური კვალი file სახელი და დროის დიაპაზონი კონვერტაციისთვის).
    • გ. დააწკაპუნეთ დაწყებაზე თქვენი კვალის იდეალიზებისთვის.
  2. შეადარეთ ორიგინალური კვალი იდეალიზებულ კვალს:
    • ა. აირჩიეთ გაფართოებული > დისბალანსის დიაგრამა ან დააწკაპუნეთ Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-8(დისბალანსის დიაგრამა) ხელსაწყოთა ზოლის ღილაკი.
    • ბ. დისბალანსის დიაგრამის დიალოგურ ფანჯარაში დააწკაპუნეთ ღილაკზე გახსენით სხვა File ღილაკზე, გადადით იდეალიზებულ კვალზე და აირჩიეთ იგი.
    • გ. დისბალანსის დიაგრამის ფანჯარაში დააჭირეთ ღილაკს Total Mode და აირჩიეთ Breakdown Mode.

Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-9

თქვენ ხედავთ, რომ MPI_Sendrecv არის ყველაზე შრომატევადი ფუნქცია. წონასწორობის დისბალანსი ნაჩვენებია
ღია ფერი და შეადგენს დაახლოებით 10%-ს MPI_Sendrecv ფუნქციისთვის. ეს ის დროა, როცა პროცესები ერთმანეთს ელოდება.

გააუმჯობესეთ თქვენი აპლიკაციის შესრულება კომუნიკაციების შეცვლით

  1. გააუმჯობესეთ MPI აპლიკაციის შესრულება ბლოკირების არადაბლოკვის კომუნიკაციაზე გადაცვლით.
    თქვენს კოდში შეცვალეთ სერიული MPI_Sendrcv არადაბლოკვითი კომუნიკაციით: MPI_Isend და MPI_Irecv. მაგample: ორიგინალური კოდის ნაწყვეტი:
    // საზღვრების გაცვლა
    ბათილად გაცვლა (პარა* p, ბადე* გრ){
    int i,j;
    MPI_Status status_100, status_200, status_300, status_400;
    // გაგზავნეთ პირველი რიგი
    MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
    &სტატუსები_100);
    // ბოლო რიგის გაგზავნა
    MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
    MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
    გამოიყენეთ Intel Trace Analyzer Comparison view სერიული განაცხადის შედარება შესწორებულთან
    // დააკოპირეთ მარცხენა სვეტი tmp მასივებში
    if(gr->მარცხნივ != MPI_PROC_NULL){
    gr->x_new[i][gr->lcol+1] = მარჯვენა_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
    // გაგზავნა მარჯვნივ
    MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
    if(gr->მარცხნივ != MPI_PROC_NULL)
    {
    MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
    {
    gr->x_new[i][0] = მარცხენა_col[i];
    }
    }
    განახლებულია კოდის ფრაგმენტი
    MPI_მოთხოვნის მოთხოვნა[7];
    // გაგზავნეთ პირველი რიგი
    MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
    MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
    …..
    MPI_Waitall(7, მოთხოვნა, MPI_STATUSES_IGNORE);
    შესწორების შემდეგ, შესწორებული განაცხადის ერთჯერადი გამეორება გამოიყურება შემდეგნაირადampლე:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-10
  2. გამოიყენეთ Intel Trace Analyzer Comparison view სერიული განაცხადის შედარება შესწორებულთან. შეადარეთ ორი კვალი Comparison-ის დახმარებით View, აპირებს View > შეადარე. შედარება View ჰგავს:Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-11შედარებაში View, ხედავთ, რომ არადაბლოკვის კომუნიკაციის გამოყენება ხელს უწყობს სერიულიზაციის მოხსნას და პროცესების კომუნიკაციის დროის შემცირებას.
    შენიშვნა თქვენი აპლიკაციის კვანძის დონის მუშაობის შესახებ დამატებითი ინფორმაციისთვის იხილეთ დოკუმენტაცია შესაბამისი ხელსაწყოებისთვის: Intel® VTune™ Profiler MPI კოდების ანალიზი და Intel® MPI აპლიკაციების ანალიზი Intel® Advisor-ის გამოყენებით.

გაიგე მეტი

შეისწავლეთ შემდეგი რესურსები Intel Trace Analyzer-ისა და Collector-ის შესახებ დამატებითი ინფორმაციისთვის.Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-12Get-Started-with-Intel-Trace-Analyzer-and-Collector-fig-13

შეტყობინებები და პასუხისმგებლობის შეზღუდვები

  • Intel ტექნოლოგიებმა შეიძლება მოითხოვონ ჩართული აპარატურა, პროგრამული უზრუნველყოფა ან მომსახურების გააქტიურება.
  • არცერთი პროდუქტი ან კომპონენტი არ შეიძლება იყოს აბსოლუტურად უსაფრთხო.
  • თქვენი ხარჯები და შედეგები შეიძლება განსხვავდებოდეს.
  • © Intel Corporation. Intel, Intel-ის ლოგო და სხვა Intel ნიშნები არის Intel Corporation-ის ან მისი შვილობილი კომპანიების სავაჭრო ნიშნები. სხვა სახელები და ბრენდები შეიძლება მოითხოვონ, როგორც სხვების საკუთრება.
  • ამ დოკუმენტით არანაირი ლიცენზია (გამოხატული ან ნაგულისხმევი, ესტოპელის ან სხვაგვარად) რაიმე ინტელექტუალური საკუთრების უფლებაზე არ არის გაცემული.
  • აღწერილი პროდუქტები შეიძლება შეიცავდეს დიზაინის დეფექტებს ან შეცდომებს, რომლებიც ცნობილია როგორც შეცდომა, რამაც შეიძლება გამოიწვიოს პროდუქტის გადახრა გამოქვეყნებული სპეციფიკაციებისგან. მიმდინარე დახასიათებული შეცდომები ხელმისაწვდომია მოთხოვნით.
  • Intel უარს ამბობს ყველა მკაფიო და ნაგულისხმევ გარანტიებზე, მათ შორის, შეუზღუდავად, ნაგულისხმევი გარანტიები ვაჭრობის, კონკრეტული მიზნისთვის ვარგისიანობისა და არადარღვევის შესახებ, ისევე როგორც ნებისმიერი გარანტია, რომელიც წარმოიქმნება შესრულების კურსიდან, გარიგების კურსიდან ან ვაჭრობაში გამოყენებისგან.

დოკუმენტები / რესურსები

intel დაიწყეთ Intel Trace ანალიზატორი და კოლექტორი [pdf] მომხმარებლის სახელმძღვანელო
დაიწყეთ Intel Trace Analyzer და Collector-ით, დაიწყეთ Intel-ით, Trace Analyzer და Collector, Collector-ით

ცნობები

დატოვე კომენტარი

თქვენი ელფოსტის მისამართი არ გამოქვეყნდება. მონიშნულია აუცილებელი ველები *