জেনেরিক এবং মেটা-প্রোগ্রামিংটি সি ++ টেমপ্লেটগুলি কম্পিউটারের বিজ্ঞানের ক্ষেত্রে কতটা কার্যকর?


17

সি ++ ভাষা টেমপ্লেটগুলির মাধ্যমে জেনেরিক প্রোগ্রামিং এবং রূপক সরবরাহ করে। এই কৌশল অনেক বড় মাপের বৈজ্ঞানিক কম্পিউটিং প্যাকেজ মধ্যে তাদের পথ খুঁজে পেয়েছি (যেমন, MPQC , LAMMPS , CGAL , Trilinos )। তবে সামগ্রিক বিকাশের সময় এবং সমান বা পর্যাপ্ত দক্ষতার জন্য ব্যবহারের ক্ষেত্রে সি বা ফোর্টরানের মতো নন-জেনেরিক, নন-মেটা ভাষার ছাড়িয়ে এমন বৈজ্ঞানিক কম্পিউটিংয়ে তারা আসলে কী অবদান রেখেছিল?

একটি বৈজ্ঞানিক কম্পিউটিং টাস্ক দেওয়া হয়েছে, সি ++ টেম্পলেটগুলির মাধ্যমে জেনেরিক এবং মেটা-প্রোগ্রামিংয়ের দ্বারা কোনও ভাল বোঝা বেঞ্চমার্ক (কোডের লাইন, ব্যক্তি-প্রচেষ্টা ইত্যাদি) দ্বারা পরিমাপকৃত উত্পাদনশীলতা, এক্সপ্রিভিটি বা ব্যবহারযোগ্যতার উন্নতি প্রদর্শিত হয়েছে? অনুরূপভাবে, জেনেরিক এবং মেটা-প্রোগ্রামিংয়ের জন্য সি ++ টেম্পলেটগুলির ব্যবহারের সাথে কী ঝুঁকি যুক্ত?


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

1
আমি মন্তব্যটি সম্পূর্ণভাবে মুছে ফেললাম de আপনি যদি এটি চ্যাট বা মেটাতে পোস্ট করতে চান তবে আমি খুশি। আমার মেটা এখানে দেখুন
অ্যারন আহমদিয়া

3
এছাড়াও, কখন ব্যবহার করতে হবে এবং কখন এক্সপ্রেশন টেম্পলেটগুলি এড়াতে হবে সে সম্পর্কিত পরামর্শের জন্য এখানে সম্পর্কিত প্রশ্নটি দেখুন ।
অ্যারন আহমদিয়া

আমি মনে করি না যে LAMMPS টেম্পলেট বা মেটাপোগ্র্যামিং ব্যবহার করে এটি সঠিক বলে মনে হয় না। এলএএমএমপিএস হ'ল অবজেক্ট-ওরিয়েন্টেড কোড যা বেশিরভাগ সময় ফোর্টরানের মতো দেখতে পুরোটা দেখায়। আমি মনে করি না এমপিকিউসির মধ্যে খুব বেশি টেম্প্লেটিং রয়েছে তবে এটি ভারী অবজেক্ট-ওরিয়েন্টেড এবং পলিমারফিক।
জেফ

1
ওপেনফোম টেমপ্লেট এবং সি ++ এর অন্যান্য বৈশিষ্ট্যগুলির ভারী ব্যবহার করে।
দোহ জো

উত্তর:


14

আমি মনে করি বড় আকারে, টেমপ্লেট রূপক প্রয়োগটি অনুশীলনে অকেজো বলে মনে হয়েছে - এটি খুব ধীর গতির সংকলন করে এবং আমরা যে ত্রুটি বার্তাগুলি পেয়েছি তা বোঝার পক্ষে অসম্ভব। রূপান্তরকাজ ব্যবহার করার সময় নতুনদের প্রবেশের ক্ষেত্রে বাধাও খুব বেশি just

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

অবশ্যই, এই বিষয়গুলির কোনওটিই অবিলম্বে OOP এর সাথে সংযুক্ত নয়। ওওপি, আবার আমি কী বলব, বৈজ্ঞানিক কম্পিউটিং সম্প্রদায় সর্বজনস্বীকৃত। জেনেরিক প্রোগ্রামিংয়ের চেয়েও কম, এটি বিতর্কের বিষয় নয়: বিগত 15 বছরে লিখিত প্রতিটি সফল গ্রন্থাগার (সি ++, সি বা ফোরট্রানে লিখিত হোক) ওওপি কৌশল ব্যবহার করে।


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

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

15

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

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

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

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

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


3

OOPবৈজ্ঞানিক কম্পিউটিংয়ের মতো ভাষার বৈশিষ্ট্যগুলি আরও কমপ্যাক্ট কোড স্টেটমেন্টগুলির জন্য তৈরি যা কোডকে আরও ভালভাবে বুঝতে এবং ব্যবহারে সহায়তা করে। উদাহরণস্বরূপ, FFTরুটিনগুলিকে কোডটি জটিল করে তোলে প্রতিটি ফাংশন কলের জন্য প্রচুর পরিমাণে যুক্তি বহন করা প্রয়োজন।

কল করার সময় যা প্রয়োজন তা কেবল ব্যবহার moduleবা classবিবৃতি দিয়েই পাস করা যেতে পারে, কারণ বাকী যুক্তিগুলি সমস্যা সমাধানের সাথে সম্পর্কিত (যেমন অ্যারেগুলির আকার এবং সহগ)।

আমার অভিজ্ঞতায় আমার SUBROUTINE55 টি আর্গুমেন্ট (ইন ও আউট) এর সাথে কল হয়েছিল এবং আমি কোডটি আরও ভাল করে তুলতে 5 এ কমিয়েছি।

এটা মান।


3

আমি বৈজ্ঞানিক কম্পিউটিংয়ের জন্য জেনেরিক প্রোগ্রামিং এবং মেটা-প্রোগ্রামিংয়ের শক্তিশালী উকিল। আমি অনুভূত ++ (http://www.feelpp.org) নামক এই কৌশলগুলির উপর ভিত্তি করে গ্যালারকিন পদ্ধতির জন্য একটি ফ্রি সফটওয়্যার সি ++ গ্রন্থাগার তৈরি করছি যা অবিচ্ছিন্নভাবে গতি অর্জন করছে। সত্য যে এখনও ধীরে ধীরে সংকলনের সময়গুলির মতো অসুবিধা রয়েছে এবং কেউ যদি দৃশ্যের পিছনে কী চলছে তা বুঝতে চাইলে শেখার বক্ররেখা খাড়া হতে পারে। এটি অত্যন্ত চিত্তাকর্ষক এবং মন ভাসা। যদি গ্রন্থাগার পর্যায়ে করা হয় এবং কোনও ডোমেন নির্দিষ্ট ভাষার পিছনে জটিলতা লুকানো থাকে তবে আপনি একটি অত্যন্ত শক্তিশালী সরঞ্জাম পান। আমাদের কাছে একটি বিস্তৃত পরিসীমা ব্যবহার এবং তুলনা করার পদ্ধতি রয়েছে। বৈজ্ঞানিক কম্পিউটিং শেখানোর উদ্দেশ্যে এটি দুর্দান্ত, গবেষণা এবং নতুন সংখ্যা পদ্ধতিতেও, বৃহত আকারের অ্যাপ্লিকেশনগুলির জন্য, ভাল আমরা এটিতে কাজ করি তবে এখন পর্যন্ত খুব ভাল, আমরা ইতিমধ্যে কিছু সুন্দর জিনিস করতে পারি। আমাদের ইঞ্জিনিয়ার, পদার্থবিজ্ঞানী এবং গণিতবিদরা এটি ব্যবহার করছেন: তাদের বেশিরভাগই ভেরিয়েশনাল সূত্রের জন্য ভাষাটি ব্যবহার করেন এবং তারা এতে খুশি হন। আমাদের পদার্থবিজ্ঞানী সহকর্মীরা যে কয়টি সূত্র তৈরি করে তা দেখে, আমি বৈচিত্রের সূত্রটি বর্ণনা করার জন্য উচ্চ স্তরের ভাষা ছাড়া "হাতে" এগুলি দেখতে চাই না would আমি ব্যক্তিগতভাবে বিবেচনা করি যে এই "কৌশলগুলি" বা "দৃষ্টান্তগুলি" এখন বৈজ্ঞানিক কম্পিউটিং কোডের জটিলতার সাথে মোকাবিলা করার জন্য একটি কোডের আকারকে একটি বিশাল গুণক দ্বারা গুণিত করার জন্য প্রয়োজনীয়। সি ++ তে মেটা-প্রোগ্রামিংয়ের সমর্থন উন্নত করার সম্ভাব্যতা রয়েছে তবে এটি ইতিমধ্যে ভাল আকারে রয়েছে বিশেষত সি ++ 11 থেকে।


2

আপনি আপনার প্রশ্নের সাথে সম্পর্কিত http://arxiv.org/abs/1104.1729 কাগজটি পেতে পারেন। এটি এক্সপ্রেশন টেম্পলেটগুলি (বৈজ্ঞানিক কোডে ব্যবহৃত টেম্পলেট মেটা-প্রোগ্রামিংয়ের একটি বিশেষ অ্যাপ্লিকেশন) কর্মক্ষেত্রের দৃষ্টিকোণ থেকে আলোচনা করে।


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

@ থেরেল: আমি অবাক হয়ে যাচ্ছি তার বিপরীতে এটিই ঠিক। বিকাশের একেবারে শেষ পর্যায়ে আপনাকে হ্যান্ড-অপটিমাইজেশন করতে হবে তা জেনে, আপনি কোন ভাষাটি শেষ পর্যায়ে যাওয়ার আগে বেস হিসাবে বেছে নেবেন? কোন ভাষাটি বেছে নেওয়ার পরামর্শ দেওয়ার জন্য আমাদের কাছে কি হার্ড ডেটা রয়েছে?
মৃত্যু শ্বাস

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

0

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

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

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

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