Bạn nói về "những khó khăn đa luồng" nhưng thực sự bạn đang nói về những khó khăn gì? Theo cách bạn đang trích dẫn một vấn đề ảo thậm chí có thể không tồn tại. Thách thức thực sự là một thử thách mà bạn tự tạo ra - nếu bạn hoàn toàn quyết tâm lấy từng giọt năng lượng cuối cùng ra khỏi một phần cứng, điều đó liên quan đến việc sử dụng phần cứng để có hiệu quả tốt nhất, nhưng điều đó cũng mở rộng khoảng cách giữa cỗ máy mạnh nhất và ít mạnh nhất. Hàm ý của điều này là nếu bạn có một trò chơi thực sự tận dụng tối đa PS3 (chẳng hạn), bạn không thể thực sự chạy nó trên điện thoại di động giá rẻ, vì vậy vấn đề của bạn không còn là "làm thế nào tôi có thể nhận được 1 chương trình để làm việc trên các phần cứng rất khác nhau "nhưng trở thành" làm thế nào tôi có thể thực hiện 1 ý tưởng trò chơi theo nhiều cách khác nhau để nó hoạt động trên phần cứng được cung cấp năng lượng khác nhau ".
Mặc dù một thư viện như SDL cung cấp API trình bao bọc đa nền tảng để phân luồng, tôi nghĩ sẽ thật ngây thơ khi cho rằng điều này dẫn trực tiếp đến việc phát triển trò chơi dễ dàng trên các nền tảng khác nhau (máy tính để bàn / thiết bị di động).
Dễ dàng phát triển trò chơi - chắc chắn. Đa luồng tối ưu, không. Nhưng bạn không cần đa luồng để tạo trò chơi. Để làm cho những người hiệu suất cao, nó chắc chắn giúp. Nhưng nhiều trò chơi tuyệt vời chạy trong một chủ đề duy nhất.
Cách tốt nhất để giải quyết việc phát triển theo cách này (được cung cấp bất kỳ API luồng đa nền tảng nào) là xem xét như sau:
- số lượng lõi khác nhau
- khả năng xử lý khác nhau trên mỗi lõi
- Một kiến trúc hệ thống nói chung khác nhau với ví dụ. độ trễ khác nhau cho truy cập bộ nhớ cache, RAM và I / O
Thay vì cố gắng gán hệ thống cho các luồng, hãy gán các tác vụ cho các luồng. Cung cấp cho mỗi tác vụ dữ liệu cần thiết để chạy và sắp xếp các tác vụ cho bất kỳ phần cứng nào có sẵn. Thông thường, bạn sẽ có một số nhóm luồng để trừu tượng hóa các lõi hoặc bộ xử lý khác nhau và trình quản lý tác vụ có một chuỗi các tác vụ và đưa chúng lên các luồng khác nhau khi luồng báo hiệu rằng nó đã hoàn thành nhiệm vụ trước đó và được sẵn sàng cho một cái mới Phần cứng có nhiều lõi rõ ràng sẽ hoàn thành các tác vụ nhanh hơn và có thể kết xuất nhanh hơn. Chuyên môn hóa hệ thống này để hoạt động tối ưu trên các hệ thống có các đặc điểm khác nhau trở thành một vấn đề tối ưu hóa nâng cao, nhưng có thể dựa trên các phương pháp phỏng đoán nhất định (ví dụ: một nhiệm vụ không '
Tuy nhiên, việc phân tách các tính năng trò chơi thành các nhiệm vụ riêng biệt là một vấn đề khá phức tạp và thường không đáng để bỏ công sức trừ khi bạn rất chắc chắn rằng bạn cần hiệu suất, vì vậy hầu hết sẽ không thử.
Một số đọc thêm:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - xem phần 'dữ liệu song song'. Với mô hình này, dữ liệu được chia thành nhiều nhiệm vụ giống hệt nhau và được đưa vào các luồng riêng lẻ.
http://software.intel.com/en-us/articles/designing-the-framework-of-a-abul-game-engine/ - khá dày đặc, mô tả mọi thứ ở cấp độ HĐH thay vì cấp độ trò chơi.
http://drdobbs.com/high-performance-computing/216500409 - không cụ thể về trò chơi, nhưng hoàn toàn phù hợp về mặt cho bạn biết bạn cần phân chia nhiệm vụ như thế nào.
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - nửa chừng cuộc phỏng vấn này là một giai thoại về cách họ di chuyển đến một hệ thống dựa trên nhiệm vụ .