সিএফডি লাইব্রেরির বিকাশের জন্য সি ++ বা পাইথন


13

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

1) সি ++:

  • জেনেরিক প্রোগ্রামিং, ভার্চুয়াল ফাংশন, ওভারলোডিং, গতি ...: আপনি যা যা চান তা তৈরি করতে সমস্ত জেনেরিক + ওওপি সরঞ্জাম উপলব্ধ

  • নিম্ন স্তরের গ্রন্থাগারগুলি বেশিরভাগ উপলভ্য (পাইথনের মতো কোনও বিস্তৃত বিজ্ঞান এবং প্রকৌশল গ্রন্থাগার বিকাশ নেই)

2) সমান্তরাল কম্পিউটিংয়ের জন্য পাইথন + মোড়ক (পাইওপেন সিএল এবং অন্যান্য)

  • বিভিন্ন ধরণের সমর্থনের lib বিপুল পরিমাণে

  • আপনি যা ভাবেন কোড করুন: বাস্তবায়নটি খুব দ্রুত সম্পন্ন হয়েছে

  • ধীর মৃত্যুর সময়

আপনি যদি এমন একটি কাঠামো কোড করতে চান যা বিভিন্ন পদ্ধতি সমর্থন করে, জটিল জ্যামিতি এবং সমস্যা নিয়ে কাজ করে, আপনি কোনটি বেছে নেবেন এবং কেন?


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

উত্তর:


14

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

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

( পাইথনের পরিবর্তে ম্যাপেল ব্যবহার না করে ম্যাপেলের ওডিই / ডিএই সলভার এইভাবে কাজ করে Full সম্পূর্ণ প্রকাশ: আমি তাদের পক্ষে কাজ করি))


1
+1 টি। এক চমৎকার Python- র বিট "বিশুদ্ধ পাইথন" থেকে সরে যেতে প্রয়োজন হলে দক্ষতা।
ফোমাইট

3

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


2

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

বিবেচনায় নেওয়ার ক্ষেত্রেও সম্ভবত প্রাসঙ্গিক

3) উন্নয়নের সময়

  • উন্নয়নের জন্য কত সময় সংরক্ষিত
  • কাজের ফলাফল কখন সরবরাহ করা হবে? এবং কিভাবে?
  • ইতিমধ্যে একটি কোড রয়েছে যা কাজটি করতে পারে? (অনন্যতা?)

4) রক্ষণাবেক্ষণ

  • কতগুলি (জনগণ) সম্পদ রক্ষণাবেক্ষণের জন্য নিবেদিত হয়?
  • কোডটিতে কত লোক কাজ করবে?
  • কোডটি কি কোনও সময়ে প্রকাশ করা হবে? (নির্ণায়ক?)
  • কোডটি কি তৃতীয় পক্ষের লাইব্রেরিতে নির্ভর করতে চলেছে?

5) লাইসেন্স ইস্যু

  • গবেষণার জন্য কোড?
  • বাণিজ্যিক অ্যাপ্লিকেশন জন্য কোড?

6) উত্পাদনশীলতা এবং মজাদার ফ্যাক্টর (প্রায়শই অবহেলা করা হয়!)

  • কোথায় সবচেয়ে বেশি উত্পাদনশীল হতে পারে?
  • কোথায় সবচেয়ে বেশি মজাদার বিকাশ থাকতে পারে?
  • (সামাজিক) নেটওয়ার্কের অংশ হওয়ার কোনও সুযোগ?

2

এটি আপনার কোড হিসাবে লিখিত হতে পারে তা নির্ভর করে:

some_library_specific_type grid;

for t=0 to T do
    library_function_1(grid,...);
    library_function_2(grid,...);
end

বা বরং কিছু লিখতে হবে :

some_home_made_mixture_of_native_types grid;

for t=0 to T do
    for all grid elements as g do
        some_function(g,...);
        library_function(g,...);
    end
end

প্রথম ক্ষেত্রে আপনি কোডে সবচেয়ে বেশি কী পছন্দ করেন তা চয়ন করুন; দ্বিতীয় ক্ষেত্রে কোনও স্ক্রিপ্টিং ভাষা ব্যবহার করবেন না বা কার্যকর করার সময় ভোগ করতে প্রস্তুত হন না।


2

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


2
আমার কাছে এমন সমস্ত গ্রন্থাগারের মুখোমুখি হয়নি যা আমার প্রয়োজন ছিল ...
জ্যাক পলসন

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

শয়তানের উকিল বাজানোর জন্য, 10,000 কোরে কোড চালানো তুচ্ছ, তবে এটিকে এটিকে মাপা যায় তা সম্পূর্ণ আলাদা বিষয়। অ-উপবৃত্তাকার সমীকরণগুলির জন্য অনেকগুলি সমান্তরাল পূর্বশর্তগুলি এমনকি 300 কোরে দক্ষতার সাথে চালানো যায় না।
জ্যাক পলসন

অবশ্যই। তবে আমি যে উদাহরণটি উল্লেখ করেছি তা স্কেলযোগ্য is math.tamu.edu/~bangerth/publications/2010-distributes.pdf
ওল্ফগ্যাং ব্যাঙ্গার্থ

সম্পূর্ণ প্রকাশের স্বার্থে: আমি কাগজ এবং উপরে উল্লিখিত কোড এবং সেইসাথে চুক্তি উভয়েরই একজন, সাধারণভাবে গ্রন্থাগার of
ওল্ফগ্যাং ব্যাঙ্গার্থ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.