Nggawe Sistem Memori Heterogen ing FPGA SDK kanggo Platform Custom OpenCL
instruksi
Nggawe Sistem Memori Heterogen ing Intel® FPGA SDK kanggo Platform Kustom OpenCL
Implementasi memori heterogen ing Custom Platform ngidini bandwidth antarmuka memori eksternal (EMIF) lan akses memori sing luwih gedhe lan luwih cepet. Kombinasi akses memori heterogen karo optimized
Kernel OpenCL ™(1) bisa nyebabake peningkatan kinerja sing signifikan kanggo sistem OpenCL sampeyan.
Cathetan aplikasi iki menehi panuntun dhumateng nggawe sistem memori heterogen ing Custom Platform kanggo nggunakake Intel® FPGA SDK kanggo OpenCL (2). Intel nganggep yen sampeyan minangka desainer FPGA sing berpengalaman sing ngembangake Platform Custom sing ngemot sistem memori heterogen.
Sadurunge nggawe sistem memori heterogen, kenal karo Intel FPGA SDK kanggo dokumen OpenCL sing kasebut ing ngisor iki.
Informasi sing gegandhengan
- Intel FPGA SDK kanggo OpenCL Programming Guide
- Intel FPGA SDK kanggo OpenCL Best Practices Guide
- Intel FPGA SDK kanggo OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verifikasi Fungsi Papan FPGA lan Antarmuka EMIF
Verifikasi saben antarmuka memori independen banjur instantiate Custom Platform nggunakake memori global.
- Verifikasi saben antarmuka memori nggunakake desain hardware sing bisa nyoba kacepetan lan stabilitas saben antarmuka.
- Instantiate Platform Custom nggunakake memori global.
- Kanggo example, yen sampeyan duwe telung antarmuka DDR, siji saka wong-wong mau kudu dipetakan minangka memori heterogen. Ing kasus iki, verifikasi fungsi saka OpenCL tumpukan karo saben antarmuka DDR independen.
OpenCL lan logo OpenCL minangka merek dagang Apple Inc. sing digunakake kanthi ijin saka Khronos Group™ . - Intel FPGA SDK kanggo OpenCL adhedhasar Spesifikasi Khronos sing diterbitake, lan wis lulus Proses Pengujian Kesesuaian Khronos. Status kesesuaian saiki bisa ditemokake ing www.khronos.org/conformance.
- Kanggo example, yen sampeyan duwe telung antarmuka DDR, siji saka wong-wong mau kudu dipetakan minangka memori heterogen. Ing kasus iki, verifikasi fungsi saka OpenCL tumpukan karo saben antarmuka DDR independen.
Intel Corporation. Kabeh hak dilindhungi undhang-undhang. Intel, logo Intel, lan merek Intel liyane minangka merek dagang saka Intel Corporation utawa anak perusahaan. Intel njamin kinerja produk FPGA lan semikonduktor kanggo specifications saiki miturut babar pisan standar Intel, nanging nduweni hak kanggo owah-owahan ing sembarang produk lan layanan ing sembarang wektu tanpa kabar. Intel ora tanggung jawab utawa tanggung jawab sing muncul saka aplikasi utawa panggunaan informasi, produk, utawa layanan sing diterangake ing kene kajaba sing disepakati kanthi tinulis dening Intel. Pelanggan Intel disaranake njupuk versi paling anyar saka spesifikasi piranti sadurunge ngandelake informasi sing diterbitake lan sadurunge nggawe pesenan kanggo produk utawa layanan. * Jeneng lan merek liyane bisa uga diklaim minangka properti wong liya.
ISO 9001:2015 Registered
Utawa, yen sampeyan duwe loro antarmuka DDR lan siji kotak data rate (QDR) antarmuka, verifikasi fungsi saka OpenCL tumpukan loro antarmuka DDR lan antarmuka QDR independen.
Intel nyaranake sampeyan nggunakake PCI Express® - (PCIe® -) utawa desain eksklusif EMIF kanggo nyoba antarmuka memori. Sawise sampeyan verifikasi manawa saben antarmuka memori fungsional lan desain OpenCL sampeyan bisa digunakake karo subset antarmuka memori, terusake.
kanggo nggawe sistem memori heterogen kanthi fungsi.
1.2. Ngowahi board_spec.xml File
Ngowahi board_spec.xml file kanggo nemtokake jinis sistem memori heterogen sing kasedhiya kanggo kernel OpenCL.
Sajrone kompilasi kernel, Intel FPGA SDK kanggo OpenCL Offline Compiler menehi argumen kernel menyang memori adhedhasar argumen lokasi buffer sing sampeyan nemtokake.
1. Telusuri menyang board_spec.xml file ing direktori hardware ing Custom Platform.
2. Bukak board_spec.xml file ing editor teks lan ngowahi XML kasebut.
Kanggo example, yen sistem hardware wis loro memori DDR minangka standar globalmemory lan loro bank QDR sing model minangka memori heterogen, ngowahi bagean memori saka board_spec.xml file kaya ing ngisor iki:
1.3. Nyetel Multiple Divider Memori ing Qsys
Saiki, OpenCL Memory Bank Divider ing desain Qsys ora ndhukung non-power-of-2 nomer bank memori, sing ora dadi watesan kanggo konfigurasi khas. Nanging, ana skenario ngendi non-daya-saka-2 nomer antarmuka memori perlu. Kanggo nampung non-daya-of-2 nomer antarmuka memori, nggunakake macem-macem OpenCL Memory Bank Dividers kanggo nggawe sistem memori heterogen karo non-daya-of-2 nomer bank memori. Sampeyan kudu nggawe macem-macem OpenCL Memory Bank Dividers nalika sampeyan duwe sistem memori heterogen bener. Coba sistem karo siji antarmuka memori DDR lan siji antarmuka memori QDR. Amarga loro bank duwe topologi memori beda, sampeyan ora bisa gabungke ing memori global siji.
Gambar 1. Diagram Blok Sistem Memori Heterogen Tiga Bank
Sistem memori heterogen iki ngemot rong antarmuka memori DDR lan siji antarmuka memori QDR.Yen sampeyan nggunakake versi 16.0, 16.0.1, utawa 16.0.2 saka piranti lunak Intel Quartus® Prime lan Altera SDK kanggo OpenCL, OpenCL Memory Bank Divider salah nangani bledosan memori ngliwati wates alamat. Kanggo ngatasi masalah iki dikenal, nambah jembatan pipa karo ukuran bledosan 1 lan nyambungake master Avalon ®Memory-Mapped (Avalon-MM) menyang port budak OpenCL Memory Bank Divider.
Cathetan:
Masalah sing dikenal iki diatasi ing piranti lunak Intel Quartus Prime lan Intel FPGA SDK kanggo versi OpenCL 16.1.
Gambar 2. Diagram Blok Sistem Memori Heterogen Tiga Bank dengan Jembatan Pipa 1.4. Ngowahi Program Boardtest lan Kode Host kanggo Solusi Memori Heterogen Panjenengan
Gunakake kernel boardtest.cl sing dilengkapi Intel FPGA SDK kanggo OpenCL Custom Platform Toolkit kanggo nyoba fungsi lan kinerja Custom Platform.
Program boardtest minangka kernel OpenCL sing ngidini sampeyan nguji bandwidth host-to-device, bandwidth memori, lan fungsi umum Platform Custom.
- Telusuri menyang /board/ custom_platform_toolkit/tests/boardtest direktori.
- Bukak boardtest.cl file ing editor teks lan nemtokake lokasi buffer kanggo saben argumen memori global.
Kanggo example:
__kernel kosong
mem_stream (__global__attribute__((buffer_location("DDR"))) uint *src, __global __attribute__((buffer_location("QDR"))) uint *dst, uint arg, uint arg2)
Ing kene, uint *src ditugasake ing memori DDR, lan uint *dst ditugasake ing memori QDR. Papan_spec.xml file nemtokake karakteristik loro sistem memori. - Kanggo nggunakake solusi memori heterogen ing sistem OpenCL, ngowahi kode host kanthi nambahake flag CL_MEM_HETEROGENEOUS_INTELFPGA menyang telpon clCreateBuffer.
Kanggo example:
ddatain = clCreateBuffer(konteks, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel banget nyaranake sampeyan nyetel lokasi buffer minangka argumen kernel sadurunge nulis buffer. Nalika nggunakake memori global siji, sampeyan bisa nulis buffer sadurunge utawa sawise menehi menyang argumen kernel. Ing sistem memori heterogen, host nyetel lokasi buffer sadurunge nulis buffer. Ing tembung liyane, host bakal nelpon fungsi clSetKernelArgument sadurunge nelpon fungsi clEnqueueWriteBuffer.
Ing kode host sampeyan, gunakake panggilan clCreateBuffer, clSetKernelArg, lan clEnqueueWriteBuffer kanthi urutan ing ngisor iki:
ddatain = clCreateBuffer(konteks, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[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 nampilake urutan sing padha saka panggilan fungsi kasebut. - Sawise sampeyan ngowahi boardtest.cl file lan kode host, ngumpulake kode host lan kernel lan verifikasi fungsine.
Nalika ngumpulake kode kernel, sampeyan kudu mateni burst-interleaving kabeh sistem memori kanthi nyakup -no-interleaving. pilihan ing printah aoc.
Informasi sing gegandhengan
Mateni Burst-Interleaving saka Memori Global (–no-interleaving )
1.5. Verifikasi Fungsi Memori Heterogen Panjenengan Sistem
Kanggo mesthekake yen sistem memori heterogen bisa digunakake kanthi bener, unset flag CL_CONTEXT_COMPILER_MODE_INTELFPGA ing kode host sampeyan.
Ing sistem OpenCL karo memori podho, sampeyan kudu pilihan kanggo nyetel CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 flag ing kode host kanggo mateni maca .aocx file lan reprogramming saka FPGA. Nyetel gendéra CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 migunani nalika instantiating papan kanggo verifikasi fungsionalitas Platform Kustom tanpa ngrancang rencana lantai lan nemtokake wilayah LogicLock™.
Kanthi sistem memori heterogen, lingkungan runtime kudu maca lokasi buffer saben buffer, diterangake ing .aocx file, kanggo verifikasi fungsi sistem memori. Nanging, sampeyan bisa uga pengin verifikasi fungsi Platform Kustom tanpa ngetrapake fitur pungkasan saka desain papan, kayata ngrancang rencana lantai lan nemtokake wilayah LogicLock.
- Verifikasi yen gendera CL_CONTEXT_COMPILER_MODE_INTELFPGA ora disetel ing kode host sampeyan.
- Browse menyang Papan/ /source/host/mmd direktori Custom Platform.
- Bukak piranti sing dipetakan memori (MMD) acl_pcie_device.cpp file ing editor teks.
- Ngowahi fungsi reprogram ing acl_pcie_device.cpp file kanthi nambah bali 0; baris, kaya ing ngisor iki:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
bali 0;
// nganggep gagal
int reprogram_failed = 1;
// nganggep ora ana rbf utawa hash ing fpga.bin
int rbf_or_hash_not_provided = 1;
// nganggep hashes revisi basis lan impor ora cocog
int hash_mismatch = 1;
…
} - Kompilasi ulang acl_pcie_device.cpp file.
- Verifikasi yen gendera CL_CONTEXT_COMPILER_MODE_INTELFPGA tetep ora disetel.
manungsa waé: Sawise sampeyan nambah bali 0; menyang fungsi reprogram lan recompile MMD file, lingkungan runtime bakal maca .aocx file lan nemtokake lokasi buffer nanging ora bakal reprogram FPGA. Sampeyan kudu kanthi manual cocog gambar FPGA karo .aocx file. Kanggo mbalikke prilaku iki, mbusak bali 0; saka fungsi reprogram lan recompile MMD file.
1.6. Riwayat Revisi Dokumen
Tanggal | Versi | Owah-owahan |
Desember-17 | 2017.12.01 | • Ganti jeneng CL_MEM_HETEROGENEOUS_ALTERA dadi CL_MEM_HETEROGENEOUS_INTELFPGA. |
Desember-16 | 2016.12.13 | • Ganti jeneng CL_CONTEXT_COMPILER_MODE_ALTERA dadi CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Nggawe Sistem Memori Heterogen ing Intel® FPGA SDK kanggo OpenCL
Platform khusus
Kirimi Umpan Balik
Versi Online
Kirimi Umpan Balik
Nomer Kode : 683654
Versi: 2016.12.13
Dokumen / Sumber Daya
![]() |
intel Nggawe Sistem Memori Heterogen ing FPGA SDK kanggo Platform Custom OpenCL [pdf] Pandhuan Nggawe Sistem Memori Heterogen ing FPGA SDK kanggo Platform Kustom OpenCL, Nggawe Sistem Memori Heterogen, FPGA SDK kanggo Platform Kustom OpenCL |