ओपनसीएल कस्टम प्लेटफॉर्म के लिए एफपीजीए एसडीके में विषम मेमोरी सिस्टम बनाना
निर्देश
OpenCL कस्टम प्लेटफ़ॉर्म के लिए Intel® FPGA SDK में विषम मेमोरी सिस्टम बनाना
एक कस्टम प्लेटफ़ॉर्म में विषम मेमोरी का कार्यान्वयन अधिक बाहरी मेमोरी इंटरफ़ेस (EMIF) बैंडविड्थ के साथ-साथ बड़ी और तेज़ मेमोरी एक्सेस की अनुमति देता है। एक अनुकूलित के साथ विषम स्मृति पहुंच का संयोजन
OpenCL™(1)कर्नेल आपके OpenCL सिस्टम के लिए महत्वपूर्ण प्रदर्शन सुधार ला सकता है।
यह एप्लिकेशन नोट OpenCL(2) के लिए Intel® FPGA SDK के साथ उपयोग के लिए एक कस्टम प्लेटफ़ॉर्म में विषम मेमोरी सिस्टम बनाने पर मार्गदर्शन प्रदान करता है। इंटेल मानता है कि आप एक अनुभवी FPGA डिज़ाइनर हैं जो कस्टम प्लेटफ़ॉर्म विकसित कर रहे हैं जिसमें विषम मेमोरी सिस्टम शामिल हैं।
विषम मेमोरी सिस्टम बनाने से पहले, नीचे निर्दिष्ट ओपनसीएल दस्तावेजों के लिए इंटेल एफपीजीए एसडीके से खुद को परिचित करें।
संबंधित जानकारी
- ओपनसीएल प्रोग्रामिंग गाइड के लिए इंटेल एफपीजीए एसडीके
- ओपनसीएल सर्वोत्तम अभ्यास गाइड के लिए इंटेल एफपीजीए एसडीके
- ओपनसीएल एरिया 10 जीएक्स एफपीजीए डेवलपमेंट किट संदर्भ प्लेटफार्म पोर्टिंग गाइड के लिए इंटेल एफपीजीए एसडीके
1.1. एफपीजीए बोर्ड और ईएमआईएफ इंटरफेस की कार्यक्षमता का सत्यापन
प्रत्येक मेमोरी इंटरफ़ेस को स्वतंत्र रूप से सत्यापित करें और फिर वैश्विक मेमोरी का उपयोग करके अपने कस्टम प्लेटफ़ॉर्म को इंस्टेंट करें।
- हार्डवेयर डिज़ाइन का उपयोग करके प्रत्येक मेमोरी इंटरफ़ेस को सत्यापित करें जो प्रत्येक इंटरफ़ेस की गति और स्थिरता का परीक्षण कर सकता है।
- वैश्विक मेमोरी का उपयोग करके अपने कस्टम प्लेटफ़ॉर्म को इंस्टेंट करें।
- उदाहरणार्थampले, यदि आपके पास तीन डीडीआर इंटरफेस हैं, तो उनमें से एक को विषम मेमोरी के रूप में मैप किया जाना चाहिए। इस मामले में, प्रत्येक डीडीआर इंटरफ़ेस के साथ ओपनसीएल स्टैक की कार्यक्षमता को स्वतंत्र रूप से सत्यापित करें।
OpenCL और OpenCL लोगो Apple Inc. के ट्रेडमार्क हैं जिनका उपयोग Khronos Group™ की अनुमति से किया जाता है। - ओपनसीएल के लिए इंटेल एफपीजीए एसडीके एक प्रकाशित ख्रोनोस विशिष्टता पर आधारित है, और ख्रोनोस अनुरूपता परीक्षण प्रक्रिया को पारित कर चुका है। वर्तमान अनुरूपता स्थिति यहां पाई जा सकती है www.khronos.org/conformance.
- उदाहरणार्थampले, यदि आपके पास तीन डीडीआर इंटरफेस हैं, तो उनमें से एक को विषम मेमोरी के रूप में मैप किया जाना चाहिए। इस मामले में, प्रत्येक डीडीआर इंटरफ़ेस के साथ ओपनसीएल स्टैक की कार्यक्षमता को स्वतंत्र रूप से सत्यापित करें।
इंटेल कॉर्पोरेशन। सर्वाधिकार सुरक्षित। Intel, Intel लोगो और अन्य Intel चिह्न Intel Corporation या उसकी सहायक कंपनियों के ट्रेडमार्क हैं। Intel अपने FPGA और सेमीकंडक्टर उत्पादों के प्रदर्शन को Intel की मानक वारंटी के अनुसार वर्तमान विनिर्देशों के अनुसार वारंट करता है, लेकिन बिना किसी सूचना के किसी भी समय किसी भी उत्पाद और सेवाओं में परिवर्तन करने का अधिकार सुरक्षित रखता है। इंटेल यहां वर्णित किसी भी जानकारी, उत्पाद या सेवा के आवेदन या उपयोग से उत्पन्न होने वाली कोई जिम्मेदारी या दायित्व नहीं लेता है, सिवाय इसके कि इंटेल द्वारा लिखित रूप से सहमति व्यक्त की गई है। Intel ग्राहकों को सलाह दी जाती है कि किसी भी प्रकाशित जानकारी पर भरोसा करने से पहले और उत्पादों या सेवाओं के लिए ऑर्डर देने से पहले डिवाइस विनिर्देशों का नवीनतम संस्करण प्राप्त करें। *अन्य नामों और ब्रांडों पर दूसरों की संपत्ति के रूप में दावा किया जा सकता है।
आईएसओ 9001:2015 पंजीकृत
वैकल्पिक रूप से, यदि आपके पास दो डीडीआर इंटरफेस और एक क्वाड डेटा रेट (क्यूडीआर) इंटरफेस है, तो दो डीडीआर इंटरफेस और क्यूडीआर इंटरफेस के ओपनसीएल स्टैक की कार्यक्षमता को स्वतंत्र रूप से सत्यापित करें।
इंटेल अनुशंसा करता है कि आप अपने मेमोरी इंटरफेस का परीक्षण करने के लिए पीसीआई एक्सप्रेस® - (पीसीआईई® -) या ईएमआईएफ-अनन्य डिज़ाइन का उपयोग करें। यह सत्यापित करने के बाद कि प्रत्येक मेमोरी इंटरफ़ेस कार्यात्मक है और आपका ओपनसीएल डिज़ाइन मेमोरी इंटरफेस के सबसेट के साथ काम करता है, आगे बढ़ें
एक पूरी तरह कार्यात्मक विषम मेमोरी सिस्टम बनाने के लिए।
1.2. बोर्ड_spec.xml को संशोधित करना File
बोर्ड_spec.xml को संशोधित करें file ओपनसीएल कर्नेल के लिए उपलब्ध विषम मेमोरी सिस्टम के प्रकार निर्दिष्ट करने के लिए।
कर्नेल संकलन के दौरान, ओपनसीएल ऑफ़लाइन कंपाइलर के लिए इंटेल एफपीजीए एसडीके आपके द्वारा निर्दिष्ट बफर स्थान तर्क के आधार पर मेमोरी में कर्नेल तर्क निर्दिष्ट करता है।
1. बोर्ड_spec.xml पर ब्राउज़ करें file आपके कस्टम प्लेटफ़ॉर्म की हार्डवेयर निर्देशिका में।
2. बोर्ड_स्पेक.एक्सएमएल खोलें file एक टेक्स्ट एडिटर में और तदनुसार XML को संशोधित करें।
उदाहरणार्थampले, यदि आपके हार्डवेयर सिस्टम में डिफ़ॉल्ट ग्लोबलमेमोरी के रूप में दो डीडीआर मेमोरी और दो क्यूडीआर बैंक हैं जिन्हें आप विषम मेमोरी के रूप में मॉडल करते हैं, तो बोर्ड_स्पेक.एक्सएमएल के मेमोरी अनुभागों को संशोधित करें file निम्नलिखित के समान होना:
1.3. Qsys में एकाधिक मेमोरी डिवाइडर स्थापित करना
वर्तमान में, Qsys डिज़ाइन में ओपनसीएल मेमोरी बैंक डिवाइडर गैर-पावर-ऑफ़-2 मेमोरी बैंकों का समर्थन नहीं करता है, जो विशिष्ट कॉन्फ़िगरेशन के लिए कोई सीमा नहीं है। हालाँकि, ऐसे परिदृश्य हैं जहां गैर-पावर-ऑफ़-2 मेमोरी इंटरफ़ेस आवश्यक हैं। गैर-पावर-ऑफ-2 संख्या वाले मेमोरी इंटरफेस को समायोजित करने के लिए, गैर-पावर-ऑफ-2 संख्या वाले मेमोरी बैंकों के साथ विषम मेमोरी सिस्टम बनाने के लिए एकाधिक ओपनसीएल मेमोरी बैंक डिवाइडर का उपयोग करें। जब आपके पास एक वास्तविक विषम मेमोरी सिस्टम हो तो आपको कई ओपनसीएल मेमोरी बैंक डिवाइडर बनाने होंगे। एक DDR मेमोरी इंटरफ़ेस और एक QDR मेमोरी इंटरफ़ेस वाले सिस्टम पर विचार करें। चूँकि दोनों बैंकों की मेमोरी टोपोलॉजी अलग-अलग हैं, इसलिए आप उन्हें एक ही वैश्विक मेमोरी के अंतर्गत संयोजित नहीं कर सकते।
चित्र 1. तीन-बैंक विषम मेमोरी सिस्टम का ब्लॉक आरेख
इस विषम मेमोरी सिस्टम में दो डीडीआर मेमोरी इंटरफेस और एक क्यूडीआर मेमोरी इंटरफेस शामिल हैं।यदि आप Intel Quartus® Prime सॉफ़्टवेयर के संस्करण 16.0, 16.0.1, या 16.0.2 और OpenCL के लिए Altera SDK का उपयोग कर रहे हैं, तो OpenCL मेमोरी बैंक डिवाइडर गलत तरीके से पता सीमाओं के पार मेमोरी बर्स्ट को संभालता है। इस ज्ञात समस्या को हल करने के लिए, 1 के बर्स्ट आकार के साथ एक पाइपलाइन ब्रिज जोड़ें और इसके एवलॉन®मेमोरी-मैप्ड (एवलॉन-एमएम) मास्टर को ओपनसीएल मेमोरी बैंक डिवाइडर के स्लेव पोर्ट से कनेक्ट करें।
टिप्पणी:
यह ज्ञात समस्या Intel Quartus Prime सॉफ़्टवेयर और OpenCL संस्करण 16.1 के लिए Intel FPGA SDK में ठीक कर दी गई है।
चित्र 2. एक पाइपलाइन ब्रिज के साथ तीन-बैंक विषम मेमोरी सिस्टम का ब्लॉक आरेख 1.4. आपके विषम मेमोरी समाधान के लिए बोर्डटेस्ट प्रोग्राम और होस्ट कोड को संशोधित करना
अपने कस्टम प्लेटफ़ॉर्म की कार्यक्षमता और प्रदर्शन का परीक्षण करने के लिए ओपनसीएल कस्टम प्लेटफ़ॉर्म टूलकिट के लिए इंटेल एफपीजीए एसडीके के साथ आने वाले बोर्डटेस्ट.सीएल कर्नेल का उपयोग करें।
बोर्डटेस्ट प्रोग्राम एक ओपनसीएल कर्नेल है जो आपको होस्ट-टू-डिवाइस बैंडविड्थ, मेमोरी बैंडविड्थ और आपके कस्टम प्लेटफ़ॉर्म की सामान्य कार्यक्षमता का परीक्षण करने की अनुमति देता है।
- के लिए ब्राउज़ करें /बोर्ड/कस्टम_प्लेटफ़ॉर्म_टूलकिट/परीक्षण/बोर्डटेस्ट निर्देशिका।
- बोर्डटेस्ट.सीएल खोलें file एक टेक्स्ट एडिटर में और प्रत्येक वैश्विक मेमोरी तर्क के लिए एक बफर स्थान निर्दिष्ट करें।
उदाहरणार्थampपर:
__कर्नेल शून्य
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 मेमोरी को सौंपा गया है। बोर्ड_spec.xml file दोनों मेमोरी सिस्टम की विशेषताओं को निर्दिष्ट करता है। - अपने ओपनसीएल सिस्टम में अपने विषम मेमोरी समाधान का लाभ उठाने के लिए, अपने clCreateBuffer कॉल में CL_MEM_HETEROGENEOUS_INTELFPGA ध्वज जोड़कर अपने होस्ट कोड को संशोधित करें।
उदाहरणार्थampपर:
ddatain = clCreateBuffer(संदर्भ, CL_MEM_READ_WRITE | मेमफ्लैग
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(अहस्ताक्षरित) * वेक्टरआकार, NULL, &status);
इंटेल दृढ़ता से अनुशंसा करता है कि आप बफ़र लिखने से पहले बफ़र स्थान को कर्नेल तर्क के रूप में सेट करें। एकल वैश्विक मेमोरी का उपयोग करते समय, आप बफ़र्स को कर्नेल तर्क को निर्दिष्ट करने से पहले या बाद में लिख सकते हैं। विषम मेमोरी सिस्टम में, होस्ट बफ़र लिखने से पहले बफ़र स्थान सेट करता है। दूसरे शब्दों में, होस्ट clEnqueueWriteBuffer फ़ंक्शन को कॉल करने से पहले clSetKernelArgument फ़ंक्शन को कॉल करेगा।
अपने होस्ट कोड में, निम्नलिखित क्रम में clCreateBuffer, clSetKernelArg, और clEnqueueWriteBuffer कॉल शुरू करें:
ddatain = clCreateBuffer(संदर्भ, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(अहस्ताक्षरित) * वेक्टरआकार, NULL, &status);
... स्थिति = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
... स्थिति = clEnqueueWriteBuffer (कतार, ddatain, CL_FALSE, 0, sizeof (अहस्ताक्षरित) * वेक्टर आकार, hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file इन फ़ंक्शन कॉलों का एक समान क्रम प्रस्तुत करता है। - आपके द्वाराboardtest.cl को संशोधित करने के बाद file और होस्ट कोड, होस्ट और कर्नेल कोड संकलित करें और उनकी कार्यक्षमता सत्यापित करें।
अपने कर्नेल कोड को संकलित करते समय, आपको -नो-इंटरलीविंग को शामिल करके सभी मेमोरी सिस्टम के बर्स्ट-इंटरलीविंग को अक्षम करना होगा एओसी कमांड में विकल्प।
संबंधित जानकारी
ग्लोबल मेमोरी के बर्स्ट-इंटरलीविंग को अक्षम करना (-नो-इंटरलीविंग)। )
1.5. आपकी विषम स्मृति की कार्यक्षमता का सत्यापन प्रणाली
यह सुनिश्चित करने के लिए कि विषम मेमोरी सिस्टम ठीक से काम करता है, अपने होस्ट कोड में CL_CONTEXT_COMPILER_MODE_INTELFPGA ध्वज को अनसेट करें।
सजातीय मेमोरी वाले ओपनसीएल सिस्टम में, आपको .aocx की रीडिंग को अक्षम करने के लिए अपने होस्ट कोड में CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 फ़्लैग सेट करने का विकल्प चुनना होगा। file और FPGA की रीप्रोग्रामिंग। फ़्लोरप्लान डिज़ाइन किए बिना और LogicLock™ क्षेत्रों को निर्दिष्ट किए बिना अपने कस्टम प्लेटफ़ॉर्म की कार्यक्षमता को सत्यापित करने के लिए अपने बोर्ड को इंस्टेंट करते समय CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 फ़्लैग सेट करना उपयोगी होता है।
विषम मेमोरी सिस्टम के साथ, रनटाइम वातावरण को .aocx में वर्णित प्रत्येक बफर के बफर स्थानों को पढ़ना चाहिए file, मेमोरी सिस्टम की कार्यक्षमता को सत्यापित करने के लिए। हालाँकि, आप बोर्ड डिज़ाइन की अंतिम विशेषताओं को लागू किए बिना अपने कस्टम प्लेटफ़ॉर्म की कार्यक्षमता को सत्यापित करना चाह सकते हैं, जैसे फ़्लोरप्लान डिज़ाइन करना और लॉजिकलॉक क्षेत्रों को निर्दिष्ट करना।
- सत्यापित करें कि CL_CONTEXT_COMPILER_MODE_INTELFPGA ध्वज आपके होस्ट कोड में सेट नहीं है।
- बोर्ड पर ब्राउज़ करें/ आपके कस्टम प्लेटफ़ॉर्म की /source/host/mmd निर्देशिका।
- Acl_pcie_device.cpp मेमोरी-मैप्ड डिवाइस (MMD) खोलें file एक पाठ संपादक में.
- Acl_pcie_device.cpp में रिप्रोग्राम फ़ंक्शन को संशोधित करें file रिटर्न 0 जोड़कर; पंक्ति, जैसा कि नीचे दिखाया गया है:
int ACL_PCIE_DEVICE::रीप्रोग्राम(शून्य *डेटा, साइज_टी डेटा_साइज)
{
0 लौटाएं;
// विफलता मान लें
int reprogram_failed = 1;
// मान लें कि fpga.bin में कोई आरबीएफ या हैश नहीं है
int rbf_or_hash_not_provided = 1;
// मान लें कि आधार और आयात संशोधन हैश मेल नहीं खाते हैं
int हैश_मिसमैच = 1;
…
} - Acl_pcie_device.cpp को पुनः संकलित करें file.
- सत्यापित करें कि CL_CONTEXT_COMPILER_MODE_INTELFPGA ध्वज अनसेट रहता है।
ध्यान: आपके द्वारा रिटर्न 0 जोड़ने के बाद; रिप्रोग्राम फ़ंक्शन के लिए और एमएमडी को पुन: संकलित करें file, रनटाइम वातावरण .aocx पढ़ेगा file और बफ़र स्थान निर्दिष्ट करें लेकिन FPGA को पुन: प्रोग्राम नहीं करेंगे। आपको मैन्युअल रूप से FPGA छवि का .aocx से मिलान करना होगा file. इस व्यवहार को उलटने के लिए, रिटर्न 0 हटाएं; रिप्रोग्राम फ़ंक्शन से और एमएमडी को पुन: संकलित करें 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 में पुनः ब्रांडेड किया गया। |
OpenCL के लिए Intel® FPGA SDK में विषम मेमोरी सिस्टम बनाना
कस्टम प्लेटफार्म
प्रतिक्रिया भेजें
ऑनलाइन संस्करण
प्रतिक्रिया भेजें
आईडी: 683654
संस्करण: 2016.12.13
दस्तावेज़ / संसाधन
![]() |
इंटेल ओपनसीएल कस्टम प्लेटफॉर्म के लिए एफपीजीए एसडीके में विषम मेमोरी सिस्टम बना रहा है [पीडीएफ] निर्देश ओपनसीएल कस्टम प्लेटफॉर्म के लिए एफपीजीए एसडीके में विषम मेमोरी सिस्टम बनाना, ओपनसीएल कस्टम प्लेटफॉर्म के लिए एफपीजीए एसडीके में विषम मेमोरी सिस्टम बनाना |