ম্যাট্রিক্সের গুণগুলি হিসাবে গণনা প্রকাশ করা কেন তাদের দ্রুত করে?


18

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

যদি আমরা এটিকে সমীকরণ হিসাবে লিখি তবে আমরা পাই:

স্কেলার সমীকরণ

আমরা এই পদ্ধতিটিকে "ভেক্টরাইজ" করতে পারি, এটি এটিকে ম্যাট্রিক্সের গুণ এবং ভেক্টর সংযোজনে রূপান্তরিত করতে পারি। এটি গণনার দক্ষতার জন্য সহায়ক। (এটি ভাবাও একটি কার্যকর উপায়))

ভেক্টর সমীকরণ

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

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

উত্তর:


19

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

  • একাধিক থ্রেড ব্যবহার করা হচ্ছে। প্রায় কোনও আধুনিক সিপিইউ নেই যার একাধিক কোর নেই, অনেকের 8 টি পর্যন্ত রয়েছে এবং উচ্চ-পারফরম্যান্সের কম্পিউটিংয়ের জন্য বিশেষায়িত মেশিনগুলিতে বেশ কয়েকটি সকেট জুড়ে সহজেই 64 থাকতে পারে। স্পষ্ট উপায়ে কোড লেখার জন্য, সাধারণ প্রোগ্রামিং ভাষায়, এর মধ্যে একটির ব্যবহার করে। অন্য কথায়, এটি চলমান মেশিনের উপলব্ধ কম্পিউটিং সংস্থাগুলির 2% এরও কম ব্যবহার করতে পারে ।
  • সিমডি নির্দেশাবলী ব্যবহার করে (বিভ্রান্তিমূলকভাবে এটিকে "ভেক্টরাইজেশন" বলা হয় তবে প্রশ্নের টেক্সট উদ্ধৃতিগুলির তুলনায় ভিন্ন অর্থে)। সংক্ষেপে, 4 বা 8 বা এর চেয়ে বেশি স্কেলার পাটিগণিত নির্দেশের পরিবর্তে, সিপিইউকে এমন একটি নির্দেশ দিন যা 4 বা 8 তে পাটিগণিত সম্পাদন করে বা সমান্তরালে রেজিস্ট্রেশন করে। এটি আক্ষরিকভাবে কিছু গণনা করতে পারে (যখন তারা নির্দেশের জন্য পুরোপুরি স্বতন্ত্র এবং ফিট হয়ে থাকে) 4 বা 8 বার দ্রুত হয়।
  • ক্যাশে স্মার্ট ব্যবহার করা । মেমোরি অ্যাক্সেস দ্রুত হয় যদি তারা অস্থায়ীভাবে এবং স্থানিকভাবে সুসংগত হয়, অর্থাত্ ক্রমাগত প্রবেশাধিকারগুলি নিকটবর্তী ঠিকানাগুলিতে হয় এবং দু'বার কোনও ঠিকানা অ্যাক্সেস করার সময় আপনি দীর্ঘ বিরতি না দিয়ে দু'বার দ্রুত উত্তরাধিকারে দু'বার অ্যাক্সেস করেন।
  • জিপিইউ-র মতো এক্সিলারেটর ব্যবহার করে। এই ডিভাইসগুলি সিপিইউগুলির থেকে একেবারেই আলাদা প্রাণী এবং তাদের দক্ষতার সাথে প্রোগ্রামিং করা এটির নিজস্ব একটি সম্পূর্ণ শিল্প ফর্ম। উদাহরণস্বরূপ, তাদের কয়েকশো কোর রয়েছে, যা কয়েক ডজন কোরের গ্রুপে বিভক্ত হয়েছে এবং এই গোষ্ঠীগুলি সংস্থানগুলি ভাগ করে নিচ্ছে - এগুলি কয়েক কিবি মেমরি শেয়ার করে যা সাধারণ স্মৃতির চেয়ে অনেক দ্রুত এবং যখন গ্রুপের কোনও কোর একটি কার্যকর করে ifবিবৃতিতে group গোষ্ঠীর অন্যান্য সমস্ত ব্যক্তির এটির জন্য অপেক্ষা করতে হবে।
  • বেশ কয়েকটি মেশিনের উপর কাজ বিতরণ করুন (সুপার কম্পিউটারগুলিতে অত্যন্ত গুরুত্বপূর্ণ!) যা নতুন মাথাব্যথার একটি বিশাল সংকলন প্রবর্তন করে তবে অবশ্যই, বৃহত্তর বৃহত কম্পিউটিং সংস্থানগুলিতে অ্যাক্সেস দিতে পারে।
  • স্মার্ট আলগোরিদিম ম্যাট্রিক্স গুণনের জন্য সাধারণ ও (এন ^ 3) অ্যালগরিদম, উপরের কৌশলগুলি সাথে যথাযথভাবে অনুকূলিত করা যুক্তিসঙ্গত ম্যাট্রিক্স আকারের জন্য সাব-কিউবিকের চেয়ে প্রায়শই দ্রুত হয় তবে কখনও কখনও তারা জয়ী হয়। স্পারস ম্যাট্রিক্সের মতো বিশেষ ক্ষেত্রে আপনি বিশেষায়িত অ্যালগরিদম লিখতে পারেন।

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

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


4

(বিরল) ম্যাট্রিক্স-ভেক্টর গুণটি অত্যন্ত সমান্তরাল is আপনার ডেটা বড় হলে আপনার হাতের কাছে একটি সার্ভার ফার্ম থাকলে কোনটি খুব কার্যকর।

এর অর্থ আপনি ম্যাট্রিক্স এবং ভেক্টরকে খণ্ডগুলিতে ভাগ করতে পারেন এবং আলাদা মেশিনগুলিকে কিছু কাজ করতে দেয়। তারপরে তাদের কিছু ফলাফল একে অপরের সাথে ভাগ করুন এবং তারপরে চূড়ান্ত ফলাফলটি পাবেন।

আপনার উদাহরণে অপারেশনগুলি নিম্নরূপ হবে

  1. গ্রিডে তাদের সমন্বয় অনুসারে প্রসেসরের একটি গ্রিড সেটআপ করুন যার প্রত্যেকটিতে একটি ডাব্লুএক্স, ওয়াইড রয়েছে

  2. প্রতিটি কলামের সাথে উত্স ভেক্টর সম্প্রচার করুন (ব্যয় O(log height))

  3. স্থানীয়ভাবে প্রতিটি খরচ (ব্যয় O(width of submatrix * heightof submatrix)) এর প্রতিটি প্রসেসর রয়েছে

  4. যোগফল (ব্যয় O(log width)) ব্যবহার করে প্রতিটি সারি বরাবর ফলাফল ভেঙে দিন

এই শেষ অপারেশনটি বৈধ কারণ সমষ্টিটি সাহসী।

এটি অপ্রয়োজনীয়তা বাড়ানোর অনুমতি দেয় এবং আপনাকে সমস্ত তথ্য একক মেশিনে রেখে দেওয়া এড়াতে দেয়।

আপনার মতো ছোট 4x4 ম্যাট্রিকের জন্য গ্রাফিকগুলিতে এটি দেখতে পান কারণ সিপিইউর কাছে এই ক্রিয়াকলাপগুলি মোকাবেলা করার জন্য বিশেষ নির্দেশনা এবং রেজিস্টার রয়েছে।


-1

সর্বাধিক শিক্ষামূলক জিনিস হ'ল অ্যারেডি-প্রয়োগিত ম্যাট্রিক্স গুণনের পারফরম্যান্সের সাথে আপনার কোডের পারফরম্যান্সের তুলনা করা।

সর্বদা কিছু নিম্ন স্তরের অপ্টিমাইজেশন থাকে যা আপনি ভাবেননি, এখানে আপনি একটি উদাহরণ খুঁজে পেতে পারেন:

https://simulationcorner.net/index.php?page=fastmatrixvector

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