জিএলএসএল শাখার কারণ কী তা জিপিইউ মডেল এবং ওপেনজিএল ড্রাইভার সংস্করণের উপর নির্ভর করে।
বেশিরভাগ জিপিইউতে "দুটি মানের মধ্যে একটি নির্বাচন করুন" অপারেশনের একটি ফর্ম রয়েছে বলে মনে হচ্ছে যার কোনও শাখা ব্যয় নেই:
n = (a==b) ? x : y;
এবং কখনও কখনও এমনকি জিনিস এমনকি:
if(a==b) {
n = x;
m = y;
} else {
n = y;
m = x;
}
কোনও শাখা ছাড়াই জরিমানা না করে কয়েকটি নির্বাচন-মান অপারেশনে হ্রাস করা হবে।
কিছু জিপিইউ / ড্রাইভারের দুটি মানের মধ্যে তুলনা অপারেটরের উপর কিছুটা পেনাল্টি (ছিল?) রয়েছে তবে শূন্যের তুলনায় একটি দ্রুত অপারেশন।
এটি করা যেখানে দ্রুত হতে পারে:
gl_FragColor.xyz = ((tmp1 - tmp2) != vec3(0.0)) ? E : tmp1;
বরং তুলনা (tmp1 != tmp2)
সরাসরি কিন্তু এই খুব জিপিইউ এবং ড্রাইভার নির্ভরশীল তাই যদি না আপনি একটি খুব নির্দিষ্ট জিপিইউ এবং কোন অন্যদের আমি সুপারিশ লক্ষ্য করে তুলনা অপারেশন এবং ছুটি ব্যবহার যে অন্য ড্রাইভার হিসাবে যেমন OpenGL ড্রাইভারে কাজ নিখুঁত আর ফর্ম নিয়ে একটি সমস্যা আছে পারে এবং আরও সহজ, আরও পঠনযোগ্য উপায়ে দ্রুত করুন।
"শাখা" সর্বদা খারাপ জিনিস হয় না। ওপেনপ্যান্ডোরায় ব্যবহৃত SGX530 জিপিইউর উদাহরণস্বরূপ, এই স্কেল 2 এক্স শেডার (30 মিমি):
lowp vec3 E = texture2D(s_texture0, v_texCoord[0]).xyz;
lowp vec3 D = texture2D(s_texture0, v_texCoord[1]).xyz;
lowp vec3 F = texture2D(s_texture0, v_texCoord[2]).xyz;
lowp vec3 H = texture2D(s_texture0, v_texCoord[3]).xyz;
lowp vec3 B = texture2D(s_texture0, v_texCoord[4]).xyz;
if ((D - F) * (H - B) == vec3(0.0)) {
gl_FragColor.xyz = E;
} else {
lowp vec2 p = fract(pos);
lowp vec3 tmp1 = p.x < 0.5 ? D : F;
lowp vec3 tmp2 = p.y < 0.5 ? H : B;
gl_FragColor.xyz = ((tmp1 - tmp2) != vec3(0.0)) ? E : tmp1;
}
এই সমতুল্য শেডার (80 মিমি) এর চেয়ে নাটকীয়ভাবে দ্রুত শেষ হয়েছে:
lowp vec3 E = texture2D(s_texture0, v_texCoord[0]).xyz;
lowp vec3 D = texture2D(s_texture0, v_texCoord[1]).xyz;
lowp vec3 F = texture2D(s_texture0, v_texCoord[2]).xyz;
lowp vec3 H = texture2D(s_texture0, v_texCoord[3]).xyz;
lowp vec3 B = texture2D(s_texture0, v_texCoord[4]).xyz;
lowp vec2 p = fract(pos);
lowp vec3 tmp1 = p.x < 0.5 ? D : F;
lowp vec3 tmp2 = p.y < 0.5 ? H : B;
lowp vec3 tmp3 = D == F || H == B ? E : tmp1;
gl_FragColor.xyz = tmp1 == tmp2 ? tmp3 : E;
আপনি কখনই কোনও নির্দিষ্ট GLSL সংকলক বা একটি নির্দিষ্ট জিপিইউ সঞ্চালন করবেন না যতক্ষণ আপনি এটি বেঞ্চমার্ক না করে।
পয়েন্টটি যুক্ত করতে (এমনকি এই অংশের জন্য আপনাকে উপস্থাপনের জন্য আমার কাছে আসল টাইমিং নম্বর এবং শেডার কোড নেই) আমি বর্তমানে আমার নিয়মিত পরীক্ষার হার্ডওয়্যার হিসাবে ব্যবহার করি:
- ইন্টেল এইচডি গ্রাফিক্স 3000
- ইন্টেল এইচডি 405 গ্রাফিক্স
- এনভিডিয়া জিটিএক্স 560 এম
- এনভিডিয়া জিটিএক্স 960
- এএমডি রেডিয়ন আর 7 260 এক্স
- এনভিডিয়া জিটিএক্স 1050
বিভিন্ন, সাধারণ, জিপিইউ মডেলগুলির সাথে বিস্তৃত বিস্তৃত পরিসীমা হিসাবে test
উইন্ডোজ, লিনাক্স মালিকানা, এবং লিনাক্স ওপেন সোর্স ওপেনজিএল এবং ওপেনসিএল ড্রাইভারগুলির সাথে প্রত্যেকের পরীক্ষা করা।
এবং প্রতিবার আমি জিএলএসএল শেডারকে মাইক্রো-অপ্টিমাইজ করার চেষ্টা করি (উপরের এসজিএক্স ৫৩০ উদাহরণ হিসাবে) বা একটি নির্দিষ্ট জিপিইউ / ড্রাইভার কম্বোয়ের জন্য ওপেনসিএল অপারেশনগুলি আমি অন্য জিপিইউ / ড্রাইভারগুলির মধ্যে একেরও বেশি পারফরম্যান্সকে আঘাত করি।
সুতরাং সুস্পষ্টভাবে উচ্চ-স্তরের গাণিতিক জটিলতা হ্রাস করা (উদাহরণস্বরূপ: 5 অভিন্ন বিভাগকে একটি একক পারস্পরিক এবং পরিবর্তে 5 গুণে রূপান্তর করা) এবং টেক্সচার লকআপ / ব্যান্ডউইথকে হ্রাস করা, সম্ভবত এটি আপনার সময় নষ্ট হবে।
প্রতিটি জিপিইউ অন্যদের থেকে অনেক আলাদা।
আপনি যদি একটি নির্দিষ্ট জিপিইউ দিয়ে (ক) গেমিং কনসোল (গুলি) এ সুনির্দিষ্টভাবে কাজ করছেন তবে এটি অন্যরকম গল্প হবে।
এর অন্যান্য (ছোট গেম ডেভসের পক্ষে কম গুরুত্বপূর্ণ তবে এখনও উল্লেখযোগ্য) দিকটি হ'ল কম্পিউটার জিপিইউ ড্রাইভাররা একদিন নিঃশব্দে আপনার ছায়ার প্রতিস্থাপন করতে পারে ( যদি আপনার গেমটি যথেষ্ট জনপ্রিয় হয়ে ওঠে ) সেই নির্দিষ্ট জিপিইউর জন্য অনুকূলিত পুনরায় লিখিতগুলির সাথে। এটি আপনার পক্ষে কাজ করে।
তারা জনপ্রিয় গেমগুলির জন্য এটি করবে যা ঘন ঘন বেঞ্চমার্ক হিসাবে ব্যবহৃত হয়।
বা যদি আপনি আপনার খেলোয়াড়দের ছায়া গোতে অ্যাক্সেস দেন তবে তারা সহজেই এগুলি সম্পাদনা করতে পারে তাদের মধ্যে কয়েকটি তাদের নিজস্ব সুবিধার জন্য কয়েকটি অতিরিক্ত এফপিএস গ্রাস করতে পারে।
উদাহরণস্বরূপ পাখা-তৈরি শেডার এবং টেক্সচার প্যাকগুলি নাটকীয়ভাবে নাটকীয়ভাবে প্লেযোগ্য হার্ডওয়্যারে ফ্রেম রেট নাটকীয়ভাবে বাড়ানোর জন্য lলভিওনের জন্য রয়েছে।
এবং সবশেষে, একবার আপনার শেডার যথেষ্ট জটিল হয়ে উঠলে, আপনার গেমটি প্রায় শেষ হয়ে যায় এবং আপনি বিভিন্ন হার্ডওয়ারের উপর পরীক্ষা শুরু করেন আপনি বিভিন্ন ধরণের জিপিইউতে আপনার শেয়ারগুলি ঠিকঠাক করে ফিক্সিং করতে পারবেন কারণ এটি বিভিন্ন বাগের কারণে না হয় ont তাদের সেই ডিগ্রীতে অপ্টিমাইজ করার সময় আছে।