Tôi nghi ngờ rằng bạn có một số quan niệm sai lầm về CUDA và cách sử dụng CUDA, đặc biệt khi bạn tham khảo "quy trình" khi nào, trong thuật ngữ CUDA, không có điều gì như vậy. Đối với hầu hết các ứng dụng CUDA, có hai điều quan trọng để đạt được hiệu suất tốt: tối ưu hóa truy cập bộ nhớ và đảm bảo mỗi sợi CUDA 'hoạt động' trong một sợi dọc thực hiện cùng một thao tác cùng lúc với các chuỗi hoạt động otehr trong sợi dọc. Cả hai âm thanh này đều quan trọng đối với ứng dụng của bạn.
Để tối ưu hóa quyền truy cập bộ nhớ của bạn, bạn muốn đảm bảo rằng số lần đọc của bạn từ bộ nhớ chung và ghi vào bộ nhớ chung được kết hợp. Bạn có thể đọc thêm về điều này trong hướng dẫn lập trình CUDA, nhưng về cơ bản nó có nghĩa là các chuỗi liền kề trong một nửa dọc phải đọc từ hoặc ghi vào các vị trí bộ nhớ lân cận. Ngoài ra, mỗi thread nên đọc hoặc ghi 4, 8 hoặc 16 byte cùng một lúc.
Nếu mẫu truy cập bộ nhớ của bạn là ngẫu nhiên, bạn có thể cần xem xét sử dụng bộ nhớ kết cấu. Khi bạn cần phải tham khảo bộ nhớ đã được đọc bởi các chủ đề khác trong một khối, sau đó bạn nên sử dụng bộ nhớ chia sẻ.
Trong trường hợp của bạn, tôi không chắc chắn dữ liệu đầu vào của bạn là gì, nhưng ít nhất bạn cũng nên đảm bảo rằng các bài viết của bạn được kết hợp. Bạn có thể sẽ phải đầu tư một số nỗ lực không tầm thường để có được đọc của bạn để làm việc hiệu quả.
Đối với phần thứ hai, tôi khuyên bạn nên mỗi chuỗi CUDA xử lý một pixel trong hình ảnh đầu ra của bạn. Với chiến lược này, bạn nên xem các vòng lặp trong hạt nhân của bạn sẽ thực thi dài hơn hoặc ngắn hơn tùy thuộc vào dữ liệu trên mỗi luồng. Mỗi sợi trong warps của bạn nên thực hiện cùng một số bước trong cùng một thứ tự. Ngoại lệ duy nhất cho điều này là không có hình phạt thực sự thực sự để có một số chủ đề trong một sợi dọc thực hiện không có hoạt động trong khi các chủ đề còn lại thực hiện cùng một hoạt động với nhau.
Vì vậy, tôi khuyên bạn nên kiểm tra từng chuỗi nếu pixel của nó nằm bên trong một hình tam giác đã cho. Nếu không, nó không nên làm gì cả. Nếu có, nó sẽ tính toán màu đầu ra cho pixel đó.
Ngoài ra, tôi đặc biệt khuyên bạn nên đọc thêm về CUDA vì dường như bạn đang nhảy sâu vào cuối mà không hiểu rõ về một số nguyên tắc cơ bản cơ bản.
Xin lỗi về ngôn ngữ của tôi, tiếng Anh không phải là ngôn ngữ gốc của tôi. Vậy thuật ngữ thích hợp để xử lý trên cạc đồ họa là gì? Vâng, tôi nghĩ rằng tôi hiểu CUDA khá tốt, nhưng có, tôi đã thiếu kiến thức trong các thuật toán song song. Đầu vào của tôi được thiết lập của đỉnh trong không gian cắt, và tôi đã phải vẽ hình tam giác. Tôi nghĩ thuật toán trong đó mọi pixel nên kiểm tra mọi hình tam giác sẽ không được tối ưu. – qba
Tránh mọi điểm ảnh kiểm tra mỗi tam giác có thể được thực hiện bằng cách phân vùng các tam giác của bạn bằng cách sử dụng BVH, KD-Tree hoặc R-Tree. – whatnick