একটি দুর্দান্ত সফ্টওয়্যার ডিজাইনের জন্য 20% পারফরম্যান্স জরিমানা


17

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

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

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

যা আমাকে আমার প্রশ্নে নিয়ে আসে: যদি আমার কাছে একটি সুন্দর অবজেক্টের মডেল থাকে তবে এর পারফরম্যান্সের ক্ষতি কতটা গ্রহণ করতে হবে?


আপনি কোন বিরল ম্যাট্রিক্স অপারেশন পরিমাপ করছেন?
বিল বার্থ

ম্যাট্রিক্স-ভেক্টর গুণ ম্যাট্রিকগুলি আকারে । আমি তাদের গড় ডিগ্রি ডি = লগ 2 এন সহ এরদোস-রেনি র্যান্ডম গ্রাফের জন্য গ্রাফ ল্যাপ্লেইসিয়ান তৈরি করেছি । এছাড়াও, 20% চিত্রটি কিছু মেশিনে আরও খারাপ হয়ে যায়, তাই এখন আমি পুরো জিনিসটি টস করতে আরও ঝুঁকছি। গভীর দীর্ঘশ্বাসএন=1024,,16384=লগ2এন
ড্যানিয়েল শাপেরো

3
আপনি কোন প্রোগ্রামিং ভাষা ব্যবহার করছেন? সাধারণত সি ++ এর মতো কিছু আপনাকে স্বল্প (বা অযৌক্তিক) ব্যয়ে মার্জিত (ইশ) ডিজাইনগুলি দিয়ে দূরে সরিয়ে দেয়। মেটা-প্রোগ্রামিং ছাড়া অন্য ভাষায় (জাভা, ফোর্টরান ইত্যাদি) 20% ব্যয় যুক্তিসঙ্গত বলে মনে হয়।
এলক্লেভিন

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

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

উত্তর:


9

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

আপনার বিচ্ছিন্ন ম্যাট্রিক্স লাইব্রেরির নকশায় প্রয়োগ হতে পারে এমন এই সীমাবদ্ধতার কয়েকটি সাধারণ উদাহরণ এখানে দেওয়া হয়েছে:

  • এক মাসে শেষ হয়েছে
  • আপনার ল্যাপটপ এবং বেশ কয়েকটি ওয়ার্কস্টেশনে সঠিকভাবে চলে
  • দক্ষতার সাথে চালায়

বিজ্ঞানীরা ধীরে ধীরে সফটওয়্যার ইঞ্জিনিয়ারিংয়ের অন্যান্য কিছু সাধারণ প্রয়োজনীয়তার দিকে আরও মনোযোগ দিচ্ছেন:

  • ডকুমেন্টেশন (ব্যবহারকারী গাইড, টিউটোরিয়াল, কোড মন্তব্য)
  • রক্ষণাবেক্ষণ (সংস্করণ নিয়ন্ত্রণ, পরীক্ষা, মডিউলার ডিজাইন)
  • পুনরায় ব্যবহারযোগ্যতা (মডুলার ডিজাইন, "নমনীয়তা")

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

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

কিন্তু আপনার যদি পর্যাপ্ত বিকাশের সময় না হয় তবে কী হবে? কি যথেষ্ট ভাল? ঠিক আছে, এটি নির্ভর করে এবং কোনও প্রসঙ্গ ছাড়াই আপনাকে এই প্রশ্নের উত্তরের উত্তর দিতে সক্ষম হবে না।

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


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

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

12

আপনি নিজের সময়টি কী ব্যয় করেন এটি একটি প্রশ্ন। আমাদের বেশিরভাগের জন্য, আমরা সময় প্রোগ্রামিংয়ের 3/4 এবং ফলাফলের জন্য অপেক্ষা করতে করতে 1/4 সময় ব্যয় করি। (আপনার সংখ্যাগুলি পৃথক হতে পারে, তবে আমি মনে করি সংখ্যাটি পুরোপুরি যোগ্যতা ছাড়াই নয় So) সুতরাং, আপনার যদি এমন কোনও ডিজাইন থাকে যা আপনাকে দ্বিগুণ দ্রুত প্রোগ্রাম করার অনুমতি দেয় (1.5 টাইম ইউনিটের পরিবর্তে একটি সময় ইউনিটের 3/4), তবে আপনি পারফরম্যান্সে 300% হিট নিতে পারে (1/4 থেকে 1 সময় ইউনিট) এবং আপনি এখনও সমস্যার সমাধানের জন্য ব্যয় করা আসল সময়ের ক্ষেত্রে এগিয়ে আসতে পারেন।

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

আমার কাছে, যদি আপনি আরও উত্পাদনশীল হয়ে ওঠেন তবে 20% মোটামুটি ভাল বাণিজ্য-বন্ধ বলে মনে হচ্ছে।


উত্তম উত্তর, আমি যেখানে পারফরম্যান্সের জন্য গুরুত্বপূর্ণ সেখানেও আমি যুক্ত করব। একটি প্রদত্ত বৈজ্ঞানিক কোড কেবল ম্যাট্রিক্সের গুণকেই করছে না; যদি আপনার রানটাইমের 20% ম্যাট্রিক্স গুণে হয় তবে একটি 20% পারফরম্যান্স হিট হয় সামগ্রিকভাবে কেবল 4% পার্থক্য থাকে এবং আমি সহজেই ব্যবহারযোগ্য লাইব্রেরির বিনিময়ে এটিকে গ্রহণ করব।
অরেলিয়াস

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

4

আইএমএইচওর 50% পর্যন্ত জরিমানা (যে কারণেই হোক) এটি খারাপ নয়।

প্রকৃতপক্ষে আমি ঠিক কম্পাইলারের ধরণের ভিত্তিতে পারফরম্যান্সের 0-30% পার্থক্য দেখেছি। এটি পিআরটিএসসি-এর স্বল্প ক্রমের মীমাংসার থেকে উদ্ভূত ম্যাট্রিকগুলিতে ম্যাটমল্ট রুটিনের জন্য।


1

সফ্টওয়্যার ডিজাইন সময়ের সাথে সাথে স্বয়ংক্রিয়ভাবে উন্নত হবে না। পারফরম্যান্স হবে। আপনি আপনার পরবর্তী সিপিইউ দিয়ে 20% ফিরে পাবেন। এছাড়াও, ভাল সফ্টওয়্যার ডিজাইন ভবিষ্যতে গ্রন্থাগারের প্রসারিত বা উন্নত করা সহজ করবে make


আমি মনে করি না যে এই প্রশ্নের উত্তর।
নিকোগুয়ারো

0

একটি সাধারণ নীতি হ'ল প্রথমে ভাল ডিজাইনের জন্য যেতে হবে এবং তারপরে প্রয়োজনে পারফরম্যান্সে অনুকূলিতকরণ । ব্যবহারের ক্ষেত্রে যেখানে 20% পারফরম্যান্স লাভ সত্যিই প্রয়োজন হয় তা সম্ভবত বিরল হওয়ার সম্ভাবনা থাকে, যদি তারা কিছুটা সামনে আসে।

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