intel - लोगोOpenCL अनुकूलन प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै
निर्देशनहरू

OpenCL कस्टम प्लेटफर्महरूको लागि Intel® FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै

अनुकूलन प्लेटफर्ममा विषम मेमोरीको कार्यान्वयनले थप बाह्य मेमोरी इन्टरफेस (EMIF) ब्यान्डविथका साथै ठूलो र छिटो मेमोरी पहुँचहरूको लागि अनुमति दिन्छ। एक अनुकूलित संग heterogenous मेमोरी पहुँच को संयोजन
OpenCL ™(1) कर्नेलले तपाईको OpenCL प्रणालीको लागि महत्त्वपूर्ण कार्यसम्पादन सुधार गर्न सक्छ।
यो एप्लिकेसन नोटले OpenCL(2) को लागि Intel® FPGA SDK सँग प्रयोगको लागि अनुकूलन प्लेटफर्ममा विषम मेमोरी प्रणालीहरू सिर्जना गर्न मार्गदर्शन प्रदान गर्दछ। Intel ले मान्दछ कि तपाईं एक अनुभवी FPGA डिजाइनर हुनुहुन्छ जसले विषम मेमोरी प्रणालीहरू समावेश गर्ने अनुकूलन प्लेटफर्महरू विकास गर्दै हुनुहुन्छ।
विषम मेमोरी प्रणालीहरू सिर्जना गर्नु अघि, तल निर्दिष्ट गरिएका OpenCL कागजातहरूको लागि Intel FPGA SDK सँग परिचित हुनुहोस्।
सम्बन्धित जानकारी

  • OpenCL प्रोग्रामिङ गाइडको लागि Intel FPGA SDK
  • Intel FPGA SDK OpenCL उत्कृष्ट अभ्यास गाइडका लागि
  • OpenCL Arria 10 GX FPGA विकास किट सन्दर्भ प्लेटफर्म पोर्टिङ गाइडको लागि Intel FPGA SDK

१.१। FPGA बोर्ड र EMIF इन्टरफेस को कार्यक्षमता प्रमाणीकरण

प्रत्येक मेमोरी इन्टरफेस स्वतन्त्र रूपमा प्रमाणित गर्नुहोस् र त्यसपछि ग्लोबल मेमोरी प्रयोग गरेर आफ्नो अनुकूलन प्लेटफर्म इन्स्ट्यान्ट गर्नुहोस्।

  1. प्रत्येक इन्टरफेसको गति र स्थिरता परीक्षण गर्न सक्ने हार्डवेयर डिजाइनहरू प्रयोग गरेर प्रत्येक मेमोरी इन्टरफेस प्रमाणित गर्नुहोस्।
  2. ग्लोबल मेमोरी प्रयोग गरेर आफ्नो अनुकूलन प्लेटफर्म इन्स्ट्यान्टिएट गर्नुहोस्।
    1. पूर्वका लागिample, यदि तपाईंसँग तीनवटा DDR इन्टरफेसहरू छन् भने, तिनीहरूमध्ये एउटा विषम मेमोरीको रूपमा म्याप गरिएको हुनुपर्छ। यस अवस्थामा, स्वतन्त्र रूपमा प्रत्येक DDR इन्टरफेससँग OpenCL स्ट्याकको कार्यक्षमता प्रमाणित गर्नुहोस्।
      OpenCL र OpenCL लोगो Khronos Group™ को अनुमतिद्वारा प्रयोग गरिएको Apple Inc. को ट्रेडमार्कहरू हुन्।
    2.  OpenCL को लागि Intel FPGA SDK प्रकाशित Khronos विशिष्टतामा आधारित छ, र Khronos Conformance परीक्षण प्रक्रिया पास गरेको छ। हालको अनुकूलता स्थिति मा फेला पार्न सकिन्छ www.khronos.org/conformance।

इंटेल कर्पोरेशन। सबै अधिकार सुरक्षित। 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 डिजाइनले मेमोरी इन्टरफेसको सबसेटसँग काम गर्दछ, अगाडि बढ्नुहोस्।
एक पूर्ण कार्यात्मक विषम मेमोरी प्रणाली सिर्जना गर्न। 
१.२। board_spec.xml परिमार्जन गर्दै File
board_spec.xml परिमार्जन गर्नुहोस् file OpenCL कर्नेलहरूमा उपलब्ध विषम मेमोरी प्रणालीहरूको प्रकारहरू निर्दिष्ट गर्न।
कर्नेल संकलनको क्रममा, OpenCL अफलाइन कम्पाइलरका लागि Intel FPGA SDK ले तपाईंले निर्दिष्ट गर्नुभएको बफर स्थान तर्कमा आधारित मेमोरीमा कर्नेल आर्गुमेन्टहरू असाइन गर्दछ।
1. board_spec.xml मा ब्राउज गर्नुहोस् file तपाईको कस्टम प्लेटफर्मको हार्डवेयर डाइरेक्टरीमा।
2. board_spec.xml खोल्नुहोस् file पाठ सम्पादकमा र तदनुसार XML परिमार्जन गर्नुहोस्।
पूर्वका लागिample, यदि तपाइँको हार्डवेयर प्रणालीमा पूर्वनिर्धारित ग्लोबल मेमोरीको रूपमा दुई DDR मेमोरीहरू र दुई QDR बैंकहरू छन् जुन तपाईंले विषम मेमोरीको रूपमा मोडेल गर्नुहुन्छ, board_spec.xml को मेमोरी खण्डहरू परिमार्जन गर्नुहोस्। file निम्नसँग मिल्दोजुल्दो:
















१.३। Qsys मा बहु मेमोरी डिभाइडरहरू सेटअप गर्दै
हाल, Qsys डिजाइनमा OpenCL मेमोरी बैंक डिभाइडरले मेमोरी बैंकहरूको गैर-पावर-अफ-2 नम्बरहरूलाई समर्थन गर्दैन, जुन सामान्य कन्फिगरेसनहरूको लागि सीमितता होइन। यद्यपि, त्यहाँ परिदृश्यहरू छन् जहाँ मेमोरी इन्टरफेसहरूको नन-पावर-अफ-2 नम्बर आवश्यक छ। मेमोरी इन्टरफेसहरूको नन-पावर-अफ-2 नम्बरहरू समायोजन गर्न, बहुविध ओपनसीएल मेमोरी बैंक डिभाइडरहरू प्रयोग गर्नुहोस् जुन मेमोरी बैंकहरूको गैर-पावर-अफ-2 संख्याको साथ विषम मेमोरी प्रणालीहरू सिर्जना गर्नुहोस्। तपाईले धेरै ओपनसीएल मेमोरी बैंक डिभाइडरहरू सिर्जना गर्नुपर्छ जब तपाईसँग साँचो विषम मेमोरी प्रणाली हुन्छ। एउटा DDR मेमोरी इन्टरफेस र एउटा QDR मेमोरी इन्टरफेस भएको प्रणालीलाई विचार गर्नुहोस्। किनभने दुई बैंकहरूको मेमोरी टोपोलोजीहरू फरक छन्, तपाईंले तिनीहरूलाई एकल ग्लोबल मेमोरी अन्तर्गत जोड्न सक्नुहुन्न।
चित्र 1. तीन-बैंक विषम मेमोरी प्रणालीको ब्लक रेखाचित्र
यो विषम मेमोरी प्रणालीले दुई DDR मेमोरी इन्टरफेस र एउटा QDR मेमोरी इन्टरफेस समावेश गर्दछ।Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै - चित्र 1यदि तपाइँ Intel Quartus® प्राइम सफ्टवेयरको संस्करण 16.0, 16.0.1, वा 16.0.2 र OpenCL को लागि Altera SDK प्रयोग गर्दै हुनुहुन्छ भने, OpenCL मेमोरी बैंक डिभाइडरले ठेगाना सीमाहरूमा मेमोरी बर्स्टहरूलाई गलत रूपमा ह्यान्डल गर्छ। यो ज्ञात समस्या समाधान गर्न, 1 को बर्स्ट साइज भएको पाइपलाइन ब्रिज थप्नुहोस् र यसको Avalon ®Memory-Mapped (Avalon-MM) मास्टरलाई OpenCL मेमोरी बैंक डिभाइडरको दास पोर्टमा जडान गर्नुहोस्।
नोट:
यो ज्ञात मुद्दा Intel Quartus प्राइम सफ्टवेयर र OpenCL संस्करण 16.1 को लागि Intel FPGA SDK मा फिक्स गरिएको छ।
चित्र २. पाइपलाइन ब्रिजको साथ तीन-बैंक हेटेरोजेनियस मेमोरी प्रणालीको ब्लक रेखाचित्र Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै - चित्र 2१.४। तपाईंको विषम मेमोरी समाधानको लागि बोर्डटेस्ट कार्यक्रम र होस्ट कोड परिमार्जन गर्दै
आफ्नो अनुकूलन प्लेटफर्मको कार्यक्षमता र कार्यसम्पादन परीक्षण गर्न OpenCL Custom Platform Toolkit को लागि Intel FPGA SDK सँग आउने boardtest.cl कर्नेल प्रयोग गर्नुहोस्।
बोर्डटेस्ट कार्यक्रम एक OpenCL कर्नेल हो जसले तपाईंलाई होस्ट-टू-डिभाइस ब्यान्डविथ, मेमोरी ब्यान्डविथ, र तपाईंको कस्टम प्लेटफर्मको सामान्य कार्यक्षमता परीक्षण गर्न अनुमति दिन्छ।

  1. मा ब्राउज गर्नुहोस् /board/ custom_platform_toolkit/tests/boardtest निर्देशिका।
  2. 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 दुबै मेमोरी प्रणालीका विशेषताहरू निर्दिष्ट गर्दछ।
  3. तपाईंको OpenCL प्रणालीमा तपाईंको विषम मेमोरी समाधानको लाभ उठाउनको लागि, तपाईंको clCreateBuffer कलमा CL_MEM_HETEROGENEOUS_INTELFPGA फ्ल्याग थपेर तपाईंको होस्ट कोड परिमार्जन गर्नुहोस्।
    पूर्वका लागिampLe:
    ddatain = clCreateBuffer(सन्दर्भ, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, साइजको(अहस्ताक्षरित) * भेक्टर साइज, NULL, &status);
    Intel दृढताका साथ सिफारिस गर्दछ कि तपाइँ बफर लेख्नु अघि कर्नेल तर्कको रूपमा बफर स्थान सेट गर्नुहोस्। एकल ग्लोबल मेमोरी प्रयोग गर्दा, तपाइँ बफरहरूलाई कर्नेल तर्कमा नियुक्त गर्नु अघि वा पछि लेख्न सक्नुहुन्छ। विषम मेमोरी प्रणालीहरूमा, होस्टले बफर लेख्नु अघि बफर स्थान सेट गर्दछ। अर्को शब्दमा, होस्टले clEnqueueWriteBuffer प्रकार्यलाई कल गर्नु अघि clSetKernelArgument प्रकार्यलाई कल गर्नेछ।
    तपाईंको होस्ट कोडमा, निम्न क्रममा clCreateBuffer, clSetKernelArg, र clEnqueueWriteBuffer कलहरू बोलाउनुहोस्:
    ddatain = clCreateBuffer(सन्दर्भ, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, साइजको(अहस्ताक्षरित) * भेक्टर साइज, NULL, &status);
    … स्थिति = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … स्थिति = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file यी प्रकार्य कलहरूको समान क्रम प्रस्तुत गर्दछ।
  4.  तपाईंले boardtest.cl परिमार्जन गरेपछि file र होस्ट कोड, होस्ट र कर्नेल कोड कम्पाइल गर्नुहोस् र तिनीहरूको कार्यक्षमता प्रमाणित गर्नुहोस्।
    तपाईंको कर्नेल कोड कम्पाइल गर्दा, तपाईंले -no-interleaving समावेश गरेर सबै मेमोरी प्रणालीहरूको burst-interleaving असक्षम गर्नुपर्छ। aoc आदेशमा विकल्प।

सम्बन्धित जानकारी
ग्लोबल मेमोरीको बर्स्ट-इन्टरलिभिङ असक्षम गर्दै (-नो-इन्टरलिभिङ )

१.५ तपाईंको विषम मेमोरीको कार्यक्षमता प्रमाणित गर्दै प्रणाली
विषम मेमोरी प्रणालीले ठीकसँग काम गर्छ भनी सुनिश्चित गर्न, तपाईंको होस्ट कोडमा CL_CONTEXT_COMPILER_MODE_INTELFPGA फ्ल्याग अनसेट गर्नुहोस्।
एकरूप मेमोरी भएका OpenCL प्रणालीहरूमा, तपाईंले .aocx को पढाइ असक्षम पार्न आफ्नो होस्ट कोडमा CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 फ्ल्याग सेट गर्न विकल्प दिनुपर्छ। file र FPGA को पुन: प्रोग्रामिंग। CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 फ्ल्याग सेट गर्नाले फ्लोरप्लान डिजाइन नगरी र LogicLock™ क्षेत्रहरू निर्दिष्ट नगरी तपाईंको अनुकूलन प्लेटफर्मको कार्यक्षमता प्रमाणित गर्न तपाईंको बोर्डलाई इन्स्ट्यान्टियट गर्दा उपयोगी हुन्छ।
विषम मेमोरी प्रणालीहरूसँग, रनटाइम वातावरणले प्रत्येक बफरको बफर स्थानहरू पढ्नुपर्छ, .aocx मा वर्णन गरिएको। file, मेमोरी प्रणालीको कार्यक्षमता प्रमाणित गर्न। यद्यपि, तपाइँ बोर्ड डिजाइनको अन्तिम विशेषताहरू कार्यान्वयन नगरीकन आफ्नो अनुकूलन प्लेटफर्मको कार्यक्षमता प्रमाणित गर्न चाहन सक्नुहुन्छ, जस्तै फ्लोरप्लान डिजाइन गर्ने र LogicLock क्षेत्रहरू निर्दिष्ट गर्ने।

  1. प्रमाणित गर्नुहोस् कि CL_CONTEXT_COMPILER_MODE_INTELFPGA झण्डा तपाईंको होस्ट कोडमा सेट गरिएको छैन।
  2. बोर्डमा ब्राउज गर्नुहोस्/ /स्रोत/होस्ट/एमएमडी तपाईको कस्टम प्लेटफर्मको डाइरेक्टरी।
  3. acl_pcie_device.cpp मेमोरी म्याप गरिएको यन्त्र (MMD) खोल्नुहोस् file पाठ सम्पादकमा।
  4.  acl_pcie_device.cpp मा reprogram प्रकार्य परिमार्जन गर्नुहोस् file रिटर्न ० थपेर; रेखा, तल देखाइएको रूपमा:
    int ACL_PCIE_DEVICE::रिप्रोग्राम (void *डेटा, साइज_t डाटा_साइज)
    {
    फिर्ता 0;
    // असफलता मान्नुहोस्
    int reprogram_failed = 1;
    // fpga.bin मा कुनै rbf वा ह्यास छैन मान्नुहोस्
    int rbf_or_hash_not_provided = 1;
    // आधार र आयात संशोधन ह्यासहरू मेल खाँदैन मान्नुहोस्
    int hash_mismatch = 1;

    }
  5. acl_pcie_device.cpp पुन: कम्पाइल गर्नुहोस् file.
  6. प्रमाणित गर्नुहोस् कि CL_CONTEXT_COMPILER_MODE_INTELFPGA झण्डा सेट गरिएको छैन।
    ध्यान: तपाईंले फिर्ता 0 थपे पछि; पुन: प्रोग्राम प्रकार्यमा र MMD पुन: कम्पाइल गर्नुहोस् file, रनटाइम वातावरणले .aocx पढ्नेछ file र बफर स्थानहरू तोक्नुहोस् तर FPGA लाई पुन: प्रोग्राम गर्दैन। तपाईंले म्यानुअल रूपमा FPGA छविलाई .aocx सँग मिल्नुपर्छ file। यो व्यवहार उल्टाउन, रिटर्न ० हटाउनुहोस्; रिप्रोग्राम प्रकार्यबाट र MMD पुन: कम्पाइल गर्नुहोस् file.

1.6. कागजात संशोधन इतिहास

मिति संस्करण परिवर्तनहरू
डिसेम्बर-२० 2017.12.01 • CL_MEM_HETEROGENEOUS_ALTERA लाई CL_MEM_HETEROGENEOUS_INTELFPGA मा पुन: ब्रान्ड गरिएको।
डिसेम्बर-२० 2016.12.13 • CL_CONTEXT_COMPILER_MODE_ALTERA लाई CL_CONTEXT_COMPILER_MODE_INTELFPGA मा पुन: ब्रान्ड गरियो।

intel - लोगोOpenCL को लागि Intel® FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै
अनुकूलन प्लेटफार्महरू
Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै - आइकन १ प्रतिक्रिया पठाउनुहोस्
Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै - आइकन अनलाइन संस्करण
Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै - आइकन १ प्रतिक्रिया पठाउनुहोस्
ID: 683654
संस्करण: 2016.12.13

कागजातहरू / स्रोतहरू

Intel OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै [pdf] निर्देशनहरू
OpenCL कस्टम प्लेटफर्महरूको लागि FPGA SDK मा विषम मेमोरी प्रणालीहरू सिर्जना गर्दै, Heterogeneous मेमोरी प्रणालीहरू सिर्जना गर्दै, OpenCL अनुकूलन प्लेटफर्महरूको लागि FPGA SDK

सन्दर्भहरू

एक टिप्पणी छोड्नुहोस्

तपाईंको इमेल ठेगाना प्रकाशित गरिने छैन। आवश्यक क्षेत्रहरू चिन्ह लगाइएका छन् *