ការបង្កើតប្រព័ន្ធអង្គចងចាំខុសធម្មតានៅក្នុង FPGA SDK សម្រាប់វេទិកាផ្ទាល់ខ្លួន OpenCL
សេចក្តីណែនាំ
ការបង្កើតប្រព័ន្ធអង្គចងចាំខុសធម្មតានៅក្នុង Intel® FPGA SDK សម្រាប់វេទិកាផ្ទាល់ខ្លួន OpenCL
ការអនុវត្តអង្គចងចាំខុសគ្នានៅក្នុងវេទិកាផ្ទាល់ខ្លួនអនុញ្ញាតឱ្យមានចំណុចប្រទាក់មេម៉ូរីខាងក្រៅ (EMIF) កម្រិតបញ្ជូនបន្ថែម ព្រមទាំងការចូលប្រើអង្គចងចាំធំជាង និងលឿនជាងមុន។ ការរួមបញ្ចូលគ្នានៃការចូលប្រើអង្គចងចាំខុសគ្នាជាមួយនឹងការធ្វើឱ្យប្រសើរ
OpenCL ™ (1) ខឺណែលអាចបណ្តាលឱ្យមានការកែលម្អដំណើរការសំខាន់ៗសម្រាប់ប្រព័ន្ធ OpenCL របស់អ្នក។
កំណត់ចំណាំកម្មវិធីនេះផ្តល់នូវការណែនាំអំពីការបង្កើតប្រព័ន្ធអង្គចងចាំផ្សេងៗគ្នានៅក្នុង Custom Platform សម្រាប់ប្រើជាមួយ Intel® FPGA SDK សម្រាប់ OpenCL(2)។ Intel សន្មត់ថាអ្នកគឺជាអ្នករចនា FPGA ដែលមានបទពិសោធន៍ដែលកំពុងបង្កើត Custom Platforms ដែលមានប្រព័ន្ធអង្គចងចាំផ្សេងៗគ្នា។
មុនពេលបង្កើតប្រព័ន្ធអង្គចងចាំផ្សេងៗគ្នា សូមស្គាល់ខ្លួនអ្នកជាមួយ Intel FPGA SDK សម្រាប់ឯកសារ OpenCL ដែលបានបញ្ជាក់ខាងក្រោម។
ព័ត៌មានពាក់ព័ន្ធ
- Intel FPGA SDK សម្រាប់មគ្គុទ្ទេសក៍កម្មវិធី OpenCL
- Intel FPGA SDK សម្រាប់ OpenCL មគ្គុទ្ទេសក៍ការអនុវត្តល្អបំផុត
- Intel FPGA SDK សម្រាប់ OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
១.១. ការផ្ទៀងផ្ទាត់មុខងាររបស់ក្រុមប្រឹក្សាភិបាល FPGA និងចំណុចប្រទាក់ EMIF
ផ្ទៀងផ្ទាត់ចំណុចប្រទាក់អង្គចងចាំនីមួយៗដោយឯករាជ្យ ហើយបន្ទាប់មកធ្វើឱ្យវេទិកាផ្ទាល់ខ្លួនរបស់អ្នកភ្លាមៗដោយប្រើអង្គចងចាំជាសកល។
- ផ្ទៀងផ្ទាត់ចំណុចប្រទាក់អង្គចងចាំនីមួយៗដោយប្រើការរចនាផ្នែករឹងដែលអាចសាកល្បងល្បឿន និងស្ថេរភាពនៃចំណុចប្រទាក់នីមួយៗ។
- បង្កើតវេទិកាផ្ទាល់ខ្លួនរបស់អ្នកភ្លាមៗដោយប្រើអង្គចងចាំសកល។
- សម្រាប់អតីតampដូច្នេះ ប្រសិនបើអ្នកមានចំណុចប្រទាក់ DDR បី មួយក្នុងចំណោមពួកវាត្រូវតែត្រូវបានគូសផែនទីជាអង្គចងចាំផ្សេងៗគ្នា។ ក្នុងករណីនេះ ផ្ទៀងផ្ទាត់មុខងាររបស់ជង់ OpenCL ជាមួយនឹងចំណុចប្រទាក់ DDR នីមួយៗដោយឯករាជ្យ។
OpenCL និងនិមិត្តសញ្ញា OpenCL គឺជាពាណិជ្ជសញ្ញារបស់ក្រុមហ៊ុន Apple Inc. ដែលប្រើដោយការអនុញ្ញាតពី Khronos Group™ ។ - Intel FPGA SDK សម្រាប់ OpenCL គឺផ្អែកលើការបញ្ជាក់របស់ Khronos ដែលបានបោះពុម្ពផ្សាយ ហើយបានឆ្លងកាត់ដំណើរការសាកល្បងការអនុលោមតាម Khronos ។ ស្ថានភាពអនុលោមតាមបច្ចុប្បន្នអាចរកបាននៅ www.khronos.org/conformance ។
- សម្រាប់អតីតampដូច្នេះ ប្រសិនបើអ្នកមានចំណុចប្រទាក់ DDR បី មួយក្នុងចំណោមពួកវាត្រូវតែត្រូវបានគូសផែនទីជាអង្គចងចាំផ្សេងៗគ្នា។ ក្នុងករណីនេះ ផ្ទៀងផ្ទាត់មុខងាររបស់ជង់ OpenCL ជាមួយនឹងចំណុចប្រទាក់ DDR នីមួយៗដោយឯករាជ្យ។
សាជីវកម្ម Intel ។ រក្សារសិទ្ធគ្រប់យ៉ាង។ Intel, និមិត្តសញ្ញា Intel និងសញ្ញា Intel ផ្សេងទៀតគឺជាពាណិជ្ជសញ្ញារបស់ Intel Corporation ឬក្រុមហ៊ុនបុត្រសម្ព័ន្ធរបស់ខ្លួន។ Intel ធានាការអនុវត្តផលិតផល FPGA និង semiconductor របស់ខ្លួនទៅនឹងលក្ខណៈបច្ចេកទេសបច្ចុប្បន្នស្របតាមការធានាស្តង់ដាររបស់ Intel ប៉ុន្តែរក្សាសិទ្ធិក្នុងការផ្លាស់ប្តូរផលិតផល និងសេវាកម្មណាមួយនៅពេលណាមួយដោយមិនមានការជូនដំណឹងជាមុន។ Intel សន្មត់ថាគ្មានទំនួលខុសត្រូវ ឬការទទួលខុសត្រូវដែលកើតចេញពីកម្មវិធី ឬការប្រើប្រាស់ព័ត៌មាន ផលិតផល ឬសេវាកម្មណាមួយដែលបានពិពណ៌នានៅទីនេះ លើកលែងតែមានការយល់ព្រមជាលាយលក្ខណ៍អក្សរដោយ Intel ។ អតិថិជនរបស់ Intel ត្រូវបានណែនាំឱ្យទទួលបានកំណែចុងក្រោយបំផុតនៃការបញ្ជាក់ឧបករណ៍ មុនពេលពឹងផ្អែកលើព័ត៌មានដែលបានបោះពុម្ពផ្សាយណាមួយ និងមុនពេលធ្វើការបញ្ជាទិញផលិតផល ឬសេវាកម្ម។ * ឈ្មោះ និងម៉ាកផ្សេងទៀតអាចត្រូវបានទាមទារជាកម្មសិទ្ធិរបស់អ្នកដទៃ។
ISO 9001:2015 បានចុះឈ្មោះ
ជាជម្រើស ប្រសិនបើអ្នកមានចំណុចប្រទាក់ DDR ពីរ និងចំណុចប្រទាក់អត្រាទិន្នន័យ quad (QDR) មួយ សូមផ្ទៀងផ្ទាត់មុខងារនៃជង់ OpenCL នៃចំណុចប្រទាក់ DDR ទាំងពីរ និងចំណុចប្រទាក់ QDR ដោយឯករាជ្យ។
Intel ណែនាំឱ្យអ្នកប្រើ PCI Express® – (PCIe® -) ឬការរចនាផ្តាច់មុខ EMIF ដើម្បីសាកល្បងចំណុចប្រទាក់អង្គចងចាំរបស់អ្នក។ បន្ទាប់ពីអ្នកផ្ទៀងផ្ទាត់ថាចំណុចប្រទាក់មេម៉ូរីនីមួយៗមានមុខងារ ហើយការរចនា OpenCL របស់អ្នកដំណើរការជាមួយសំណុំរងនៃចំណុចប្រទាក់អង្គចងចាំ សូមបន្ត
ដើម្បីបង្កើតប្រព័ន្ធអង្គចងចាំដែលមានមុខងារពេញលេញ។
១.២. ការកែប្រែ board_spec.xml File
កែប្រែ board_spec.xml file ដើម្បីបញ្ជាក់ប្រភេទប្រព័ន្ធអង្គចងចាំខុសគ្នាដែលមានសម្រាប់ខឺណែល OpenCL ។
កំឡុងពេលចងក្រងខឺណែល Intel FPGA SDK សម្រាប់ OpenCL Offline Compiler ផ្តល់អាគុយម៉ង់ខឺណែលទៅអង្គចងចាំដោយផ្អែកលើអាគុយម៉ង់ទីតាំងសតិបណ្ដោះអាសន្នដែលអ្នកបញ្ជាក់។
1. រកមើល board_spec.xml file នៅក្នុងថត hardware នៃ Custom Platform របស់អ្នក។
2. បើក board_spec.xml file នៅក្នុងកម្មវិធីនិពន្ធអត្ថបទ និងកែប្រែ XML ទៅតាមនោះ។
សម្រាប់អតីតampដូច្នេះ ប្រសិនបើប្រព័ន្ធ Hardware របស់អ្នកមានអង្គចងចាំ DDR ពីរជា default globalmemory និងធនាគារ QDR ពីរដែលអ្នកយកគំរូតាមអង្គចងចាំផ្សេងៗគ្នា សូមកែប្រែផ្នែកអង្គចងចាំនៃ board_spec.xml file ដើម្បីឱ្យមានលក្ខណៈដូចខាងក្រោមនេះ:
១.៣. ការដំឡើងផ្នែកបន្ថែមអង្គចងចាំច្រើននៅក្នុង Qsys
បច្ចុប្បន្ននេះ OpenCL Memory Bank Divider នៅក្នុងការរចនា Qsys មិនគាំទ្រចំនួន non-power-of-2 memory banks ដែលមិនមែនជាការកំណត់សម្រាប់ការកំណត់ធម្មតានោះទេ។ ទោះយ៉ាងណាក៏ដោយ មានសេណារីយ៉ូដែលមិនមានថាមពលនៃ 2 ចំនួននៃចំណុចប្រទាក់អង្គចងចាំគឺចាំបាច់។ ដើម្បីសម្រួលដល់ចំនួនចំណុចប្រទាក់អង្គចងចាំដែលមិនប្រើថាមពលនៃ 2 សូមប្រើ OpenCL Memory Bank Dividers ជាច្រើនដើម្បីបង្កើតប្រព័ន្ធអង្គចងចាំខុសគ្នាជាមួយនឹងចំនួនអង្គចងចាំដែលមិនប្រើថាមពលនៃ 2 ចំនួន។ អ្នកត្រូវតែបង្កើត OpenCL Memory Bank Dividers ជាច្រើននៅពេលដែលអ្នកមានប្រព័ន្ធអង្គចងចាំខុសគ្នាពិត។ ពិចារណាប្រព័ន្ធដែលមានចំណុចប្រទាក់អង្គចងចាំ 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) របស់វាទៅកាន់ច្រក slave របស់ OpenCL Memory Bank Divider ។
ចំណាំ៖
បញ្ហាដែលគេស្គាល់នេះត្រូវបានជួសជុលនៅក្នុងកម្មវិធី Intel Quartus Prime និង Intel FPGA SDK សម្រាប់ OpenCL កំណែ 16.1 ។
រូបភាពទី 2. ដ្យាក្រាមប្លុកនៃប្រព័ន្ធអង្គចងចាំបីធនាគារដែលមានស្ពានបំពង់ ១.៤. ការកែប្រែកម្មវិធី Boardtest និងកូដម៉ាស៊ីនសម្រាប់ដំណោះស្រាយការចងចាំដ៏ច្រើនលើសលប់របស់អ្នក។
ប្រើខឺណែល boardtest.cl ដែលភ្ជាប់មកជាមួយ Intel FPGA SDK សម្រាប់ OpenCL Custom Platform Toolkit ដើម្បីសាកល្បងមុខងារ និងដំណើរការនៃវេទិកាផ្ទាល់ខ្លួនរបស់អ្នក។
កម្មវិធី boardtest គឺជាខឺណែល OpenCL ដែលអនុញ្ញាតឱ្យអ្នកសាកល្បងកម្រិតបញ្ជូនរបស់ម៉ាស៊ីនទៅឧបករណ៍ កម្រិតបញ្ជូនអង្គចងចាំ និងមុខងារទូទៅនៃវេទិកាផ្ទាល់ខ្លួនរបស់អ្នក។
- រុករកទៅ /board/ custom_platform_toolkit/tests/boardtest directory។
- បើក 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 ។ board_spec.xml file បញ្ជាក់លក្ខណៈនៃប្រព័ន្ធអង្គចងចាំទាំងពីរ។ - ដើម្បីប្រើដំណោះស្រាយអង្គចងចាំខុសធម្មតារបស់អ្នកនៅក្នុងប្រព័ន្ធ OpenCL របស់អ្នក សូមកែប្រែកូដម៉ាស៊ីនរបស់អ្នកដោយបន្ថែមទង់ CL_MEM_HETEROGENEOUS_INTELFPGA ទៅនឹងការហៅ clCreateBuffer របស់អ្នក។
សម្រាប់អតីតampលេ៖
ddatain = clCreateBuffer(បរិបទ, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel ផ្តល់អនុសាសន៍យ៉ាងខ្លាំងថាអ្នកកំណត់ទីតាំងសតិបណ្ដោះអាសន្នជាអាគុយម៉ង់ខឺណែល មុនពេលសរសេរសតិបណ្ដោះអាសន្ន។ នៅពេលប្រើអង្គចងចាំសកលតែមួយ អ្នកអាចសរសេរសតិបណ្ដោះអាសន្នមុន ឬក្រោយការចាត់តាំងពួកវាទៅអាគុយម៉ង់ខឺណែល។ នៅក្នុងប្រព័ន្ធអង្គចងចាំផ្សេងៗគ្នា ម៉ាស៊ីនកំណត់ទីតាំងសតិបណ្ដោះអាសន្ន មុនពេលសរសេរសតិបណ្ដោះអាសន្ន។ នៅក្នុងពាក្យផ្សេងទៀត ម៉ាស៊ីននឹងហៅមុខងារ clSetKernelArgument មុនពេលហៅមុខងារ clEnqueueWriteBuffer ។
នៅក្នុងកូដម៉ាស៊ីនរបស់អ្នក ហៅ clCreateBuffer, clSetKernelArg, និង clEnqueueWriteBuffer ហៅតាមលំដាប់ដូចខាងក្រោម៖
ddatain = clCreateBuffer(បរិបទ, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
… ស្ថានភាព = clSetKernelArg(ខឺណែល[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(queue, 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 និងកូដម៉ាស៊ីន ចងក្រងកូដម៉ាស៊ីន និងខឺណែល ហើយផ្ទៀងផ្ទាត់មុខងាររបស់ពួកគេ។
នៅពេលចងក្រងកូដខឺណែលរបស់អ្នក អ្នកត្រូវតែបិទដំណើរការ burst-interleaving នៃប្រព័ន្ធអង្គចងចាំទាំងអស់ ដោយរួមបញ្ចូល -no-interleaving ជម្រើសនៅក្នុងពាក្យបញ្ជា aoc ។
ព័ត៌មានពាក់ព័ន្ធ
ការបិទដំណើរការ Burst-Interleaving នៃអង្គចងចាំសកល (–no-interleaving )
១.៥. ការផ្ទៀងផ្ទាត់មុខងារនៃអង្គចងចាំខុសប្រក្រតីរបស់អ្នក។ ប្រព័ន្ធ
ដើម្បីធានាថាប្រព័ន្ធអង្គចងចាំផ្សេងគ្នាដំណើរការបានត្រឹមត្រូវ សូមឈប់កំណត់ទង់ 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 directory នៃ Custom Platform របស់អ្នក។
- បើកឧបករណ៍ acl_pcie_device.cpp memory-mapped (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;
// សន្មតថាគ្មាន rbf ឬ hash នៅក្នុង fpga.bin
int rbf_or_hash_not_provided = 1;
// សន្មត់ថាការកែប្រែមូលដ្ឋាន និងការនាំចូលសញ្ញាមិនត្រូវគ្នាទេ។
int hash_mismatch = 1;
…
} - ចងក្រង acl_pcie_device.cpp ឡើងវិញ file.
- ផ្ទៀងផ្ទាត់ថាទង់ CL_CONTEXT_COMPILER_MODE_INTELFPGA នៅតែមិនកំណត់។
យកចិត្តទុកដាក់៖ បន្ទាប់ពីអ្នកបន្ថែមត្រឡប់ 0; ទៅមុខងារ reprogram និងចងក្រង 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
វេទិកាផ្ទាល់ខ្លួន
ផ្ញើមតិកែលម្អ
កំណែអនឡាញ
ផ្ញើមតិកែលម្អ
លេខសម្គាល់៖ 683654
កំណែ៖ 2016.12.13
ឯកសារ/ធនធាន
![]() |
intel បង្កើតប្រព័ន្ធអង្គចងចាំខុសធម្មតាក្នុង FPGA SDK សម្រាប់វេទិកាផ្ទាល់ខ្លួន OpenCL [pdf] សេចក្តីណែនាំ ការបង្កើតប្រព័ន្ធអង្គចងចាំខុសធម្មតានៅក្នុង FPGA SDK សម្រាប់វេទិកាផ្ទាល់ខ្លួន OpenCL ការបង្កើតប្រព័ន្ធអង្គចងចាំដែលមានលក្ខណៈខុសធម្មតា FPGA SDK សម្រាប់វេទិកាផ្ទាល់ខ្លួន OpenCL |