CUDA কীভাবে CUDA কোরগুলিতে ব্লক / ওয়ার্পস / থ্রেড ম্যাপ করে?


142

আমি কয়েক সপ্তাহ ধরে CUDA ব্যবহার করছি, তবে ব্লক / ওয়ার্পস / থ্রেডের বরাদ্দ সম্পর্কে আমার কিছু সন্দেহ রয়েছে। আমি একটি ডায়ডটিক দৃষ্টিকোণ (বিশ্ববিদ্যালয় প্রকল্প) থেকে স্থাপত্য অধ্যয়ন করছি , সুতরাং শীর্ষের সম্পাদনা পৌঁছানো আমার উদ্বেগ নয়।

প্রথমত, আমি বুঝতে চাই যে এই বিষয়গুলি সরাসরি পেয়েছি:

  1. প্রোগ্রামার একটি কার্নেল লিখে, এবং থ্রেড ব্লকের একটি গ্রিডে এর সম্পাদনের ব্যবস্থা করে।

  2. প্রতিটি ব্লক একটি স্ট্রিমিং মাল্টিপ্রসেসর (এসএম) এর জন্য বরাদ্দ করা হয়। একবার নিয়োগের পরে এটি অন্য এসএম-তে স্থানান্তরিত হতে পারে না।

  3. প্রতিটি এসএম তার নিজস্ব ব্লকগুলি ওয়ার্পসে বিভক্ত করে (বর্তমানে সর্বাধিক 32 টি থ্রেডের আকার সহ)। একটি ওয়ার্পের সমস্ত থ্রেড এসএম এর সংস্থাগুলিতে একযোগে কার্যকর করে।

  4. কোনও থ্রেডের আসল সম্পাদন এসএম এর মধ্যে থাকা কুডিএ কোর দ্বারা সম্পাদিত হয়। থ্রেড এবং কোরগুলির মধ্যে কোনও নির্দিষ্ট ম্যাপিং নেই।

  5. যদি কোনও ওয়ার্পে 20 টি থ্রেড থাকে তবে বর্তমানে কেবল 16 টি কোর উপলব্ধ থাকে তবে ওয়ার্পটি চলবে না।

  6. অন্যদিকে যদি কোনও ব্লকে 48 টি থ্রেড থাকে, তবে এটি 2 টি ওয়ার্পে বিভক্ত হবে এবং পর্যাপ্ত মেমরি উপলব্ধ থাকলে তারা সমান্তরালে সম্পাদন করবে।

  7. কোনও থ্রেড যদি কোনও কোর থেকে শুরু হয়, তবে এটি মেমোরি অ্যাক্সেসের জন্য বা দীর্ঘ ভাসমান পয়েন্ট অপারেশনের জন্য স্থগিত হয়, এর কার্যকরকরণটি অন্য কোনও কোরতে আবার শুরু হতে পারে।

তারা সঠিক?

এখন, আমার কাছে একটি জিওফোরস 560 টি রয়েছে তাই নির্দিষ্টকরণ অনুসারে এটি 8 এসএম সহ সজ্জিত রয়েছে, যার প্রত্যেকটিতে 48 টি সিউডিএ কোর (মোট 384 টি কোর) রয়েছে।

আমার লক্ষ্যটি নিশ্চিত করা যে আর্কিটেকচারের প্রতিটি কোর একই নির্দেশাবলী কার্যকর করে। ধরে নিলাম যে আমার কোডে প্রতিটি এসএম-এ পাওয়া যায় তার চেয়ে বেশি নিবন্ধকের প্রয়োজন হবে না, আমি বিভিন্ন পদ্ধতির কল্পনা করেছি:

  1. আমি প্রতিটি 48 টি থ্রেডের 8 টি ব্লক তৈরি করি, যাতে প্রতিটি এসএমের সম্পাদন করার জন্য 1 টি ব্লক থাকে। এই ক্ষেত্রে 48 টি থ্রেডগুলি এসএম এর সমান্তরালভাবে কার্যকর হবে (তাদের জন্য উপলব্ধ 48 টি কোর ব্যবহার করে)?

  2. যদি আমি 6 টি থ্রেডের 64 টি ব্লক চালু করি তবে কি কোনও পার্থক্য রয়েছে? (ধরে নিই যে তারা এসএমগুলির মধ্যে সমানভাবে ম্যাপ করা হবে)

  3. যদি আমি নির্ধারিত কাজে জিপিইউটিকে "নিমজ্জন" করি (উদাহরণস্বরূপ, প্রতিটি 1024 থ্রেডের 1024 ব্লক তৈরি করা হয়) তবে এই ধারণাটি যুক্তিসঙ্গত হয় যে সমস্ত কোর একটি নির্দিষ্ট পয়েন্টে ব্যবহৃত হবে, এবং একই গণনা সম্পাদন করবে (ধরে নিবেন যে থ্রেডগুলি ধরে রেখেছেন) কখনও স্টল) না?

  4. প্রোফাইলার ব্যবহার করে এই পরিস্থিতিগুলি চেক করার কোনও উপায় আছে কি?

  5. এই জিনিস জন্য কোন রেফারেন্স আছে? আমি CUDA প্রোগ্রামিং গাইড এবং "প্রোগ্রামিং ম্যাসিভলি প্যারালাল প্রসেসর" এবং "CUDA অ্যাপ্লিকেশন ডিজাইন এবং বিকাশ" এ হার্ডওয়্যার আর্কিটেকচারকে উত্সর্গীকৃত অধ্যায়গুলি পড়েছি; তবে আমি সুনির্দিষ্ট উত্তর পেতে পারি না।


আমি "কুডা কোর" কী মন্তব্য হিসাবে যুক্ত করতে চাই। "সিইউডিএ কোর" বা "এক্সিকিউশন ইউনিট" পুরোপুরি পাইপলাইন করা পূর্ণসংখ্যা ALU এবং FPU যা একটি চুদা থ্রেডে প্রতি ঘড়ি চক্রের জন্য একটি গাণিতিক নির্দেশ নির্দেশ কার্যকর করে।
বুড়িউজ

উত্তর:


123

সেরা উল্লেখ দুটি

  1. এনভিআইডিএ ফার্মি কম্পিউট আর্কিটেকচার হোয়াইটপেপার
  2. GF104 পর্যালোচনা

আমি আপনার প্রতিটি প্রশ্নের উত্তর দেওয়ার চেষ্টা করব।

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

4 ' । লেনিড (একটি রেপগুলিতে থ্রেড সূচক) এবং একটি কোরের মধ্যে ম্যাপিং রয়েছে।

5 ' । যদি কোনও ওয়ার্পে 32 টিরও কম থ্রেড থাকে তবে এটি বেশিরভাগ ক্ষেত্রেই একইভাবে কার্যকর করা হবে যেমন 32 টি থ্রেড রয়েছে। ওয়ারপসের বিভিন্ন কারণে 32 টিরও কম সক্রিয় থ্রেড থাকতে পারে: প্রতি ব্লক থ্রেডের সংখ্যা 32 দ্বারা বিভাজ্য নয়, প্রোগ্রামটি একটি বিচ্ছিন্ন ব্লক কার্যকর করে তাই যে থ্রেডগুলি বর্তমান পথটি গ্রহণ করে নি সেগুলি নিষ্ক্রিয় হিসাবে চিহ্নিত করা হয়, বা বার্পের কোনও থ্রেড বেরিয়ে আসে।

6 ' । একটি থ্রেড ব্লকটি ওয়ার্পসপারব্লক = (থ্রেডসপলব্লক + ওয়ার্পসাইজ - ১) / ওয়ার্পসাইজে ভাগ করা হবে ওয়ার্প শিডিয়ুলারদের একই থ্রেড ব্লক থেকে দুটি ওয়ার্প নির্বাচন করার প্রয়োজন নেই।

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

GTX480 এবং GTX560 এর মধ্যে পার্থক্যের জন্য রেফারেন্স 2 দেখুন ।

আপনি যদি রেফারেন্স উপাদানটি পড়েন (কয়েক মিনিট) আমার মনে হয় আপনি খুঁজে পাবেন যে আপনার লক্ষ্যটি কোনও অর্থবোধ করে না। আমি আপনার পয়েন্ট সাড়া দেওয়ার চেষ্টা করব।

1 ' । যদি আপনি কার্নেল <<< 8, 48 >>> চালু করেন তবে আপনি 32 এবং 16 টি থ্রেডের 2 টি ওয়ার্প সহ 8 টি ব্লক পাবেন। এই 8 টি ব্লককে বিভিন্ন এসএমগুলিতে নিয়োগ দেওয়া হবে এমন কোনও গ্যারান্টি নেই। যদি 2 টি ব্লক কোনও এসএমকে বরাদ্দ করা হয় তবে প্রতিটি ওয়ার্প শিডিয়ুলার একটি ওয়ার্প নির্বাচন করতে এবং ওয়ার্পটি কার্যকর করতে পারে। আপনি 48 টির মধ্যে কেবল 32 টি ব্যবহার করবেন।

2 ' । 48 টি থ্রেডের 8 টি ব্লক এবং 6 থ্রেডের 64 টি ব্লকের মধ্যে একটি বড় পার্থক্য রয়েছে। আসুন ধরে নেওয়া যাক আপনার কার্নেলের কোনও বিভাজন নেই এবং প্রতিটি থ্রেড 10 টি নির্দেশাবলী কার্যকর করে।

  • 48 টি থ্রেড সহ 16 টি ব্লক = 16 টি ওয়ার্পস * 10 টি নির্দেশাবলী = 160 নির্দেশাবলী
  • 6 টি থ্রেড = 64 ওয়ারপস * 10 নির্দেশাবলী = 640 নির্দেশাবলী সহ 64 টি ব্লক

অনুকূল দক্ষতা পেতে কাজের বিভাজনটি 32 টি থ্রেডের গুণক হওয়া উচিত। হার্ডওয়্যার বিভিন্ন ওয়ার্প থেকে থ্রেড একত্রিত করবে না।

3 ' । একটি জিটিএক্স ৫ max০ টি একবারে 8 এসএম * 8 ব্লক = 64 টি ব্লক বা 8 এসএম * 48 ওয়ার্পস = 512 ওয়ার্প থাকতে পারে যদি কার্নেলটি নিবন্ধগুলি বা ভাগ করা মেমরি সর্বাধিক না করে। কাজের কোনও অংশে যে কোনও সময় এসএমগুলিতে সক্রিয় থাকবে। প্রতিটি এসএম এর একাধিক এক্সিকিউশন ইউনিট থাকে (সিউডিএ কোরের চেয়ে বেশি) কোন নির্দিষ্ট সময়ে কোন রিসোর্স ব্যবহার করা হবে তা অ্যাপ্লিকেশনের ওয়ার্প সিডিউলার এবং নির্দেশের মিশ্রণের উপর নির্ভরশীল। আপনি যদি টেক্স অপারেশন না করেন তবে টেক্স ইউনিট অলস হয়ে যাবে। আপনি যদি একটি বিশেষ ভাসমান পয়েন্ট অপারেশন না করেন তবে এসইউএফইউ ইউনিটগুলি অলস হয়ে যাবে।

4 ' । সমান্তরাল নাইট এবং ভিজ্যুয়াল প্রোফাইলার শো

ক। কার্যকর আইপিসি

খ। জারি করা আইপিসি

গ। সক্রিয় চক্র প্রতি সক্রিয় warps

ঘ। সক্রিয় চক্রের জন্য যোগ্য ওয়ার্পস (কেবলমাত্র নাইট)

ঙ। স্ট্র্যাপ স্টলের কারণ (কেবলমাত্র রাত্রি)

চ। কার্যকর প্রতিটি নির্দেশ কার্যকর

প্রোফাইলার এক্সিকিউশন ইউনিটের কোনওটির ব্যবহারের শতাংশ দেখায় না। জিটিএক্স ৫60০ এর জন্য মোটামুটি অনুমান ইস্যুডআইপি / ম্যাক্সআইপিসি হবে। ম্যাক্সআইপিসির জন্য ধরে নিন জিএফ 100 (জিটিএক্স 480) 2 জিএফ 10 এক্স (জিটিএক্স 560) 4 তবে লক্ষ্য 3 হ'ল একটি ভাল লক্ষ্য।


1
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। আমি রেফারেন্সগুলি পড়েছি, তবে কয়েকটি জিনিস রয়েছে যা আমি আপনার উত্তরে বুঝতে পারি না। নিম্নলিখিত প্রশ্নগুলিতে আমি ধরে নিচ্ছি যে আমরা 48 টি কোর (16 কোর * 3 "কোর গ্রুপ") দিয়ে ফার্মি আর্কিটেকচার ব্যবহার করছি: 1. আপনি কোর এবং লেনিডের মধ্যে একটি ম্যাপিংয়ের কথা বলেছেন। এটি কোন ধরণের ম্যাপিং? ২. রেফারেন্সগুলি থেকে আমি পেয়েছি যে প্রতিটি "কোর গ্রুপ" প্রতি ঘড়ির চক্রে সর্বাধিক অর্ধ-ওয়ার্প (16 থ্রেড) চালায়। সুতরাং তাত্ত্বিকভাবে যদি আমাদের একই ব্লকে 48 টি থ্রেড থাকে তবে সেগুলি 3 টি অর্ধ-ওয়ার্পগুলিতে সংগঠিত হবে এবং 48 টি কোরের সমান্তরালে সম্পাদন করা হবে। আমি কি সঠিক?
ডেডালাস

1
সিইউডিএ কোরগুলি একক নির্ভুলতা এফপি ইউনিটের সংখ্যা। চুদা কোরের ক্ষেত্রে কার্যকর করার চিন্তাভাবনা সঠিক নয়। প্রতিটি ওয়ার্পের 32 টি থ্রেড রয়েছে। এই থ্রেডগুলি কার্যকর করা ইউনিটগুলির একটি গ্রুপকে দেওয়া হবে (উদাঃ 16 চুদা কোর)) এক ঘড়িতে সমস্ত 48 টির জন্য ইস্যু করার জন্য দুটি ওয়ার্প শিডিয়ুলারের মধ্যে একটিতে একটি সুপারপ্যাকার জোড়ের সাথে মিলিত একটি ওয়ার্প নির্বাচন করা দরকার এবং উভয় নির্দেশিকা CUDA কোর দ্বারা সম্পাদিত এক ধরণের হওয়া দরকার। এছাড়াও অন্যান্য ওয়ার্প শিডিয়ুলারকে একটি ওয়ার্প বাছাই করতে হয় যার পরবর্তী নির্দেশটি চুদা কোর দ্বারা কার্যকর করা হবে।
গ্রেগ স্মিথ

1
ওয়ারপস একই ব্লকের মধ্যে থাকতে পারে বা কোনও ব্লকের ওয়ার্পগুলির একই প্রোগ্রামের কাউন্টার থাকা দরকার নেই।
গ্রেগ স্মিথ

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

1
@ গ্রেগস্মিথ আমি ফর্মি আর্কিটেকচারে এসএম প্রতি এই 8 টি সক্রিয় ব্লকটি কোথা থেকে এসেছে তা অনুসন্ধান করার জন্য আমি ওয়েব জুড়ে সন্ধান করছি। এমনকি ফার্মি হুইটপেপারে এর উল্লেখ নেই। সে সম্পর্কে আপনার আর কোনও রেফারেন্স আছে?
গ্রেগ কে।

8

"ই। যদি কোনও ওয়ার্পে 20 টি থ্রেড থাকে তবে বর্তমানে কেবল 16 টি কোর পাওয়া যায়, তবে ওয়ার্পটি চলবে না।"

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

একটি ওয়ার্প নিজেই কেবল একটি একক কোর (= মাল্টিপ্রসেসর) এ নির্ধারিত হতে পারে এবং একই সময়ে 32 টি থ্রেড পর্যন্ত চালাতে পারে; এটি একক কোরের চেয়ে বেশি ব্যবহার করতে পারে না।

"48 ওয়ার্পস" সংখ্যাটি হ'ল মাল্টিপ্রসেসর প্রতি, এনভিআইডিআইএ জিপিইউতে কমপিউটি ক্যাপাসিটি 2.x সহ সক্রিয় ওয়ার্পসের সর্বোচ্চ সংখ্যা (যে চক্রগুলি পরবর্তী চক্রের জন্য নির্ধারিত হতে পারে, যে কোনও চক্রে) নির্ধারিত হতে পারে; এবং এই সংখ্যাটি 1536 = 48 x 32 থ্রেডের সাথে মিলে যায়।

এই ওয়েবিনারের ভিত্তিতে উত্তর


@ গ্রেগস্মিত: এটিকে সম্বোধন করার জন্য উত্তর সম্পাদনা করেছেন। এটা ঠিক আছে যে আপনি এটি নিয়ে ধৈর্য
ধরেছিলেন

একক কোর (= মাল্টিপ্রসেসর)? আমি মনে করি যে প্রশ্নটি টার্মিনোলজিকে একক কোর = প্রসেসর হিসাবে ধরেছে এবং মাল্টিপ্রসেসর নয়। আপনার পরিভাষার সাথে আপনার উত্তরটি সঠিক।
আদর্শ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.