জিপিইউতে তুলনা কেন এত ব্যয়বহুল?


10

আমার সংঘর্ষ শনাক্তকরণ ক্লাসের পারফরম্যান্সকে উন্নত করার চেষ্টা করার সময় আমি খুঁজে পেলাম যে the 80% সময় জিপিইউতে ব্যয় করেছে, এটি যদি / অন্য শর্তগুলি কেবল বালতিগুলির মধ্য দিয়ে লুপ করা উচিত তবে তার সীমানা নির্ধারণের চেষ্টা করে তবে এটি ব্যয় করে।

আরো স্পষ্ট করে:

  1. প্রতিটি থ্রেড একটি আইডি পায়, সেই আইডি দ্বারা এটি মেমরি থেকে তার ত্রিভুজটি আনে (3 টি প্রতিটি পূর্ণসংখ্যার) এবং 3 টি দ্বারা এটি তার শীর্ষকোনাগুলি নিয়ে আসে (3 টি প্রতিটি ভাসমান)।

  2. তারপরে এটি উল্লম্বকে পূর্ণসংখ্যার গ্রিড পয়েন্টগুলিতে রূপান্তর করে (বর্তমানে 8x8x8) এবং তাদের সেই গ্রিডের ত্রিভুজ সীমানায় রূপান্তর করে

  3. 3 টি পয়েন্টকে সীমানায় রূপান্তর করতে, এটি প্রতিটি পয়েন্টের মধ্যে প্রতিটি মাত্রার নূন্যতম / সর্বোচ্চ সন্ধান করে

যেহেতু আমি যে প্রোগ্রামিং ভাষাটি ব্যবহার করছি তাতে একটি মিনম্যাক্স অন্তর্নিহিত অনুপস্থিত, তাই আমি নিজেই একটি তৈরি করেছি, দেখতে এটির মতো:

procedure MinMax(a, b, c):
   local min, max

   if a > b:
      max = a
      min = b
   else:
      max = b
      min = a
   if c > max:
      max = c
   else:
      if c < min:
         min = c

   return (min, max)

সুতরাং গড় হিসাবে এটি 2.5 * 3 * 3 = 22.5 তুলনা হওয়া উচিত যা প্রকৃত ত্রিভুজ - প্রান্ত ছেদ পরীক্ষা (প্রায় 100 * 11-50 নির্দেশাবলী) এর চেয়ে বেশি সময় খাওয়া শেষ করে।

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

তাহলে কেন একটি জিপিইউতে তুলনা এত ভয়ঙ্করভাবে ধীর হয়?


2
আপনার প্রশ্নটি নির্দিষ্ট ধরণের হার্ডওয়্যারটিতে কোডের একটি নির্দিষ্ট অংশের নির্দেশ-স্তরের পারফরম্যান্স সম্পর্কে। এটি আমার কাছে কম্পিউটার বিজ্ঞানের প্রশ্নের চেয়ে প্রোগ্রামিং প্রশ্নের মতো অনেক বেশি শোনায়।
ডেভিড রিচার্বি

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

1
@ ডেভিডরিচার্বি আমি নিশ্চিত নই যদিও এটি নির্দিষ্ট। এই প্রশ্নটি কোনও সিমডি আর্কিটেকচারের জন্য প্রযোজ্য হবে না?
কাস্পার্ড

1
@ ডেভিডরিচার্বি: সিএস বিভাগগুলিতে আমরা কমপ খিলান শিখানোর কারণ হ'ল কমপটি আর্চটি আপনার চয়ন করা অ্যালগরিদমে প্রভাব ফেলে। সিমডি আর্কিটেকচারগুলি কেবলমাত্র যদি আপনি কোনও নেস্টেড শাখাগুলি সহ প্রোগ্রামটি কীভাবে লিখবেন তা অনুধাবন করতে পারলেই উচ্চ থ্রুপুট উত্পাদন করতে পারে।
২:01

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

উত্তর:


10

জিপিইউগুলি সিমডি আর্কিটেকচার। সিমডি আর্কিটেকচারগুলিতে আপনার প্রক্রিয়া করা প্রতিটি উপাদানগুলির জন্য প্রতিটি নির্দেশ কার্যকর করা দরকার। (এই নিয়মের ব্যতিক্রম আছে, তবে এটি খুব কমই সহায়তা করে)।

সুতরাং আপনার MinMaxরুটিনে প্রতিটি কলকে তিনটি শাখার নির্দেশিকা আনা দরকার হয় না, (এমনকি যদি কেবল মাত্র 2.5 হিসাবে মূল্যায়ন করা হয়), তবে প্রতিটি কার্যনির্বাহী বিবৃতিটি একটি চক্রও গ্রহণ করে (এমনকি যদি এটি আসলে "কার্যকর" হয় না তবেও )।

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

সুতরাং আপনার কোডে, প্রতিটি সিমডি এক্সিকিউশন লেন করছে:

compare (a > b)
assign (max = a if a>b)
assign (min = b if a>b)
assign (max = b if not(a>b))
assign (min = a if not(a>b))
compare (c > max)
assign (max = c if c>max)
compare (c < min if not(c>max))
assign (min = c if not(c>max) and c<min)

এমনটি হতে পারে যে কিছু জিপিইউতে জিপিইউ নিজেই যদি এটি করে থাকে তবে শর্তসাপেক্ষে ভবিষ্যদ্বাণীতে রূপান্তরটি ধীর হয়। @ পলএ.ক্লেটন দ্বারা চিহ্নিত হিসাবে, যদি আপনার প্রোগ্রামিং ভাষা এবং আর্কিটেকচারের একটি পূর্বনির্ধারিত শর্তাধীন পদক্ষেপ অপারেশন থাকে (বিশেষত ফর্মের একটি if (c) x = y else x = z) আপনি আরও ভাল করতে সক্ষম হতে পারেন। (তবে সম্ভবত এর চেয়ে বেশি ভাল নয়)।

এছাড়াও, স্থাপন c < minশর্তসাপেক্ষ ভিতরে elseএর c > maxঅপ্রয়োজনীয়। এটি অবশ্যই আপনার কোনও কিছু সংরক্ষণ করছে না এবং (জিপিইউ স্বয়ংক্রিয়ভাবে এটি পূর্বাভাসে রূপান্তর করতে হবে) আসলে এটি দুটি ভিন্ন শর্তে বাসা বেঁধে ব্যথা করতে পারে।


2
(দুঃখিত, এর কোনও অংশ যদি অস্পষ্ট থাকে তবে আমি তাত্ত্বিকরা প্রশ্নটিকে বিষয়বস্তু হিসাবে বন্ধ করার আগে একটি উত্তর পাওয়ার চেষ্টা করছি।)
২and

বুনিয়াদি সম্পর্কে আরও জানার জন্য: http.developer.nvidia.com/GPUGسیم2 / gpugems2_chapter34.html এবং আরও সাম্প্রতিক কাজের জন্য: eecis.udel.edu/~cavazos/cisc879/papers/a3-han.pdf
ফিজ

এটি অর্থে বিষয়বস্তু যে সিমড সমান্তরালতার মাধ্যমে কিছু অ্যালগরিদম বাড়ানো যায় না। (যেমন: কেন আরও তাত্ত্বিক চিকিত্সার জন্য ওয়ার্ক, স্প্যান ইত্যাদি)
রব

1
বিভক্ত ব্যক্তিদের তেমন মূল বিষয়গুলি সম্পর্কে এখানে আরও একটি বক্তৃতা দেওয়া আছে ma math.ox.ac.uk/gilesm/cuda/lecs/lec3-2x2.pdf এগুলি থেকে লক্ষ্য করুন যে সমস্যাটি (এনভিডিয়ায় যাইহোক) কেবল প্রতি-ওয়ার্পের জন্য। বিভিন্ন ওয়ার্পে চলমান কোডগুলি আনন্দের সাথে আলাদা হতে পারে। এবং অন্য একটি কাগজ এড়াতে কোনও পদ্ধতির প্রস্তাব দিচ্ছে
Fizz

কিছুটা আলাদা ট্যাক্সের বিষয়ে , তবে আমি eprint.iacr.org/2012/137.pdf প্রশ্নের অধীনে যে মন্তব্যগুলি লিখেছি তার সাথে সামঞ্জস্য রেখে পড়াটা মূল্যবান: অনুমানিত পারফরম্যান্সের তুলনায় 10x মন্থরতা জিপিইউর জন্য "স্বাভাবিক" হতে পারে যদি না আপনি নামেন এর সমাবেশে (সাধারণত সরকারীভাবে অসমর্থিত সরঞ্জাম সহ) এটি সম্ভব যে জিপিইউ-টার্গেট করে সংকলকগুলি আরও ভাল হয়ে উঠেছে, তবে আমি আমার দম ধরে রাখব না।
ফিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.