intel - logoTạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL
Hướng dẫn

Tạo hệ thống bộ nhớ không đồng nhất trong Intel® FPGA SDK cho nền tảng tùy chỉnh OpenCL

Việc triển khai bộ nhớ không đồng nhất trong Nền tảng tùy chỉnh cho phép có thêm băng thông giao diện bộ nhớ ngoài (EMIF) cũng như truy cập bộ nhớ lớn hơn và nhanh hơn. Sự kết hợp của truy cập bộ nhớ không đồng nhất với một tối ưu hóa
Hạt nhân OpenCL™(1) có thể mang lại những cải tiến hiệu suất đáng kể cho hệ thống OpenCL của bạn.
Ghi chú ứng dụng này cung cấp hướng dẫn về cách tạo các hệ thống bộ nhớ không đồng nhất trong Nền tảng tùy chỉnh để sử dụng với SDK FPGA Intel® cho OpenCL(2). Intel giả định rằng bạn là một nhà thiết kế FPGA có kinh nghiệm đang phát triển Nền tảng tùy chỉnh có chứa các hệ thống bộ nhớ không đồng nhất.
Trước khi tạo các hệ thống bộ nhớ không đồng nhất, hãy tự làm quen với Intel FPGA SDK dành cho các tài liệu OpenCL được chỉ định bên dưới.
Thông tin liên quan

  • Intel FPGA SDK cho Hướng dẫn lập trình OpenCL
  • Intel FPGA SDK dành cho Hướng dẫn thực tiễn tốt nhất về OpenCL
  • Intel FPGA SDK dành cho OpenCL Arria 10 GX Bộ công cụ phát triển FPGA Hướng dẫn chuyển nền tảng tham khảo

1.1. Xác minh chức năng của bảng FPGA và giao diện EMIF

Xác minh độc lập từng giao diện bộ nhớ và sau đó khởi tạo Nền tảng tùy chỉnh của bạn bằng bộ nhớ chung.

  1. Xác minh từng giao diện bộ nhớ bằng thiết kế phần cứng có thể kiểm tra tốc độ và độ ổn định của từng giao diện.
  2. Khởi tạo Nền tảng tùy chỉnh của bạn bằng bộ nhớ chung.
    1. Ví dụampVí dụ, nếu bạn có ba giao diện DDR, thì một trong số chúng phải được ánh xạ dưới dạng bộ nhớ không đồng nhất. Trong trường hợp này, hãy xác minh chức năng của ngăn xếp OpenCL với từng giao diện DDR một cách độc lập.
      OpenCL và logo OpenCL là thương hiệu của Apple Inc. được sử dụng dưới sự cho phép của Khronos Group™ .
    2.  Intel FPGA SDK dành cho OpenCL dựa trên Thông số kỹ thuật Khronos đã xuất bản và đã vượt qua Quy trình kiểm tra sự phù hợp của Khronos. Tình trạng tuân thủ hiện tại có thể được tìm thấy tại www.khronos.org/conformance.

Tập đoàn Intel. Đã đăng ký Bản quyền. Intel, logo Intel và các nhãn hiệu khác của Intel là các nhãn hiệu của Intel Corporation hoặc các công ty con của Intel. Intel đảm bảo hiệu suất của FPGA và các sản phẩm bán dẫn của mình theo các thông số kỹ thuật hiện tại phù hợp với bảo hành tiêu chuẩn của Intel, nhưng có quyền thực hiện các thay đổi đối với bất kỳ sản phẩm và dịch vụ nào vào bất kỳ lúc nào mà không cần thông báo. Intel không chịu trách nhiệm hoặc nghĩa vụ pháp lý phát sinh từ việc áp dụng hoặc sử dụng bất kỳ thông tin, sản phẩm hoặc dịch vụ nào được mô tả ở đây trừ khi được Intel đồng ý rõ ràng bằng văn bản. Khách hàng của Intel nên lấy phiên bản mới nhất của thông số kỹ thuật của thiết bị trước khi dựa vào bất kỳ thông tin nào được công bố và trước khi đặt hàng sản phẩm hoặc dịch vụ. * Các tên và thương hiệu khác có thể được coi là tài sản của người khác.
ISO 9001: 2015 đã đăng ký
Ngoài ra, nếu bạn có hai giao diện DDR và ​​một giao diện tốc độ dữ liệu bốn (QDR), hãy xác minh chức năng của ngăn xếp OpenCL của hai giao diện DDR và ​​giao diện QDR một cách độc lập.
Intel khuyên bạn nên sử dụng các thiết kế dành riêng cho PCI Express® – (PCIe® -) hoặc EMIF để kiểm tra các giao diện bộ nhớ của bạn. Sau khi bạn xác minh rằng mỗi giao diện bộ nhớ đều hoạt động và thiết kế OpenCL của bạn hoạt động với một tập hợp con các giao diện bộ nhớ, hãy tiếp tục
để tạo ra một hệ thống bộ nhớ không đồng nhất đầy đủ chức năng. 
1.2. Sửa đổi board_spec.xml File
Sửa đổi board_spec.xml file để chỉ định các loại hệ thống bộ nhớ không đồng nhất có sẵn cho các nhân OpenCL.
Trong quá trình biên dịch nhân, SDK Intel FPGA dành cho Trình biên dịch Ngoại tuyến OpenCL gán các đối số nhân cho một bộ nhớ dựa trên đối số vị trí bộ đệm mà bạn chỉ định.
1. Duyệt đến board_spec.xml file trong thư mục phần cứng của Nền tảng tùy chỉnh của bạn.
2. Mở board_spec.xml file trong trình soạn thảo văn bản và sửa đổi XML cho phù hợp.
Ví dụampVí dụ, nếu hệ thống phần cứng của bạn có hai bộ nhớ DDR làm bộ nhớ chung mặc định và hai ngân hàng QDR mà bạn lập mô hình là bộ nhớ không đồng nhất, hãy sửa đổi các phần bộ nhớ của board_spec.xml file để giống như sau:
















1.3. Thiết lập nhiều bộ chia bộ nhớ trong Qsys
Hiện tại, Bộ chia ngân hàng bộ nhớ OpenCL trong thiết kế Qsys không hỗ trợ số lượng ngân hàng bộ nhớ không phải nguồn-of-2, đây không phải là giới hạn đối với các cấu hình thông thường. Tuy nhiên, có những tình huống mà số lượng giao diện bộ nhớ không phải là nguồn của 2 là cần thiết. Để phù hợp với số lượng giao diện bộ nhớ không phải là nguồn của 2, hãy sử dụng nhiều Bộ chia ngân hàng bộ nhớ OpenCL để tạo hệ thống bộ nhớ không đồng nhất với số lượng ngân hàng bộ nhớ không phải là nguồn của 2. Bạn phải tạo nhiều Bộ chia Ngân hàng Bộ nhớ OpenCL khi bạn có một hệ thống bộ nhớ không đồng nhất thực sự. Hãy xem xét một hệ thống có một giao diện bộ nhớ DDR và ​​một giao diện bộ nhớ QDR. Vì hai ngân hàng có cấu trúc liên kết bộ nhớ khác nhau nên bạn không thể kết hợp chúng dưới một bộ nhớ chung duy nhất.
Hình 1. Sơ đồ khối của Hệ thống bộ nhớ không đồng nhất ba ngân hàng
Hệ thống bộ nhớ không đồng nhất này chứa hai giao diện bộ nhớ DDR và ​​một giao diện bộ nhớ QDR.intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL - hình 1Nếu bạn đang sử dụng phiên bản 16.0, 16.0.1 hoặc 16.0.2 của phần mềm Intel Quartus® Prime và SDK Altera dành cho OpenCL, Bộ chia Ngân hàng Bộ nhớ OpenCL xử lý không chính xác các đợt bùng nổ bộ nhớ qua các ranh giới địa chỉ. Để khắc phục sự cố đã biết này, hãy thêm một cầu nối đường ống có kích thước cụm là 1 và kết nối chính Avalon ®Memory-Mapped (Avalon-MM) với cổng phụ của Bộ chia ngân hàng bộ nhớ OpenCL.
Ghi chú:
Sự cố đã biết này đã được khắc phục trong phần mềm Intel Quartus Prime và Intel FPGA SDK dành cho OpenCL phiên bản 16.1.
Hình 2. Sơ đồ khối của Hệ thống bộ nhớ không đồng nhất ba ngân hàng với cầu nối đường ống intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL - hình 21.4. Sửa đổi chương trình kiểm tra bo mạch chủ và mã máy chủ cho giải pháp bộ nhớ không đồng nhất của bạn
Sử dụng nhân boardtest.cl đi kèm với SDK FPGA Intel cho Bộ công cụ nền tảng tùy chỉnh OpenCL để kiểm tra chức năng và hiệu suất của Nền tảng tùy chỉnh của bạn.
Chương trình kiểm tra bo mạch là nhân OpenCL cho phép bạn kiểm tra băng thông từ máy chủ đến thiết bị, băng thông bộ nhớ và chức năng chung của Nền tảng tùy chỉnh của bạn.

  1. Duyệt đến /board/ thư mục custom_platform_toolkit/tests/boardtest.
  2. Mở boardtest.cl file trong trình soạn thảo văn bản và gán vị trí bộ đệm cho từng đối số bộ nhớ chung.
    Ví dụamplê:
    __kernel khoảng trống
    mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
    Ở đây, uint *src được gán cho bộ nhớ DDR và ​​uint *dst được gán cho bộ nhớ QDR. Board_spec.xml file chỉ định các đặc điểm của cả hai hệ thống bộ nhớ.
  3. Để tận dụng giải pháp bộ nhớ không đồng nhất trong hệ thống OpenCL của bạn, hãy sửa đổi mã máy chủ của bạn bằng cách thêm cờ CL_MEM_HETEROGENEOUS_INTELFPGA vào lệnh gọi clCreateBuffer của bạn.
    Ví dụamplê:
    ddatain = clCreateBuffer(bối cảnh, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    Intel thực sự khuyên bạn nên đặt vị trí bộ đệm làm đối số kernel trước khi ghi bộ đệm. Khi sử dụng một bộ nhớ chung duy nhất, bạn có thể ghi các bộ đệm trước hoặc sau khi gán chúng cho một đối số kernel. Trong các hệ thống bộ nhớ không đồng nhất, máy chủ đặt vị trí bộ đệm trước khi ghi bộ đệm. Nói cách khác, máy chủ sẽ gọi hàm clSetKernelArgument trước khi gọi hàm clEnqueueWriteBuffer.
    Trong mã máy chủ của bạn, hãy gọi các lệnh gọi clCreateBuffer, clSetKernelArg và clEnqueueWriteBuffer theo thứ tự sau:
    ddatain = clCreateBuffer(bối cảnh, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    … status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … trạng thái = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file trình bày một thứ tự tương tự của các lời gọi hàm này.
  4.  Sau khi bạn sửa đổi boardtest.cl file và mã máy chủ, biên dịch mã máy chủ và mã nhân và xác minh chức năng của chúng.
    Khi biên dịch mã hạt nhân của bạn, bạn phải vô hiệu hóa tính năng xen kẽ liên tục của tất cả các hệ thống bộ nhớ bằng cách bao gồm –no-xen kẽ tùy chọn trong lệnh aoc.

Thông tin liên quan
Vô hiệu hóa Burst-Interleaving của bộ nhớ chung (–no-interleaving )

1.5. Xác minh chức năng của bộ nhớ không đồng nhất của bạn Hệ thống
Để đảm bảo rằng hệ thống bộ nhớ không đồng nhất hoạt động bình thường, hãy bỏ đặt cờ CL_CONTEXT_COMPILER_MODE_INTELFPGA trong mã máy chủ của bạn.
Trong các hệ thống OpenCL có bộ nhớ đồng nhất, bạn phải tùy chọn đặt cờ CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 trong mã máy chủ của mình để vô hiệu hóa việc đọc .aocx file và lập trình lại FPGA. Việc đặt cờ CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 rất hữu ích khi khởi tạo bảng của bạn để xác minh chức năng của Nền tảng tùy chỉnh mà không cần thiết kế sơ đồ tầng và chỉ định vùng LogicLock™.
Với các hệ thống bộ nhớ không đồng nhất, môi trường thời gian chạy phải đọc vị trí bộ đệm của từng bộ đệm, được mô tả trong .aocx file, để xác minh chức năng của hệ thống bộ nhớ. Tuy nhiên, bạn có thể muốn xác minh chức năng của Nền tảng tùy chỉnh của mình mà không triển khai các tính năng cuối cùng của thiết kế bảng, chẳng hạn như thiết kế sơ đồ tầng và chỉ định vùng LogicLock.

  1. Xác minh rằng cờ CL_CONTEXT_COMPILER_MODE_INTELFPGA không được đặt trong mã máy chủ của bạn.
  2. Duyệt đến bảng / /source/host/mmd của Nền tảng tùy chỉnh của bạn.
  3. Mở thiết bị ánh xạ bộ nhớ acl_pcie_device.cpp (MMD) file trong trình soạn thảo văn bản.
  4.  Sửa đổi chức năng lập trình lại trong acl_pcie_device.cpp file bằng cách thêm return 0; dòng, như hình dưới đây:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    trả về 0;
    // giả sử thất bại
    int reprogram_failed = 1;
    // giả sử không có rbf hoặc hash trong fpga.bin
    int rbf_or_hash_not_provided = 1;
    // giả sử giá trị băm sửa đổi cơ sở và nhập khẩu không khớp
    int hash_mismatch = 1;

    }
  5. Biên dịch lại acl_pcie_device.cpp file.
  6. Xác minh rằng cờ CL_CONTEXT_COMPILER_MODE_INTELFPGA vẫn chưa được đặt.
    Chú ý: Sau khi bạn thêm return 0; đến chức năng lập trình lại và biên dịch lại MMD file, môi trường thời gian chạy sẽ đọc .aocx file và chỉ định các vị trí bộ đệm nhưng sẽ không lập trình lại FPGA. Bạn phải khớp hình ảnh FPGA với .aocx theo cách thủ công file. Để đảo ngược hành vi này, hãy xóa return 0; từ chức năng lập trình lại và biên dịch lại MMD file.

1.6. Lịch sử sửa đổi tài liệu

Ngày Phiên bản Thay đổi
Tháng 17-XNUMX 2017.12.01 • Đã đổi thương hiệu CL_MEM_HETEROGENEOUS_ALTERA thành CL_MEM_HETEROGENEOUS_INTELFPGA.
Tháng 16-XNUMX 2016.12.13 • Đã đổi thương hiệu CL_CONTEXT_COMPILER_MODE_ALTERA thành CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoTạo hệ thống bộ nhớ không đồng nhất trong Intel® FPGA SDK cho OpenCL
Nền tảng tùy chỉnh
intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL - biểu tượng 1 Gửi phản hồi
intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL - biểu tượng Phiên bản trực tuyến
intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL - biểu tượng 1 Gửi phản hồi
Mã số: 683654
Phiên bản: 2016.12.13

Tài liệu / Tài nguyên

intel Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL [tập tin pdf] Hướng dẫn
Tạo hệ thống bộ nhớ không đồng nhất trong SDK FPGA cho nền tảng tùy chỉnh OpenCL, tạo hệ thống bộ nhớ không đồng nhất, SDK FPGA cho nền tảng tùy chỉnh OpenCL

Tài liệu tham khảo

Để lại bình luận

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *