কোন ধরণের সমস্যা জিপিইউ কম্পিউটিংয়ে নিজেকে ভাল ধার দেয়?


84

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

আমি এটির একটি প্রাথমিক প্রশ্ন জানি, তবে আমার অনুসন্ধানের বেশিরভাগ লোকই স্পষ্টতই কেন বা কিছুটা অস্পষ্ট নিয়মের অঙ্গুলিহীনতা প্রমাণ না করে স্পষ্টভাবে একজন বা অন্যের পক্ষে সমর্থন করে in এখানে আরও দরকারী প্রতিক্রিয়া খুঁজছেন।

উত্তর:


63

জিপিইউ হার্ডওয়্যারের দুটি নির্দিষ্ট শক্তি রয়েছে: কাঁচা গণনা (এফএলওপিএস) এবং মেমরি ব্যান্ডউইথ। সর্বাধিক কঠিন গণ্য সমস্যাগুলি এই দুটি বিভাগের মধ্যে একটির মধ্যে পড়ে। উদাহরণস্বরূপ, ঘন লিনিয়ার বীজগণিত (A * B = C বা সমাধান [Ax = y] বা ডায়াগোনালাইজ [এ], ইত্যাদি) কোথাও সিস্টেমের আকারের উপর ভিত্তি করে কম্পিউট / মেমরি ব্যান্ডউইথ বর্ণালীতে পড়ে falls দ্রুত ফুরিয়ার ট্রান্সফর্ম (এফএফটি) উচ্চতর সামগ্রিক ব্যান্ডউইথ প্রয়োজনের সাথে এই ছাঁচটি ফিট করে। অন্যান্য রূপান্তরগুলি যেমন গ্রিড / জাল-ভিত্তিক অ্যালগরিদমগুলি, মন্টি কার্লো ইত্যাদি করে থাকেন আপনি যদি এনভিআইডিআইএ এসডিকে কোড উদাহরণগুলিতে লক্ষ্য করেন তবে আপনি যে ধরণের সমস্যাগুলির মধ্যে সবচেয়ে বেশি সমস্যা সমাধান করেছেন সেগুলির জন্য অনুভূতি পেতে পারেন।

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

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

  • বেশিরভাগ গ্রাফ অ্যালগরিদম (খুব বেশি অনাকাঙ্ক্ষিত, বিশেষত মেমরি-স্পেসে)
  • বিচ্ছিন্ন রৈখিক বীজগণিত (তবে এটি সিপিইউতেও খারাপ)
  • ছোট সিগন্যাল প্রক্রিয়াজাতকরণ সমস্যা (উদাহরণস্বরূপ 1000 পয়েন্টের চেয়ে ছোট এফএফটি)
  • অনুসন্ধান
  • সাজান

3
এখনও, যারা "অনিশ্চিত" সমস্যার জন্য GPU- সমাধান হয় সম্ভব এবং, আজকাল সাধারণত সম্ভবপর না, ভবিষ্যতে তাত্পর্য অর্জন করতে পারেন।
বাম দিকের

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

2
@ ভায়োলেটজিরাফ, এটি অগত্যা সত্য নয়। সিইডিএ-তে (যেমন এনভিডিয়া জিপিইউগুলিতে), শাখার বিভাজন কেবলমাত্র বর্তমান রেপকে প্রভাবিত করে, যা সর্বাধিক ৩২ টি থ্রেড। বিভিন্ন কোডগুলি একই কোডটি কার্যকর করা সত্ত্বেও সুস্পষ্টভাবে সিঙ্ক্রোনাইজ করা (উদাহরণস্বরূপ __synchtreads()) না থাকলে সিঙ্ক্রোনাস হয় না ।
পেড্রো

1
@ পেড্রো: সত্য, তবে সাধারণভাবে শাখা করা কর্মক্ষমতা ক্ষতি করে does উচ্চ-পারফরম্যান্স কোডগুলির জন্য (জিপিইউ কোডটি কী নয়?), এটি অ্যাকাউন্টে নেওয়া প্রায় প্রয়োজনীয়।
jvriesem

21

যে সমস্যাগুলির উচ্চতর গণিতের তীব্রতা এবং নিয়মিত মেমোরি অ্যাক্সেস প্যাটার্ন রয়েছে তাদের জিপিইউগুলিতে প্রয়োগ করা সাধারণত সহজ (আইআর) হয় এবং সেগুলি ভাল সম্পাদন করে।

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


আপনি কি নিয়মিত মেমরি অ্যাক্সেস নিদর্শনগুলি বলতে চান তা নির্দিষ্ট করতে পারেন?
ফোমাইট

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

15

এটি নিজের উত্তর হিসাবে নয় বরং ম্যাক্সচ্যাট এবং রেড.এচচসনের অন্যান্য উত্তরগুলির সংযোজন

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

আরও সুনির্দিষ্টভাবে বলতে গেলে, কার্নেলটি জিপিইউর প্রতিটি মাল্টিপ্রসেসিং ইউনিট (বা কম্পিউট ইউনিট ) এর নিবন্ধের মধ্যে ফিট করা উচিত । নিবন্ধকের সঠিক আকারটি জিপিইউর উপর নির্ভরশীল।

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


প্রতিটি প্রসেসিং ইউনিটের স্থানীয় / ভাগ করা মেমরি কি কোরের একক ক্লাস্টারের মধ্যে চলমান কয়েক ডজন (?) থ্রেডের মধ্যে ভাগ করা যায় না? এক্ষেত্রে, জিপিইউ থেকে সম্পূর্ণ পারফরম্যান্স পাওয়ার জন্য আপনার কীভাবে ডেটা সেট করে রাখার দরকার নেই?
ড্যান নীলি

প্রসেসিং ইউনিটের স্থানীয় / ভাগ করা মেমরি কেবলমাত্র কম্পিউট ইউনিট দ্বারা অ্যাক্সেসযোগ্য এবং এইভাবে কেবল এই গণনা ইউনিটের প্রক্রিয়াকরণ উপাদানগুলি দ্বারা ভাগ করা হয়। গ্রাফিক্স কার্ডের বিশ্বব্যাপী মেমরি (সাধারণত 1 গিগাবাইট) সমস্ত প্রসেসিং ইউনিট দ্বারা অ্যাক্সেসযোগ্য। প্রক্রিয়াকরণ উপাদান এবং স্থানীয় / ভাগ করা মেমরির মধ্যে ব্যান্ডউইথ খুব দ্রুত (> 1 টিবি / গুলি) তবে গ্লোবাল মেমরির ব্যান্ডউইদথ অনেক ধীর (GB 100 গিগাবাইট / গুলি) এবং সমস্ত কম্পিউট ইউনিটগুলির মধ্যে ভাগ করে নেওয়া দরকার।
Torbjörn

আমি প্রধান জিপিইউ মেমরির বিষয়ে জিজ্ঞাসা করছিলাম না। আমি ভেবেছিলাম অন ডাই মেমরি কেবলমাত্র ব্যক্তিগত স্তরের জন্য নয় মূল স্তরের ক্লাস্টারে বরাদ্দ করা হয়েছিল। এনভিডিয়া জিএফ 100/110 জিপিইউর প্রাক্তন; 16 টি এসএম ক্লাস্টারের প্রত্যেকের জন্য 512 চুদা কোর নয়। প্রতিটি এসএমের সাথে 32 টি থ্রেড সমান্তরালভাবে GPU পারফরম্যান্সে চালানোর জন্য নকশাকৃত কাজটি 1kb / থ্রেড সীমার মধ্যে রেখে দেওয়া উচিত।
ড্যান নীলি

@ টারবজোর্ন আপনি যা চান তা হ'ল সমস্ত জিপিইউ এক্সিকিউশন পাইপলাইনগুলিকে ব্যস্ত রাখার জন্য, জিপিইউগুলি এই দুটি উপায় অর্জন করে: (1) একত্রে থাকা থ্রেডের সংখ্যা বাড়িয়ে বা অন্যভাবে বলেছে (ছোট কার্নেলগুলি কম ব্যবহার করে) ভাগ করা সংস্থানগুলি যাতে আপনার আরও সক্রিয় থ্রেড থাকতে পারে); হতে পারে আরও ভাল, (2) আপনার কর্নেলের মধ্যে নির্দেশ স্তরের সমান্তরালতা বাড়ানো, যাতে আপনার তুলনামূলকভাবে কম আওতা (সক্রিয় থ্রেডের সংখ্যক সংখ্যক) সহ বৃহত্তর কার্নেল থাকতে পারে। দেখুন bit.ly/Q3KdI0
fcruz

11

পূর্ববর্তী জবাবগুলিতে সম্ভবত আরও প্রযুক্তিগত সংযোজন: CUDA (অর্থাত্ Nvidia) GPU গুলি প্রসেসরের একটি সেট হিসাবে বর্ণনা করা যেতে পারে যা প্রতিটি 32 টি থ্রেডে স্বায়ত্তশাসিতভাবে কাজ করে। প্রতিটি প্রসেসরের থ্রেডগুলি লক-স্টেপে কাজ করে (মনে করুন সিমডি দৈর্ঘ্যের 32 টি ভেক্টর সহ)।

যদিও জিপিইউগুলির সাথে কাজ করার সবচেয়ে লোভনীয় উপায় হ'ল ভান করা যে একেবারে সবকিছু লক-স্টেপে চালিত হয়, এটি সবসময় কাজ করার সবচেয়ে কার্যকর উপায় নয়।

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

এটি কীভাবে কাজ করে তার CUDA ব্যবহার করে একটি ছোট্ট উদাহরণ

/* Global index of the next available task, assume this has been set to
   zero before spawning the kernel. */
__device__ int next_task;

/* We will use this value as our mutex variable. Assume it has been set to
   zero before spawning the kernel. */
__device__ int tasks_mutex;

/* Mutex routines using atomic compare-and-set. */
__device__ inline void cuda_mutex_lock ( int *m ) {
    while ( atomicCAS( m , 0 , 1 ) != 0 );
    }
__device__ inline void cuda_mutex_unlock ( int *m ) {
    atomicExch( m , 0 );
    }

__device__ void task_do ( struct task *t ) {

    /* Do whatever needs to be done for the task t using the 32 threads of
       a single warp. */
    }

__global__ void main ( struct task *tasks , int nr_tasks ) {

    __shared__ task_id;

    /* Main task loop... */
    while ( next_task < nr_tasks ) {

        /* The first thread in this block is responsible for picking-up a task. */
        if ( threadIdx.x == 0 ) {

            /* Get a hold of the task mutex. */
            cuda_mutex_lock( &tasks_mutex );

            /* Store the next task in the shared task_id variable so that all
               threads in this warp can see it. */
            task_id = next_task;

            /* Increase the task counter. */
            next_tast += 1;

            /* Make sure those last two writes to local and global memory can
               be seen by everybody. */
            __threadfence();

            /* Unlock the task mutex. */
            cuda_mutex_unlock( &tasks_mutex );

            }

        /* As of here, all threads in this warp are back in sync, so if we
           got a valid task, perform it. */
        if ( task_id < nr_tasks )
            task_do( &tasks[ task_id ] );

        } /* main loop. */

    }

তারপরে আপনার main<<<N,32>>>(tasks,nr_tasks)প্রতিটি ব্লকে কেবলমাত্র 32 টি থ্রেড রয়েছে এবং এটি একটি একক ওয়ার্পে ফিট করে তা নিশ্চিত করতে আপনাকে কার্নেলটি কল করতে হবে। এই উদাহরণে আমিও ধরে নিয়েছি, সরলতার জন্য, কার্যগুলির কোনও নির্ভরতা নেই (যেমন একটি কাজ অন্যটির ফলাফলের উপর নির্ভর করে) বা দ্বন্দ্ব (যেমন একই বৈশ্বিক স্মৃতিতে কাজ করে) work যদি এটি হয় তবে টাস্ক নির্বাচনটি আরও কিছুটা জটিল হয়ে ওঠে তবে কাঠামোটি মূলত একই same

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


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

2
আমি যা বর্ণনা করছি তা সবই একটি একক কার্নেল কলে করা যেতে পারে। আপনি প্রতিটি 32 টি থ্রেডের এন ব্লক তৈরি করতে পারেন, যাতে প্রতিটি ব্লক একক ওয়ার্পে ফিট হয়। তারপরে প্রতিটি ব্লক একটি গ্লোবাল টাস্ক তালিকা (অ্যাটমিক্স / মিটেক্সেস ব্যবহার করে অ্যাক্সেস নিয়ন্ত্রিত) থেকে কোনও টাস্ক অর্জন করে এবং 32 লক-স্টেপড থ্রেড ব্যবহার করে এটি গণনা করে। এই সমস্ত একক কার্নেল কলে ঘটে। আপনি যদি একটি কোড উদাহরণ চান তবে আমাকে জানান এবং আমি একটি পোস্ট করব।
পেড্রো

4

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


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

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

@ গড্রিকসির এসপি এবং ডিপি ফ্লোটিং-পয়েন্টের 2: 1 অনুপাতের ব্যান্ডউইথের সাথে খুব সামান্যই কাজ করে এবং এই অপারেশনগুলি সম্পাদন করতে কতগুলি হার্ডওয়্যার ইউনিট রয়েছে তার সাথে প্রায় সমস্ত কিছুই করা যায়। এসপি এবং ডিপির জন্য রেজিস্টার ফাইলটি পুনরায় ব্যবহার করা সাধারণ, সুতরাং ভাসমান-পয়েন্ট ইউনিট 2x এসপি অপসকে ডিপি অপ্স হিসাবে চালিত করতে পারে। এই নকশায় অসংখ্য ব্যতিক্রম রয়েছে, যেমন আইবিএম ব্লু জিন / কিউ (এসপি যুক্তি নেই এবং এইভাবে এসপি ~ 1.05x ডিপি চালায়)। কিছু জিপিইউ-র অনুপাত 2, যেমন 3 এবং 5 ব্যতীত রয়েছে
জেফ

আমি এই উত্তরটি লেখার চার বছর হয়ে গেছে, এবং এনভিআইডিআইএ জিপিইউ'র বর্তমান পরিস্থিতি জিফর্স এবং কোয়াড্রো লাইনের জন্য, ডিপি / এসপি অনুপাতটি এখন 1/32 32 এনভিআইডিআইএর টেসলা জিপিইউতে আরও শক্তিশালী ডাবল যথার্থ পারফরম্যান্স রয়েছে তবে এতে আরও অনেক বেশি ব্যয় হয়। অন্যদিকে, এএমডি তার র্যাডিয়ন জিপিইউতে একইভাবে ডাবল যথার্থ পারফরম্যান্সকে পঙ্গু করে নি।
ব্রায়ান বোর্চারস

4

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

এটি উপরের চমৎকার উত্তরের পরিপূরক উত্তর হিসাবে নেওয়া যেতে পারে।


4

পুরানো প্রশ্ন, তবে আমি মনে করি যে ২০১৪ সালের এই উত্তর - পরিসংখ্যান পদ্ধতির সাথে সম্পর্কিত, তবে যে লুপ কী জানেন যে কেউ তার পক্ষে সাধারণীকরণ - বিশেষত চিত্রণমূলক এবং তথ্যবহুল।


2

জিপিইউগুলির দীর্ঘসূত্রতা I / O রয়েছে, তাই মেমরিটি পরিপূর্ণ করার জন্য প্রচুর থ্রেড ব্যবহার করা দরকার। ওয়ার্প ব্যস্ত রাখতে প্রচুর থ্রেড প্রয়োজন। যদি কোড পাথটি 10 ​​টি ঘড়ি এবং I / O বিলম্বিত 320 ঘড়ি হয় তবে 32 থ্রেডগুলি ওয়ার্পটি পরিপূর্ণ করার কাছাকাছি আসা উচিত। কোড পাথটি যদি 5 টি ঘড়ি হয় তবে থ্রেডগুলি দ্বিগুণ করুন।

হাজার হাজার কোর সহ, জিপিইউর পুরোপুরি ব্যবহার করতে হাজার হাজার থ্রেড সন্ধান করুন।

মেমরি অ্যাক্সেস ক্যাশে লাইনের মাধ্যমে হয়, সাধারণত 32 বাইট। একটি বাইট লোড করার সাথে 32 বাইটের তুলনাযোগ্য ব্যয় হয়। সুতরাং, ব্যবহারের স্থানীয়তা বাড়ানোর জন্য স্টোরেজটি একত্রিত করুন।

প্রতি পাটাগুলিতে প্রচুর রেজিস্ট্রার এবং স্থানীয় র‌্যাম রয়েছে, প্রতিবেশী ভাগ করে নেওয়ার অনুমতি দেয়।

বড় বড় সেটগুলির প্রক্সিমিটি সিমুলেশনগুলি ভালভাবে অনুকূলিত হওয়া উচিত should

এলোমেলো I / O এবং একক থ্রেডিং হ'ল একটি আনন্দ ...


এটি সত্যই আকর্ষণীয় প্রশ্ন; আমি নিজের সাথে তর্ক করছি যে যখন প্রতিটি কাজ task 0.06 সেকেন্ড লাগে তবে সম্পাদন করার জন্য ~ 1.8 মিলিয়ন টাস্ক (যখন বায়বীয় চিত্রগুলিতে প্রান্ত সনাক্তকরণ) একটি সমান্তরাল-ইসি 'সমান্তরাল-ইসি' করা সম্ভব (বা প্রচেষ্টার পক্ষে মূল্যবান) হয় কিনা ( প্রতি বছর, 6 বছরের মূল্যবান ডেটার জন্য: কার্যগুলি অবশ্যই পৃথকযোগ্য) ... এইভাবে one 7.5 দিনের মূল্য একটি মূল হিসাবে গণনা সময়। যদি প্রতিটি গণনা একটি জিপিইউতে দ্রুততর হয়, এবং চাকরিটি প্রতি-এনজিপিইউকোরিজ [n ছোট] এর সাথে সমান্তরাল হতে পারে, তবে কি আসলে কাজের সম্ভাবনাটি ~ 1 ঘন্টা নেমে যাওয়ার সম্ভাবনা আছে? অসম্ভব বলে মনে হচ্ছে।
জিটি

0

ট্র্যাভেলিং সেলসম্যানের মতো এমন অনেক সমস্যার সমাধান করতে পারে এমন কোনও কল্পনা করুন। তারপরে কল্পনা করুন যে আপনি প্রতিটিতে 8 টি স্প্যানি ভিডিও কার্ড সহ সার্ভারের র‌্যাক পেয়েছেন এবং প্রতিটি কার্ডে 3000 সিউডিএ কোর রয়েছে।

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


আমার কাছে এক সপ্তাহের জন্য এই জাতীয় 4 টি সার্ভারের একটি ছোট খামারে অ্যাক্সেস ছিল এবং পাঁচ দিনের মধ্যে আমি আগের 10 বছরের তুলনায় বেশি ডিস্ট্রিবিউটেড ব্লক করেছি।
ক্রিগগি

-1

অনেক ইঞ্জিনিয়ারিং আইডিয়া অধ্যয়ন করে, আমি বলতে চাই যে একটি জিপিইউ হ'ল কর্ম, স্মৃতি-পরিচালনার, পুনরাবৃত্তযোগ্য-গণনার মনোনিবেশের একটি ফর্ম।

অনেক সূত্র লিখতে সহজ হতে পারে তবে গণনা করা বেদনাদায়ক যেমন ম্যাট্রিক্স গণিতে আপনি একটিও উত্তর পান না তবে অনেকগুলি মান পাবেন।

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

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

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

একজন জিপিইউ হতাশ কর্মী ed একটি সিপিইউ সম্পূর্ণ বিশৃঙ্খলা পরিচালনা করছে এবং প্রতিটি বিবরণ পরিচালনা করতে পারে না।

তাহলে আমরা কী শিখব? একটি জিপিইউ সমস্ত একবারে বিব্রতকর কাজ করে এবং একটি সিপিইউ একটি মাল্টি-টাস্ক মেশিন যা খুব বেশি কাজ করার সাথে খুব ভাল ফোকাস করতে পারে না। (এটি একইসাথে মনোযোগ ব্যাধি এবং অটিজম রয়েছে বলে মনে হয়)।

ইঞ্জিনিয়ারিং এ ধারণাগুলি, নকশা, বাস্তবতা এবং প্রচুর উদ্বেগজনক কাজ রয়েছে।

আমি সহজ শুরু করার কথা মনে রেখেছি, দ্রুত শুরু করুন, দ্রুত ব্যর্থ, দ্রুত ব্যর্থ, দ্রুত এবং চেষ্টা কখনও থামবেন না।

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