Trong 16.1, mã này hoạt động như mong đợi trong đó vòng lặp ngoài được đăng ký do sự phụ thuộc và các phụ thuộc của vòng lặp vòng lặp được xóa bởi #pragma ivdep.
Vòng lặp này được đăng ký do sự phụ thuộc thực sự vào vòng lặp của vòng lặp
cho (char chưa ký x = 0; x < 4; x) {
Vòng lặp vòng lặp không có sự phụ thuộc giữa các lần lặp lại, nhưng phụ thuộc vào vòng lặp ngoài
#pragma ivdep
for (char y chưa ký = 0; y
Trong 17.0, #pragma ivdep hiện được áp dụng cho cả vòng lặp nội dung và vòng ngoài, vì vậy các phụ thuộc trong vòng lặp ngoài không được trình biên dịch tính vào. Do đó, mã tương tự có thể không hoạt động chính xác trong phần cứng hoạt động trong mô phỏng.
Workaround:
1. Thêm một tham số bổ sung "giả" vào kernel. Ở phía máy chủ, luôn vượt qua 1 cho đối số giả này.
TRƯỚC
__kernel vô hiệu cho my_kernel(
__global cpx_t* hạn chế đầu vào,
__global cpx_t* kết quả hạn chế)
SAU
__kernel vô hiệu cho my_kernel(
__global cpx_t* hạn chế đầu vào,
__global cpx_t* kết quả hạn chế,
giả int)
2. Trong vòng lặp, bọc vòng lặp trong "if (dummy)":
Vòng lặp này được đăng ký do phụ thuộc thực sự
cho (char chưa ký x = 0; x < 4; x) {
nếu (giả) {
Không phụ thuộc vào mỗi tập hợp 64 lần iterations
#pragma ivdep
for (char y chưa ký = 0; y
Vấn đề này được lên lịch sẽ được khắc phục trong phiên bản tương lai của Intel© OpenCL™ cho FPGA SDK.