জিপিইউগুলি খুব ভাল একটি সমান্তরাল কাজ। যা দুর্দান্ত ... যদি আপনি একটি সমান্তরাল কাজ চালাচ্ছেন।
গেমস সর্বনিম্ন সমান্তরাল ধরণের অ্যাপ্লিকেশন সম্পর্কে। মূল গেমের লুপটি সম্পর্কে ভাবুন। এআই (আসুন ধরে নেওয়া যাক প্লেয়ারটিকে এআইয়ের একটি বিশেষ কেস হিসাবে পরিচালনা করা হয়) পদার্থবিজ্ঞানের দ্বারা সনাক্ত হওয়া সংঘর্ষের জবাব দিতে হবে। সুতরাং, এটি পরে চালানো আবশ্যক। বা খুব কমপক্ষে, পদার্থবিজ্ঞানের পদার্থবিজ্ঞানের সিস্টেমের সীমানার মধ্যে এআই রুটিনগুলি কল করতে হবে (যা সাধারণত অনেক কারণেই ভাল ধারণা নয়)। পদার্থবিজ্ঞান সঞ্চালিত না হওয়া অবধি গ্রাফিকগুলি চলতে পারে না, কারণ পদার্থবিজ্ঞান হ'ল বস্তুর অবস্থান আপডেট করে। অবশ্যই, এআই এর পাশাপাশি রেন্ডারিংয়ের আগে চালানো দরকার, যেহেতু এআই নতুন নতুন বস্তুগুলিকে স্প্যান করতে পারে। শব্দগুলি এআই এবং প্লেয়ার নিয়ন্ত্রণের পরে চালানো দরকার need
সাধারণভাবে, গেমগুলি খুব কম উপায়ে নিজেকে থ্রেড করতে পারে। গ্রাফিক্স একটি থ্রেড মধ্যে কাটা যেতে পারে; গেম লুপ গ্রাফিক্স থ্রেডে একগুচ্ছ ডেটা গুঁজে দিতে পারে এবং বলতে পারে: এটি রেন্ডার করুন। এটি কিছু বেসিক ইন্টারপোলেশন করতে পারে, যাতে মূল গেম লুপটি গ্রাফিক্সের সাথে সুসংগত না হয়। শব্দ অন্য থ্রেড; গেম লুপটি "এটি খেলুন" বলে এবং এটি খেলানো হয়।
এর পরে, এটি সমস্ত বেদনাদায়ক হতে শুরু করে। আপনার যদি জটিল প্যাথিং অ্যালগরিদম (যেমন আরটিএসের জন্য) থাকে তবে আপনি সেগুলি থ্রেড করতে পারেন। অ্যালগরিদমগুলি সম্পূর্ণ হতে কয়েক ফ্রেম লাগতে পারে তবে সেগুলি অন্তত একযোগে থাকবে। এর বাইরেও এটি বেশ শক্ত।
সুতরাং আপনি 4 টি থ্রেড খুঁজছেন: খেলা, গ্রাফিক্স, শব্দ এবং সম্ভবত দীর্ঘমেয়াদী এআই প্রসেসিং। এটি খুব বেশি কিছু নয়। এবং এটি জিপিইউগুলির পক্ষে প্রায় পর্যাপ্ত নয় , যা একবারে ফ্লাইটে আক্ষরিক অর্ধশত থ্রেড থাকতে পারে। এটিই জিপিইউগুলিকে তাদের কর্মক্ষমতা দেয়: সেই সমস্ত থ্রেড একবারে ব্যবহার করতে সক্ষম হওয়া। এবং গেমস কেবল এটি করতে পারে না।
এখন, সম্ভবত আপনি কিছু ক্রিয়াকলাপের জন্য "প্রশস্ত" যেতে সক্ষম হতে পারেন। উদাহরণস্বরূপ, এআইগুলি সাধারণত একে অপরের থেকে স্বতন্ত্র থাকে। সুতরাং আপনি একবারে কয়েক ডজন এআই প্রক্রিয়া করতে পারেন। যতক্ষণ না আপনি আসলে এগুলিকে একে অপরের উপর নির্ভরশীল করে তোলা দরকার Right তাহলে আপনি সমস্যায় পড়েছেন। পদার্থবিজ্ঞানের অবজেক্টগুলি একইভাবে স্বতন্ত্র ... যদি না তাদের এবং / অথবা তারা কোনও কিছুর সাথে সংঘর্ষ না করে বাধা সৃষ্টি করে ra তখন তারা খুব নির্ভরশীল হয়ে ওঠে।
এছাড়াও, জিপিইউতে কেবল ব্যবহারকারীর ইনপুট অ্যাক্সেস নেই এমন ঘটনাও রয়েছে যা আমি বুঝতে পেরেছি গেমসের জন্য এটি একরকম গুরুত্বপূর্ণ। যাতে সরবরাহ করতে হবে। এটিতে সরাসরি ফাইল অ্যাক্সেস বা ওএসের সাথে কথা বলার কোনও আসল পদ্ধতি নেই; সুতরাং আবার, এটি সরবরাহ করার জন্য কিছু উপায় থাকতে হবে। ওহ, এবং সমস্ত শব্দ প্রক্রিয়াজাতকরণ? জিপিইউ শব্দগুলি নির্গত করে না। সুতরাং তাদের আবার সিপিইউতে যেতে হবে এবং তারপরে সাউন্ড চিপে ফিরে যেতে হবে।
ওহ, এবং জিপিইউগুলির কোডিং ভয়াবহ। এটি সঠিকভাবে পাওয়া শক্ত, এবং একটি জিপিইউ আর্কিটেকচারের জন্য "সঠিক" কী অন্যের পক্ষে খুব, খুব ভুল হতে পারে । এবং এটি কেবল এএমডি থেকে এনভিআইডিএ তে স্যুইচিংও নয়; এটি একটি জিফরাস 250 থেকে একটি জিফর্স 450 এ স্যুইচ করা যেতে পারে That's এটি মূল আর্কিটেকচারের পরিবর্তন। এবং এটি সহজেই আপনার কোডটি ভালভাবে চালিত করতে পারে না। সি ++ এবং এমনকি সিও অনুমোদিত নয়; আপনি যে সেরাটি পাবেন সেটি হল ওপেনসিএল, যা সি এর মতো ধরণের তবে কিছু চমত্কার ছাড়াই। পুনরাবৃত্তি মত । এটি ঠিক: জিপিইউগুলিতে কোনও পুনরাবৃত্তি নেই।
ডিবাগ? ওহ আমি আশা করি আপনি আপনার আইডিইর ডিবাগিং বৈশিষ্ট্যগুলি পছন্দ করবেন না কারণ সেগুলি অবশ্যই উপলভ্য হবে না। এমনকি আপনি জিডিবি ব্যবহার করলেও, বিদায়টি চুম্বন করুন। আপনাকে printf
ডিবাগিংয়ের অবলম্বন করতে হবে ... অপেক্ষা করুন, printf
জিপিইউতে নেই। সুতরাং আপনাকে মেমোরি অবস্থানগুলিতে লিখতে হবে এবং আপনার সিপিইউ স্টাব প্রোগ্রামগুলি সেগুলি আবার পড়তে হবে।
এটি ঠিক: ম্যানুয়াল ডিবাগিং। সে জন্য শুভকামনা।
এছাড়াও, সেই সহায়ক লাইব্রেরিগুলি আপনি সি / সি ++ ব্যবহার করেন? অথবা সম্ভবত আপনি আরও কিছু নেট নেট, এক্সএনএ এবং আরও ব্যবহার করে। বা যাই হোক না কেন. এটা কোন ব্যাপার না, যেহেতু আপনি ব্যবহার করতে পারবেন না কোনো GPU এর মাধ্যমে তাদের। আপনাকে অবশ্যই স্ক্র্যাচ থেকে সমস্ত কোড করতে হবে। এবং আপনার যদি ইতিমধ্যে বিদ্যমান কোডবেস থাকে তবে শক্ত: সেই সমস্ত কোডটি পুনরায় লেখার সময়।
তাই হ্যা. যে কোনও জটিল ধরণের গেমের জন্য আসলে তা করা ভয়ঙ্কর। এবং এটি এমনকি কার্যকর হবে না, কারণ গেমগুলি এটির পক্ষে যথেষ্ট সমান্তরাল নয়।