ჰეტეროგენული მეხსიერების სისტემების შექმნა FPGA SDK-ში OpenCL მორგებული პლატფორმებისთვის
ინსტრუქციები
ჰეტეროგენული მეხსიერების სისტემების შექმნა Intel® FPGA SDK-ში OpenCL მორგებული პლატფორმებისთვის
ჰეტეროგენული მეხსიერების დანერგვა მორგებულ პლატფორმაში საშუალებას იძლევა მეტი გარე მეხსიერების ინტერფეისის (EMIF) გამტარუნარიანობა, ასევე უფრო დიდი და სწრაფი მეხსიერების წვდომა. ჰეტეროგენული მეხსიერების წვდომის კომბინაცია ოპტიმიზებულთან
OpenCL ™(1) ბირთვმა შეიძლება გამოიწვიოს თქვენი OpenCL სისტემის მუშაობის მნიშვნელოვანი გაუმჯობესება.
აპლიკაციის ეს ჩანაწერი გვაწვდის სახელმძღვანელოს მეხსიერების ჰეტეროგენული სისტემების შექმნაზე მორგებულ პლატფორმაზე Intel® FPGA SDK-თან ერთად გამოსაყენებლად OpenCL(2-ისთვის). Intel ვარაუდობს, რომ თქვენ ხართ გამოცდილი FPGA დიზაინერი, რომელიც ავითარებს მორგებულ პლატფორმებს, რომლებიც შეიცავს მეხსიერების ჰეტეროგენულ სისტემებს.
ჰეტეროგენული მეხსიერების სისტემების შექმნამდე გაეცანით Intel FPGA SDK-ს ქვემოთ მითითებული OpenCL დოკუმენტებისთვის.
დაკავშირებული ინფორმაცია
- Intel FPGA SDK OpenCL პროგრამირების სახელმძღვანელოსთვის
- Intel FPGA SDK OpenCL-ისთვის საუკეთესო პრაქტიკის სახელმძღვანელო
- Intel FPGA SDK OpenCL Arria 10 GX FPGA განვითარების ნაკრებისთვის საცნობარო პლატფორმის პორტირების სახელმძღვანელო
1.1. FPGA დაფის და EMIF ინტერფეისების ფუნქციონირების შემოწმება
გადაამოწმეთ თითოეული მეხსიერების ინტერფეისი დამოუკიდებლად და შემდეგ შექმენით თქვენი მორგებული პლატფორმა გლობალური მეხსიერების გამოყენებით.
- შეამოწმეთ თითოეული მეხსიერების ინტერფეისი ტექნიკის დიზაინის გამოყენებით, რომელსაც შეუძლია შეამოწმოს თითოეული ინტერფეისის სიჩქარე და სტაბილურობა.
- შექმენით თქვენი მორგებული პლატფორმა გლობალური მეხსიერების გამოყენებით.
- მაგampთუ თქვენ გაქვთ სამი DDR ინტერფეისი, ერთი მათგანი უნდა იყოს შედგენილი, როგორც ჰეტეროგენული მეხსიერება. ამ შემთხვევაში, გადაამოწმეთ OpenCL სტეკის ფუნქციონირება თითოეული DDR ინტერფეისით დამოუკიდებლად.
OpenCL და OpenCL ლოგო არის Apple Inc.-ის სავაჭრო ნიშნები, რომლებიც გამოიყენება Khronos Group™-ის ნებართვით. - Intel FPGA SDK OpenCL-ისთვის ეფუძნება გამოქვეყნებულ Khronos სპეციფიკაციას და გაიარა Khronos-ის შესაბამისობის ტესტირების პროცესი. ამჟამინდელი შესაბამისობის სტატუსი შეგიძლიათ იხილოთ აქ www.khronos.org/conformance.
- მაგampთუ თქვენ გაქვთ სამი DDR ინტერფეისი, ერთი მათგანი უნდა იყოს შედგენილი, როგორც ჰეტეროგენული მეხსიერება. ამ შემთხვევაში, გადაამოწმეთ OpenCL სტეკის ფუნქციონირება თითოეული DDR ინტერფეისით დამოუკიდებლად.
ინტელის კორპორაცია. Ყველა უფლება დაცულია. Intel, Intel-ის ლოგო და სხვა Intel ნიშნები არის Intel Corporation-ის ან მისი შვილობილი კომპანიების სავაჭრო ნიშნები. Intel იძლევა გარანტიას მისი FPGA და ნახევარგამტარული პროდუქტების შესრულებაზე მიმდინარე სპეციფიკაციების შესაბამისად Intel-ის სტანდარტული გარანტიის შესაბამისად, მაგრამ იტოვებს უფლებას ნებისმიერ დროს შეიტანოს ცვლილებები ნებისმიერ პროდუქტსა და სერვისში შეტყობინების გარეშე. Intel არ იღებს პასუხისმგებლობას ან პასუხისმგებლობას, რომელიც წარმოიქმნება აქ აღწერილი ნებისმიერი ინფორმაციის, პროდუქტის ან სერვისის აპლიკაციის ან გამოყენების შედეგად, გარდა იმ შემთხვევისა, რაც წერილობით არის დათანხმებული Intel-ის მიერ. Intel-ის მომხმარებლებს ურჩევენ, მიიღონ მოწყობილობის სპეციფიკაციების უახლესი ვერსია, სანამ დაეყრდნონ რაიმე გამოქვეყნებულ ინფორმაციას და განათავსონ შეკვეთები პროდუქტებსა და სერვისებზე. *სხვა სახელები და ბრენდები შეიძლება გამოცხადდეს, როგორც სხვისი საკუთრება.
ISO 9001:2015 რეგისტრირებულია
ალტერნატიულად, თუ გაქვთ ორი DDR ინტერფეისი და ერთი ოთხმხრივი მონაცემთა სიჩქარის (QDR) ინტერფეისი, გადაამოწმეთ ორი DDR ინტერფეისისა და QDR ინტერფეისის OpenCL სტეკის ფუნქციონალურობა.
Intel გირჩევთ გამოიყენოთ PCI Express® – (PCIe® -) ან EMIF-ექსკლუზიური დიზაინი თქვენი მეხსიერების ინტერფეისების შესამოწმებლად. მას შემდეგ რაც დაადასტურებთ, რომ მეხსიერების თითოეული ინტერფეისი ფუნქციონირებს და რომ თქვენი OpenCL დიზაინი მუშაობს მეხსიერების ინტერფეისების ქვეჯგუფთან, გააგრძელეთ
სრულად ფუნქციონალური ჰეტეროგენული მეხსიერების სისტემის შესაქმნელად.
1.2. board_spec.xml-ის შეცვლა File
შეცვალეთ board_spec.xml file დააკონკრეტა ჰეტეროგენული მეხსიერების სისტემების ტიპები, რომლებიც ხელმისაწვდომია OpenCL კერნელებისთვის.
ბირთვის კომპილაციის დროს, Intel FPGA SDK OpenCL Offline Compiler-ისთვის ანიჭებს ბირთვის არგუმენტებს მეხსიერებას თქვენ მიერ მითითებული ბუფერული მდებარეობის არგუმენტზე დაყრდნობით.
1. დაათვალიერეთ board_spec.xml file თქვენი მორგებული პლატფორმის აპარატურის დირექტორიაში.
2. გახსენით board_spec.xml file ტექსტურ რედაქტორში და შესაბამისად შეცვალეთ XML.
მაგampთუ თქვენს აპარატურულ სისტემას აქვს ორი DDR მეხსიერება, როგორც ნაგულისხმევი გლობალური მეხსიერება და ორი QDR ბანკი, რომელსაც თქვენ აყალიბებთ ჰეტეროგენულ მეხსიერებას, შეცვალეთ board_spec.xml მეხსიერების განყოფილებები. file დაემსგავსოს შემდეგს:
1.3. მეხსიერების მრავალი გამყოფის დაყენება Qsys-ში
ამჟამად, OpenCL მეხსიერების ბანკის გამყოფი Qsys-ის დიზაინში არ უჭერს მხარს მეხსიერების ბანკების არასიმძლავრის 2 რაოდენობას, რაც არ არის შეზღუდვა ტიპიური კონფიგურაციისთვის. თუმცა, არის სცენარები, სადაც საჭიროა მეხსიერების ინტერფეისების 2-დან 2-ზე ნაკლები სიმძლავრე. მეხსიერების ინტერფეისების არასიმძლავრე 2-ის დასაყენებლად, გამოიყენეთ OpenCL მეხსიერების ბანკის მრავალი გამყოფი, რათა შექმნათ მეხსიერების ჰეტეროგენული სისტემები მეხსიერების ბანკების არა სიმძლავრის XNUMX-ზე. თქვენ უნდა შექმნათ რამდენიმე OpenCL მეხსიერების ბანკის გამყოფი, როდესაც თქვენ გაქვთ ნამდვილი ჰეტეროგენული მეხსიერების სისტემა. განვიხილოთ სისტემა ერთი DDR მეხსიერების ინტერფეისით და ერთი QDR მეხსიერების ინტერფეისით. იმის გამო, რომ ორ ბანკს აქვს სხვადასხვა მეხსიერების ტოპოლოგია, თქვენ არ შეგიძლიათ მათი გაერთიანება ერთი გლობალური მეხსიერების ქვეშ.
სურათი 1. სამ ბანკიანი ჰეტეროგენული მეხსიერების სისტემის ბლოკ-სქემა
ეს ჰეტეროგენული მეხსიერების სისტემა შეიცავს ორ DDR მეხსიერების ინტერფეისს და ერთ QDR მეხსიერების ინტერფეისს.თუ იყენებთ Intel Quartus® Prime პროგრამული უზრუნველყოფის 16.0, 16.0.1 ან 16.0.2 ვერსიას და OpenCL-ისთვის Altera SDK-ს, OpenCL მეხსიერების ბანკის გამყოფი არასწორად ამუშავებს მეხსიერების აფეთქებებს მისამართის საზღვრებს შორის. ამ ცნობილი პრობლემის გადასაჭრელად, დაამატეთ მილსადენის ხიდი ადიდებული ზომით 1 და დააკავშირეთ მისი Avalon ®Memory-Mapped (Avalon-MM) ოსტატი OpenCL Memory Bank Divider-ის სლავურ პორტთან.
შენიშვნა:
ეს ცნობილი პრობლემა დაფიქსირებულია Intel Quartus Prime პროგრამულ უზრუნველყოფაში და Intel FPGA SDK OpenCL 16.1 ვერსიისთვის.
ნახაზი 2. მილსადენის ხიდით სამბანიანი ჰეტეროგენული მეხსიერების სისტემის ბლოკ-სქემა 1.4. Boardtest პროგრამისა და ჰოსტის კოდის შეცვლა თქვენი ჰეტეროგენული მეხსიერების გადაწყვეტისთვის
გამოიყენეთ boardtest.cl ბირთვი, რომელსაც მოყვება Intel FPGA SDK OpenCL Custom Platform Toolkit-ისთვის, რათა შეამოწმოთ თქვენი მორგებული პლატფორმის ფუნქციონირება და შესრულება.
დაფის ტესტის პროგრამა არის OpenCL ბირთვი, რომელიც საშუალებას გაძლევთ შეამოწმოთ ჰოსტიდან მოწყობილობამდე გამტარობა, მეხსიერების გამტარობა და თქვენი მორგებული პლატფორმის ზოგადი ფუნქციონირება.
- დაათვალიერეთ /board/ custom_platform_toolkit/tests/boardtest დირექტორია.
- გახსენით boardtest.cl file ტექსტურ რედაქტორში და მიანიჭეთ ბუფერული მდებარეობა თითოეულ გლობალურ მეხსიერების არგუმენტს.
მაგampლე:
__ბირთის სიცარიელე
mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, unint arg, unint arg2)
აქ uint *src ენიჭება DDR მეხსიერებას და uint *dst ენიჭება QDR მეხსიერებას. დაფა_spec.xml file განსაზღვრავს ორივე მეხსიერების სისტემის მახასიათებლებს. - თქვენს OpenCL სისტემაში თქვენი ჰეტეროგენული მეხსიერების გადაწყვეტის გამოსაყენებლად, შეცვალეთ თქვენი ჰოსტის კოდი თქვენს clCreateBuffer ზარზე CL_MEM_HETEROGENEOUS_INTELFPGA დროშის დამატებით.
მაგampლე:
ddatain = clCreateBuffer(კონტექსტი, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(ხელმოუწერელი) * vectorSize, NULL, &status);
Intel მკაცრად გირჩევთ, რომ ბუფერის დაწერამდე დააყენოთ ბუფერის ადგილმდებარეობა ბირთვის არგუმენტად. ერთი გლობალური მეხსიერების გამოყენებისას, შეგიძლიათ დაწეროთ ბუფერები ბირთვის არგუმენტზე მინიჭებამდე ან მის შემდეგ. ჰეტეროგენულ მეხსიერების სისტემებში, მასპინძელი ადგენს ბუფერის მდებარეობას ბუფერის ჩაწერამდე. სხვა სიტყვებით რომ ვთქვათ, ჰოსტი გამოიძახებს clSetKernelArgument ფუნქციას clEnqueueWriteBuffer ფუნქციის გამოძახებამდე.
თქვენს ჰოსტის კოდში გამოიძახეთ clCreateBuffer, clSetKernelArg და clEnqueueWriteBuffer ზარები შემდეგი თანმიმდევრობით:
ddatain = clCreateBuffer(კონტექსტი, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(ხელმოუწერელი) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(რიგი, ddatain, CL_FALSE, 0, sizeof(ხელმოუწერელი) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file წარმოადგენს ამ ფუნქციის გამოძახების მსგავს მიმდევრობას. - მას შემდეგ რაც შეცვლით boardtest.cl file და ჰოსტის კოდი, შეადგინეთ ჰოსტი და ბირთვის კოდი და გადაამოწმეთ მათი ფუნქციონირება.
თქვენი ბირთვის კოდის შედგენისას, თქვენ უნდა გამორთოთ ყველა მეხსიერების სისტემის ადიდებული ინტერლევაცია, მათ შორის –no-interleaving. ვარიანტი aoc ბრძანებაში.
დაკავშირებული ინფორმაცია
გლობალური მეხსიერების Burst-Interleaving-ის გამორთვა (–გადარევის გარეშე )
1.5. თქვენი ჰეტეროგენული მეხსიერების ფუნქციონირების შემოწმება სისტემა
ჰეტეროგენული მეხსიერების სისტემის გამართულად ფუნქციონირების უზრუნველსაყოფად, გააუქმეთ CL_CONTEXT_COMPILER_MODE_INTELFPGA დროშა თქვენს ჰოსტის კოდში.
OpenCL სისტემებში ჰომოგენური მეხსიერებით, თქვენ უნდა დააყენოთ CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 დროშა თქვენს ჰოსტის კოდში, რათა გამორთოთ .aocx-ის წაკითხვა. file და FPGA-ს რეპროგრამირება. CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 დროშის დაყენება სასარგებლოა თქვენი დაფის ინსტალაციისას თქვენი მორგებული პლატფორმის ფუნქციონირების შესამოწმებლად იატაკის გეგმის დიზაინისა და LogicLock™ რეგიონების მითითების გარეშე.
მეხსიერების ჰეტეროგენულ სისტემებში, გაშვების გარემომ უნდა წაიკითხოს თითოეული ბუფერის ბუფერული მდებარეობა, რომელიც აღწერილია .aocx-ში. fileმეხსიერების სისტემების ფუნქციონირების შესამოწმებლად. თუმცა, შეიძლება დაგჭირდეთ თქვენი მორგებული პლატფორმის ფუნქციონირების გადამოწმება დაფის დიზაინის საბოლოო მახასიათებლების განხორციელების გარეშე, როგორიცაა იატაკის გეგმის შემუშავება და LogicLock რეგიონების დაზუსტება.
- დარწმუნდით, რომ CL_CONTEXT_COMPILER_MODE_INTELFPGA დროშა არ არის დაყენებული თქვენს ჰოსტის კოდში.
- დაფაზე დათვალიერება/ თქვენი მორგებული პლატფორმის /source/host/mmd დირექტორია.
- გახსენით acl_pcie_device.cpp მეხსიერებით შედგენილი მოწყობილობა (MMD) file ტექსტურ რედაქტორში.
- შეცვალეთ რეპროგრამის ფუნქცია acl_pcie_device.cpp-ში file დაბრუნების 0-ის დამატებით; ხაზი, როგორც ნაჩვენებია ქვემოთ:
int ACL_PCIE_DEVICE:: reprogram(void *data, size_t data_size)
{
დაბრუნება 0;
// ვივარაუდოთ წარუმატებლობა
int reprogram_failed = 1;
// ვივარაუდოთ, რომ fpga.bin-ში არ არის rbf ან ჰეში
int rbf_or_hash_not_provided = 1;
// ვივარაუდოთ, რომ ბაზის და იმპორტის რევიზიის ჰეშები არ ემთხვევა
int hash_mismatch = 1;
…
} - გადააკეთეთ acl_pcie_device.cpp file.
- დაადასტურეთ, რომ CL_CONTEXT_COMPILER_MODE_INTELFPGA დროშა დაყენებული რჩება.
ყურადღება: დაბრუნების 0 დამატების შემდეგ; გადააპროგრამეთ ფუნქცია და გადააკეთეთ MMD file, გაშვების გარემო წაიკითხავს .aocx file და მივანიჭოთ ბუფერული მდებარეობები, მაგრამ არ გადაპროგრამებს FPGA. თქვენ ხელით უნდა დააკავშიროთ FPGA გამოსახულება .aocx-თან file. ამ ქცევის შესაცვლელად, წაშალეთ დაბრუნება 0; რეპროგრამის ფუნქციიდან და ხელახლა შეადგინეთ MMD file.
1.6. დოკუმენტის გადასინჯვის ისტორია
თარიღი | ვერსია | ცვლილებები |
დეკ-17 | 2017.12.01 | • რებრენდირებულია CL_MEM_HETEROGENEOUS_ALTERA-ზე CL_MEM_HETEROGENEOUS_INTELFPGA. |
დეკ-16 | 2016.12.13 | • რებრენდირებულია CL_CONTEXT_COMPILER_MODE_ALTERA-ზე CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
ჰეტეროგენული მეხსიერების სისტემების შექმნა Intel® FPGA SDK-ში OpenCL-ისთვის
მორგებული პლატფორმები
გამოხმაურების გაგზავნა
ონლაინ ვერსია
გამოხმაურების გაგზავნა
ID: 683654
ვერსია: 2016.12.13
დოკუმენტები / რესურსები
![]() |
intel ჰეტეროგენული მეხსიერების სისტემების შექმნა FPGA SDK-ში OpenCL მორგებული პლატფორმებისთვის [pdf] ინსტრუქციები ჰეტეროგენული მეხსიერების სისტემების შექმნა FPGA SDK-ში OpenCL მორგებული პლატფორმებისთვის, ჰეტეროგენული მეხსიერების სისტემების შექმნა, FPGA SDK OpenCL მორგებული პლატფორმებისთვის |