Տարասեռ հիշողության համակարգերի ստեղծում FPGA SDK-ում OpenCL մաքսային հարթակների համար
Հրահանգներ
Intel® FPGA SDK-ում տարասեռ հիշողության համակարգերի ստեղծում OpenCL հատուկ հարթակների համար
Անհատական հարթակում տարասեռ հիշողության ներդրումը թույլ է տալիս ավելի շատ արտաքին հիշողության միջերեսի (EMIF) թողունակություն, ինչպես նաև ավելի մեծ և արագ հիշողության հասանելիություն: Հետերոգեն հիշողության հասանելիության համադրություն օպտիմիզացվածի հետ
OpenCL ™(1) միջուկը կարող է հանգեցնել ձեր OpenCL համակարգի արդյունավետության զգալի բարելավման:
Այս հավելվածի նշումը ուղեցույց է տրամադրում անհատական պլատֆորմում տարասեռ հիշողության համակարգեր ստեղծելու համար՝ OpenCL(2) Intel® FPGA SDK-ի հետ օգտագործելու համար: Intel-ը ենթադրում է, որ դուք փորձառու FPGA դիզայներ եք, ով մշակում է անհատական հարթակներ, որոնք պարունակում են տարասեռ հիշողության համակարգեր:
Նախքան տարասեռ հիշողության համակարգեր ստեղծելը, ծանոթացեք ստորև նշված OpenCL փաստաթղթերի Intel FPGA SDK-ին:
Առնչվող տեղեկատվություն
- Intel FPGA SDK OpenCL ծրագրավորման ուղեցույցի համար
- Intel FPGA SDK OpenCL-ի լավագույն փորձի ուղեցույց
- Intel FPGA SDK OpenCL Arria 10 GX FPGA-ի զարգացման հավաքածուի տեղեկատու հարթակի տեղափոխման ուղեցույց
1.1. FPGA խորհրդի և EMIF միջերեսների ֆունկցիոնալության ստուգում
Ստուգեք յուրաքանչյուր հիշողության ինտերֆեյս ինքնուրույն և այնուհետև ստեղծեք ձեր անհատական հարթակը՝ օգտագործելով գլոբալ հիշողությունը:
- Ստուգեք յուրաքանչյուր հիշողության ինտերֆեյս՝ օգտագործելով ապարատային դիզայն, որը կարող է ստուգել յուրաքանչյուր ինտերֆեյսի արագությունն ու կայունությունը:
- Ստեղծեք ձեր անհատական հարթակը, օգտագործելով գլոբալ հիշողությունը:
- Նախample, եթե ունեք երեք DDR ինտերֆեյս, դրանցից մեկը պետք է քարտեզագրվի որպես տարասեռ հիշողություն: Այս դեպքում ստուգեք OpenCL փաթեթի ֆունկցիոնալությունը յուրաքանչյուր DDR ինտերֆեյսի հետ ինքնուրույն:
OpenCL-ը և OpenCL լոգոն Apple Inc.-ի ապրանքանիշերն են, որոնք օգտագործվում են Khronos Group™-ի թույլտվությամբ: - OpenCL-ի համար Intel FPGA SDK-ն հիմնված է հրապարակված Khronos սպեցիֆիկացիայի վրա և անցել է Khronos-ի համապատասխանության փորձարկման գործընթացը: Ընթացիկ համապատասխանության կարգավիճակը կարելի է գտնել այստեղ www.khronos.org/conformance.
- Նախample, եթե ունեք երեք DDR ինտերֆեյս, դրանցից մեկը պետք է քարտեզագրվի որպես տարասեռ հիշողություն: Այս դեպքում ստուգեք OpenCL փաթեթի ֆունկցիոնալությունը յուրաքանչյուր DDR ինտերֆեյսի հետ ինքնուրույն:
Intel կորպորացիա. Բոլոր իրավունքները պաշտպանված են. Intel-ը, Intel-ի պատկերանշանը և Intel այլ նշանները Intel Corporation-ի կամ նրա դուստր ձեռնարկությունների ապրանքանիշերն են: Intel-ը երաշխավորում է իր FPGA-ի և կիսահաղորդչային արտադրանքների կատարումը ընթացիկ բնութագրերի համաձայն՝ համաձայն Intel-ի ստանդարտ երաշխիքի, սակայն իրեն իրավունք է վերապահում փոփոխություններ կատարել ցանկացած ապրանքի և ծառայությունների մեջ ցանկացած պահի առանց նախազգուշացման: Intel-ը չի ստանձնում ոչ մի պատասխանատվություն կամ պատասխանատվություն, որը բխում է սույն հոդվածում նկարագրված որևէ տեղեկատվության, արտադրանքի կամ ծառայության կիրառումից կամ օգտագործումից, բացառությամբ այն դեպքերի, որոնց մասին հստակ գրավոր համաձայնեցված է Intel-ի կողմից: Intel-ի հաճախորդներին խորհուրդ է տրվում ձեռք բերել սարքի տեխնիկական բնութագրերի վերջին տարբերակը՝ նախքան որևէ հրապարակված տեղեկատվության վրա հիմնվելը և ապրանքների կամ ծառայությունների պատվերներ կատարելը: *Այլ անուններ և ապրանքանիշեր կարող են պահանջվել որպես ուրիշների սեփականություն:
ISO 9001:2015 Գրանցված է
Որպես այլընտրանք, եթե ունեք երկու DDR ինտերֆեյս և մեկ քառակուսի տվյալների արագության (QDR) ինտերֆեյս, ստուգեք երկու DDR միջերեսների OpenCL փաթեթի և անկախ QDR միջերեսի ֆունկցիոնալությունը:
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 Memory Bank Divider-ը Qsys-ի դիզայնում չի աջակցում 2-ից ոչ հզոր հիշողության բանկերի, ինչը սահմանափակում չէ բնորոշ կոնֆիգուրացիաների համար: Այնուամենայնիվ, կան սցենարներ, որտեղ անհրաժեշտ են հիշողության 2-ից ոչ հզոր ինտերֆեյսներ: 2-ից ոչ հզոր հիշողության միջերեսներ տեղավորելու համար օգտագործեք OpenCL Memory Bank Dividers մի քանի տարասեռ հիշողության համակարգեր 2-ից ոչ հզոր հիշողության բանկերով: Դուք պետք է ստեղծեք մի քանի OpenCL Memory Bank Dividers, երբ ունեք իրական տարասեռ հիշողության համակարգ: Դիտարկենք մեկ DDR հիշողության միջերեսով և մեկ QDR հիշողության միջերեսով համակարգ: Քանի որ երկու բանկերն ունեն տարբեր հիշողության տոպոլոգիաներ, դուք չեք կարող դրանք միավորել մեկ գլոբալ հիշողության տակ:
Նկար 1. Եռափնյա տարասեռ հիշողության համակարգի բլոկային դիագրամ
Այս տարասեռ հիշողության համակարգը պարունակում է երկու DDR հիշողության միջերես և մեկ QDR հիշողության միջերես:Եթե դուք օգտագործում եք Intel Quartus® Prime ծրագրաշարի 16.0, 16.0.1 կամ 16.0.2 տարբերակները և OpenCL-ի համար նախատեսված Altera SDK-ն, OpenCL Memory Bank Divider-ը սխալ է կառավարում հիշողության պայթյունները հասցեների սահմաններից դուրս: Այս հայտնի խնդիրը լուծելու համար ավելացրեք խողովակաշարի կամուրջ՝ պայթեցման չափով 1 և միացրեք դրա Avalon ®Memory-Mapped (Avalon-MM) հիմնականը OpenCL Memory Bank Divider-ի slave port-ին:
Նշում.
Այս հայտնի խնդիրը շտկված է 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 հիշողությանը: board_spec.xml file նշում է երկու հիշողության համակարգերի բնութագրերը: - Ձեր OpenCL համակարգում ձեր տարասեռ հիշողության լուծումը օգտագործելու համար փոփոխեք ձեր հյուրընկալող կոդը՝ ավելացնելով CL_MEM_HETEROGENEOUS_INTELFPGA դրոշակը ձեր clCreateBuffer զանգին:
Նախ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);
… կարգավիճակ = clSetKernelArg(միջուկ[k], 0, sizeof(cl_mem), (վավեր*)&ddatain);
… կարգավիճակ = 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 հրամանում:
Առնչվող տեղեկատվություն
Անջատում է գլոբալ հիշողության պոռթկումը (–առանց միահյուսման )
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 տեքստային խմբագրիչում:
- Փոփոխեք reprogram ֆունկցիան 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; reprogram ֆունկցիայից և վերակազմավորել 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 հատուկ հարթակների համար |