কম্পিউটেশনাল সায়েন্সে কখন আমার সি ++ এক্সপ্রেশন টেম্পলেট ব্যবহার করা উচিত এবং কখন সেগুলি * ব্যবহার করা উচিত নয়?


24

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

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

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


আহ, ভিডিওটি খুব মজার। আমি জানতাম না যে এর অস্তিত্ব আছে। কে এটি তৈরি করেছে, আপনি কি জানেন?
ওল্ফগ্যাং ব্যাঙ্গার্থ

কোন ধারনা নাই; পিইটিএসসি-র দু'জন লোক আমাকে এক পর্যায়ে লিঙ্কগুলি প্রেরণ করেছিলেন। আমি মনে করি কোনও এফএনসিএস বিকাশকারী এটি তৈরি করেছেন।
জেফ অক্সবেরি

ভিডিও লিঙ্কটি নষ্ট হয়ে গেছে এবং আমি কৌতূহল থেকে মরে যাচ্ছি। নতুন লিঙ্ক?
প্রেক্সোলিটিক

ওহ বিরক্তি প্রকাশ করতে ব্যবহৃত, কিছু মনে করবেন না, আমি দেখতে ইউটিউব এসেছে আমাদের হিটলার ভিডিও।
প্রক্সিওলিটিক

উত্তর:


17

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


হ্যাঁ, আমি যখন gcc 2.95 থেকে gcc 4.x এর কোড পোর্ট করতে হয়েছিল তখন আমি বেশ কয়েকটি দীর্ঘ ত্রুটি বার্তা দেখেছি এবং সংকলক টেমপ্লেটগুলি সম্পর্কে সমস্ত ধরণের ত্রুটি নিক্ষেপ করছে। আমার একটি ল্যাব-সাথী সি ++ তে অন্তরবৃত্ত গণিতের জন্য একটি টেম্প্লেটেড লাইব্রেরি বিকাশ করছে (আরও গবেষণা সম্পাদনের জন্য বুস্ট :: ইন্টারভাল নয় এমন নতুন বৈশিষ্ট্য যুক্ত করছে), এবং আমি কোডটি একটি দুঃস্বপ্ন হয়ে দেখতে চাই না সংকলন করা।
জেফ অক্সবেরি

12

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

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

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


কৌতূহলের বাইরে, আপনি কি / কিউতে নতুন এক্সএলসি সংকলকগুলির বিরুদ্ধে সংকলন করার চেষ্টা করেছেন?
অ্যারন আহমদিয়া

না, আমি স্বীকার করব যে আমি এক্সএলসি ছেড়ে দিয়েছি।
ওল্ফগ্যাং ব্যাঙ্গারথ

5

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

ওনুমারিকস ওয়েবপৃষ্ঠায় আপনি আরও তথ্য সন্ধান করতে পারেন (দুটি ইটি ওয়ার্কশপের দুটি প্রক্রিয়া রয়েছে)।

তবে আমি তাদের থেকে অনেক দূরে থাকতাম ....


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

4

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

আপনি ভেক্টর অপারেশন কোড

v = 2*x + 3*y + 4*z;                    // (1)

এবং এটি একটি লুপ দ্বারা গণনা করা হয়

for (int i=0; i<n; ++i)                 // (2)
    v(i) = 2*x(i) + 3*y(i) + 4*z(i);

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

myGreatVecSum(alpha, x, beta, y, gamma, z, result);    // (3)

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

আমি যা বর্ণনা করি তা নতুন কিছু নয়। বিপরীতে, এটি BLAS / এলপ্যাকের পিছনে ধারণা:

  • LAPACK- এ সমস্ত পারফরম্যান্সের সমালোচনামূলক ক্রিয়াকলাপগুলি BLAS ফাংশনগুলিতে কল করে সম্পন্ন হয়।
  • BLAS কেবল সেই লিনিয়ার বীজগণিত এক্সপ্রেশনগুলির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করে যা সাধারণত প্রয়োজন হয়।
  • BLAS এর জন্য বিভিন্ন অপ্টিমাইজড বাস্তবায়ন বিদ্যমান।

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

সুতরাং আমার মতে ETs প্রতি খারাপ নয়। তবে কীভাবে তারা সংখ্যাসূচক সি ++ লাইব্রেরিতে সাধারণত ব্যবহৃত হয় সেগুলি বৈজ্ঞানিক কম্পিউটিং চেনাশোনাগুলিতে খুব খারাপ খ্যাতি অর্জন করেছিল।


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

না, আমি মনে করি আপনি পয়েন্টটি মিস করছেন। আপনাকে (ক) কিছু ঘন ঘন প্রয়োজনীয় লিনিয়ার বীজগণিত অপারেশনের স্পেসিফিকেশন হিসাবে বিএলএএসের মধ্যে পার্থক্য করতে হবে (খ) আটলাস, গোটোব্ল্যাস, ইত্যাদি বিএলএলএসের প্রয়োগকরণ, বিটিডাব্লু যে এটি FLENS এ কীভাবে কাজ করে: ডিফল্টরূপে (1) এর মত একটি এক্সপ্রেশন হবে তিনবার BLAS থেকে axpy কল করে মূল্যায়ন করা হবে। তবে (1) পরিবর্তন না করে আমি এটি (2) এর মতোও মূল্যায়ন করতে পারি। সুতরাং যৌক্তিকভাবে যা ঘটে তা নিম্নলিখিতগুলি: যদি (1) এর মতো কোনও অপারেশন গুরুত্বপূর্ণ হয় তবে নির্দিষ্ট বিএলএলএস ক্রিয়াকলাপগুলির (ক) সেটটি বাড়ানো যেতে পারে।
মাইকেল লেহন

সুতরাং মূল বিষয়টি হ'ল: 'v = x + y + z' এর মতো স্বরলিপি এবং শেষ পর্যন্ত এটি কীভাবে গণনা করা যায় তা পৃথক করা উচিত। ইগেন, এমটিএল, বিলিটজ, ব্লেজ-লিব পুরোপুরি এই ক্ষেত্রে ব্যর্থ।
মাইকেল লেহন

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

তবে আবার আমি যা অভিযোগ করছি তা হ'ল এগেনের মতো পরিশীলিত (জটিল তবে জটিলতার অর্থে) লাইব্রেরিগুলি দৃly়ভাবে দুটি স্বরলিপি এবং মূল্যায়ন-প্রক্রিয়া এবং এমনকি এটি একটি ভাল জিনিস বলে মনে করে। আমি যদি মতলব এর মতো কোনও সরঞ্জাম ব্যবহার করি তবে আমি কেবল জিনিসগুলি কোড করতে চাই এবং নির্ভর করতে পারি যে মাতলাব সর্বোত্তম সম্ভাব্য জিনিসটি করছে। আমি যদি সি ++ এর মতো ভাষা ব্যবহার করি তবে আমি নিয়ন্ত্রণে থাকতে চাই। সুতরাং যদি কোনও ডিফল্ট মূল্যায়ন-প্রক্রিয়া উপস্থিত থাকে তবে প্রশংসা করুন তবে এটি পরিবর্তন করা অবশ্যই সম্ভব। অন্যথায় আমি ফিরে গিয়ে সরাসরি সি ++ এ ফাংশনগুলি কল করি।
মাইকেল লেহন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.