OpenCL కస్టమ్ ప్లాట్ఫారమ్ల కోసం FPGA SDKలో హెటెరోజెనియస్ మెమరీ సిస్టమ్లను సృష్టించడం
సూచనలు
OpenCL కస్టమ్ ప్లాట్ఫారమ్ల కోసం Intel® FPGA SDKలో హెటెరోజెనియస్ మెమరీ సిస్టమ్లను సృష్టించడం
కస్టమ్ ప్లాట్ఫారమ్లో హెటెరోజెనియస్ మెమరీని అమలు చేయడం వలన మరింత బాహ్య మెమరీ ఇంటర్ఫేస్ (EMIF) బ్యాండ్విడ్త్ అలాగే పెద్ద మరియు వేగవంతమైన మెమరీ యాక్సెస్లను అనుమతిస్తుంది. ఆప్టిమైజ్ చేయబడిన విజాతీయ మెమరీ యాక్సెస్ కలయిక
OpenCL ™(1)కెర్నల్ మీ OpenCL సిస్టమ్ కోసం గణనీయమైన పనితీరు మెరుగుదలలను కలిగిస్తుంది.
ఈ అప్లికేషన్ నోట్ OpenCL(2) కోసం Intel® FPGA SDKతో ఉపయోగించడానికి అనుకూల ప్లాట్ఫారమ్లో భిన్నమైన మెమరీ సిస్టమ్లను సృష్టించడంపై మార్గదర్శకత్వం అందిస్తుంది. మీరు భిన్నమైన మెమరీ సిస్టమ్లను కలిగి ఉన్న అనుకూల ప్లాట్ఫారమ్లను అభివృద్ధి చేస్తున్న అనుభవజ్ఞుడైన FPGA డిజైనర్ అని Intel ఊహిస్తుంది.
భిన్నమైన మెమరీ సిస్టమ్లను సృష్టించే ముందు, దిగువ పేర్కొన్న OpenCL డాక్యుమెంట్ల కోసం Intel FPGA SDKతో మిమ్మల్ని మీరు పరిచయం చేసుకోండి.
సంబంధిత సమాచారం
- OpenCL ప్రోగ్రామింగ్ గైడ్ కోసం Intel FPGA SDK
- OpenCL బెస్ట్ ప్రాక్టీసెస్ గైడ్ కోసం Intel FPGA SDK
- OpenCL Arria 10 GX FPGA డెవలప్మెంట్ కిట్ రిఫరెన్స్ ప్లాట్ఫారమ్ పోర్టింగ్ గైడ్ కోసం ఇంటెల్ FPGA SDK
1.1 FPGA బోర్డ్ మరియు EMIF ఇంటర్ఫేస్ల కార్యాచరణను ధృవీకరించడం
ప్రతి మెమరీ ఇంటర్ఫేస్ను స్వతంత్రంగా ధృవీకరించండి మరియు గ్లోబల్ మెమరీని ఉపయోగించి మీ కస్టమ్ ప్లాట్ఫారమ్ను ఇన్స్టాంటియేట్ చేయండి.
- ప్రతి ఇంటర్ఫేస్ యొక్క వేగం మరియు స్థిరత్వాన్ని పరీక్షించగల హార్డ్వేర్ డిజైన్లను ఉపయోగించి ప్రతి మెమరీ ఇంటర్ఫేస్ను ధృవీకరించండి.
- గ్లోబల్ మెమరీని ఉపయోగించి మీ కస్టమ్ ప్లాట్ఫారమ్ను తక్షణం చేయండి.
- ఉదాహరణకుampఉదాహరణకు, మీకు మూడు DDR ఇంటర్ఫేస్లు ఉంటే, వాటిలో ఒకటి తప్పనిసరిగా హెటెరోజీనియస్ మెమరీగా మ్యాప్ చేయబడాలి. ఈ సందర్భంలో, ప్రతి DDR ఇంటర్ఫేస్తో OpenCL స్టాక్ యొక్క కార్యాచరణను స్వతంత్రంగా ధృవీకరించండి.
OpenCL మరియు OpenCL లోగో క్రోనోస్ గ్రూప్™ అనుమతితో ఉపయోగించే Apple Inc. యొక్క ట్రేడ్మార్క్లు. - OpenCL కోసం Intel FPGA SDK ప్రచురించబడిన క్రోనోస్ స్పెసిఫికేషన్ ఆధారంగా రూపొందించబడింది మరియు క్రోనోస్ కన్ఫార్మెన్స్ టెస్టింగ్ ప్రాసెస్లో ఉత్తీర్ణత సాధించింది. ప్రస్తుత అనుగుణ్యత స్థితిని ఇక్కడ కనుగొనవచ్చు www.khronos.org/కన్ఫార్మెన్స్.
- ఉదాహరణకుampఉదాహరణకు, మీకు మూడు DDR ఇంటర్ఫేస్లు ఉంటే, వాటిలో ఒకటి తప్పనిసరిగా హెటెరోజీనియస్ మెమరీగా మ్యాప్ చేయబడాలి. ఈ సందర్భంలో, ప్రతి DDR ఇంటర్ఫేస్తో OpenCL స్టాక్ యొక్క కార్యాచరణను స్వతంత్రంగా ధృవీకరించండి.
ఇంటెల్ కార్పొరేషన్. అన్ని హక్కులు ప్రత్యేకించబడ్డాయి. ఇంటెల్, ఇంటెల్ లోగో మరియు ఇతర ఇంటెల్ గుర్తులు ఇంటెల్ కార్పొరేషన్ లేదా దాని అనుబంధ సంస్థల ట్రేడ్మార్క్లు. Intel దాని FPGA మరియు సెమీకండక్టర్ ఉత్పత్తుల పనితీరును ఇంటెల్ యొక్క ప్రామాణిక వారంటీకి అనుగుణంగా ప్రస్తుత స్పెసిఫికేషన్లకు హామీ ఇస్తుంది, అయితే నోటీసు లేకుండా ఏ సమయంలోనైనా ఏదైనా ఉత్పత్తులు మరియు సేవలకు మార్పులు చేసే హక్కును కలిగి ఉంది. ఇంటెల్ వ్రాతపూర్వకంగా అంగీకరించినట్లు మినహా ఇక్కడ వివరించిన ఏదైనా సమాచారం, ఉత్పత్తి లేదా సేవ యొక్క అప్లికేషన్ లేదా ఉపయోగం నుండి ఉత్పన్నమయ్యే బాధ్యత లేదా బాధ్యతను Intel తీసుకోదు. ఇంటెల్ కస్టమర్లు ఏదైనా ప్రచురించబడిన సమాచారంపై ఆధారపడే ముందు మరియు ఉత్పత్తులు లేదా సేవల కోసం ఆర్డర్లు చేసే ముందు పరికర నిర్దేశాల యొక్క తాజా వెర్షన్ను పొందాలని సూచించారు. *ఇతర పేర్లు మరియు బ్రాండ్లను ఇతరుల ఆస్తిగా క్లెయిమ్ చేయవచ్చు.
ISO 9001:2015 నమోదు చేయబడింది
ప్రత్యామ్నాయంగా, మీకు రెండు DDR ఇంటర్ఫేస్లు మరియు ఒక క్వాడ్ డేటా రేట్ (QDR) ఇంటర్ఫేస్ ఉంటే, రెండు DDR ఇంటర్ఫేస్ల OpenCL స్టాక్ మరియు QDR ఇంటర్ఫేస్ స్వతంత్రంగా కార్యాచరణను ధృవీకరించండి.
మీ మెమరీ ఇంటర్ఫేస్లను పరీక్షించడానికి మీరు PCI Express® – (PCIe® -) లేదా EMIF-ప్రత్యేకమైన డిజైన్లను ఉపయోగించాలని Intel సిఫార్సు చేస్తోంది. ప్రతి మెమరీ ఇంటర్ఫేస్ ఫంక్షనల్గా ఉందని మరియు మీ OpenCL డిజైన్ మెమరీ ఇంటర్ఫేస్ల ఉపసమితితో పనిచేస్తుందని మీరు ధృవీకరించిన తర్వాత, కొనసాగండి
పూర్తి ఫంక్షనల్ హెటెరోజెనియస్ మెమరీ సిస్టమ్ను రూపొందించడానికి.
1.2 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 కింది వాటిని పోలి ఉంటుంది:
1.3 Qsysలో మల్టిపుల్ మెమరీ డివైడర్లను సెటప్ చేస్తోంది
ప్రస్తుతం, Qsys డిజైన్లోని OpenCL మెమరీ బ్యాంక్ డివైడర్ నాన్-పవర్ ఆఫ్-2 మెమరీ బ్యాంక్లకు మద్దతు ఇవ్వదు, ఇది సాధారణ కాన్ఫిగరేషన్లకు పరిమితి కాదు. అయితే, నాన్-పవర్ ఆఫ్-2 నంబర్ మెమరీ ఇంటర్ఫేస్లు అవసరమైన సందర్భాలు ఉన్నాయి. నాన్-పవర్-ఆఫ్-2 మెమరీ ఇంటర్ఫేస్లను ఉంచడానికి, నాన్-పవర్-ఆఫ్-2 మెమరీ బ్యాంక్లతో భిన్నమైన మెమరీ సిస్టమ్లను రూపొందించడానికి బహుళ OpenCL మెమరీ బ్యాంక్ డివైడర్లను ఉపయోగించండి. మీరు నిజమైన విజాతీయ మెమరీ సిస్టమ్ని కలిగి ఉన్నప్పుడు మీరు తప్పనిసరిగా బహుళ 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 మెమరీ బ్యాంక్ డివైడర్ యొక్క స్లేవ్ పోర్ట్కి కనెక్ట్ చేయండి.
గమనిక:
ఈ తెలిసిన సమస్య Intel Quartus Prime సాఫ్ట్వేర్ మరియు OpenCL వెర్షన్ 16.1 కోసం Intel FPGA SDKలో పరిష్కరించబడింది.
మూర్తి 2. పైప్లైన్ వంతెనతో మూడు-బ్యాంక్ హెటెరోజెనియస్ మెమరీ సిస్టమ్ యొక్క బ్లాక్ రేఖాచిత్రం 1.4 మీ హెటెరోజీనియస్ మెమరీ సొల్యూషన్ కోసం బోర్డ్టెస్ట్ ప్రోగ్రామ్ మరియు హోస్ట్ కోడ్ని సవరించడం
మీ కస్టమ్ ప్లాట్ఫారమ్ యొక్క కార్యాచరణ మరియు పనితీరును పరీక్షించడానికి OpenCL కస్టమ్ ప్లాట్ఫారమ్ టూల్కిట్ కోసం Intel FPGA SDKతో వచ్చే boardtest.cl కెర్నల్ని ఉపయోగించండి.
బోర్డ్టెస్ట్ ప్రోగ్రామ్ అనేది 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, uint arg, uint arg2)
ఇక్కడ, uint *src DDR మెమరీకి కేటాయించబడింది మరియు uint *dst QDR మెమరీకి కేటాయించబడింది. బోర్డు_స్పెక్.xml file రెండు మెమరీ సిస్టమ్స్ యొక్క లక్షణాలను నిర్దేశిస్తుంది. - మీ OpenCL సిస్టమ్లో మీ వైవిధ్య మెమరీ పరిష్కారాన్ని ఉపయోగించుకోవడానికి, మీ clCreateBuffer కాల్కు CL_MEM_HETEROGENEOUS_INTELFPGA ఫ్లాగ్ని జోడించడం ద్వారా మీ హోస్ట్ కోడ్ను సవరించండి.
ఉదాహరణకుampలే:
ddatain = clCreateBuffer(సందర్భం, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, పరిమాణం (సంతకం చేయనిది) * వెక్టర్సైజ్, NULL, & స్థితి);
బఫర్ను వ్రాయడానికి ముందు మీరు బఫర్ స్థానాన్ని కెర్నల్ ఆర్గ్యుమెంట్గా సెట్ చేయాలని ఇంటెల్ గట్టిగా సిఫార్సు చేస్తోంది. ఒకే గ్లోబల్ మెమరీని ఉపయోగిస్తున్నప్పుడు, మీరు బఫర్లను కెర్నల్ ఆర్గ్యుమెంట్కు కేటాయించే ముందు లేదా తర్వాత వ్రాయవచ్చు. భిన్నమైన మెమరీ సిస్టమ్లలో, బఫర్ను వ్రాయడానికి ముందు హోస్ట్ బఫర్ స్థానాన్ని సెట్ చేస్తుంది. మరో మాటలో చెప్పాలంటే, clEnqueueWriteBuffer ఫంక్షన్కు కాల్ చేయడానికి ముందు హోస్ట్ clSetKernelArgument ఫంక్షన్కి కాల్ చేస్తుంది.
మీ హోస్ట్ కోడ్లో, కింది క్రమంలో clCreateBuffer, clSetKernelArg మరియు clEnqueueWriteBuffer కాల్లను ప్రారంభించండి:
ddatain = clCreateBuffer(సందర్భం, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, పరిమాణం (సంతకం చేయనిది) * వెక్టర్సైజ్, NULL, & స్థితి);
… స్థితి = clSetKernelArg(కెర్నల్[k], 0, sizeof(cl_mem), (void*)&ddatain);
… స్థితి = 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 కమాండ్లో ఎంపిక.
సంబంధిత సమాచారం
గ్లోబల్ మెమరీ యొక్క బర్స్ట్-ఇంటర్లీవింగ్ డిసేబుల్ (–నో-ఇంటర్లీవింగ్ )
1.5 మీ వైవిధ్య జ్ఞాపకశక్తి యొక్క కార్యాచరణను ధృవీకరించడం వ్యవస్థ
హెటెరోజీనియస్ మెమరీ సిస్టమ్ సరిగ్గా పనిచేస్తుందని నిర్ధారించుకోవడానికి, మీ హోస్ట్ కోడ్లో CL_CONTEXT_COMPILER_MODE_INTELFPGA ఫ్లాగ్ను అన్సెట్ చేయండి.
సజాతీయ మెమరీ ఉన్న OpenCL సిస్టమ్లలో, .aocx యొక్క పఠనాన్ని నిలిపివేయడానికి మీరు మీ హోస్ట్ కోడ్లో CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 ఫ్లాగ్ని సెట్ చేయడానికి ఎంపిక చేసుకోవాలి. file మరియు FPGA యొక్క రీప్రోగ్రామింగ్. 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::reprogram(శూన్యం *డేటా, size_t డేటా_సైజ్)
{
తిరిగి 0;
// వైఫల్యాన్ని ఊహించండి
int reprogram_failed = 1;
// fpga.binలో rbf లేదా హాష్ లేదని భావించండి
int rbf_or_hash_not_provided = 1;
// బేస్ మరియు ఇంపోర్ట్ రివిజన్ హ్యాష్లు సరిపోలడం లేదని ఊహించండి
int hash_mmatch = 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కి రీబ్రాండ్ చేయబడింది. |
OpenCL కోసం Intel® FPGA SDKలో హెటెరోజీనియస్ మెమరీ సిస్టమ్లను సృష్టిస్తోంది
అనుకూల ప్లాట్ఫారమ్లు
అభిప్రాయాన్ని పంపండి
ఆన్లైన్ వెర్షన్
అభిప్రాయాన్ని పంపండి
ID: 683654
వెర్షన్: 2016.12.13
పత్రాలు / వనరులు
![]() |
Intel OpenCL కస్టమ్ ప్లాట్ఫారమ్ల కోసం FPGA SDKలో హెటెరోజెనియస్ మెమరీ సిస్టమ్లను సృష్టిస్తోంది [pdf] సూచనలు OpenCL కస్టమ్ ప్లాట్ఫారమ్ల కోసం FPGA SDKలో హెటెరోజెనియస్ మెమరీ సిస్టమ్లను సృష్టించడం, వైవిధ్య మెమరీ సిస్టమ్లను సృష్టించడం, OpenCL కస్టమ్ ప్లాట్ఫారమ్ల కోసం FPGA SDK |