Có bao nhiêu hàng đợi trực tiếp / tính toán / sao chép có ý nghĩa?


11

DirectX 12 hiển thị hàng đợi lệnh cho đồ họa (được gọi là "Trực tiếp"), tính toán hoặc sao chép các tác vụ. Về chức năng được cung cấp, mỗi cái là một siêu tập hợp của cái sau. Thông số kỹ thuật nói rằng hàng đợi lệnh có thể được thực thi đồng thời bởi thiết bị. Tuy nhiên, API không giới hạn số lượng hàng đợi lệnh theo bất kỳ cách nào (ít nhất tôi không nhận thấy bất kỳ giới hạn nào).

Rõ ràng, các nhà cung cấp khác nhau xử lý điều này rất khác nhau:

  • Intel tuyên bố trong một bài thuyết trình gần đây (slide 23) rằng hiện tại GPU của họ không thể xử lý song song Đồ họa & Điện toán và công cụ sao chép có thông lượng yếu. Họ khuyên không nên sử dụng nhiều hàng đợi đồ họa / tính toán.
  • AMD đã bắt đầu từ lâu để quảng cáo việc sử dụng hàng đợi / "trình tạo bóng không đồng bộ" bắt đầu với Mantle và bảng điều khiển gen hiện tại. Ngoài ra còn có một số nhà phát triển ( ví dụ ) xác nhận tăng hiệu suất đáng kể bằng cách thực hiện song song các tác vụ tính toán và đồ họa.
  • Gần đây đã có một số ồn ào về việc Nvidia không hỗ trợ trình đổ bóng không đồng bộ trong phần cứng: Sử dụng hàng đợi Đồ họa và Tính toán riêng biệt cùng một lúc dường như làm mọi thứ chậm hơn cho thấy trình giả lập trình điều khiển. Các hoạt động sao chép song song, mặt khác, đã được CUDA hỗ trợ trong một thời gian rất dài, điều này cho thấy rõ rằng động cơ DMA có thể hoạt động độc lập.

Có cách nào để quyết định trong thời gian chạy nếu việc đưa CommandLists vào nhiều CommandQueues thay vì một lệnh có ý nghĩa không? (cho rằng trường hợp trước đây không liên quan đến nhiều chi phí kỹ thuật)

Mặc dù tôi có thể dễ dàng thấy nó hữu ích như thế nào khi thực hiện các hoạt động bộ nhớ song song với các hoạt động tính toán / đồ họa, nhưng điều đó gây cho tôi sự phức tạp không cần thiết để chạy song song nhiều quá trình tính toán và đồ họa (trừ khi không có lợi ích chính.). Tôi cũng không rõ, làm thế nào điều này có thể dẫn đến hiệu suất tốt hơn đáng kể; ngoại trừ các trường hợp bệnh lý trong đó nhiều tác vụ tuần tự nhỏ không thể tạo đủ tải GPU.


1
Tôi không nghĩ rằng có bất kỳ cách có ý nghĩa nào để thực hiện cuộc gọi phán xét đó vào lúc này, ngoài việc kiểm tra ai tạo ra GPU. Cuối cùng, có nhiều yếu tố hơn là "phần cứng có thể thực thi các lệnh từ nhiều hàng đợi cùng một lúc" và D3D12 trừu tượng hóa các chi tiết đó. Trong thực tế, D3D12 thậm chí không phân biệt giữa phần cứng có thể thực thi đồng thời hàng đợi và phần cứng có thể thực hiện tuần tự, các tài liệu chỉ nói rằng sự trừu tượng hóa của chúng cho phép thực thi đồng thời.
MJP

1
câu hỏi hay ! tôi cũng cảm thấy sẽ thật đặc biệt khi đạt được sự hoàn hảo để thực hiện tính toán và tạo bóng đồng thời. có lẽ lợi ích có thể xảy ra nhờ cùng một sự kiện làm cho siêu phân luồng bằng cách nào đó nhanh hơn. hoạt động xen kẽ khi một số đơn vị bận rộn cho hàng đợi khác. giống như các shader làm tắc nghẽn các đơn vị kết cấu, không được sử dụng bởi giai đoạn tính toán, chính nó làm tắc nghẽn FPU hoặc DPU.
v.oddou

Hừm quá. Có lẽ sau đó "ngoài việc kiểm tra ai tạo ra GPU, không" được tính là câu trả lời nếu không có nhiều hơn cho nó. Sau khi đọc tất cả những thứ tiếp thị AMD đó, tôi rất vui khi biết rằng tôi không đơn độc với sự nhầm lẫn của mình.
Wumpf

1
Bạn biết chỉ cần nâng một chút trọng lượng vào tầm quan trọng (thực sự không quan trọng) của vấn đề này. SDK PS4 có một lỗi không cho phép phát ra bất kỳ hàng đợi nào khác ngoài hàng đợi 0. Tôi nghĩ rằng nếu nó rất quan trọng thì nó sẽ được sửa nhanh hơn.
v.oddou

Câu trả lời:


1

Gửi ứng dụng của bạn với trình tự điểm chuẩn kiểm tra nền tảng thực tế. (Câu trả lời có thể cho nhiều câu hỏi tôi đoán ...)

Tôi nghi ngờ hiệu suất phụ thuộc rất nhiều vào cách bạn sử dụng phần cứng. Vì phần cứng không chắc bằng cách nào đó khiến ứng dụng của bạn bị ngược, cho bạn biết phải làm gì, tôi nên đi với bất cứ thứ gì có vẻ tốt trong thiết kế của bạn.

"... hàng đợi lệnh có thể được thực thi đồng thời bởi thiết bị ..."

Từ khóa là CÓ THỂ. Tôi thấy không có lý do tại sao bất kỳ nhà cung cấp sẽ làm hỏng điều này. Cuối cùng, nhà cung cấp nền tảng (Intel / AMD / Nvidia) là người chịu trách nhiệm biến bạn thành một trình điều khiển đủ tốt để bạn không xem xét việc chuyển đổi nhà cung cấp. Nếu họ có "vấn đề biết" với chức năng này (mà nhân tiện không có ý nghĩa chức năng, chỉ có hiệu suất) thì họ cũng nên giải quyết nó bằng những gì họ biết. Ý tôi là khóc thật to, dự phòng là điều họ đã thực hiện; thực hiện đồng bộ.

Phần cứng là đủ voodoo vì nó là dành cho các nhà phát triển của chúng tôi.


GCN của AMD sẽ thực thi đồ họa và tính toán đồng thời ngay cả khi cả hai được phát hành trên hàng đợi đồ họa, nhưng nhìn chung không qua nhiều bộ đệm lệnh (nhiều lệnh gọi thậm chí có thể còn sơ sài). Trình điều khiển (hoặc ứng dụng - Tôi nghĩ trong DX12 hoặc Vulkan) phải kiểm tra các phụ thuộc dữ liệu và chặn giữa vẽ (đồ họa) và gửi (tính toán) nếu cần. Nhiều hàng đợi lệnh có thể hữu ích nếu bạn tính toán thực sự không đồng bộ từ đồ họa (như vật lý cho khung tiếp theo), nhưng tôi không có kinh nghiệm trực tiếp với điều này.
Daniel M Gessel
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.