Nếu nhân OpenCL của™ bạn không thể tạo ra phần cứng mặc dù tài nguyên ước tính thấp, lỗi có thể là do mở các vòng lặp truy cập bộ nhớ toàn cầu quá mức.
Không nên mở rộng các vòng lặp truy cập bộ nhớ toàn cầu ở những nơi mà giao diện bộ nhớ trong BSP có thể đọc hoặc ghi rộng hơn giao diện bộ nhớ. Điều này sẽ gây ra sự cạnh nhau, tắc nghẽn định tuyến và có thể dẫn đến hỏng hóc quá trình biên dịch.
Có thể tìm thấy độ rộng của giao diện bộ nhớ ngoài trong tệp board_spec.xml trong OpenCL™ BSP. Dưới đây là một ví dụ từ board_spec.xml của bộ phát triển Arria 10 GX BSP. (a10_ref)
width="512" maxburst="16" address="0x00000000" size="0x80000000" latency="240"/>
Như bạn có thể thấy, độ rộng giao diện bộ nhớ ngoài trên BSP này là 512 bit. (width="512") (chiều rộng="512") Do đó, nếu một vòng lặp truy cập vào số nguyên 32 bit toàn cầu, vòng lặp không nên được bỏ dở hơn 16. (512 / 32 = 16)
Nếu số vòng lặp ban đầu không phải là bội số của 16:
1. Làm tròn số vòng lặp mới thành bội số của 16.
2. Tạo bất kỳ bộ nhớ trên chip nào trong vòng lặp đủ lớn để phù hợp với số lượng vòng lặp mới
3. Sử dụng các điều kiện để ngăn đọc hoặc ghi khi số lượng vòng lặp mới vượt quá số vòng lặp ban đầu