প্রোগ্রামাররা আজকের জন্য "মাইক্রো-অপ্টিমাইজ" কী করে? [বন্ধ]


14

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

অন্য কথায়, একটি সেরা অনুশীলনকে এমন চূড়ান্ত স্থানে নেওয়া যেতে পারে যেখানে এটি আর কোনও মূল্যবোধ যুক্ত করে না? এবং পরিবর্তে সময় নষ্ট হয়?

উদাহরণস্বরূপ: প্রোগ্রামাররা ব্যক্তিগত স্থানগুলিকে সাধারণীকরণের সময় নষ্ট করেন যা কেবলমাত্র এক জায়গা থেকে ডাকা হয়? পরীক্ষার কেস ডেটা হ্রাস করতে কি সময় নষ্ট হচ্ছে? প্রোগ্রামাররা (এখনও) কোডের লাইন হ্রাস সম্পর্কে অত্যধিক উদ্বিগ্ন?

আমি নীচে যা খুঁজছি তার দুটি দুর্দান্ত উদাহরণ রয়েছে: (1) সঠিক পরিবর্তনশীল নামগুলি খুঁজে পেতে সময় ব্যয় করা, এমনকি সমস্ত কিছুর নামকরণ করা; এবং (2) এমনকি অপ্রাপ্তবয়স্ক এবং মিথ্যা কোড নকল অপসারণ।


দ্রষ্টব্য যে এটি " আপনি কীসের জন্য অপ্টিমাইজ করেন? " প্রশ্নের চেয়ে পৃথক , কারণ আমি অন্যান্য প্রোগ্রামারদের কী সর্বাধিকতর বলে মনে হচ্ছে, এটি "মাইক্রো" অপ্টিমাইজেশনের কলঙ্ক সহ, এবং এইভাবে সময়ের উত্পাদনশীল ব্যবহার নয়।



@ ম্যাকনাইল, আমি জানি না যে অন্যান্য প্রোগ্রামাররা কীসের জন্য মাইক্রো-অপ্টিমাইজ করে, তবে এর জন্য আমার খুব বেশি সময় নেই। আমার সহকর্মীরা পাশাপাশি ব্যস্ত (কেবল আমার 2 সেন্ট)।
কাজ

@ জোব: আপনি কখনও দেখেন নি যে কেউ বিনা কারণে কোড পরিবর্তন করে তাদের সময় নষ্ট করছে? নিজেকে ভাগ্যবান মনে করুন। নীচে দুটি দুর্দান্ত উদাহরণ রয়েছে: পরিবর্তনশীল নাম এবং গৌণ কোডের নকল।
ম্যাকনিল

1
প্রশ্নটি যেমনটি বলা হচ্ছে তেমনি একটি উন্নতি is আমি নিকটতম ভোটটি সরাতে পারি না, তবে এটি কয়েক দিনের মধ্যেই শেষ হয়ে যাবে। আসলে, প্রশ্নটি বেশ কয়েকটি ভাল উত্তর আকর্ষণ করছে।
রবার্ট হার্ভে

1
বিটিডাব্লু, যে কোনও সেরা অনুশীলনকে এমন চূড়ান্ত দিকে নেওয়া যেতে পারে যে এটি আর মান দেয় না।
রবার্ট হার্ভে

উত্তর:


22

কোড বিন্যাসকরণ

Don't     get    me   wrong             ,
code      should be   consistent        & 
readable                                , 
but       some   take it         too far.

হ্যাঁ, ভাল পুরানো ভেরিয়েবলের ধরণের এবং ভেরিয়েবলের নামগুলি ভ্যারিয়েবলের ঘোষণার সিরিজের নিজস্ব কলামগুলির প্রয়োজন। উহু! =প্রারম্ভিকদের জন্য অতিরিক্ত সারি এবং চতুর্থটি ভুলে গেছেন !
ম্যাকনিল

[ডার্ন, উপচে পড়া হবে, তবে আমার দৈনিক সীমা পৌঁছেছে ...]
ম্যাকনাইল

3
আমাদের অধ্যাপকরা এইভাবে দায়িত্বের জন্য কোডটি ফর্ম্যাট করতে বাধ্য করেছিলেন। এই অভ্যাস থেকে পরিত্রাণ পেতে আমাকে বছর সময় নিয়েছে।
অলিভার ওয়েইলার

ওহে প্রিয়। অন্যান্য
উত্তরে

2
+1 আমি একবার এমন একটি লাইব্রেরির সাথে কাজ করেছি যেখানে বিকাশকারী তার কোডটি সংশোধন করতে অস্বীকৃতি জানিয়েছিলেন কারণ এটি তার কলাম-ফর্ম্যাট কোডটিকে স্ক্রু করেছে ...
ডিন হার্ডিং

20

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

সম্ভবত আরও গুরুত্বপূর্ণ, বেশিরভাগ কার্য সম্পাদনের সমস্যাগুলি নির্দেশ ইস্যু হার সম্পর্কে নয়, তবে সিপিইউতে ডেটা প্রাপ্ত। আমি উপরে উল্লিখিত হিসাবে, মেমরি ল্যাটেন্সি এখন কয়েকশো চক্র, এবং সিপিইউ প্রতি ঘড়ির সময়কালে বেশ কয়েকটি নির্দেশনা কার্যকর করতে পারে, সুতরাং প্রোগ্রাম-এবং বিশেষত ডেটা স্ট্রাকচারগুলি এমনভাবে ডিজাইন করা না হয় যাতে ক্যাশে হিটের হার অত্যধিক বেশি হয়, নির্দেশে মাইক্রোটুনিং স্তরের কোনও পরিশোধ নেই। সামরিক প্রকারের মতোই অপেশাদাররা কথা বলার কৌশল বলে, পেশাদারদের মধ্যে কথা বলার রসদ রয়েছে। পারফরম্যান্স প্রোগ্রামিং এখন 90% এরও বেশি লজিস্টিক (মুভিং ডেটা)। এবং এটি নির্ধারণ করা শক্ত কারণ আধুনিক মেমরি ম্যানেজমেন্টটিতে সাধারণত একাধিক স্তরের ক্যাশে থাকে এবং ভার্চুয়াল মেমরি পৃষ্ঠাগুলি একটি হার্ডওয়্যার ইউনিট দ্বারা পরিচালিত হয় টিএলবি নামে পরিচিত called এছাড়াও ঠিকানাগুলির নিম্ন স্তরের প্রান্তিককরণ গুরুত্বপূর্ণ হয়ে ওঠে, প্রকৃত ডেটা স্থানান্তর, বাইটগুলির ইউনিটে না থাকায়, বা bit৪ বিট লম্বা-লম্বা হলেও এগুলি ক্যাশে লাইনের ইউনিটে আসে। তারপরে বেশিরভাগ আধুনিক মেশিনে এমন একটি হার্ডওয়্যার রয়েছে যা ভবিষ্যদ্বাণী করার চেষ্টা করে যে নিকট ভবিষ্যতে কোন ক্যাশে রেখাটি আপনার প্রয়োজন হতে পারে তা মিস করে এবং সেগুলিতে ক্যাশে যাওয়ার জন্য স্বয়ংক্রিয় উপসর্গগুলি ইস্যু করে। সুতরাং বাস্তবতাটি হ'ল আধুনিক সিপিইউ সহ পারফরম্যান্সের মডেলগুলি এত জটিল যে প্রায় অ-বোধগম্য। এমনকি বিশদ হার্ডওয়্যার সিমুলেটরগুলি কখনই চিপসের সঠিক যুক্তির সাথে মেলে না, সুতরাং সঠিক টিউনিংটি কেবল অসম্ভব।

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


1
হস্ত-কোডিং সিপিইউ বিক্রেতাদের বাইরে কাজ করা ব্যক্তিদের পক্ষে অসুবিধা বাড়ছে, কারণ টাস্কটি ক্রমবর্ধমান অভ্যন্তরীণ জ্ঞান এবং বিক্রেতার নির্দিষ্ট সরঞ্জামগুলির (সংকলক এবং প্রোফাইলার) উপর নির্ভরশীল। spiral.net সিপিইউ অপ্টিমাইজেশন মডেল করার চেষ্টা করে এবং সর্বোত্তম সমাধানগুলির সন্ধানটি স্বয়ংক্রিয় করার চেষ্টা করে।
rwong

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

10

ভেরিয়েবল বা কোনও পদ্ধতির জন্য একটি ভাল নাম বাছাই করার সময় আমি কখনও কখনও (অপব্যয়?) সময় ব্যয় করি যাতে এটি কেবলমাত্র বর্ণনামূলকই নয় তবে একটি ভাল ভাষাগত স্টাইলও রয়েছে।

পুরো কাজগুলি (একটি প্রোগ্রাম) একই ভাষাগত স্টাইলে রাখার চেষ্টা করার পরে এটি আরও খানিকটা এগিয়ে যায়। কখনও কখনও আমার মতামত পরিবর্তন হয় এবং আমি বইটি সংশোধন করি। :)

না যে এটি এত বেশি সময় নেয়। এটা বরং বিরল। তবে আমি আমার প্রোগ্রামগুলিতে ভাল ব্যাকরণ রাখতে চাই।


3
নামকরণ কঠিন। অতএব আপনি যখন একটি আরও ভাল নাম ভাবেন তখন আপনাকে একটি নামটি পুনরায় চুলক দেওয়া উচিত। নোট করুন যে এটি মনের প্রচেষ্টা ক্যাপচার করে এবং আশা করি "কেন" এরও ক্রিস্টালাইজ হবে।

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

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

@ গ্র্যান্ডমাস্টার: আর একমত হতে পারেন নি।
রবার্ট হার্ভে

4
@ ডান-ব্রেইনার: দয়া করে লেফট-টিব্রাইনারদের জন্য কোড করুন, যাতে আমি আপনার কোডটিও পড়তে পারি
জুয়ান মেন্ডেস

10

সময়ের জটিলতা। আমি প্রোগ্রামটিতে বাস্তবতার মুখোমুখি হব তার চেয়ে বড় আকারের ক্রম যা সবচেয়ে বেশি আকারের অর্ডার হিসাবে এমন একটি স্কেলে খারাপের পারফরম্যান্সের জন্য জিনিসগুলির অনুকূলকরণের জন্য আমি অনেক বেশি সময় ব্যয় করি।

আমি 'অবাক' হওয়ার মতো খুব আগ্রহী, তবে অন্য ডিজাইনের সিদ্ধান্তগুলি বাস্তবিকভাবে ঘটছে তা থেকে বিরত থাকা সত্ত্বেও, এটি বড় হতে পারে bone

যাইহোক, আমার প্রতিরক্ষা হিসাবে, অবাস্তব বাস্তব হওয়া উচিত .. অপ্টিমাইজেশন আসলে আর 'মাইক্রো' নয়। দ্রষ্টব্য, আমি অসম্ভব বলিনি , তবে অবাস্তব

অবশ্যই, প্রয়োজনীয়তা অগ্রাধিকার নিতে।


1
আমি একটি সংস্থার জন্য কাজ করেছি যা এই কারণে ডুবেছে।
হেনরি

2
@Henry - আমি প্রতিজ্ঞা করছি, তাই নয় আমি ছিলাম :)
টিম পোস্ট

1
@Henry: আপনি বলতে চাচ্ছেন তারা সময় নষ্ট বিষয় আছে যা সম্ভবত ঘটতে করবে নিখুঁত বা তাদের যেটি করা হয়নি বিষয় আছে যা সম্ভবত ঘটতে "কখনো না" হবে আমার মনে হয় ... যতক্ষণ না তারা করেনি ঘটতে এবং এটা খুব দেরি হয়ে ছিল?
ডিন হার্ডিং

2
@ হেনরি: যদি কোনও সংস্থার একটি অতি স্কেলযোগ্য পণ্য থাকে এবং তবুও এটি ডুবে যায় তবে এটি বিক্রয় এবং বিপণনের দোষ (উচ্চ-ভলিউম গ্রাহকদের টার্গেট না করার জন্য এবং যথাযথভাবে মূল্য নির্ধারণের জন্য নয়), উন্নয়নের নয়।
রবিং

1
1 জন ব্যবহারকারী না থাকলে এই সংস্থাটি কয়েক মিলিয়ন ব্যবহারকারীর জন্য একটি সিস্টেম ডিজাইন করার জন্য অনেক বেশি সময় ব্যয় করেছিল। এটা অবশ্যই বিপণনের দোষ ছিল। হ্যাঁ মার্কেটিংকে দোষ দিন, এই ছেলেরা বোকা।
হেনরি

8

আমার মনে হয় আমি জাভা ব্যতিক্রম হ্যান্ডলারদের সাথে কয়েক সপ্তাহ মূল্যবান সময় নষ্ট করেছি।

কোডের জন্য এটি অনেক কাজ যা প্রতি বছর দুই বা তিনবার ব্যর্থ হয়। এটি কি একটি সতর্কতা বা কোনও তথ্য হওয়া উচিত? ত্রুটি নাকি মারাত্মক? প্রক্রিয়াটি পাঁচ মিনিটের মধ্যে পুনরায় তৈরি করা কি সত্যিই মারাত্মক? যদি সবকিছু এখনও ডিফল্ট অবস্থায় থাকে তবে এটি কি সত্যই একটি সতর্কতা?

আইও ত্রুটির প্রকৃতি সম্পর্কে প্রচুর নাভীর দৃষ্টিতে নজর দেওয়া এবং আলোচনা। আপনি যদি নেটওয়ার্কের মাধ্যমে কোনও ফাইলটি পড়তে না পারেন তবে এটি কোনও ফাইল ত্রুটি বা কোনও নেটওয়ার্ক ত্রুটি? ইত্যাদি।

এক পর্যায়ে আমি সমস্ত কনক্যাট স্ট্রিংগুলি প্রতিস্থাপন করেছি String.formatযাতে বার্ষিক ফাইলের ত্রুটির ফলে হিপগুলিতে অতিরিক্ত বস্তুর ফল হয় না। এটা ছিল অপচয়।


3
এটি গুরুত্বপূর্ণ কাজ। ব্যর্থতার দাম = আপনার ত্রুটি বার্তাটি প্রতিদিনের ডাব্লুটিএফ-তে প্রদর্শিত হচ্ছে।
স্টিভ 314

7

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


4
"ডুপ্লিকেট কোডে আমার অ্যালার্জি রয়েছে" এর জন্য +1। এখানে আমার
জবাবটিও

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

5

কেবল একটি স্ট্রিংয়ে পুরো লাইনটি পড়ার পরিবর্তে লাইন দ্বারা একটি ফাইল লাইন পড়া এবং এক বারের মধ্যে স্ট্রিংটি প্রক্রিয়া করা।

অবশ্যই, এটি কার্যকর করার গতিতে একটি পার্থক্য তৈরি করে তবে কোডের অতিরিক্ত লাইনগুলি খুব কমই মূল্যবান। এটি কোডটিকে অনেক কম রক্ষণাবেক্ষণযোগ্য করে তোলে এবং কোডের আকার বাড়ে।

হ্যাঁ, ফাইলটি 3 গিগাবাইট বড় হলে সম্ভবত এটি বোঝা যায় না তবে বেশিরভাগ ফাইলই বড় না হয় (কমপক্ষে আমি যাদের সাথে কাজ করছি তা নয় ;-))।


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

3

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

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

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

সাধারণভাবে আমি কয়েক বছরের অভিজ্ঞতার ভিত্তিতে কীভাবে কোড লিখি সে সম্পর্কে স্মার্ট হওয়ার চেষ্টা করি।


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

3

একটি মাইক্রো-অপ্টিমাইজেশন: এমন জিনিসগুলির একক থ্রেডেড পারফরম্যান্সের উন্নতি যা সমান্তরাল বা সহজেই নতুন হার্ডওয়্যার দিয়ে উন্নত করা যায়।

যদি 10 বছর আগে কোনও কম্পিউটারে কিছুটা ধীর গতিতে থাকে তবে একটি কম সলিউশন হ'ল প্রোগ্রামার সময়টি অনুকূলকরণের পরিবর্তে একটি নতুন, দ্রুত কম্পিউটার কেনা। অপরিহার্যকরণের একটি বড় ফোকাস হিসাবে বিবেচিত, তবে আপনি যে 8 টি কোর পেতে পারেন সেগুলি ব্যবহার করার একটি উপায় খুঁজে পাওয়া উচিত, বা 64 টি আপনি কয়েক বছরের মধ্যে পেতে সক্ষম হবেন, ময়লা ফেলার অতিরিক্ত ব্যয়ের মতো সংক্ষিপ্ত বিবরণ না করে you'll সংগ্রহ।


2

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

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


প্রোগ্রামাররা হবে কেন। অন্য কিছু হতে পারে? পার্থক্য কি, দয়া করে।
ড্যান রোজনস্টার্ক

@ ইয়ার - প্রোগ্রামাররা কেন এর থেকে আলাদা হবে?
জেসন বেকার

কেন হবে programmers.= programmers.stackexchange.comযেখানে আপনি এই দুটি ধারণার মধ্যে পার্থক্য ব্যাখ্যা করতে হয়েছে প্রত্যেক জায়গা থেকে কোন ভিন্ন যে আপনার কাজ করেছি হতে পারে? পার্থক্য ব্যাখ্যা করুন।
ড্যান রোজনস্টার্ক

@ ইয়ার - আমি জানি না যে এটি হবে। প্রকৃতপক্ষে প্রোগ্রামার.স পয়েন্টটি প্রোগ্রামারদের পুল জ্ঞানকে সহায়তা করার জন্য, আমি আশা করব যে এটি এমনটি নয় যাতে লোকেরা আমার উত্তর দিয়ে কমপক্ষে কিছুটা আলোকিত হয়।
জেসন বেকার

2
সুতরাং পার্থক্য কি বি / টি সরলতা এবং সরলতা?
ড্যান রোজনস্টার্ক

2

আমি কিছুই না-অপ্টিমাইজ-না-করা-সত্য-প্রয়োজনীয় নীতির পক্ষে। এবং আমি সবই প্রথম-প্রথম নীতিটির জন্য। এবং নীতিগতভাবে, আমি কেবল এমন কিছু অনুকূল করব যা একটি প্রয়োজনীয় পার্থক্য তৈরি করবে।

এটা নীতিগতভাবে। কিন্তু নীতি মিথ্যাবাদী।

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

ওহ - এবং তারপরে "আমি এটি লিখছি - অবশ্যই এটি একটি গুরুত্বপূর্ণ গ্রন্থাগার" যুক্তি রয়েছে।

ওহ - এবং বিটিডাব্লু অপ্টিমাইজেশানকে গাইড করার জন্য আমি এখনও কোনও প্রোফাইলার ব্যবহার করি নি। কোনও বাণিজ্যিক অ্যাক্সেস নেই এবং জিআরএফওফ বের করার প্রেরণাটি কখনও তৈরি করেনি।

মূলত, আমি একটি ভন্ড। এই নীতিগুলি অন্য লোকেদের ক্ষেত্রে প্রযোজ্য, তবে আমি কাউকে বলতে ভয় পেয়েছি "তবে আপনি কেন এই ধীর এবং কৃপণভাবে লিখলেন?" তাই আমি এগুলি কখনই আমার কাছে যথাযথভাবে প্রয়োগ করতে পারি না।

যদিও আমি এখানে তৈরি করার মতো সত্যই খারাপ নই। এবং আমি আত্ম-প্রতারণার জন্য সম্পূর্ণরূপে প্রতিরোধী, তাই আপনি জানেন যে আমি সে সম্পর্কে ঠিকই আছি!

সম্পাদনা

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


+1 আহ, হ্যাঁ! এই শ্রেণিটি আমার আবেদনের অত্যন্ত নির্দিষ্ট এবং উদ্দীপনা কমান্ড-লাইন আর্গুমেন্টকে বিশ্লেষণ করে তবে জাভাদোক যখন আমাকে ফর্ম্যাট এবং সম্পূর্ণ নথিভুক্ত করতে দেয় কারণ নিশ্চয়ই অন্যরা বছরের পর বছর ধরে এটি ব্যবহার করবে! [পরে উঁচুতে উঠতে হবে, আমার দৈনিক ক্যাপটি পৌঁছেছে]]
ম্যাকনিল

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

1

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

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

তবে আমি প্রোগ্রামাররা সময় নষ্ট করার জন্য, রানটাইম পারফরম্যান্সকে অনুকূল করতে না করার জন্য কী করে তা সন্ধান করছি।

টুইটার এবং ফেসবুক বসন্ত মনে :-)


হাই স্টিফেন, এটি মাইক্রো-অপ্টিমাইজেশান সম্পর্কে দুর্দান্ত ভাষ্য, তবে আপনি কি কোনও আধুনিক দিনের তুলনা দেখতে পাচ্ছেন? [ফেসবুক এবং টুইটার "সেরা অনুশীলন" নয় যা খুব বেশি দূরে বহন করা যায়]]
ম্যাকনিয়েল

এটি এখনও উপলব্ধি করে। ঘড়ির সময়গুলি
দৈর্ঘ্যের

@ স্টুয়ার্ট - এর অর্থ মাইক্রো-অপ্টিমাইজ করার আরও বেশি কোডের অর্ডার রয়েছে ... যা কেবল স্কেল করে না doesn't
স্টিফেন সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.