ম্যাট্রিকের সারি বড় বনাম কলামের বড় বিন্যাস


16

প্রোগ্রামিং ঘন ম্যাট্রিক্স গণনাগুলিতে, কলাম-প্রধান বিন্যাসের ওভারের একটি সারি-প্রধান বিন্যাস চয়ন করার কোনও কারণ আছে?

আমি জানি যে নির্বাচিত ম্যাট্রিক্সের বিন্যাসের উপর নির্ভর করে গতির প্রয়োজনে ক্যাশে স্মৃতিগুলি কার্যকরভাবে ব্যবহার করতে আমাদের উপযুক্ত কোডটি লিখতে হবে।

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


যদি আমরা x কলাম ভেক্টরের সাথে b = A * x গণনা বিবেচনা করি, সারি-মেজর এ এর ​​জন্য আমরা ভ্যাক্টরের অভ্যন্তরীণ পণ্যগুলি ব্যবহার করতে পারি, এ (আই): ^ টি এক্স পেতে খ (আই) পেতে; কলাম-মেজর জন্য আমাদের কেবলমাত্র স্কেলার গুণিত ভেক্টর, যোগ_আই এ (:, i) x (i) প্রয়োজন হতে পারে। আমার কাছে মনে হচ্ছে কলামটি অনেক ভাল! আপনি কি মনে করেন?
হুই ঝাং

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

উত্তর:


18

কলামের প্রধান বিন্যাস হ'ল ফোর্টরান দ্বারা ব্যবহৃত স্কিম এবং সে কারণেই এটি ল্যাপাক এবং অন্যান্য লাইব্রেরিতে ব্যবহৃত হয়।

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

অভ্যন্তরীণ সংরক্ষণ ব্যবস্থা প্রধান কলামের কলামের অভ্যন্তরীণ সঞ্চয়


11

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

সি সারি প্রধান হওয়ায় এর অ্যারে সিনট্যাক্সের কিছুটা পরিণতি হয়; আপনি একটি 3 সারি বাই 2 কলাম অ্যারের হিসাবে ঘোষণা করেন double a[3][2]এবং পরবর্তী সূচকগুলি পূর্ববর্তী সূচকগুলির চেয়ে দ্রুত পরিবর্তিত হয়, যা 2 ডি অ্যারেগুলির জন্য এটি সারিটিকে প্রধান করে তোলে। বাম থেকে ডানে প্রাকৃতিক পশ্চিমা পাঠক্রমের সাথে এটি একত্রিত করুন, এটি সারি প্রধানকে আরও প্রাকৃতিক বলে মনে হয়।


2
আমি মনে করি এগুলি নিখুঁত যুক্তিযুক্ত। '' '' ডাবল এ [3] [2] '' '' র শেষ সূচকটি দ্রুততম পরিবর্তিত হওয়ার ঘটনাটি কোনও কাকতালীয় ঘটনা নয় - এটি ফোর্টরানের সচেতন নকশার সিদ্ধান্ত হিসাবে ঠিক একইভাবে একটি কমনীয় নকশার সিদ্ধান্ত ছিল আপনার যখন '' '' রিয়েল (3,2) '' 'অ্যারে থাকে তখন এটিকে অন্য উপায়ে করুন।
ওল্ফগ্যাং ব্যাঙ্গার্থ

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

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

5
বিন্দুটি বেলবোর করার জন্য নয়, সি মূলত একটি সিস্টেম ভাষা ছিল যা পূর্ববর্তী ভাষা বি এবং বিসিপিএল ভিত্তিক ছিল, পিডিপি -11 এর মতো সিস্টেমে চলছিল যার মূলত ভাসমান পয়েন্ট সংখ্যা নেই। তারা এটি সংখ্যার সাথে মাথায় রেখে ডিজাইন করেছেন তা বলতে বেশ প্রসারিত।
ভিক্টর লিউ

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

2

কলাম-প্রধান ক্রমটি আরও প্রাকৃতিক বলে মনে হচ্ছে। উদাহরণস্বরূপ ধরুন আপনি যদি ছবিতে ছবি ফাইল করার জন্য সিনেমাটি সংরক্ষণ করতে চান তবে আপনি কলামের ক্রমটি ব্যবহার করছেন এবং এটি খুব স্বজ্ঞাত এবং কেউই এটি সারি-প্রধান ক্রমে সংরক্ষণ করতে পারে না।

আপনি যদি সি / সি ++ তে প্রোগ্রামার হন তবে আপনার ডিফল্ট কলাম-প্রধান ক্রমের সাথে ম্যাট্রিকেসের জন্য কয়েকটি উচ্চ স্তরের লাইব্রেরি (আইগেন, আর্মাদিলো, ...) ব্যবহার করা উচিত। কেবল পাগলই সারি-প্রধান ক্রমের সাথে কাঁচা সি পয়েন্টার ব্যবহার করবে, যদিও সি / সি ++ এমন কিছু প্রস্তাব করে যা ম্যাট্রিক্স সূচকে স্মরণ করিয়ে দেয়।

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

দুর্ভাগ্যক্রমে এটি স্পষ্ট হওয়ার আগে বেশ কয়েকটি আকর্ষণীয় গ্রন্থাগার সারি-প্রধান ক্রমে তৈরি করা হয়েছিল সম্ভবত অভিজ্ঞতার অভাবে।

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


2

মি×এন

  • মিআমি,আমি×মি+ +
  • মিআমি,×এন+ +আমি

এখন নিম্নলিখিত অ্যালগরিদম কল্পনা করুন:

for i from 1 to m
   for j from 1 to n
      do something with m(i,j)

আমি×মি+ + ধারাবাহিকভাবে , ফলস্বরূপ ভাল মেমরির লোকাল হবে, যেখানে কলাম-প্রধান ক্রম ব্যবহৃত হয়, তবে ক্রমাগত মেমরি অ্যাকসেসগুলি মেমরিতে বিচ্ছুরিত হবে। ফলাফলগুলি নাটকীয় হতে পারে বিশেষত যখন ভার্চুয়াল মেমরি / অদলবদল দৃশ্যে প্রবেশ করে।

উপসংহার:

  1. হ্যাঁ, এর একটি গুরুত্ব রয়েছে তবে তথ্যটি কীভাবে অ্যাক্সেস করা হয় তার উপর নির্ভর করে। পূর্ববর্তী উদাহরণের জন্য, যদি কলাম-অর্ডার ব্যবহার করা হয় তবে আপনি যা করতে পারেন তা কেবল দুটি লুপের অদলবদল।

  2. থাম্বের নিয়ম: দ্রুত পরিবর্তিত সূচক মেমরির ক্রমাগত অবস্থানগুলিতে ম্যাপ করা উচিত।

  3. আরও গুরুত্বপূর্ণ, পছন্দটির প্রভাব পরিমাপ / বেঞ্চমার্কিং মৌলিক, যেহেতু এটি অনেকগুলি পরামিতিগুলির উপর নির্ভর করে (তথ্যের আকার, ক্যাশের আকার, ব্যবহৃত ভাষাগুলি কোনও রৈখিক সূচকে একাধিক সূচির মানচিত্রকে যেভাবে পরিচালনা করে সিস্টেম ভার্চুয়াল মেমরি পরিচালনা করে, আপনি যে লিনিয়ার বীজগণিত গ্রন্থাগারে ব্যবহার করেন তাতে লুপগুলি বাসা বাঁধে ...)

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