== জিএলএসএল শাখার কারণ?


27

ব্রাঞ্চিংয়ের কারণ কী এবং জিএলএসএল-তে কী নেই ঠিক তা জানার চেষ্টা করা।

আমি আমার শেডারে এটি অনেক করছি:

float(a==b)

আমি শর্তযুক্ত শাখা ছাড়াই যদি বিবৃতিগুলি অনুকরণ করতে ব্যবহার করি ... তবে এটি কার্যকর? আমার প্রোগ্রামে এখন কোথাও যদি বিবৃতি না থাকে তবে আমার কোনও লুপ নেই।

সম্পাদনা: পরিষ্কার করার জন্য, আমি আমার কোডে এই জাতীয় জিনিসগুলি করি:

float isTint = float((renderflags & GK_TINT) > uint(0)); // 1 if true, 0 if false
    float isNotTint = 1-isTint;//swaps with the other value
    float isDarken = float((renderflags & GK_DARKEN) > uint(0));
    float isNotDarken = 1-isDarken;
    float isAverage = float((renderflags & GK_AVERAGE) > uint(0));
    float isNotAverage = 1-isAverage;
    //it is none of those if:
    //* More than one of them is true
    //* All of them are false
    float isNoneofThose = isTint * isDarken * isAverage + isNotTint * isAverage * isDarken + isTint * isNotAverage * isDarken + isTint * isAverage * isNotDarken + isNotTint * isNotAverage * isNotDarken;
    float isNotNoneofThose = 1-isNoneofThose;

    //Calc finalcolor;
    finalcolor = (primary_color + secondary_color) * isTint * isNotNoneofThose + (primary_color - secondary_color) * isDarken * isNotNoneofThose + vec3((primary_color.x + secondary_color.x)/2.0,(primary_color.y + secondary_color.y)/2.0,(primary_color.z + secondary_color.z)/2.0) * isAverage * isNotNoneofThose + primary_color * isNoneofThose;

সম্পাদনা: আমি কেন শাখা চাই না জানি। আমি জানি ব্রাঞ্চিং কি। আমি আনন্দিত যে আপনি বাচ্চাদের শাখা প্রশাখা সম্পর্কে শিখিয়েছেন তবে আমি নিজেকে বুলিয়ান অপারেটর সম্পর্কে জানতে চাই (এবং বিটওয়াইস অপসেস তবে আমি বেশ নিশ্চিত যে সেগুলি ঠিক আছে)

উত্তর:


42

জিএলএসএল শাখার কারণ কী তা জিপিইউ মডেল এবং ওপেনজিএল ড্রাইভার সংস্করণের উপর নির্ভর করে।

বেশিরভাগ জিপিইউতে "দুটি মানের মধ্যে একটি নির্বাচন করুন" অপারেশনের একটি ফর্ম রয়েছে বলে মনে হচ্ছে যার কোনও শাখা ব্যয় নেই:

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 তাদের সেই ডিগ্রীতে অপ্টিমাইজ করার সময় আছে।


"বা যদি আপনি আপনার খেলোয়াড়দের ছায়ায় অ্যাক্সেস দেন যাতে তারা সহজেই সেগুলি এডিট করতে পারে ..." যেহেতু আপনি এটি উল্লেখ করেছেন তাই ওয়ালহ্যাক শেডার এবং এর মতো আপনার দৃষ্টিভঙ্গি কী হতে পারে? অনার সিস্টেম, যাচাই, রিপোর্ট ...? আমি লবিগুলির ধারণাটি একই ছায়া গো / সম্পদগুলিতে সীমাবদ্ধ রাখি, সে যাই হোক না কেন, যেহেতু সর্বাধিক / মিনিট / স্কেলযোগ্য বাস্তববাদ, শোষণ ইত্যাদির অবস্থানগুলি পর্যালোচনা, সহযোগিতা ইত্যাদিকে উত্সাহিত করার জন্য খেলোয়াড় এবং মোড্ডারদের একত্রিত করা উচিত I এটি গ্যারি'র মোডে যেভাবে কাজ করেছিল তা মনে রাখার জন্য, তবে আমি লুপ থেকে খুব ভাল আছি।
জন পি

1
@ জনপি সুরক্ষা অনুসারে ক্লায়েন্টের সাথে আপস করা হয়নি বলে ধরে নেওয়া যে কোনওভাবেই কাজ করে না। অবশ্যই যদি আপনি না চান লোকেরা তাদের ছায়াছবিগুলি সম্পাদনা করে তবে তাদের প্রকাশের কোনও অর্থ নেই, তবে এটি সুরক্ষার সাথে সত্যিকারের এতটা কিছু করে না। ওয়ালহ্যাক্সের মতো জিনিসগুলি সনাক্ত করার জন্য আপনার কৌশলটি ক্লায়েন্টের সাথে জগাখিচির বিষয়গুলিকে কম প্রথম বাধা হিসাবে বিবেচনা করবে এবং যুক্তিযুক্তভাবে এই উত্তরটির মতো হালকা পরিবর্তনের অনুমতি দেওয়ার জন্য আরও বড় সুবিধা হতে পারে যদি এটি খেলোয়াড়ের জন্য সনাক্তযোগ্য অন্যায় সুবিধা না নিয়ে যায় doesn't ।
কিউবিক

8
@ জনপি আপনি যদি খেলোয়াড়দেরও প্রাচীরের মধ্যে দিয়ে দেখতে না চান তবে সার্ভারটি দেওয়ালের পিছনে কী রয়েছে সে সম্পর্কে তাদের কোনও তথ্য প্রেরণ করবেন না।

1
কেবল এটি - আমি যে কোনও কারণেই খেলোয়াড়দের পছন্দ করি এমন খেলোয়াড়দের মধ্যে ওয়াল-হ্যাকিংয়ের বিপক্ষে নই। খেলোয়াড় হিসাবে, যদিও আমি বেশ কয়েকটি এএএ শিরোনাম ত্যাগ করেছি কারণ - অন্যান্য কারণগুলির মধ্যে - তারা অর্থ / এক্সপি / ইত্যাদি ক্ষেত্রে নান্দনিক মডডারগুলির উদাহরণ তৈরি করেছে। হ্যাকাররা আটকানো হয়নি (যারা প্রদানের জন্য যথেষ্ট হতাশাগুলি থেকে প্রকৃত অর্থ উপার্জন করেছিল), তাদের প্রতিবেদন এবং আপিল সিস্টেমকে ছাড়িয়ে গেছে এবং স্বয়ংক্রিয়ভাবে তৈরি করেছে এবং নিশ্চিত করেছে যে গেমগুলি বেঁচে থাকার জন্য তাদের যত্ন নেওয়া কতগুলি সার্ভার রেখেছিল এবং মারা গেছে died আমি আশাবাদী যে একজন দেব এবং খেলোয়াড় উভয়ের মতোই আরও বিকেন্দ্রীভূত পদ্ধতি থাকতে পারে।
জন পি

না আমি কোথাও থাকলে ইনলাইন করি না। আমি কেবল ভাসা (বুলিয়ান স্টেটমেন্ট) * (কিছু)
Geklmintendnot অব অসাধারণ

7

@ স্টাফেন হকেনহুলের উত্তর আপনাকে যা জানার দরকার তা দেয়, এটি সম্পূর্ণরূপে হার্ডওয়্যার নির্ভর be

তবে এটি আপনাকে হার্ডওয়্যার নির্ভর করে কীভাবে হতে পারে এবং ব্রাঞ্চিং কেন একেবারেই একটি সমস্যা, তার শাখা প্রশাখাগুলি ঘটে যখন জিপিইউ পর্দার পিছনে কী করে তা এর কয়েকটি উদাহরণ দেই ।

আমার ফোকাসটি প্রাথমিকভাবে এনভিডিয়ায়, আমার নিম্ন স্তরের সিইডিডিএ প্রোগ্রামিংয়ের সাথে কিছু অভিজ্ঞতা আছে এবং আমি দেখতে পাই পিটিএক্স ( সিপিডিএ-এর মতো সিপিডি কার্নেলগুলির জন্য আইআর ) তবে কেবল এনভিডিয়া জন্য উত্পন্ন হয় এবং নির্দিষ্ট পরিবর্তনগুলি করার মানদণ্ড দেখতে পাই।

জিপিইউ আর্কিটেকচারে ব্রাঞ্চিং কেন এত বড় চুক্তি?

প্রথম স্থানে শাখা করা খারাপ কেন? জিপিইউরা কেন প্রথমে শাখা এড়াতে চেষ্টা করবে? কারণ জিপিইউগুলি সাধারণত এমন একটি স্কিম ব্যবহার করে যেখানে থ্রেডগুলি একই নির্দেশিকা পয়েন্টার ভাগ করে । জিপিইউগুলি একটি সিমডি আর্কিটেকচার অনুসরণ করেসাধারণত, এবং এর গ্রানুলারিটি পরিবর্তিত হতে পারে (যেমন এনভিডিয়ায় 32 টি থ্রেড, এএমডি এবং অন্যদের জন্য 64) কিছু স্তরে থ্রেডের একটি গ্রুপ একই নির্দেশ পয়েন্টার ভাগ করে। এর অর্থ হ'ল একই সমস্যাটিতে একসাথে কাজ করার জন্য সেই থ্রেডগুলির একই কোডের লাইনের দিকে তাকাতে হবে। আপনি জিজ্ঞাসা করতে পারেন তারা কীভাবে একই লাইনের কোড ব্যবহার করতে এবং বিভিন্ন জিনিস করতে সক্ষম হয়? তারা রেজিস্টারে বিভিন্ন মান ব্যবহার করে, তবে সেই রেজিস্টারগুলি এখনও পুরো গ্রুপ জুড়ে একই লাইন কোডে ব্যবহৃত হয়। যখন কেস হয়ে যায় তখন কী ঘটে? (IE একটি শাখা?) প্রোগ্রামটির সত্যিকার অর্থে যদি কোনও উপায় না থাকে তবে এটি গ্রুপটি বিভক্ত হয়ে যায় (এনভিডিয়ার 32 টি থ্রেডের এই জাতীয় বান্ডিলগুলিকে একটি ওয়ার্প বলা হয় , এটিএমডি এবং সমান্তরাল কম্পিউটিং একাডেমিয়ার জন্য, এটি ওয়েভফ্রন্ট হিসাবে উল্লেখ করা হয়) দুই বা ততোধিক পৃথক গোষ্ঠীতে।

যদি কোডের দুটি মাত্র ভিন্ন লাইন থাকে তবে আপনি শেষ হয়ে যাবেন, তবে কার্যকারী থ্রেডগুলি দুটি গ্রুপের মধ্যে বিভক্ত হয়ে যাবে (এখান থেকে একটি আমি তাদেরকে ওয়ার্প বলব)। আসুন এনভিডিয়া আর্কিটেকচারটি ধরে নিই, যেখানে ওয়ার্পের আকার 32 হয়, যদি এই থ্রেডগুলির অর্ধেকটি বিভক্ত হয় তবে আপনার কাছে 32 টি সক্রিয় থ্রেড দ্বারা দখল করা 2 টি ওয়ার্পস থাকবে, যা জিনিসগুলি শেষের মাধ্যমে একটি কম্পিউটারের থেকে অর্ধেক দক্ষ করে তোলে। অনেকগুলি আর্কিটেকচারে জিপিইউ একই নির্দেশিকা পোস্ট শাখায় পৌঁছে থ্রেডগুলিকে আবার একতামূলক বার্পে রূপান্তরিত করে এর প্রতিকার করার চেষ্টা করবে , বা সংকলক স্পষ্টতই একটি সিঙ্ক্রোনাইজেশন পয়েন্ট দেবে যা জিপিইউকে থ্রেডগুলিকে ফেরত রূপান্তর করতে বলেছে বা করার চেষ্টা করবে।

উদাহরণ স্বরূপ:

if(a)
    x += z * w;
    q >>= p;
else if(c)
    y -= 3;
r += t;

থ্রেডটি ডাইভার্জ করার শক্তিশালী সম্ভাবনা রয়েছে (ভিন্ন ভিন্ন নির্দেশের পাথ) যাতে এমন ক্ষেত্রে আপনার r += t;নির্দেশনা পয়েন্টারগুলি আবার একই রকম হয় সেদিকে আপনার একত্রীকরণ ঘটতে পারে। ডাইভার্জেন্স দুটিরও বেশি শাখার সাথেও ঘটতে পারে, এর ফলে আরও কম ওয়ার্প ব্যবহার হয়, চারটি শাখার অর্থ 32 টি থ্রেড 4 টি ওয়ার্পে বিভক্ত হয়, 25% থ্রুপুট ব্যবহার হয়। রূপান্তর যাইহোক এই সমস্যাগুলির মধ্যে কিছু আড়াল করতে পারে, কারণ 25% পুরো প্রোগ্রামের মাধ্যমে থ্রুপুটটি রাখে না।

কম পরিশীলিত জিপিইউতে অন্যান্য সমস্যা দেখা দিতে পারে। পরিবর্তনের পরিবর্তে তারা কেবল সমস্ত শাখা গণনা করে তারপরে শেষে আউটপুটটি নির্বাচন করুন। এটি ডাইভার্জেন্সের সমান প্রদর্শিত হতে পারে (উভয়েরই 1 / n থ্রুপুট ব্যবহার রয়েছে), তবে সদৃশ পদ্ধতির সাথে কয়েকটি বড় সমস্যা রয়েছে।

একটি হ'ল বিদ্যুতের ব্যবহার, আপনি যখন খুব বেশি বিদ্যুত ব্যবহার করেন তখন যখন কোনও শাখা ঘটে, মোবাইল জিপিএসের জন্য এটি খারাপ হবে। দ্বিতীয়টি হ'ল ডাইভার্জেন্স কেবলমাত্র এনভিডিয়া জিপাসে ঘটে যখন একই ওয়ার্পের থ্রেডগুলি বিভিন্ন পাথ নেয় এবং এইভাবে একটি পৃথক নির্দেশিকা পয়েন্টার থাকে (যা পাস্কেলের মতো ভাগ করা হয়)। সুতরাং আপনি এখনও শাখা করতে পারেন এবং এনভিডিয়া জিপিইউগুলিতে থ্রুপুট সমস্যাগুলি না থাকলে যদি সেগুলি 32 এর গুণক হয় বা শুধুমাত্র কয়েক ডজনের মধ্যে একক রেপগুলিতে ঘটে। যদি কোনও শাখা হওয়ার সম্ভাবনা থাকে তবে সম্ভবত কম থ্রেড বিভক্ত হবে এবং আপনার কোনওভাবেই ব্রাঞ্চিংয়ের সমস্যা থাকবে না।

আরেকটি ছোট সমস্যা হ'ল আপনি যখন সিপিইউগুলির তুলনায় জিপিইউ তুলনা করেন, তাদের প্রায়শই ভবিষ্যদ্বাণী ব্যবস্থা এবং অন্যান্য শক্তিশালী শাখা প্রক্রিয়া থাকে না কারণ সেই ব্যবস্থাগুলি কতটা হার্ডওয়ার গ্রহণ করে, আপনি প্রায়শই আধুনিক জিপিইউগুলিতে কোনও অপ-ফিল পূরণ করতে পারেন না

ব্যবহারিক জিপিইউ আর্কিটেকচারাল পার্থক্য উদাহরণ

এখন স্টিফেনসের উদাহরণ গ্রহণ করুন এবং দেখুন দুটি তাত্ত্বিক আর্কিটেকচারের অধিবেশনটি শাখা-নিখরচায় সমাধানের জন্য কেমন হবে তা দেখুন।

n = (a==b) ? x : y;

স্টিফেন যেমন বলেছিলেন, যখন ডিভাইস সংকলকটি একটি শাখার মুখোমুখি হয় তখন কোনও উপাদানকে "চয়ন" করার জন্য কোনও নির্দেশ ব্যবহার করার সিদ্ধান্ত নিতে পারে যা কোনও শাখার দণ্ড না পেয়ে শেষ হয়। এর অর্থ কিছু ডিভাইসগুলিতে এটি এরকম কিছুতে সংকলিত হবে

cmpeq rega, regb
// implicit setting of comparison bit used in next part
choose regn, regx, regy

অন্যদের উপর একটি পছন্দ নির্দেশাবলী সহ, এটি সংকলিত হতে পারে

n = ((a==b))* x + (!(a==b))* y

যা দেখতে হতে পারে:

cmpeq rega regb
// implicit setting of comparison bit used in next part
mul regn regcmp regx
xor regcmp regcmp 1
mul regresult regcmp regy
mul regn regn regresult

যা শাখা-হ্রাস এবং সমতুল্য, তবে আরও নির্দেশাবলী গ্রহণ করে। যেহেতু স্টিফেনস উদাহরণটি সম্ভবত তাদের নিজ নিজ সিস্টেমে সংকলিত হবে, নিজেই শাখাটি সরিয়ে ফেলতে গণিতটি ম্যানুয়ালি বের করার চেষ্টা করা খুব একটা বোধগম্য নয়, কারণ প্রথম স্থাপত্যের সংকলক পরিবর্তে দ্বিতীয় ফর্মটি সংকলনের সিদ্ধান্ত নিতে পারে দ্রুত ফর্ম।


5

আমি @ স্টেফেন হকেনহুলের উত্তরে যা বলেছি তার সাথে আমি একমত হয়েছি। শেষ পয়েন্টে প্রসারিত করতে:

আপনি কখনই কোনও নির্দিষ্ট GLSL সংকলক বা একটি নির্দিষ্ট জিপিইউ সঞ্চালন করবেন না যতক্ষণ আপনি এটি বেঞ্চমার্ক না করে।

একেবারে সত্য. তদ্ব্যতীত, আমি এই ধরণের প্রশ্নটি বেশ ঘন ঘন আসতে দেখি। তবে অনুশীলনে আমি খুব কমই দেখেছি যে কোনও খণ্ড শ্যাডার একটি পারফরম্যান্স সমস্যার উত্স হয়ে উঠেছে। এটি অনেক বেশি সাধারণ যে অন্যান্য বিষয়গুলি জিপিইউ থেকে রাষ্ট্রের প্রচুর পাঠ, অনেকগুলি বাফার অদলবদল করা, একক ড্র কলে খুব বেশি কাজ করা ইত্যাদি সমস্যা সৃষ্টি করে much

অন্য কথায়, আপনি কোনও শেডারকে মাইক্রো-অপ্টিমাইজ করার বিষয়ে উদ্বিগ্ন হওয়ার আগে, আপনার সম্পূর্ণ অ্যাপ্লিকেশনটিকে প্রোফাইল দিন এবং নিশ্চিত করুন যে শেডারগুলি আপনার মন্দাকে কারণ করছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.