Membuat Sistem Memori Heterogen di FPGA SDK untuk Platform Kustom OpenCL
Instruksi
Membuat Sistem Memori Heterogen di Intel® FPGA SDK untuk Platform Kustom OpenCL
Penerapan memori heterogen dalam Platform Kustom memungkinkan lebih banyak bandwidth antarmuka memori eksternal (EMIF) serta akses memori yang lebih besar dan lebih cepat. Kombinasi akses memori heterogen dengan optimal
Kernel OpenCL ™(1) dapat menghasilkan peningkatan kinerja yang signifikan untuk sistem OpenCL Anda.
Catatan aplikasi ini menyediakan panduan untuk membuat sistem memori heterogen dalam Platform Kustom untuk digunakan dengan Intel® FPGA SDK untuk OpenCL(2). Intel berasumsi bahwa Anda adalah desainer FPGA berpengalaman yang sedang mengembangkan Platform Kustom yang berisi sistem memori heterogen.
Sebelum membuat sistem memori heterogen, biasakan diri Anda dengan Intel FPGA SDK untuk dokumen OpenCL yang ditentukan di bawah ini.
Informasi Terkait
- Intel FPGA SDK untuk Panduan Pemrograman OpenCL
- SDK Intel FPGA untuk Panduan Praktik Terbaik OpenCL
- Intel FPGA SDK untuk OpenCL Arria 10 GX FPGA Development Kit Panduan Porting Platform Referensi
1.1. Memverifikasi Fungsi Papan FPGA dan Antarmuka EMIF
Verifikasi setiap antarmuka memori secara terpisah, lalu buat instance Platform Kustom Anda menggunakan memori global.
- Verifikasi setiap antarmuka memori menggunakan desain perangkat keras yang dapat menguji kecepatan dan stabilitas setiap antarmuka.
- Instansiasi Platform Kustom Anda menggunakan memori global.
- Misalnyaample, jika Anda memiliki tiga antarmuka DDR, salah satunya harus dipetakan sebagai memori heterogen. Dalam hal ini, verifikasi fungsionalitas tumpukan OpenCL dengan setiap antarmuka DDR secara terpisah.
OpenCL dan logo OpenCL adalah merek dagang dari Apple Inc. yang digunakan dengan izin dari Khronos Group™ . - Intel FPGA SDK untuk OpenCL didasarkan pada Spesifikasi Khronos yang dipublikasikan, dan telah lulus Proses Pengujian Kesesuaian Khronos. Status kesesuaian saat ini dapat ditemukan di www.khronos.org/conformance.
- Misalnyaample, jika Anda memiliki tiga antarmuka DDR, salah satunya harus dipetakan sebagai memori heterogen. Dalam hal ini, verifikasi fungsionalitas tumpukan OpenCL dengan setiap antarmuka DDR secara terpisah.
Perusahaan Intel. Seluruh hak cipta. Intel, logo Intel, dan merek Intel lainnya adalah merek dagang dari Intel Corporation atau anak perusahaannya. Intel menjamin kinerja produk FPGA dan semikonduktornya dengan spesifikasi terkini sesuai dengan garansi standar Intel, tetapi berhak untuk membuat perubahan pada produk dan layanan apa pun kapan saja tanpa pemberitahuan. Intel tidak bertanggung jawab atau berkewajiban yang timbul dari aplikasi atau penggunaan informasi, produk, atau layanan apa pun yang dijelaskan di sini kecuali secara tegas disetujui secara tertulis oleh Intel. Pelanggan Intel disarankan untuk mendapatkan spesifikasi perangkat versi terbaru sebelum mengandalkan informasi yang dipublikasikan dan sebelum melakukan pemesanan produk atau layanan. *Nama dan merek lain dapat diklaim sebagai milik orang lain.
ISO 9001: 2015 Terdaftar
Alternatifnya, jika Anda memiliki dua antarmuka DDR dan satu antarmuka kecepatan data quad (QDR), verifikasi fungsionalitas tumpukan OpenCL dari dua antarmuka DDR dan antarmuka QDR secara terpisah.
Intel menyarankan agar Anda menggunakan desain PCI Express® – (PCIe® -) atau eksklusif EMIF untuk menguji antarmuka memori Anda. Setelah Anda memverifikasi bahwa setiap antarmuka memori berfungsi dan bahwa desain OpenCL Anda berfungsi dengan subset dari antarmuka memori, lanjutkan
untuk membuat sistem memori heterogen yang berfungsi penuh.
1.2. Memodifikasi board_spec.xml File
Modifikasi board_spec.xml file untuk menentukan jenis sistem memori heterogen yang tersedia untuk kernel OpenCL.
Selama kompilasi kernel, Intel FPGA SDK untuk OpenCL Offline Compiler menetapkan argumen kernel ke memori berdasarkan argumen lokasi buffer yang Anda tentukan.
1. Telusuri ke board_spec.xml file di direktori perangkat keras Platform Kustom Anda.
2. Buka board_spec.xml file dalam editor teks dan memodifikasi XML yang sesuai.
Misalnyaample, jika sistem perangkat keras Anda memiliki dua memori DDR sebagai memori global default dan dua bank QDR yang Anda modelkan sebagai memori heterogen, ubah bagian memori dari board_spec.xml file menyerupai berikut ini:
1.3. Menyiapkan Beberapa Pembagi Memori di Qsys
Saat ini, Pembagi Bank Memori OpenCL dalam desain Qsys tidak mendukung jumlah bank memori non-power-of-2, yang bukan batasan untuk konfigurasi biasa. Namun, ada skenario di mana jumlah antarmuka memori non-power-of-2 diperlukan. Untuk mengakomodasi jumlah antarmuka memori non-power-of-2, gunakan beberapa Pembagi Bank Memori OpenCL untuk membuat sistem memori heterogen dengan jumlah bank memori non-power-of-2. Anda harus membuat beberapa Pembagi Bank Memori OpenCL saat Anda memiliki sistem memori yang benar-benar heterogen. Pertimbangkan sistem dengan satu antarmuka memori DDR dan satu antarmuka memori QDR. Karena kedua bank memiliki topologi memori yang berbeda, Anda tidak dapat menggabungkannya di bawah satu memori global.
Gambar 1. Diagram Blok Sistem Memori Heterogen Tiga Bank
Sistem memori heterogen ini berisi dua antarmuka memori DDR dan satu antarmuka memori QDR.Jika Anda menggunakan perangkat lunak Intel Quartus® Prime versi 16.0, 16.0.1, atau 16.0.2 dan Altera SDK untuk OpenCL, Pembagi Bank Memori OpenCL salah menangani semburan memori melintasi batas alamat. Untuk mengatasi masalah umum ini, tambahkan penghubung jalur pipa dengan ukuran burst 1 dan sambungkan master Avalon ®Memory-Mapped (Avalon-MM) ke port pendukung Pembagi Bank Memori OpenCL.
Catatan:
Masalah umum ini diperbaiki dalam perangkat lunak Intel Quartus Prime dan Intel FPGA SDK untuk OpenCL versi 16.1.
Gambar 2. Diagram Blok Sistem Memori Heterogen Tiga Bank dengan Jembatan Pipa 1.4. Memodifikasi Program Boardtest dan Kode Host untuk Solusi Memori Heterogen Anda
Gunakan kernel boardtest.cl yang disertakan dengan Intel FPGA SDK untuk Perangkat Platform Kustom OpenCL untuk menguji fungsionalitas dan kinerja Platform Kustom Anda.
Program boardtest adalah kernel OpenCL yang memungkinkan Anda menguji bandwidth host-ke-perangkat, bandwidth memori, dan fungsionalitas umum Platform Kustom Anda.
- Telusuri ke /board/ direktori custom_platform_toolkit/tests/boardtest.
- Buka boardtest.cl file dalam editor teks dan tetapkan lokasi penyangga untuk setiap argumen memori global.
Misalnyaampsaya:
__kernel kosong
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Di sini, uint *src ditugaskan ke memori DDR, dan uint *dst ditugaskan ke memori QDR. board_spec.xml file menentukan karakteristik dari kedua sistem memori. - Untuk memanfaatkan solusi memori heterogen Anda di sistem OpenCL Anda, ubah kode host Anda dengan menambahkan flag CL_MEM_HETEROGENEOUS_INTELFPGA ke panggilan clCreateBuffer Anda.
Misalnyaampsaya:
ddatain = clCreateBuffer(konteks, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Intel sangat menyarankan agar Anda mengatur lokasi buffer sebagai argumen kernel sebelum menulis buffer. Saat menggunakan memori global tunggal, Anda dapat menulis buffer sebelum atau sesudah menetapkannya ke argumen kernel. Dalam sistem memori heterogen, host menetapkan lokasi buffer sebelum menulis buffer. Dengan kata lain, host akan memanggil fungsi clSetKernelArgument sebelum memanggil fungsi clEnqueueWriteBuffer.
Dalam kode host Anda, aktifkan panggilan clCreateBuffer, clSetKernelArg, dan clEnqueueWriteBuffer dalam urutan berikut:
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(antrian, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/Host/memspeed.cpp file menyajikan urutan serupa dari panggilan fungsi ini. - Setelah Anda memodifikasi boardtest.cl file dan kode host, kompilasi kode host dan kernel dan verifikasi fungsionalitasnya.
Saat mengkompilasi kode kernel Anda, Anda harus menonaktifkan burst-interleaving dari semua sistem memori dengan menyertakan –no-interleaving opsi dalam perintah aoc.
Informasi Terkait
Menonaktifkan Burst-Interleaving Global Memory (–no-interleaving )
1.5. Memverifikasi Fungsi Memori Heterogen Anda Sistem
Untuk memastikan bahwa sistem memori heterogen berfungsi dengan baik, batalkan flag CL_CONTEXT_COMPILER_MODE_INTELFPGA dalam kode host Anda.
Dalam sistem OpenCL dengan memori homogen, Anda memiliki opsi untuk menyetel flag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 dalam kode host Anda untuk menonaktifkan pembacaan .aocx file dan pemrograman ulang FPGA. Menetapkan flag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 berguna saat membuat instance papan Anda untuk memverifikasi fungsionalitas Platform Kustom Anda tanpa mendesain denah lantai dan menentukan wilayah LogicLock™.
Dengan sistem memori yang heterogen, lingkungan runtime harus membaca lokasi buffer dari setiap buffer, yang dijelaskan di .aocx file, untuk memverifikasi fungsionalitas sistem memori. Namun, Anda mungkin ingin memverifikasi fungsionalitas Platform Kustom tanpa mengimplementasikan fitur akhir desain papan, seperti mendesain denah lantai dan menentukan region LogicLock.
- Pastikan flag CL_CONTEXT_COMPILER_MODE_INTELFPGA tidak disetel di kode host Anda.
- Telusuri papan/ /source/host/mmd direktori Platform Kustom Anda.
- Buka perangkat yang dipetakan memori acl_pcie_device.cpp (MMD) file dalam editor teks.
- Ubah fungsi program ulang di acl_pcie_device.cpp file dengan menambahkan pengembalian 0; baris, seperti yang ditunjukkan di bawah ini:
int ACL_PCIE_DEVICE::program ulang(void *data, size_t data_size)
{
kembali 0;
// anggap gagal
int program ulang_gagal = 1;
// asumsikan tidak ada rbf atau hash di fpga.bin
int rbf_or_hash_not_provided = 1;
// asumsikan hash revisi basis dan impor tidak cocok
int hash_mismatch = 1;
…
} - Kompilasi ulang acl_pcie_device.cpp file.
- Pastikan flag CL_CONTEXT_COMPILER_MODE_INTELFPGA tetap tidak disetel.
Perhatian: Setelah Anda menambahkan return 0; ke fungsi memprogram ulang dan mengkompilasi ulang MMD file, lingkungan runtime akan membaca .aocx file dan tetapkan lokasi buffer tetapi tidak akan memprogram ulang FPGA. Anda harus mencocokkan gambar FPGA dengan .aocx secara manual file. Untuk membalikkan perilaku ini, hapus return 0; dari fungsi memprogram ulang dan mengkompilasi ulang MMD file.
1.6. Riwayat Revisi Dokumen
Tanggal | Versi | Perubahan |
Desember 17 | 2017.12.01 | • Mengganti nama CL_MEM_HETEROGENEOUS_ALTERA menjadi CL_MEM_HETEROGENEOUS_INTELFPGA. |
Desember 16 | 2016.12.13 | • Mengganti nama CL_CONTEXT_COMPILER_MODE_ALTERA menjadi CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Membuat Sistem Memori Heterogen di Intel® FPGA SDK untuk OpenCL
Platform Kustom
Kirim Masukan
Versi Online
Kirim Masukan
ID: 683654
Versi: 2016.12.13
Dokumen / Sumber Daya
![]() |
intel Membuat Sistem Memori Heterogen di FPGA SDK untuk Platform Kustom OpenCL [Bahasa Indonesia:] Instruksi Membuat Sistem Memori Heterogen di SDK FPGA untuk Platform Kustom OpenCL, Membuat Sistem Memori Heterogen, SDK FPGA untuk Platform Kustom OpenCL |