Δημιουργία ετερογενών συστημάτων μνήμης στο 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 Development Kit Reference Platform
1.1. Επαλήθευση της λειτουργικότητας της πλακέτας FPGA και των διεπαφών EMIF
Επαληθεύστε κάθε διεπαφή μνήμης ανεξάρτητα και, στη συνέχεια, δημιουργήστε την προσαρμοσμένη πλατφόρμα σας χρησιμοποιώντας καθολική μνήμη.
- Επαληθεύστε κάθε διεπαφή μνήμης χρησιμοποιώντας σχέδια υλικού που μπορούν να ελέγξουν την ταχύτητα και τη σταθερότητα κάθε διεπαφής.
- Δημιουργήστε την προσαρμοσμένη πλατφόρμα σας χρησιμοποιώντας παγκόσμια μνήμη.
- Για π.χample, εάν έχετε τρεις διεπαφές DDR, μία από αυτές πρέπει να αντιστοιχιστεί ως ετερογενής μνήμη. Σε αυτήν την περίπτωση, επαληθεύστε τη λειτουργικότητα της στοίβας OpenCL με κάθε διεπαφή DDR ανεξάρτητα.
Το OpenCL και το λογότυπο OpenCL είναι εμπορικά σήματα της Apple Inc. που χρησιμοποιούνται με άδεια του Khronos Group™. - Το Intel FPGA SDK για OpenCL βασίζεται σε μια δημοσιευμένη Προδιαγραφή Khronos και έχει περάσει τη Διαδικασία δοκιμής συμμόρφωσης Khronos. Η τρέχουσα κατάσταση συμμόρφωσης βρίσκεται στη διεύθυνση www.khronos.org/conformance.
- Για π.χample, εάν έχετε τρεις διεπαφές DDR, μία από αυτές πρέπει να αντιστοιχιστεί ως ετερογενής μνήμη. Σε αυτήν την περίπτωση, επαληθεύστε τη λειτουργικότητα της στοίβας OpenCL με κάθε διεπαφή DDR ανεξάρτητα.
Intel Corporation. Ολα τα δικαιώματα διατηρούνται. Η επωνυμία Intel, το λογότυπο Intel και άλλα σήματα Intel είναι εμπορικά σήματα της Intel Corporation ή των θυγατρικών της. Η Intel εγγυάται την απόδοση των προϊόντων FPGA και ημιαγωγών της σύμφωνα με τις τρέχουσες προδιαγραφές σύμφωνα με την τυπική εγγύηση της Intel, αλλά διατηρεί το δικαίωμα να κάνει αλλαγές σε οποιαδήποτε προϊόντα και υπηρεσίες ανά πάσα στιγμή χωρίς προειδοποίηση. Η Intel δεν αναλαμβάνει καμία ευθύνη ή ευθύνη που απορρέει από την εφαρμογή ή τη χρήση οποιασδήποτε πληροφορίας, προϊόντος ή υπηρεσίας που περιγράφεται στο παρόν, εκτός εάν συμφωνηθεί ρητά εγγράφως από την Intel. Συνιστάται στους πελάτες της Intel να λαμβάνουν την πιο πρόσφατη έκδοση των προδιαγραφών της συσκευής προτού βασιστούν σε οποιεσδήποτε δημοσιευμένες πληροφορίες και προτού υποβάλουν παραγγελίες για προϊόντα ή υπηρεσίες. *Άλλα ονόματα και επωνυμίες μπορούν να διεκδικηθούν ως ιδιοκτησία τρίτων.
ISO 9001: 2015 εγγεγραμμένο
Εναλλακτικά, εάν έχετε δύο διεπαφές DDR και μία διασύνδεση quad rate data (QDR), επαληθεύστε τη λειτουργικότητα της στοίβας OpenCL των δύο διεπαφών DDR και της διεπαφής QDR ανεξάρτητα.
Η Intel συνιστά να χρησιμοποιείτε σχέδια PCI Express® – (PCIe® -) ή αποκλειστικά EMIF για να δοκιμάσετε τις διασυνδέσεις μνήμης σας. Αφού επαληθεύσετε ότι κάθε διεπαφή μνήμης είναι λειτουργική και ότι η σχεδίασή σας OpenCL λειτουργεί με ένα υποσύνολο των διεπαφών μνήμης, προχωρήστε
για τη δημιουργία ενός πλήρως λειτουργικού ετερογενούς συστήματος μνήμης.
1.2. Τροποποίηση του board_spec.xml File
Τροποποιήστε το board_spec.xml file για να καθορίσετε τους τύπους ετερογενών συστημάτων μνήμης που είναι διαθέσιμα στους πυρήνες OpenCL.
Κατά τη μεταγλώττιση του πυρήνα, το Intel FPGA SDK για OpenCL Offline Compiler εκχωρεί ορίσματα πυρήνα σε μια μνήμη με βάση το όρισμα θέσης buffer που καθορίζετε.
1. Περιηγηθείτε στο board_spec.xml file στον κατάλογο υλικού της προσαρμοσμένης πλατφόρμας σας.
2. Ανοίξτε το board_spec.xml file σε ένα πρόγραμμα επεξεργασίας κειμένου και τροποποιήστε το XML ανάλογα.
Για π.χample, εάν το σύστημα υλικού σας έχει δύο μνήμες DDR ως προεπιλεγμένη παγκόσμια μνήμη και δύο τράπεζες QDR που μοντελοποιείτε ως ετερογενή μνήμη, τροποποιήστε τις ενότητες μνήμης του board_spec.xml file να μοιάζει με το εξής:
1.3. Ρύθμιση πολλαπλών διαιρετών μνήμης στο Qsys
Επί του παρόντος, το OpenCL Memory Bank Divider στη σχεδίαση Qsys δεν υποστηρίζει αριθμό τραπεζών μνήμης χωρίς ισχύ από 2, κάτι που δεν αποτελεί περιορισμό για τυπικές διαμορφώσεις. Ωστόσο, υπάρχουν σενάρια όπου είναι απαραίτητες οι διασυνδέσεις μνήμης χωρίς ισχύ από 2. Για να φιλοξενήσετε διεπαφές μνήμης χωρίς ισχύ από 2, χρησιμοποιήστε πολλαπλούς διαχωριστές τράπεζας μνήμης OpenCL για να δημιουργήσετε ετερογενή συστήματα μνήμης με αριθμό τραπεζών μνήμης χωρίς ισχύ από 2. Πρέπει να δημιουργήσετε πολλαπλούς διαχωριστές τράπεζας μνήμης OpenCL όταν έχετε ένα πραγματικό ετερογενές σύστημα μνήμης. Εξετάστε ένα σύστημα με μία διεπαφή μνήμης DDR και μία διεπαφή μνήμης QDR. Επειδή οι δύο τράπεζες έχουν διαφορετικές τοπολογίες μνήμης, δεν μπορείτε να τις συνδυάσετε κάτω από μια ενιαία παγκόσμια μνήμη.
Εικόνα 1. Μπλοκ διάγραμμα ενός συστήματος ετερογενούς μνήμης τριών τραπεζών
Αυτό το ετερογενές σύστημα μνήμης περιέχει δύο διεπαφές μνήμης DDR και μία διασύνδεση μνήμης QDR.Εάν χρησιμοποιείτε την έκδοση 16.0, 16.0.1 ή 16.0.2 του λογισμικού Intel Quartus® Prime και του Altera SDK για OpenCL, το OpenCL Memory Bank Divider χειρίζεται εσφαλμένα τις εκρήξεις μνήμης πέρα από τα όρια διευθύνσεων. Για να επιλύσετε αυτό το γνωστό πρόβλημα, προσθέστε μια γέφυρα διοχέτευσης με μέγεθος ριπής 1 και συνδέστε την κύρια θύρα Avalon ®Memory-Mapped (Avalon-MM) στη θύρα υποτελούς θύρας του OpenCL Memory Divider.
Σημείωμα:
Αυτό το γνωστό ζήτημα επιδιορθώθηκε στο λογισμικό Intel Quartus Prime και στο Intel FPGA SDK για OpenCL έκδοση 16.1.
Εικόνα 2. Μπλοκ διάγραμμα ενός συστήματος ετερογενούς μνήμης τριών τραπεζών με γέφυρα αγωγού 1.4. Τροποποίηση του προγράμματος Boardtest και του Κωδικού κεντρικού υπολογιστή για τη λύση ετερογενούς μνήμης σας
Χρησιμοποιήστε τον πυρήνα boardtest.cl που συνοδεύει το Intel FPGA SDK για OpenCL Custom Platform Toolkit για να ελέγξετε τη λειτουργικότητα και την απόδοση της προσαρμοσμένης πλατφόρμας σας.
Το πρόγραμμα boardtest είναι ένας πυρήνας OpenCL που σας επιτρέπει να δοκιμάσετε το εύρος ζώνης από κεντρικό υπολογιστή σε συσκευή, το εύρος ζώνης μνήμης και τη γενική λειτουργικότητα της προσαρμοσμένης πλατφόρμας σας.
- Περιηγηθείτε στο Κατάλογος /board/ custom_platform_toolkit/tests/boardtest.
- Ανοίξτε το boardtest.cl file σε ένα πρόγραμμα επεξεργασίας κειμένου και αντιστοιχίστε μια θέση προσωρινής αποθήκευσης σε κάθε όρισμα καθολικής μνήμης.
Για π.χample:
__κενό πυρήνα
mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
Εδώ, το uint *src εκχωρείται στη μνήμη DDR και το uint *dst εκχωρείται στη μνήμη QDR. Το board_spec.xml file καθορίζει τα χαρακτηριστικά και των δύο συστημάτων μνήμης. - Για να αξιοποιήσετε την ετερογενή λύση μνήμης στο σύστημά σας OpenCL, τροποποιήστε τον κώδικα κεντρικού υπολογιστή σας προσθέτοντας τη σημαία CL_MEM_HETEROGENEOUS_INTELFPGA στην κλήση clCreateBuffer.
Για π.χample:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Η Intel συνιστά ανεπιφύλακτα να ορίσετε τη θέση του buffer ως όρισμα πυρήνα πριν γράψετε το buffer. Όταν χρησιμοποιείτε μια μεμονωμένη καθολική μνήμη, μπορείτε να γράψετε τα buffer είτε πριν είτε μετά την ανάθεσή τους σε ένα όρισμα πυρήνα. Σε ετερογενή συστήματα μνήμης, ο κεντρικός υπολογιστής ορίζει τη θέση του buffer πριν γράψει το buffer. Με άλλα λόγια, ο κεντρικός υπολογιστής θα καλέσει τη συνάρτηση clSetKernelArgument πριν καλέσει τη συνάρτηση clEnqueueWriteBuffer.
Στον κώδικα κεντρικού υπολογιστή σας, καλέστε τις κλήσεις clCreateBuffer, clSetKernelArg και clEnqueueWriteBuffer με την ακόλουθη σειρά:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(πυρήνα[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(ουρά, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
Το ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file παρουσιάζει παρόμοια σειρά αυτών των κλήσεων συναρτήσεων. - Αφού τροποποιήσετε το boardtest.cl file και τον κώδικα κεντρικού υπολογιστή, μεταγλωττίστε τον κώδικα κεντρικού υπολογιστή και πυρήνα και επαληθεύστε τη λειτουργικότητά τους.
Κατά τη μεταγλώττιση του κώδικα του πυρήνα σας, πρέπει να απενεργοποιήσετε τη διασύνδεση ριπής όλων των συστημάτων μνήμης, συμπεριλαμβάνοντας το -no-interleaving επιλογή στην εντολή aoc.
Σχετικές Πληροφορίες
Απενεργοποίηση Burst-Interleaving of Global Memory (–χωρίς παρεμβολή )
1.5. Επαλήθευση της Λειτουργικότητας της Ετερογενούς Μνήμης σας Σύστημα
Για να διασφαλίσετε ότι το ετερογενές σύστημα μνήμης λειτουργεί σωστά, καταργήστε τη σήμανση CL_CONTEXT_COMPILER_MODE_INTELFPGA στον κώδικα κεντρικού υπολογιστή σας.
Σε συστήματα OpenCL με ομοιογενή μνήμη, πρέπει να επιλέξετε να ορίσετε τη σημαία CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 στον κώδικα κεντρικού υπολογιστή σας για να απενεργοποιήσετε την ανάγνωση του .aocx file και τον επαναπρογραμματισμό του FPGA. Η ρύθμιση της σημαίας CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 είναι χρήσιμη κατά τη δημιουργία της πλακέτας σας για να επαληθεύσετε τη λειτουργικότητα της προσαρμοσμένης πλατφόρμας σας χωρίς να σχεδιάσετε την κάτοψη και να καθορίσετε τις περιοχές LogicLock™.
Με ετερογενή συστήματα μνήμης, το περιβάλλον χρόνου εκτέλεσης πρέπει να διαβάζει τις θέσεις των buffer κάθε buffer, που περιγράφονται στο .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;
// υποθέστε ότι δεν υπάρχει rbf ή κατακερματισμός στο fpga.bin
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
Προσαρμοσμένες πλατφόρμες
Αποστολή σχολίων
Online έκδοση
Αποστολή σχολίων
ID: 683654
Έκδοση: 2016.12.13
Έγγραφα / Πόροι
![]() |
intel Δημιουργία ετερογενών συστημάτων μνήμης σε FPGA SDK για προσαρμοσμένες πλατφόρμες OpenCL [pdf] Οδηγίες Δημιουργία ετερογενών συστημάτων μνήμης σε FPGA SDK για προσαρμοσμένες πλατφόρμες OpenCL, Δημιουργία ετερογενών συστημάτων μνήμης, FPGA SDK για προσαρμοσμένες πλατφόρμες OpenCL |