সমান্তরাল বৈজ্ঞানিক গণনা সফ্টওয়্যার বিকাশ ভাষা?


18

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

আমি জানি ফোর্টরান খুব দ্রুত, তবে, বজায় রাখা এবং সমান্তরাল করা শক্ত। সি ++ ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে घूटফরফফফরেটফ হত্তর, থিনি, টেক্সট গল্ফ) যাচাই করা হয়?

সফ্টওয়্যারটি বিপুল পরিমাণে ডেটা পরিচালনা করতে সক্ষম হবে এবং বৈজ্ঞানিক গণনাগুলির সাথে কার্যকর হবে। পারফরম্যান্স মর্মার্থ।

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

Petros


5
সি ++ উইঙ্ক হিসাবে আমি ফোর্টরানকে বজায় রাখতে শক্ত ডাকব না। রক্ষণাবেক্ষণ বেশিরভাগ অংশের জন্য ভাল অভ্যাসের সাথে জড়িত, ভাষা পছন্দ নয়। সি ++ এর স্লোনেসটি ওভারসোল্ড। এছাড়াও, আমি আপনার ডেটা আকার এবং টার্নআরন্ড সময়ের প্রয়োজনীয়তা বর্ণনা করতে এই পোস্টটি বাড়ানোর পরামর্শ দিচ্ছি। আমি কার সাথে কথা বলছি তার উপর নির্ভর করে 9 বা 10 টি আকারের "বিগ" পরিবর্তিত হয়েছি।
বিল বার্থ

@ বিলবার্থ বিদ্যমান ফোরট্রান কোডের সাথে সমস্যাটি হ'ল তিনজন ব্যক্তি বিভিন্ন অনুশীলন ব্যবহার করে জড়িত ছিলেন। আমি সি ব্যাকগ্রাউন্ড থেকে এসেছি, এফ 77 ব্যাকগ্রাউন্ডের একজন লোক এবং মতলব থেকে আর একজন। বৃহত্তম আকারের সিস্টেমে ডেটা বরাদ্দযোগ্য এবং আকারযুক্ত নয় (আমি ইদানীং জড়িত ছিলাম)। কোডটি 000২,০০০ ডিফারেনশিয়াল এবং 000৪০০০ বীজগণিত সমীকরণের সাথে 350 সেকেন্ডে 240 সেকেন্ডের একটি সময় দিগন্তে (অতিবাহিত সময়) অনুকরণ করতে সক্ষম হয়েছিল। আমি সমান্তরালে ওপেনএমপি ব্যবহার করে এটি 170 এর মধ্যে কমিয়েছি। এখন আমার সমান্তরালভাবে বেশ কয়েকটি মামলা চালানো দরকার (সুরক্ষা চেকের জন্য ঝাড়ু)।
বৈদ্যুতিনিক

4
@BillBarth তার সি ++ দক্ষতা বিক্রি খুব বিনয়ী হয়, কিন্তু তিনি তার বক্তব্য খুবই উদার যে, "সি ++ এর মন্থরতা oversold হয়" আছে। Scicomp.stackexchange.com এ অনেকগুলি সি ++ বনাম ফোর্টরান থ্রেড রয়েছে যা এই খুব প্রশ্নটি নিয়ে আলোচনা করেছে এবং সাধারণ উপসংহারে বলা যায় যে সি ++ এর চেয়ে প্রায় সব ক্ষেত্রেই ফোর্টরানের চেয়ে ধীর গতির চেয়ে এটি ঠিক সত্য নয়। আমি ব্যক্তিগতভাবে মনে করি যে এটি আজ একটি নগরকথক হিসাবে বিবেচিত হতে পারে। কি হয় খুব সত্য যে আপনি যদি কোডের অ্যাকাউন্ট maintainability নিতে, তারপর ফোরট্রান খুব ভাল আজ ভাড়া না।
ওল্ফগ্যাং ব্যাঞ্জারথ

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

1
@AronAhmadia: অই, আমি ;-) জেড বলতে এত আছে চলো (জেড।। অন্য সময় আমাদের ক্ষেত্রে, অভিযোজিত জাল ডাটা স্ট্রাকচার বিক্ষিপ্ত ম্যাট্রিক্স জন্য কোন STL, কিন্তু এটা প্রচুর)
উলফগ্যাং ব্যাঙ্গার্থ

উত্তর:


19

আমাকে আপনার প্রয়োজনীয়তাগুলি চেষ্টা করার চেষ্টা করুন:

  • Maintainability
  • পাঠ্য ডেটা পড়া / লেখা
  • শক্তিশালী ইন্টারফেস / এলইউ অনুকরণের জন্য ক্ষমতা
  • বিচ্ছিন্ন রৈখিক solvers
  • পারফরম্যান্স এবং বড় ডেটা স্কেলিবিলিটি

এই তালিকা থেকে, আমি নিম্নলিখিত ভাষাগুলি বিবেচনা করব:

সি, সি ++, ফোর্টরান, পাইথন, ম্যাটল্যাব, জাভা

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

পাঠ্য ডেটা পড়া / লেখা

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

শক্তিশালী ইন্টারফেস / এলইউ অনুকরণের জন্য ক্ষমতা

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

বিচ্ছিন্ন রৈখিক solvers

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

পারফরম্যান্স এবং বড় ডেটা স্কেলিবিলিটি

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

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

ইন্টারফেস উপর একটি নোট

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

Maintainability

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

সুপারিশ

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

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

সম্পর্কিত প্রশ্নাবলী:


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

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

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

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

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

2

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

এতে বলা হয়েছে, সেখানে যা লেখা হয়েছে তা ছাড়াও আমাকে কয়েকটি পর্যবেক্ষণ করা যাক:

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

(ii) সি ++ / সিল্ক + এর ক্ষেত্রে অবশ্যই এটি সত্য: হ্যাঁ, ইন্টেল এটি জিসিসির একটি শাখায় বিকাশ করছে তবে এটি কোনও জিসিসির রিলিজে উপলভ্য নয় এবং সম্ভবত কিছু সময়ের জন্য হবে না। আপনি সাধারণত লিনাক্স মেশিনে ইনস্টল করা জিসিসি সংস্করণগুলি সহ সিল্ক + না পাওয়া পর্যন্ত কমপক্ষে আরও ২-৩ বছর সময় নিয়ে যেতে পারেন can

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

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

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


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

ফোর্টরান ২০০ standard এর স্ট্যান্ডার্ডটি ২০১০ এর শেষ অবধি অনুমোদিত নয় যাতে সিএএফ ব্যাপকভাবে উপলব্ধ হওয়ার কয়েক বছর আগে এটি হবে। G95 এর আসলে একটি (অ-মুক্ত) বাস্তবায়ন ছিল কিন্তু এটি আর বিকাশ হয় না (বিকাশকারী প্যাথস্কেলে যোগ দিয়েছিলেন)।
stali

G95 এর বেশিরভাগটি শেষ পর্যন্ত গফর্ট্রানে শেষ হয়েছে তবে এটিও হতে পারে যে সিএএফ এর অংশ নয়।
ওল্ফগ্যাং ব্যাঙ্গার্থ

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

2

সাধারণত, আপনি যদি এই সফ্টওয়্যার প্রকল্পটি সম্পর্কে সত্যই গুরুতর হন তবে আমি আপনাকে যে ভাষায় সবচেয়ে স্বাচ্ছন্দ্য বোধ করি সে ভাষায় একটি সম্পূর্ণ পুনরায় লেখার পরামর্শ দেব would দেখে মনে হচ্ছে আপনি একা কাজটি করবেন, এবং তাই আপনি যে ভাষায় ঘরের মধ্যে সর্বাধিক বোধ করেন তার সেরা ফলাফল পাবেন get

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

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

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


আমি প্রস্তাবিত লিঙ্কগুলি দেখতে হবে। তুলনা কাগজ খুব সুন্দর! ধন্যবাদ! আমি পাইথ্রেড সম্পর্কে ভাবছিলাম তবে আমি প্রোগ্রামটি ক্রস-প্ল্যাটফর্ম হতে চাই। আমি যা জানি তা থেকে উইন্ডোজগুলির নীচে পাইথ্রেডগুলির সমস্যা রয়েছে (ভুল?)
বৈদ্যুতিন

@ p3tris: pthreads এ "p" POSIX এর জন্য, সুতরাং এটি যতটা পোর্টেবল হতে পারে তত প্রায়। প্রকল্পের pthreads-win32মধ্যে বা এর মতো কিছু উইন্ডোজ বাস্তবায়ন রয়েছে cygwin
পেড্রো

স্ট্যাকওভারফ্লো . com/q/2797690/801468 এর উপর ভিত্তি করে আমি দেখতে পাচ্ছি এটি ব্যবহারের জন্য বাছাই করার জন্য প্রচুর পরিমাণে জিনিস রয়েছে। আমি কোনও প্রোগ্রামার নই তা দিয়ে, আমি আরও পরীক্ষিত কিছু দিয়ে থাকতে চাই।
বৈদ্যুতিন

2

উপরের মন্তব্যে ক্রেয় কেলান সম্পর্কে সামান্য আলোচনা হয়েছে। এই সময়ে, এবং আমার সীমিত জ্ঞানের জন্য, সংকলকগুলিতে কমরে সমর্থন মোটামুটি নিম্নরূপ:

  • ক্রেতে একটি কমপাইলার রয়েছে যা কমপক্ষে প্রাথমিক কোয়ারে বৈশিষ্ট্যগুলিকে সমর্থন করে। আমি এটিকে কোডটি লেখার জন্য ব্যবহার করেছি যা "শিক্ষাগত" হওয়ার ইচ্ছা ছিল, তবে আমি বলতে চাই যে আপনি কোয়ারে ফোর্ট্রানে সত্যিকারের কোড লিখতে পারেন। সিনট্যাক্স এবং ধারণাগুলি বেশিরভাগ এমপিআইয়ের তুলনায় অনেক সহজ, তবে সর্বদা হিসাবে, লোটাসার ফাঁদ রয়েছে এবং ফাঁদগুলি এমপিআই থেকে আলাদা।
  • ইন্টেল ফোর্টারানের তাদের এমপিআই লাইব্রেরির শীর্ষে নির্মিত ক্রেয় সমর্থন রয়েছে। মনে হয় এটি তাদের তাত্ত্বিক শিখর সম্পাদনাকে সীমাবদ্ধ করে, তবে আমি কোনও মেট্রিক দেখিনি।
  • গফর্ট্রান কোয়ারিকে সমর্থন করে তবে কেবলমাত্র একটি একক চিত্রের জন্য (বা একক র‌্যাঙ্কের জন্য, এমপিআই ভাষায়)। অতএব, গফর্ট্রান ৪.৮ বা ৪.৯ না হওয়া পর্যন্ত কোনও প্রকৃত সমান্তরালতা উপলব্ধ নয়।

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


হ্যাঁ, এই ধরণের সমস্যার জন্য কোরে ফোর্টরানের প্রস্তুতি সম্পর্কে আরও তথ্য অবশ্যই সহায়ক হবে। Scicomp স্বাগতম!
অ্যারন আহমদিয়া

1

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

লজিস্টিক রিগ্রেশন (স্কেল):

//load data to distributed memory
val points = spark.textFile(...).map(parsePoint).cache()
var w = Vector.random(D) // current separating plane
for (i <- 1 to ITERATIONS) {
  val gradient = points.map(p =>
    (1 / (1 + exp(-p.y*(w dot p.x))) - 1) * p.y * p.x
  ).reduce(_ + _)
  w -= gradient
}
println("Final separating plane: " + w)

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

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