Tác động của các vòng lặp có độ dài thay đổi đối với các trình tạo bóng GPU


9

Nó phổ biến để hiển thị nội dung theo thủ tục bên trong GPU, ví dụ như trong demoscene (vẽ một hình tứ giác để lấp đầy màn hình và để GPU tính toán các pixel).

Ray diễu hành là phổ biến:

nhập mô tả hình ảnh ở đây

Điều này có nghĩa là GPU đang thực hiện một số lần lặp không xác định trên mỗi pixel (mặc dù bạn có thể có giới hạn trên như thế maxIterations).

Làm thế nào để có một vòng lặp có chiều dài thay đổi ảnh hưởng đến hiệu suất đổ bóng?

Hãy tưởng tượng psuedocode tia hành quân đơn giản:

t = 0.f;
while(t < maxDist) {
    p = rayStart + rayDir * t;
    d = DistanceFunc(p);
    t += d;
    if(d < epsilon) {
       ... emit p
       return;
    }
}

Các họ GPU chính thống khác nhau (Nvidia, ATI, PowerVR, Mali, Intel, v.v.) bị ảnh hưởng như thế nào? Vertex shader, nhưng shader mảnh đặc biệt?

Làm thế nào nó có thể được tối ưu hóa?


Thật không may, câu hỏi này quá khó để được trả lời đúng ở đây. Mặc dù một câu trả lời đã được đưa ra điểm cho một nguồn đáng đọc như vậy (liên quan đến phân nhánh động). +1 cho "chủ đề" ..
teodron

1
@teodron đừng là kẻ chiến bại! Tôi đã hy vọng ai đó sẽ nói rằng trên các pixel màn hình thẻ NVidia trong các khối 8x8 sẽ lặp đi lặp lại sâu nhất có thể theo nhu cầu sâu nhất và các khối 8 x 8 pixel có thể được thực hiện theo bất kỳ thứ tự nào, hoặc đại loại như thế; Điều đó không đúng, đó chỉ là loại trí tuệ mà tôi hy vọng mọi người sẽ có thể chia sẻ. Liên kết trên Larrabee, hmm, khá gián tiếp.
Sẽ

Có vẻ như anh ấy không thảo luận về Larrabee, nhưng anh chàng Stanford đã nói chuyện tương tự hai năm sau, vào năm 2010 ( bạn có thể thấy điều đó ở đây ). Từ số liệu của anh ấy, xem xét một vòng lặp while, tôi không hiểu liệu các pixel "kết thúc" tính toán của chúng sớm hơn có bù đắp cho bất kỳ hiệu suất nào không. Trong CUDA, các chủ đề chờ ở một rào cản. Trong tương tự, những gì xảy ra với chủ đề shader?
teodron

@teodron yeah, tôi đã hiểu về CUDA và áp dụng cho GPU; Tôi chắc chắn rằng họ đang ở trong tình trạng bị khóa, nhưng tôi muốn ai đó có thể hiểu được tiếng chuông; dù sao, đây là một cái gì đó liên quan williamedwardscoder.tumblr.com/post/26628848007/rod-marching
Will

Câu trả lời:


8

Có một cuộc nói chuyện thú vị tại GDC 2012 về diễu hành trường khoảng cách GPU (và các chủ đề khác): http://directtovideo.wordpress.com/2012/03/15/get-my-slides-from-gdc2012/

Về hiệu năng, các card đồ họa (lớp DX11) mới nhất thực hiện các shader trên các đơn vị SIMD chạy các "luồng" 32 (NVIDIA) hoặc 64 (AMD) theo từng bước. Các nhóm này được biết đến như là warp hoặc wavefronts. Đối với trình đổ bóng pixel, mỗi luồng bằng một pixel, vì vậy tôi hy vọng rằng đơn vị SIMD đang xử lý một số thứ giống như một khối pixel 8x4 (NVIDIA) hoặc 8x8 (AMD) với nhau. Điều khiển phân nhánh và luồng được thực hiện trên mỗi mặt sóng, vì vậy tất cả các luồng trong mặt sóng phải lặp nhiều lần như pixel riêng lẻ sâu nhất trong mặt sóng đó. Mặt nạ làn đường SIMD sẽ tắt thực thi cho các pixel đã hoàn thành, nhưng chúng vẫn phải âm thầm đi cùng với kiểm soát luồng tổng thể của mặt sóng. Tất nhiên, điều này có nghĩa là hệ thống hiệu quả hơn nhiều khi sự phân nhánh mạch lạc,

Theo kinh nghiệm của tôi, chi phí hoạt động của chi nhánh vẫn khá cao ngay cả khi tất cả các luồng trong nhánh sóng giống nhau. Tôi đã thấy hiệu suất tăng trong một số trường hợp bằng cách hủy vòng lặp để khấu hao một số chi phí. Tuy nhiên, tất nhiên, nó phụ thuộc vào số lượng công việc bạn đang thực hiện trong mỗi lần lặp. Nếu cơ thể vòng lặp có đủ "công cụ" trong đó, việc không kiểm soát sẽ không phải là một chiến thắng.



0

Liên quan đến phân nhánh động, một lưu ý bổ sung (có thể rõ ràng, nhưng vẫn đáng chú ý đối với một số người): nó có thể ảnh hưởng nghiêm trọng đến hiệu suất của các vòng lặp không được kiểm soát (rõ ràng bạn không thể hủy bỏ vòng lặp nếu có số lần lặp không liên tục) .


-4

int s = 0;

bây giờ cho (int k = 1; k <= n; k ++) {s + = k;} giống như s = n * (n + 1) / 2

vì vậy điều đó không đúng nói chung: D


1
Bạn có thể bị hạ thấp rất nhiều vì không ai chắc chắn những gì bạn đang cố gắng truyền đạt ở đây hoặc những gì nó phải làm với câu hỏi.
doppelgreener
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.