সিমডি প্রোগ্রামিং কোড বেসের রক্ষণাবেক্ষণ ব্যয়


14

প্রশ্ন:

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

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


আমার প্রশ্নের পটভূমি।

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

কোডটি সঙ্কুচিত মোড়কযুক্ত সফ্টওয়্যারের জন্য রচিত, অতএব এটি ম্যাটল্যাবের মতো সীমাহীন পুনরায় বিতরণ অধিকার ছাড়া মালিকানাধীন ভাষার উপর নির্ভর করতে পারে না।

সাধারণ কোড কাঠামোর একটি উদাহরণ:

  • ব্যবহার OpenCV এর ম্যাট্রিক্স টাইপ ( Mat) সব মেমরির জন্য, বাফার এবং জীবনকাল ব্যবস্থাপনা।
  • ইনপুট আর্গুমেন্টের আকার (মাত্রা) যাচাই করার পরে, পিক্সেলের প্রতিটি সারিটির সূচনার ঠিকানার পয়েন্টার নেওয়া হয়।
  • প্রতিটি ইনপুট ম্যাট্রিক্স থেকে পিক্সেলের প্রতিটি সারিটির পিক্সেল গণনা এবং সূচনা ঠিকানাগুলি কয়েকটি নিম্ন-স্তরের সি ++ ফাংশনে স্থানান্তরিত হয়।
  • এই নিম্ন-স্তরের সি ++ ফাংশনগুলি সিমড ইন্টার্নিকগুলি ( ইন্টেল আর্কিটেকচার , এবং এআরএম নিওনের জন্য ) ব্যবহার করে, কাঁচা পয়েন্টার ঠিকানাগুলি থেকে লোড করা এবং সংরক্ষণ করা।
  • এই নিম্ন-স্তরের সি ++ ফাংশনের বৈশিষ্ট্য:
    • একচেটিয়াভাবে এক-মাত্রিক (ক্রমাগত স্মৃতিতে)
    • মেমরি বরাদ্দ নিয়ে কাজ করে না।
      (টেম্পোরারি সহ প্রতিটি বরাদ্দই ওপেনসিভি সুবিধা ব্যবহার করে বাইরের কোড দ্বারা পরিচালিত হয়))
    • প্রতীকগুলির নাম দৈর্ঘ্যের পরিসীমা (অভ্যন্তরীণ নামগুলি, পরিবর্তনশীল নামগুলি ইত্যাদি) মোটামুটি 10 ​​- 20 অক্ষর, যা যথেষ্ট অতিরিক্ত is
      (টেকনো-ব্যাবলের মতো পড়ে))
    • SIMD ভেরিয়েবল পুনঃব্যবহার নিরুৎসাহিত করা হয়, কারণ কম্পাইলার সঠিকভাবে কোড যে পার্স বেশ বগী হয় না "একক নিয়োগ" শৈলী কোডিং লেখা।
      (আমি বেশ কয়েকটি সংকলক বাগ রিপোর্ট দায়ের করেছি))

সিমডি প্রোগ্রামিংয়ের কোন দিকগুলি আলোচনার সাধারণ ক্ষেত্রে থেকে পৃথক হতে পারে? বা, সিমডি আলাদা কেন?

প্রাথমিক উন্নয়ন ব্যয়ের ক্ষেত্রে

  • এটি সুপরিচিত যে ভাল পারফরম্যান্স সহ সি ++ সিমডি কোডের প্রাথমিক উন্নয়ন ব্যয় আনুষাঙ্গিকভাবে লিখিত সি ++ কোডের তুলনায় প্রায় 10x - 100x (বিস্তৃত মার্জিন সহ) is
  • পারফরম্যান্স বনাম পঠনযোগ্য / ক্লিনার কোডের মধ্যে বাছাই করার উত্তরে উল্লিখিত হিসাবে ? , বেশিরভাগ কোড (ক্যাজুয়াল-লিখিত কোড এবং সিমডি কোড সহ) প্রাথমিকভাবে পরিষ্কার বা দ্রুত নয়
  • কোড পারফরম্যান্সে বিবর্তনীয় উন্নতি (উভয় স্কেলার এবং সিমডি কোডে) নিরুৎসাহিত করা হয় (কারণ এটি এক ধরণের সফ্টওয়্যার পুনর্নির্মাণ হিসাবে দেখা হয় ), এবং ব্যয় এবং সুবিধা ট্র্যাক করা হয়নি।

প্রপেনসিটির ক্ষেত্রে
(যেমন পেরিটো নীতিটি, উর্ধ্বতন ৮০-২০ বিধি )

  • এমনকি যদি ইমেজ প্রসেসিংয়ে কেবলমাত্র একটি সফ্টওয়্যার সিস্টেমের 20% (কোডের আকার এবং কার্যকারিতা উভয়ই) থাকে, তবে চিত্র প্রক্রিয়াকরণ তুলনামূলকভাবে ধীর হয় (যখন সিপিইউর সময় ব্যয় করার শতাংশ হিসাবে দেখা হয়), 80% এরও বেশি সময় নেয়।
    • এটি ডেটা আকারের প্রভাবের কারণে হয়: একটি সাধারণ চিত্রের আকার মেগাবাইটে পরিমাপ করা হয়, যেখানে অ-চিত্রের ডেটাগুলির সাধারণ আকার কিলোবাইটে পরিমাপ করা হয়।
  • ইমেজ প্রসেসিং কোডের মধ্যে, একটি সিমড প্রোগ্রামার সি ++ কোডে লুপ কাঠামো সনাক্ত করে হটস্পটগুলি সমন্বিত 20% কোডটি স্বয়ংক্রিয়ভাবে সনাক্ত করতে প্রশিক্ষিত হয়। সুতরাং, একটি সিমডি প্রোগ্রামারের দৃষ্টিকোণ থেকে, "গুরুত্বপূর্ণ কোডগুলি" এর 100% পারফরম্যান্সের বাধা bottle
  • প্রায়শই একটি চিত্র প্রক্রিয়াকরণ সিস্টেমে একাধিক হটস্পট বিদ্যমান এবং সময়ের তুলনামূলক অনুপাত গ্রহণ করে। উদাহরণস্বরূপ, মোট সময়ের পাঁচটি হটস্পট থাকতে পারে (20%, 18%, 16%, 14%, 12%) উচ্চ কার্যকারিতা অর্জনের জন্য, সমস্ত হটস্পটগুলিকে সিমডে নতুন করে লেখা দরকার।
    • এটি বেলুন-পপিংয়ের নিয়ম হিসাবে সংক্ষেপে বলা হয়েছে : একটি বেলুন দু'বার পপ করা যায় না।
    • মনে করুন কিছু বেলুন রয়েছে, তার মধ্যে 5 টি বলুন। এগুলিকে হ্রাস করার একমাত্র উপায় হ'ল একে একে পপ করা।
    • একবার প্রথম বেলুনটি পপ করা হয়ে গেলে, বাকি 4 টি বেলুনগুলি এখন মোট বাস্তবায়ন সময়ের একটি উচ্চতর শতাংশ নিয়ে গঠিত।
    • আরও উপার্জন করতে, প্রথমে অন্য একটি বেলুনটি পপ করতে হবে।
      (এই জন্য অবাধ্যতা অপ্টিমাইজেশান এর 80-20 নিয়ম: একটি ভাল লাভজনক ফলাফল সর্বনিম্ন ঝুলন্ত ফল 20% বাছাই করা হয়েছে পরে অর্জন করা যেতে পারে।)

পাঠযোগ্যতা এবং রক্ষণাবেক্ষণের ক্ষেত্রে

  • সিমডি কোডটি পড়তে পটেন্টলি শক্ত।

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

    • সিমডি কোডের কনটোর্ট করার অনেকগুলি উপায় রয়েছে তবে এই জাতীয় 10 টির মধ্যে 1 জনই গ্রহণযোগ্যভাবে দ্রুত ফলাফল অর্জন করতে পারে।
    • (এটি, উচ্চ বিকাশের ব্যয়কে ন্যায়সঙ্গত করতে 4x-10x পারফরম্যান্স লাভের সুরে higher এমনকি উচ্চতর লাভটি বাস্তবে দেখা গেছে))

(মন্তব্য)
এটি এমআইটি হ্যালাইড প্রকল্পের মূল থিসিস- কাগজের শিরোনাম ভারব্যাটিমের উদ্ধৃতি দিয়ে:

"চিত্র প্রক্রিয়াকরণ পাইপলাইনগুলির সহজতর অপ্টিমাইজেশনের জন্য সময়সূচী থেকে অ্যালগরিদমগুলি ডিকোপলিং"

ফরওয়ার্ড আবেদনের ক্ষেত্রে

  • সিমডি কোড কঠোরভাবে একটি একক স্থাপত্যের সাথে আবদ্ধ। প্রতিটি নতুন আর্কিটেকচার (বা সিমডি রেজিস্টারগুলির প্রতিটি প্রশস্তকরণ) এর জন্য একটি পুনর্লিখনের প্রয়োজন।
  • বেশিরভাগ সফ্টওয়্যার বিকাশের বিপরীতে, সিমডি কোডের প্রতিটি অংশ সাধারণত একক উদ্দেশ্যে লেখা হয় যা কখনই পরিবর্তন হয় না।
    (অন্যান্য স্থাপত্যে পোর্টিং ব্যতীত))
  • কিছু আর্কিটেকচার নিখুঁত পিছনে সামঞ্জস্য বজায় রাখে (ইন্টেল); একটি তুচ্ছ পরিমাণ (এআরএম AArch64 দ্বারা প্রতিস্থাপিত কিছু পতনের সংক্ষিপ্ত vtblসঙ্গে vtblq) কিন্তু যা যথেষ্ট কিছু কোড কম্পাইল করার বিফল হওয়ার সম্ভাবনা রয়েছে।

দক্ষতা এবং প্রশিক্ষণের ক্ষেত্রে

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

নির্ভুলতা এবং ত্রুটি-সংক্রান্ত ব্যয়ের ক্ষেত্রে

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

বিঘ্নজনক উদ্ভাবনের ক্ষেত্রে

  • একাডেমিয়া থেকে অনেকগুলি সমাধান প্রস্তাব করা হয়েছে, তবে কয়েকটি বাণিজ্যিক ব্যবসায়ের ব্যাপক ব্যবহার দেখছেন are

    • এমআইটি হ্যালিড
    • স্ট্যানফোর্ড ডার্করুম
    • এনটি 2 (সংখ্যাসূচক টেম্পলেট সরঞ্জামবক্স) এবং সম্পর্কিত বুস্ট.এসআইএমডি
  • বিস্তৃত বাণিজ্যিক ব্যবহার সহ গ্রন্থাগারগুলি সিমড-সক্ষমিতভাবে সক্রিয় বলে মনে হচ্ছে না।

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

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

তবে, এই উত্তরটি "অকাল অপ্টিমাইজেশন" দৃষ্টিভঙ্গির পক্ষে, অর্থাৎ দৃষ্টিভঙ্গির পক্ষে যথেষ্ট "তুষ্ট" ease

  • সমস্ত অপ্টিমাইজেশান সংজ্ঞা দ্বারা অকাল (বা, প্রকৃতির দ্বারা স্বল্প-মেয়াদী ), এবং
  • দীর্ঘমেয়াদী সুবিধার একমাত্র অপটিমাইজেশন হ'ল সরলতার দিকে।

তবে এই জাতীয় দৃষ্টিভঙ্গি এই এসিএম নিবন্ধে প্রতিদ্বন্দ্বিতা করা হয় ।



এগুলি সবই আমাকে জিজ্ঞাসা করতে পরিচালিত করে: সিমড কোডটি সাধারণ অ্যাপ্লিকেশন কোডের চেয়ে আলাদা এবং আমি জানতে চাই যে সিমড কোডের জন্য পরিষ্কার এবং সাধারণ কোডের মান সম্পর্কিত কোনও অনুরূপ শিল্প সম্মতি আছে কিনা।


2
কর্মক্ষমতা প্রয়োজনীয়তা আছে? আপনি সিমডি ব্যবহার না করে আপনার পারফরম্যান্সের প্রয়োজনীয়তাগুলি পূরণ করতে পারেন? যদি প্রশ্ন না হয়।
চার্লস ই। গ্রান্ট

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

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

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

2
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ সহায়তা কেন্দ্রে বর্ণিত এটি কোনও ধারণামূলক প্রোগ্রামিং সমস্যা নয় ।
durron597

উত্তর:


6

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

  • কোডটি "উচ্চ স্তরের কোড" এর চেয়ে বিকাশ করতে 10x থেকে 100x পর্যন্ত সময় নেয়

  • এটি একটি নির্দিষ্ট স্থাপত্যের সাথে আবদ্ধ

  • কোডটি কখনই "পরিষ্কার" বা সহজেই চুল্লী করা যায় না

  • এটি লেখার এবং রক্ষণাবেক্ষণের জন্য আপনার বিশেষজ্ঞের প্রয়োজন

  • ডিবাগিং এবং রক্ষণাবেক্ষণ করা শক্ত, সত্যই শক্তিশালী

কোনওভাবেই সিমডির জন্য "বিশেষ" নয় - এই বিষয়গুলি যে কোনও ধরণের সমাবেশ ভাষার জন্য সত্য এবং এগুলি সমস্ত "শিল্প sensকমত্য"। এবং সফ্টওয়্যার শিল্পের উপসংহারটি এসেম্বলারের ক্ষেত্রেও বেশ একই রকম:

  • আপনার যদি এটি না করেন তবে এটি লিখবেন না - সম্ভব উচ্চতর স্তরের ভাষা ব্যবহার করুন এবং সংকলকগণ কঠোর পরিশ্রম করতে দিন

  • যদি সংকলকগুলি পর্যাপ্ত না হয় তবে কিছু লাইব্রেরিতে "নিম্ন স্তরের" অংশগুলি কমপক্ষে অন্তর্ভুক্ত করুন, তবে আপনার প্রোগ্রামে কোডটি ছড়িয়ে দেওয়া এড়াবেন

  • যেহেতু "সেল্ফ-ডকুমেন্টিং" এসেম্বলার বা সিমডি কোড লেখা প্রায় অসম্ভব তাই প্রচুর ডকুমেন্টেশন দিয়ে এটিকে ভারসাম্যপূর্ণ করার চেষ্টা করুন।

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

আপনি ইতিমধ্যে আপনার প্রশ্নে বর্ণিত হিসাবে, বর্তমানের অত্যাধুনিক গ্রন্থাগারগুলির সাথে একটি মানের সমস্যাও রয়েছে। আইএমএইচও আমরা সর্বোপরি আশা করতে পারি যে পরের বছরগুলিতে সংকলক এবং গ্রন্থাগারগুলির গুণমান বৃদ্ধি পাবে, সম্ভবত সিমডি হার্ডওয়্যারটিকে আরও "সংকলক বান্ধব" হতে হবে, সম্ভবত বিশেষায়িত প্রোগ্রামিং ভাষাগুলি সহজ ভেক্টরাইজেশন সমর্থন করে (হ্যালাইডের মতো, যা আপনি দুবার উল্লেখ করেছেন) আরও জনপ্রিয় হয়ে উঠবে (এটি কি ইতিমধ্যে ফোর্টরানের শক্তি নয়?)) উইকিপিডিয়া অনুসারে , সিমড প্রায় 15 থেকে 20 বছর আগে "একটি ভর পণ্য" হয়ে ওঠে (এবং হ্যালিড 3 বছরেরও কম বয়সী, যখন আমি ডক্সকে সঠিকভাবে ব্যাখ্যা করি)। পরিপক্ক হওয়ার জন্য প্রয়োজনীয় "ক্লাসিক" অ্যাসেম্বলি ভাষার জন্য সময় সংকলকগুলির সাথে এটি তুলনা করুন। মতে এই Wikipedia নিবন্ধটিসংকলকগুলি মানব বিশেষজ্ঞদের (অ সমান্তরাল মেশিন কোড তৈরিতে) এর কার্যকারিতা ছাড়িয়ে যাওয়ার আগ পর্যন্ত এটি প্রায় 30 বছর (১৯~০ থেকে ১৯৯০ এর দশকের শেষের দিকে) সময় নিয়েছিল। সুতরাং সিমড-সক্ষম সক্ষম সংকলকগুলির ক্ষেত্রে একই ঘটনা না হওয়া পর্যন্ত আমাদের আরও 10 থেকে 15 বছর অপেক্ষা করতে হতে পারে।


উইকিপিডিয়া নিবন্ধটি পড়ার পরে , সাধারণ শিল্পের মতামত বলে মনে হচ্ছে যে নিম্ন স্তরে অনুকূলিত কোডটি "ব্যবহার করা কঠিন বলে বিবেচিত হয়, কারণ প্রযুক্তিগত বিশদ বিবরণ মনে রাখতে হবে"
gnat

@ গ্যাঁট: হ্যাঁ, একেবারে, তবে আমি মনে করি যদি আমি আমার উত্তরে এটি যুক্ত করি, তবে ওপির দ্বারা ইতিমধ্যে তাঁর আরও দীর্ঘ প্রশ্নে আমি আরও কয়েক ডজন বিষয় উল্লেখ করেছি।
ডক ব্রাউন

একমত, আপনার উত্তর বিশ্লেষণ যথেষ্ট দেখায় হিসাবে, সেই রেফারেন্স যোগ করলে তা "ওভারলোডিং" এর একটি ঝুঁকি বহন করে
মশা

4

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

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

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

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

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


এই শব্দ sounds! এই পণ্যটি আপনি বিক্রি করেন বা একা একা উপলভ্য করেন? (এছাড়াও, 'এভিসি' = এভিএক্স?)
আহমেদ ফসিহ

দুঃখিত, হ্যাঁ, আমার অর্থ AVX (আমি এটি ঠিক করব)) ভবিষ্যতে ঘটতে পারে যদিও আমরা বর্তমানে স্ট্যান্ড-একল পণ্য হিসাবে সংকলকটি বিক্রি করি না।
ব্যবহারকারী 1118321

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

1
আমরা যখন শুরু করি তখন ওপেনসিএল উপস্থিত ছিল না, আমি মনে করি না। (বা এটি যদি হয় তবে এটি মোটামুটি নতুন)) সুতরাং এটি আসলেই সমীকরণের মধ্যে আসে নি।
ব্যবহারকারী 1118321

0

আপনি যদি উচ্চ-স্তরের ভাষা ব্যবহারের বিষয়টি বিবেচনা করেন তবে এটি অত্যধিক রক্ষণাবেক্ষণের ওভারহেড যুক্ত করবে বলে মনে হয় না:

Vector<float> values = GetValues();
Vector<float> increment = GetIncrement();

// Perform addition as a vector operation:
List<float> result = (values + increment).ToList();

বনাম

List<float> values = GetValues();
List<float> increment = GetIncrement();

// Perform addition as a monadic sequence operation:
List<float> result = values.Zip(increment, (v, i) => v + i).ToList();

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

http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx

http://blogs.msdn.com/b/dotnet/archive/2014/05/13/update-to-simd-support.aspx


আমার পাঠ্য অনুসারে, বাহ্যিক গ্রন্থাগারগুলি ব্যবহারের বিকল্পটি ইতিমধ্যে তদন্তকারী এবং অনুরোধকারী দ্বারা সম্বোধন করা হয়েছে: "বিস্তৃত বাণিজ্যিক ব্যবহার সহ গ্রন্থাগারগুলি সিমড-সক্ষমিত বলে মনে হচ্ছে না ..."
gnat

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

1
আমার বোঝার জন্য, ওপি জিজ্ঞাসা করছে যে ব্যাপকভাবে বাণিজ্যিক ব্যবহারের সাথে সমাধান রয়েছে কি না। যদিও আমি আপনার ইঙ্গিতটির প্রশংসা করি (সম্ভবত আমি এখানে কোনও প্রকল্পের জন্য লিবটি ব্যবহার করতে পারি), আমি যা দেখছি তা থেকে "বিস্তৃতভাবে স্বীকৃত শিল্পের মান" তুলনা অনেকটা দূরে yu
ডক ব্রাউন

@ ডকব্রাউন সম্ভবত, তবে তাঁর আসল প্রশ্নটি আরও জেনেরিক হিসাবে তৈরি করা হয়েছে: "... সিমডি কোডের জন্য পরিষ্কার এবং সাধারণ কোডের মূল্য সম্পর্কে শিল্প sensক্যমত্য ..."। আমার সন্দেহ আছে যে কোনও বিষয়ে (সরকারী) sensকমত্য আছে তবে আমি জমা দিচ্ছি যে উচ্চ-স্তরের ভাষাগুলি "সাধারণ" এবং সিমডি কোডের মধ্যে পার্থক্য হ্রাস করতে পারে, ঠিক সি ++ এর মতো আপনি সমাবেশটি ভুলে যান, এভাবে রক্ষণাবেক্ষণের ব্যয় হ্রাস করা যায়।
ডেন

-1

আমি অতীতে অ্যাসেম্বলি প্রোগ্রামিং করেছি, সম্প্রতি সিমডি প্রোগ্রামিং করিনি।

আপনি কি ইন্টেলের মতো সিমড-সচেতন সংকলক ব্যবহার করার বিষয়টি বিবেচনা করেছেন? ইন্টেল সি ++ কম্পাইলার সহ ভেক্টরাইজেশনের জন্য একটি গাইড কি আকর্ষণীয়?

"বেলুন-পপিং" এর মতো আপনার বেশ কয়েকটি মন্তব্য একটি সংকলক ব্যবহার করার পরামর্শ দেয় (আপনার যদি কোনও হট স্পট না থাকে তবে সমস্ত সুবিধা পেতে)।


আমার পড়া প্রতি এই পদ্ধতির প্রশ্নকর্তা বিচার হয়, দেখুন কম্পাইলার বাগ উল্লেখ / প্রশ্নে অপূর্ণতা
মশা

ওপি তারা ইন্টেল সংকলক চেষ্টা করেছিল কিনা তা জানায়নি , যা এই প্রোগ্রামারগুলিরও বিষয় SE এসই বিষয় । বেশিরভাগ লোক এটি চেষ্টা করে নি। এটা সবার জন্য নয়; তবে এটি অপের ব্যবসায় / প্রশ্নের সাথে মানিয়ে নিতে পারে (কম কোডিং / ডিজাইন / রক্ষণাবেক্ষণ ব্যয়ের জন্য আরও ভাল পারফরম্যান্স)।
ChrisW

আমি যে প্রশ্নটি পড়েছি তা থেকে বোঝা যায় যে প্রশ্নকারী ইন্টেল এবং অন্যান্য আর্কিটেকচারের সংকলক সম্পর্কে সচেতন: "কিছু আর্কিটেকচার নিখুঁতভাবে পশ্চাদপদ সামঞ্জস্যতা বজায় রাখে (ইনটেল); কিছুটা ছোট হয় ..."
gnat

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