Phần lớn thời gian một chi nhánh là cần thiết trong một chương trình CUDA hoặc OpenCL, như:CUDA/openCL; viết lại chi nhánh là không phân nhánh biểu
for (int i=0; i<width; i++)
{
if(i % threadIdx.x == 0)
quantity += i*i;
}
mã luôn có thể (hoặc ít nhất, hầu hết thời gian) được viết lại trong không phân nhánh phong cách:
for (int i=0; i<width; i++)
{
quantity += i*i* (i % threadIdx.x != 0);
}
sự cân bằng dường như được hoặc chạy trong một khe dọc duy nhất so với làm nhiều phép tính trên tất cả các chủ đề (trong trường hợp thứ hai, số tiền được thực hiện mọi khi, chỉ là đôi khi giá trị là số không)
Giả sử rằng các hoạt động phân nhánh sẽ lấy nhiều vị trí dọc cho mỗi nhánh có thể, người ta sẽ mong đợi thứ hai liên tục tốt hơn lần đầu tiên, Bây giờ câu hỏi của tôi là; Tôi có thể dựa vào trình biên dịch để tối ưu hóa 1) thành 2) bất cứ khi nào nó có ý nghĩa, hoặc không có tiêu chí áp dụng rộng rãi, ngụ ý rằng nó không thể được quyết định nói chung nào tốt hơn mà không cố gắng và lược tả?
Độ rộng của đơn đặt hàng là gì? Nếu bạn biết rằng chiều rộng là khá lớn, bạn không nên lặp qua vòng lặp for để thực hiện việc này, vì bạn biết bạn sẽ sử dụng giá trị nào. 'Trong khi (i
3Pi