আমার সমান্তরাল সলভারটি আমার অনুক্রমিক সমাধানের চেয়ে ধীর কেন?


14

আমি পিইটিএসসি নিয়ে ঘুরে বেড়াচ্ছিলাম এবং লক্ষ্য করেছি যে আমি যখন এমপিআই এর মাধ্যমে একাধিক প্রক্রিয়া নিয়ে আমার প্রোগ্রামটি চালাচ্ছি তখন মনে হয় এটি আরও ধীর হয়ে চলেছে ! কী চলছে তা আমি কীভাবে চেক করতে পারি?


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

উত্তর:


13

এটি আর্কিটেকচারাল কারণগুলি থেকে উদ্ভূত হতে পারে :

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

এটি এমনও হতে পারে যে যোগাযোগের ওভারহেড আপনাকে স্থানীয় গণনাকে অভিভূত করে। উদাহরণস্বরূপ, লিনিয়ার পুনরাবৃত্তি পদ্ধতিতে আমরা প্রতি প্রক্রিয়াটিতে কমপক্ষে 10,000 অজানা থাকার প্রস্তাব দিই।

বা সংখ্যার কারণ:

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


8

যখনই কোনও প্রোগ্রামকে সমান্তরাল করার চেষ্টা করতে হয় তখন আপনাকে অনেকগুলি ব্যয় ব্যয় করতে হবে তবে প্রাথমিকভাবে রয়েছে there

  • প্রতিটি গণনা চালনার ব্যয়
  • এই গণনাগুলির মধ্যে যে কোনও যোগাযোগের ব্যয়
  • এই গণনা পরিচালনার ব্যয়

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

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

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

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


3

আমি আপনাকে নিম্নলিখিতটি করার পরামর্শ দিচ্ছি:

  • আপনার কোডটির সমান্তরালীর সাথে এবং ছাড়াই সময় নির্বাহের একটি প্রোফাইল তৈরি করুন। এটি কীভাবে করবেন সে সম্পর্কে আপনার যদি সন্দেহ থাকে তবে আপনি যদি আপনার কোডটি আরও ভালভাবে বর্ণনা করেন তবে আমরা আপনাকে সহায়তা করতে পারি।

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

আপনি যদি আরও বেশি বিশদে বিশদটি ব্যাখ্যা করেন, যেমন একটি ওয়ার্কফ্লো সহ, কেউ আপনাকে আরও ভাল ব্যাখ্যা দিতে সক্ষম হতে পারে।


@ স্কেচ: আপনি ঠিক বলেছেন। দুঃখিত এবং লক্ষ্য করার জন্য ধন্যবাদ। পাঠ্য সম্পাদনা।
jbcolmenares
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.