পাইথন / নম্পি অ্যারে অপারেশনগুলির পারফরম্যান্স কীভাবে বাড়ছে অ্যারের মাত্রার সাথে?


21

কীভাবে পাইথন / নম্পি অ্যারেগুলি বাড়ার অ্যারের মাত্রাগুলি সহ স্কেল করে?

এই প্রশ্নের জন্য পাইথন কোডটি বেঞ্চমার্ক করার সময় আমি লক্ষ্য করেছি এমন কিছু আচরণের উপর ভিত্তি করে: কীভাবে এই ন্যাক্কারজনক টুকরোগুলি ব্যবহার করে এই জটিল ভাবটি প্রকাশ করা যায়

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

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

ভেক্টরাইজড এবং সিথন বাস্তবায়নের জন্য লুপ করা কোডের সাথে সম্পর্কিত মৃত্যুর সময় প্লট

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


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

1
আপনি প্রোফাইল ব্যবহৃত কোড পোস্ট করতে পারেন। এখানে সম্ভবত কয়েকটি জিনিস চলছে।
meawoppl

উত্তর:


5

416বি

def timeit(size):
     t0 = time.time()
     for _ in xrange(10):
         np.random.random(size)
     return time.time() - t0

sizes = np.logspace(1, 6, 40)
times = [timeit(s) for s in sizes]

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

800064বি

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

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

মন্তব্যগুলিতে, এভার্ট ক্যারির উল্লেখ করেছেন। মনে রাখবেন, এমনকি কাজ করেও, উন্নয়ন বন্ধ হয়ে গেছে এবং এটি একটি স্ট্যান্ডেলোন প্রকল্প হিসাবে ছেড়ে দেওয়া হয়েছে। কার্যকারিতা পরিবর্তে ব্লেজে অন্তর্ভুক্ত করা হবে, একটি "নতুন প্রজন্মের নম্পি" তৈরির একটি চলমান প্রকল্প।

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