কিছুটা দীর্ঘতর উত্তর যা ব্যাখ্যা করে যে বাম সর্বাধিক সূচকটি খুব দ্রুত পরিবর্তিত হওয়া কেন এটি আরও দক্ষ। দুটি মূল বিষয় যা আপনার বুঝতে হবে।
প্রথমে, ম্যাটল্যাব (এবং ফোর্টরান, তবে সি এবং অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ নয়) মেমরিতে অ্যারেগুলি "কলামের বড় ক্রমে" সঞ্চয় করে। উদাহরণস্বরূপ, যদি এ 2 দ্বারা 3 বাই 10 ম্যাট্রিক্স হয়, তবে এন্ট্রিগুলি ক্রমে মেমরিতে সংরক্ষণ করা হবে
এ (1,1,1)
এ (2,1,1)
এ (1,2,1)
এ (2,2,1)
এ (1,3,1)
এ (2,3,1)
এ (1,1,2)
এ (2,1,2)
...
এ (2,3,10)
কলামের বড় আদেশের এই পছন্দটি নির্বিচারে- আমরা সহজেই একটি "সারি মেজর অর্ডার" কনভেনশন গ্রহণ করতে পারি, এবং বাস্তবে এটি সি এবং কিছু অন্যান্য প্রোগ্রামিং ভাষায় করা হয়।
দ্বিতীয়টি গুরুত্বপূর্ণ যেটি আপনি বুঝতে হবে তা হ'ল আধুনিক প্রসেসরগুলি একসাথে মেমরির এক অবস্থান অ্যাক্সেস করে না, বরং 64 বা 128 সংক্ষিপ্ত বাইটের (8 বা 16 ডাবল যথার্থ ভাসমান পয়েন্ট সংখ্যা) এর "ক্যাশে লাইনগুলি" লোড এবং সঞ্চয় করে) স্মৃতি থেকে এক সময় এই অংশগুলির ডেটাগুলি অস্থায়ীভাবে একটি দ্রুত মেমরি ক্যাশে সংরক্ষণ করা হয় এবং প্রয়োজনীয় হিসাবে ফিরে লেখা হয়। (অনুশীলনে ক্যাশে আর্কিটেকচারটি এখন প্রায় 3 বা 4 স্তরের ক্যাশে মেমোরির সাথে জটিল, তবে আমার প্রাথমিক যুগে কম্পিউটারগুলি যে ধরণের ছিল তার এক-স্তরের ক্যাশে মূল ধারণাটি ব্যাখ্যা করা যেতে পারে))
A
যদি লুপগুলি বাসা বেঁধে রাখা হয় যাতে অন্তঃস্থলীয় লুপটি সারি সাবস্ক্রিপ্ট আপডেট করে, তবে অ্যারের এন্ট্রি A (1,1), A (2,1), A (3,1), ... ক্রমে অ্যাক্সেস করা হবে ... প্রথম এন্ট্রি এ (1,1) অ্যাক্সেস করা হয়েছে, সিস্টেমটি মূল স্মৃতি থেকে ক্যাশে একটি (1,1), এ (2,1), ..., এ (8,1) সমন্বিত একটি ক্যাশে লাইন এনে দেবে । অভ্যন্তরীণ লুপের পরবর্তী 8 পুনরাবৃত্তিগুলি কোনও অতিরিক্ত প্রধান মেমরি স্থানান্তর ছাড়াই এই ডেটাতে কাজ করে।
বিকল্পের ক্ষেত্রে, আমরা লুপগুলি এমনভাবে গঠন করি যাতে কলাম সূচকটি অন্তঃস্থলীয় লুপে পরিবর্তিত হয়, তবে A এর এন্ট্রিগুলি A (1,1), A (1,2), A (1,3) ক্রমানুসারে প্রবেশ করা হবে ), ... এই ক্ষেত্রে, প্রথম অ্যাক্সেস এ এ (1,1), এ (2,1), ..., এ (8,1) কে মূল স্মৃতি থেকে ক্যাশে আনবে, তবে এর 7/8 এই এন্ট্রি ব্যবহার করা হবে না। দ্বিতীয় পুনরাবৃত্তিতে A (1,2) এর অ্যাক্সেসের পরে মূল স্মৃতি থেকে আরও 8 টি এন্ট্রি আসবে এবং এগুলি। কোডটি ম্যাট্রিক্সের ২ য় সারিতে কাজ করার সময়, এ (২,১) এন্ট্রি অন্যান্য প্রয়োজনীয় ডেটার জন্য উপায় তৈরি করতে ক্যাশে থেকে ভালভাবে বেরিয়ে যেতে পারে। ফলস্বরূপ, কোডটি প্রয়োজনীয় হিসাবে 8 গুণ বেশি ট্র্যাফিক তৈরি করছে।
কিছু অপ্টিমাইজ করা সংকলক এই সমস্যাটি এড়াতে স্বয়ংক্রিয়ভাবে লুপগুলি পুনর্গঠন করতে সক্ষম।
ম্যাট্রিক্সের গুণ এবং গুণককরণের জন্য অনেকগুলি সংখ্যক লিনিয়ার বীজগণিত অ্যালগরিদমগুলি প্রোগ্রামিং ভাষার উপর নির্ভর করে সারি-প্রধান বা কলাম-প্রধান অর্ডারিং স্কিমের সাথে দক্ষতার সাথে কাজ করতে অনুকূলিত হতে পারে। এটি ভুল উপায়ে করলে পারফরম্যান্সে উল্লেখযোগ্য নেতিবাচক প্রভাব পড়তে পারে।
For
লুপগুলি এমএটিএলবিতে খুব ধীর। আপনার যখনই সম্ভব ম্যাটল্যাবে স্পষ্ট লুপগুলি এড়ানো উচিত। পরিবর্তে, সাধারণত ম্যাট্রিক্স / ভেক্টর অপারেশনগুলির ক্ষেত্রে কোনও সমস্যা প্রকাশ করা যায়। এটি ম্যাটল্যাবিক উপায়। ম্যাট্রিক্স ইত্যাদির সূচনা করার জন্য অনেকগুলি অন্তর্নির্মিত ফাংশন রয়েছে instance উদাহরণস্বরূপ, একটি ফাংশন রয়েছে , যা () রয়েছে , যা ম্যাট্রিক্সের সমস্ত উপাদানকে 1 (এক্সটেনশন দ্বারা, গুণফলের দ্বারা কোনও মানকে সেট করবে ) অল-ওয়াল ম্যাট্রিক্স দ্বারা গুণিত))। এটি 3-ডি অ্যারেগুলিতেও কাজ করে (যা আমি মনে করি এখানে উদাহরণটি আবরণ করে)।