GPU là một nhiệm vụ song song rất tốt. Thật tuyệt ... nếu bạn đang chạy một tác vụ song song.
Trò chơi là về loại ứng dụng ít song song nhất . Hãy suy nghĩ về vòng lặp trò chơi chính. AI (giả sử người chơi được xử lý như một trường hợp đặc biệt của AI) cần phản ứng với các va chạm được phát hiện bởi vật lý. Do đó, nó phải chạy sau đó. Hoặc ít nhất, vật lý cần phải gọi các thói quen AI trong ranh giới của hệ thống vật lý (thường không phải là một ý tưởng tốt vì nhiều lý do). Đồ họa không thể chạy cho đến khi vật lý chạy, bởi vì vật lý là thứ cập nhật vị trí của các vật thể. Tất nhiên, AI cũng cần phải chạy trước khi kết xuất, vì AI có thể sinh ra các đối tượng mới. Âm thanh cần phải chạy sau khi điều khiển AI và người chơi
Nói chung, các trò chơi có thể tự xâu chuỗi theo rất ít cách. Đồ họa có thể được quay ra trong một chủ đề; vòng lặp trò chơi có thể đẩy một loạt dữ liệu vào luồng đồ họa và nói: kết xuất cái này. Nó có thể thực hiện một số phép nội suy cơ bản, để vòng lặp trò chơi chính không phải đồng bộ với đồ họa. Âm thanh là một chủ đề khác; vòng lặp trò chơi nói "chơi cái này" và nó được chơi.
Sau đó, tất cả bắt đầu đau đớn. Nếu bạn có các thuật toán đường dẫn phức tạp (chẳng hạn như đối với RTS), bạn có thể xâu chuỗi chúng. Có thể mất một vài khung để các thuật toán hoàn thành, nhưng ít nhất chúng sẽ đồng thời. Ngoài ra, nó khá khó.
Vì vậy, bạn đang xem xét 4 chủ đề: trò chơi, đồ họa, âm thanh và có thể xử lý AI dài hạn. Đó không phải là nhiều. Và điều đó gần như không đủ cho GPU, có thể có hàng trăm luồng trong cùng một lúc. Đó là những gì mang lại cho GPU hiệu năng của chúng: có thể sử dụng tất cả các luồng đó cùng một lúc. Và trò chơi đơn giản là không thể làm điều đó.
Bây giờ, có lẽ bạn có thể có thể "mở rộng" cho một số hoạt động. AI, ví dụ, thường độc lập với nhau. Vì vậy, bạn có thể xử lý vài chục AI cùng một lúc. Phải cho đến khi bạn thực sự cần phải làm cho họ phụ thuộc vào nhau. Sau đó, bạn đang gặp rắc rối. Các đối tượng vật lý độc lập tương tự ... trừ khi có một ràng buộc giữa chúng và / hoặc chúng va chạm với một cái gì đó. Sau đó, họ trở nên rất phụ thuộc.
Thêm vào đó, có một thực tế là GPU đơn giản là không có quyền truy cập vào đầu vào của người dùng, mà theo tôi hiểu là loại quan trọng đối với các trò chơi. Vì vậy, sẽ phải được cung cấp. Nó cũng không có quyền truy cập tệp trực tiếp hoặc bất kỳ phương pháp thực sự nào để nói chuyện với HĐH; vì vậy một lần nữa, sẽ phải có một số cách để cung cấp điều này. Oh, và tất cả những gì xử lý âm thanh? GPU không phát ra âm thanh. Vì vậy, những người phải quay trở lại CPU và sau đó ra chip âm thanh.
Ồ, và mã hóa cho GPU là khủng khiếp. Thật khó để hiểu đúng và điều gì là "đúng" đối với một kiến trúc GPU có thể rất, rất sai đối với một kiến trúc khác. Và đó thậm chí không chỉ chuyển từ AMD sang NVIDIA; có thể chuyển từ GeForce 250 sang GeForce 450. Đó là một sự thay đổi trong kiến trúc cơ bản. Và nó có thể dễ dàng làm cho mã của bạn không chạy tốt. C ++ và thậm chí C không được phép; thứ tốt nhất bạn nhận được là OpenCL, giống như C nhưng không có một số chi tiết. Thích đệ quy . Điều đó đúng: không có đệ quy trên GPU.
Gỡ lỗi? Ồ tôi hy vọng bạn không thích các tính năng sửa lỗi IDE của mình, vì những tính năng này chắc chắn sẽ không khả dụng. Ngay cả khi bạn đang sử dụng GDB, hãy hôn tạm biệt. Bạn sẽ phải dùng đến việc printf
gỡ lỗi ... chờ đã, không có printf
GPU. Vì vậy, bạn sẽ phải ghi vào các vị trí bộ nhớ và để chương trình sơ khai CPU của bạn đọc lại chúng.
Đúng vậy: thủ công gỡ lỗi. Chúc may mắn với điều đó.
Ngoài ra, những thư viện hữu ích mà bạn sử dụng trong C / C ++? Hoặc có lẽ bạn là một người .NET hơn, sử dụng XNA và vv. Hay bất cứ cái gì. Không thành vấn đề, vì bạn không thể sử dụng bất kỳ trong số chúng trên GPU. Bạn phải mã hóa mọi thứ từ đầu. Và nếu bạn đã có một cơ sở mã đã tồn tại, khó khăn: thời gian để viết lại tất cả các mã đó.
Vì vậy, vâng. Thật kinh khủng khi thực sự làm cho bất kỳ loại trò chơi phức tạp nào. Và nó thậm chí sẽ không hoạt động, bởi vì các trò chơi không đủ song song để giúp nó.