আমার ম্যাট্রিক্স-ভেক্টর গুণ গুণক কেন হয় না?


15

দীর্ঘ পোস্টের জন্য দুঃখিত তবে আমি প্রথমে প্রাসঙ্গিক বলে মনে করি এমন সমস্ত কিছু অন্তর্ভুক্ত করতে চেয়েছিলাম।

আমি যা চাই

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

আমার KMP_AFFINITY=VERBOSEআউটপুট এখানে উপলব্ধ ।

আমি একটি ছোট কোড লিখেছি:

size_N = 15000
A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad
b = randomly_generated_dense_vector(size_N);
for it=1:n_times %n_times I kept at 50 
 x = Matrix_Vector_Multi(A,b);
end

আমি বিশ্বাস করি এটি 50 টি পুনরাবৃত্তির জন্য সিজির আচরণের অনুকরণ করে।

আমি যা চেষ্টা করেছি:

অনুবাদ

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

প্রোফাইলিং

আমি চালানোর জন্য আমার কোডটির প্রোফাইল দিয়েছি এবং এটি 46.075কয়েক সেকেন্ড ধরে চলে। এটি তখন ছিল যখন এমকেএল_ডায়ামামিক সেট করা হয়েছিলFALSE এবং সমস্ত কোর ব্যবহার করা হয়েছিল। যদি আমি এমকেএল_ডায়ামমিককে সত্য হিসাবে ব্যবহার করি তবে কেবলমাত্র (প্রায়) প্রায় অর্ধেক সংখ্যক কোর ব্যবহৃত যে কোনও সময় ব্যবহৃত হতে পারে। এখানে কয়েকটি বিবরণ দেওয়া হল:

Address Line    Assembly                CPU Time

0x5cb51c        mulpd %xmm9, %xmm14     36.591s

সর্বাধিক সময় গ্রহণের প্রক্রিয়াটি মনে হয়:

Call Stack                          LAX16_N4_Loop_M16gas_1
CPU Time by Utilization             157.926s
CPU Time:Total by Utilization       94.1%
Overhead Time                       0us
Overhead Time:Total                 0.0%    
Module                              libmkl_mc3.so   

এখানে কয়েকটি ছবি আছে:এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

উপসংহার:

আমি প্রোফাইলিংয়ের একজন সত্যিকারের শিক্ষানবিশ কিন্তু আমি বুঝতে পারি যে গতি বাড়ানো এখনও ভাল নয়। ক্রমিক (1 কোর) কোডটি 53 সেকেন্ডের মধ্যে শেষ হয় । তাও ১.১ এরও কম গতি!

আসল প্রশ্ন: আমার গতি বাড়ানোর জন্য আমার কী করা উচিত?

আমার মনে হয় যে স্টাফগুলি সাহায্য করতে পারে তবে আমি নিশ্চিত হতে পারি না:

  • পাথ্রেডস বাস্তবায়ন
  • এমপিআই (স্কালাপ্যাক) বাস্তবায়ন
  • ম্যানুয়াল টিউনিং (কীভাবে আমি জানি না Please আপনি যদি এটির পরামর্শ দেন তবে কোনও উত্সের প্রস্তাব দিন)

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

উত্তর:


20

আপনার ম্যাট্রিক্স 15,000 x 15,000 আকারের, সুতরাং আপনার ম্যাট্রিক্সে 225M উপাদান রয়েছে। এটি মোটামুটি 2GB মেমরি তৈরি করে। এটি আপনার প্রসেসরের ক্যাশে আকারের তুলনায় অনেক বেশি, সুতরাং এটি প্রায় প্রতিটি ম্যাট্রিক্স গুণায় মূল মেমরি থেকে সম্পূর্ণ লোড করতে হবে, প্রায় 100 জিবি ডেটা স্থানান্তর করতে হবে, এবং উত্স এবং গন্তব্য ভেক্টরগুলির জন্য আপনার যা প্রয়োজন।

আই 3 এর সর্বাধিক মেমরি ব্যান্ডউইথটি ইনটেল স্পেসের উপর ভিত্তি করে প্রায় 21 গিগাবাইট / সেকেন্ড, তবে আপনি যদি ওয়েবটি ঘুরে দেখেন তবে আপনি দেখতে পাবেন যে এর অর্ধেকটি সত্যই বাস্তবে উপলব্ধ। সুতরাং, খুব কমপক্ষে, আপনি আপনার বেঞ্চমার্কটি 10 ​​সেকেন্ড স্থায়ী হতে পারে এবং আপনার প্রকৃত পরিমাপ 45 সেকেন্ড এখনও পর্যন্ত এই চিহ্নটি ছাড়েনি।

একই সময়ে, আপনি কিছু 10 বিলিয়ন ভাসমান পয়েন্ট গুণক এবং যোগও করছেন। বিবেচনা করে বলুন, সংমিশ্রণের জন্য 10 টি ঘড়ি চক্র এবং 3 গিগাহার্টজ ক্লক রেট, আপনি 30 সেকেন্ডে এসে পৌঁছবেন। অবশ্যই ক্যাশে চালাক থাকলে তারা অনুমানমূলক মেমরি লোডের সাথে একযোগে চলতে পারে।

সব মিলিয়ে আমি বলব আপনি খুব বেশি দূরে নন। আপনি কি আশা করবেন?


কমপক্ষে ২-৩ এর স্পিডআপ করার উপায় নেই?
সুরতহাল

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

4

আপনি কীভাবে ম্যাট্রিক্স-ভেক্টর গুণিত করছেন? হাতে ডাবল লুপ? নাকি বিএলএএস-এ কল? আপনি যদি এমকেএল ব্যবহার করছেন তবে আমি দৃ strongly়ভাবে থ্রেডেড সংস্করণটির বিএলএএস রুটিনগুলি ব্যবহার করার পরামর্শ দেব would

কৌতূহলের বাইরে, আপনি এটলাসের নিজস্ব সুরযুক্ত সংস্করণটি সংকলন করতে এবং এটি কীভাবে আপনার সমস্যায় পড়ে তা দেখতে চাইতে পারেন।

হালনাগাদ

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

"কেবল" দুটি কোরে আপনি কী ধরণের ফলাফল পান?


আমি ATLAs, GoTo এবং নেটলিব BLAS চেষ্টা করেছি। পারফরম্যান্সে সবাই এমকেএল থেকে দুর্বল। এটি কি প্রত্যাশিত বা আমি কিছু ভুল করছি? হ্যান্ডবুকে উল্লিখিত হিসাবে আমি আটলাস সংকলন করেছি। আরও, আমি এখানে আমার (সঠিক) কোডটি পেস্ট করেছি । এটি এমকেএল এর BLAS কল করছে।
সুরতহাল

ঠিক আছে, এবং স্কেলিংয়ের জন্য, আপনি কি নিশ্চিত যে আপনার বেসলাইন ক্ষেত্রে, কোডটি কেবলমাত্র একটি সিপিইউতে চলছে? উদাহরণস্বরূপ, আপনি যদি এটি বেঞ্চমার্ক করেন, সিপিইউ ব্যবহারের হিস্টোগ্রামটি কেবল একটি একক কোর দেখায়?
পেড্রো

হ্যাঁ. সিপিইউ হিস্টোগ্রামটি 1 কোর দেখায়।
সুরতহাল

আবার কৌতুহলের বাইরে, আপনি দুটি বা তিনটি কোরের জন্য কী পাবেন? আপনার মেশিনে আসলে চারটি শারীরিক কোর বা হাইপারথ্রেডিং সহ মাত্র দুটি কোর রয়েছে ?
পেড্রো

আমি এটি কীভাবে খুঁজে পাব? আমি আমার কেএমপি_এফআইএনটি প্রধানতে অন্তর্ভুক্ত করেছি।
সুরতহাল

0

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

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

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