ফোর্টরান ভারী গণনার জন্য সি এর চেয়ে অনুকূলকরণ করা কি সহজ?


410

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

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


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

3
শিরোনাম প্রশ্নটি এতটা বিষয়গত নয় যেহেতু এটি একটি ভুল বোঝাবুঝি। আরও বিস্তারিত প্রশ্নটি বিষয়গত নয়।
jfm3

1
আমি মনে করি না একই সাথে উত্তর "হ্যাঁ" এবং "না" ছাড়াও কেউ এর থেকে অনেক কিছু শিখতে পারে এবং সংকলক, উত্স, সিপিইউ, মেমরি লেআউট ইত্যাদি ইত্যাদির উপর ভিত্তি করে পরিবর্তিত হয় ইয়াহন।
user7116

1
আমি মনে করি না যে প্রশ্ন বা উত্তরগুলি বিষয়ভিত্তিক। তবে আপনি যদি ভাবেন যে এই পতাকাটি কাউকে সহায়তা করে তবে আমি এটির সাথে ঠিক আছি।
কুইনমার্স

2
@ সিকসলেটটারে পরিবর্তনগুলি যদিও আপনি এবং আমি ইতিমধ্যে উত্তরটি জানি, এটি একটি প্রশ্ন যা বেশিরভাগ লোকের ক্যারিয়ারের প্রথম দিকে এবং উত্তরটি বোঝার জন্য এটি গুরুত্বপূর্ণ। বরখাস্ত মন্তব্য পোস্ট করার পরিবর্তে কেন আপনি সম্মত হন এমন কোনও উত্তর খুঁজে না পেয়ে +1 দিন
মার্কজে

উত্তর:


447

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

void transform (float *output, float const * input, float const * matrix, int *n)
{
    int i;
    for (i=0; i<*n; i++)
    {
        float x = input[i*2+0];
        float y = input[i*2+1];
        output[i*2+0] = matrix[0] * x + matrix[1] * y;
        output[i*2+1] = matrix[2] * x + matrix[3] * y;
    }
}

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

ফোর্টরানে সংকলক ম্যাট্রিক্স মান একবার লোড করতে এবং রেজিস্টারে সংরক্ষণ করতে পারে store এটি এটি করতে পারে কারণ ফোর্টরান সংকলক ধরে নিয়েছে পয়েন্টার / অ্যারে মেমরিতে ওভারল্যাপ হয় না।

ভাগ্যক্রমে, restrictএই সমস্যাটির সমাধানের জন্য কী-ওয়ার্ড এবং কঠোর-এলিয়াসিং C99 স্ট্যান্ডার্ডের সাথে প্রবর্তিত হয়েছে। এটি বেশিরভাগ সি ++ সংকলকগুলিতেও এই দিনগুলিতে ভালভাবে সমর্থিত। কীওয়ার্ডটি আপনাকে সংকলকটিকে একটি ইঙ্গিত দেওয়ার অনুমতি দেয় যা প্রোগ্রামার প্রতিশ্রুতি দেয় যে কোনও পয়েন্টার অন্য কোনও পয়েন্টারটির সাথে উরফ করে না। কঠোর-aliasing মানে যে প্রোগ্রামার প্রতিশ্রুতি যে বিভিন্ন ধরনের পয়েন্টার করবে না ঐসব ওভারল্যাপ, উদাহরণস্বরূপ একটি জন্য double*হবে না ওভারল্যাপ সঙ্গে একটি int*(নির্দিষ্ট ব্যতিক্রম যে সঙ্গে char*এবং void*কিছু ওভারল্যাপ করতে পারেন)।

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


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

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

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

12
আমি মনে করি এটি সেবাস্তিয়ানের মূল বিষয় ছিল - সি মেমরি হ্যান্ডলিংয়ের জটিলতা / নমনীয়তার কারণে এমনকি চলমান মেমরির মতো সহজ কিছুও জটিল।
মার্টিন বেকেট

3
আপনার call transformউদাহরণটির তেমন কোনও অর্থ নেই।
ভ্লাদিমির এফ

163

হ্যাঁ, 1980 সালে; ২০০৮ সালে? নির্ভর করে

যখন আমি পেশাদারভাবে প্রোগ্রামিং শুরু করি তখন ফোর্টরানের গতির আধিপত্য সবেমাত্র চ্যালেঞ্জ করা হয়েছিল। আমার মনে আছে এটি সম্পর্কে ডাঃ ডবসে পড়া এবং প্রবীণ প্রোগ্রামারদের নিবন্ধটি সম্পর্কে বলা - তারা হেসেছিল।

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

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

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

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

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


1
লিঙ্কটি: web.archive.org/web/20090401205830/http://ubiversity.uwaterloo.ca/… আর কাজ করে না। বিকল্প লিঙ্ক আছে?
নাথানিয়েলং

64

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

ঘন ম্যাট্রিক্সের গুণটি কেবল:

matmul(a,b)

একটি ভেক্টর এক্স এর এল 2 আদর্শ হল:

sqrt(sum(x**2))

তাছাড়া বিবৃতি যেমন FORALL, PUREএবং ELEMENTALপদ্ধতি ইত্যাদি কোডটিকে আরও অনুকূল করতে সাহায্য করে। এমনকি ফোর্টরানের পয়েন্টারগুলিও এই সাধারণ কারণে সি হিসাবে নমনীয় নয়।

আসন্ন ফোর্টরান মান (২০০৮) এর সহ-অ্যারে রয়েছে যা আপনাকে সহজেই সমান্তরাল কোড লিখতে দেয়। জি 95 (মুক্ত উত্স) এবং CRAY এর সংকলকগণ ইতিমধ্যে এটি সমর্থন করে।

সুতরাং হ্যাঁ ফোর্টরান কেবল দ্রুত হতে পারে কারণ সংকলকগণ সি / সি ++ এর চেয়ে আরও ভাল / সমান্তরাল করতে পারেন। তবে আবার জীবনের প্রতিটি কিছুর মতো ভাল সংকলক এবং খারাপ সংকলক রয়েছে।



1
forallকনস্ট্রাক্ট অবচিত কারণ কম্পাইলার কোড ভাল নিখুত করতে পারিনি। প্রতিস্থাপনটি হ'ল do concurrent। এছাড়াও, কোডটি sqrt(sum(x**2))অদৃশ্য দেখাচ্ছে, কারণ সংকলক সম্ভবত পুরো ভেক্টর তৈরি করে x**2। আমি অনুমান করব যে একটি লুপ আরও ভাল তবে নিঃসন্দেহে অভ্যন্তরীণ norm2ফাংশনটি কল করা ভাল ।
এ। হেনিংঙ্ক

39

এটি মজার বিষয় যে ভাষাগুলি না জেনে এখানে প্রচুর উত্তর। এটি বিশেষত সি / সি ++ প্রোগ্রামারদের ক্ষেত্রে সত্য যারা ফোরট্রান code 77 কোড খুলেছেন এবং দুর্বলতাগুলি নিয়ে আলোচনা করেছেন।

আমি মনে করি গতি ইস্যুটি বেশিরভাগই সি / সি ++ এবং ফোর্টরানের মধ্যে একটি প্রশ্ন। একটি বিশাল কোডে এটি সর্বদা প্রোগ্রামারের উপর নির্ভর করে। ভাষার কিছু বৈশিষ্ট্য রয়েছে যা ফোরট্রানকে ছাড়িয়ে যায় এবং কিছু বৈশিষ্ট্য যা সি করে। সুতরাং, ২০১১ সালে, কোনটি দ্রুত বলতে পারে তা সত্যিই বলতে পারে না।

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

আজকাল, আপনি কেবল ফোর্টরান এবং সি / সি ++ এর সাথে মিশ্র ভাষার প্রোগ্রামিং করতে পারেন। এমনকি ফরটিরেটে জিটিকে + এর জন্য ইন্টারফেস রয়েছে। এখানে ফ্রি সংকলক (গফর্ট্রান, জি 95) এবং অনেক দুর্দান্ত বাণিজ্যিক রয়েছে excellent


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

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

30

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

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

  • ক্রিয়াকলাপগুলির স্ট্যান্ডার্ড সেট যা অ্যারের সাথে ডিল করে, স্বতন্ত্র উপাদান নয়। পাপের মতো স্টাফ (), লগ (), স্কয়ার্ট () স্কেলারের পরিবর্তে অ্যারে নেয়। এটি রুটিনটি অপ্টিমাইজ করা সহজ করে তোলে। স্বতঃ-ভেক্টরাইজেশন বেশিরভাগ ক্ষেত্রে একই সুবিধা দেয় যদি এই ফাংশনগুলি ইনলাইন বা অন্তর্নির্মিত হয়

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


1
"তবে সম্ভবত আপনি { double re, im; };সি তে ব্যবহৃত স্ট্রাক্ট আইডিয়ামের সাথে একই সুবিধা দেখতে পাবেন "। সি সংকলনকারীরা সম্ভবত স্ট্রাক বরাদ্দকারী স্ট্রাক স্ট্রেট আকারে স্ট্রাক্টকে ফিরে আসবে, কলিটিতে একটি পয়েন্টার দেয় যা এটি পূরণ করে Fort ফোর্টরান সংকলক হিসাবে রেজিস্টারগুলিতে একাধিক মান ফেরত দেওয়ার চেয়ে বেশ কয়েকগুণ ধীর হয়। নোট করুন যে C99 জটিলটির বিশেষ ক্ষেত্রে এটি স্থির করেছে।
জন হ্যারোপ

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

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

28

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

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


25

এক ভাষা অন্য ভাষার চেয়ে দ্রুত হওয়ার মতো জিনিস নেই, তাই সঠিক উত্তরটি হ'ল না

আপনার যা সত্যই জিজ্ঞাসা করতে হবে তা হল "ফরট্রান সংকলক এক্স এর সাথে কোড কি সি সংকলক ওয়াইয়ের সাথে সংকলিত সমমানের কোডের চেয়ে দ্রুতগতিযুক্ত?" অবশ্যই এই প্রশ্নের উত্তর নির্ভর করে আপনি কোন দুটি সংকলক বেছে নেবেন তার উপর নির্ভর করে।

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

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

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


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

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

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

@ প্রেক্সিওলিটিক - এটি বেশ সঠিক (যে কারণে আমি খুশি যে আমি এ জাতীয় কিছু বলিনি)।
টেড

@ টেড সত্যিই, কয়েক মাস পরে এখানে ফিরে আসার আমি কেন জানি না কেন আমি আপনার উত্তরে এই মন্তব্যটি রেখেছি। হয়ত আমি অন্য কোথাও রেখে যেতে চাইছি? এক্সপি
প্রেক্সোলিটিক

22

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

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

-এফসিএক্স-ফরটারান-বিধিগুলি জটিল গুণ এবং বিভাগ ফোর্টরান বিধি অনুসরণ করে। জটিল বিভাগের অংশ হিসাবে ব্যাপ্তি হ্রাস করা হয়, তবে সেই ক্ষেত্রে পরিস্থিতি উদ্ধারের প্রচেষ্টা নিয়ে জটিল গুণ বা বিভাগের ফলাফল "NaN + I * NaN" কিনা তা পরীক্ষা করে দেখা যায় না।

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

মোট কথা, আমি মনে করি সি এবং ফোর্টরান উভয়ই সমানভাবে দ্রুত; পছন্দটি আরও বেশি হওয়া উচিত যে কোন ভাষায় কোনটি বেশি পছন্দ করে বা ফোর্টরানের পুরো-অ্যারে ক্রিয়াকলাপগুলি ব্যবহার করা এবং এর আরও ভাল বহনযোগ্যতা আরও কার্যকর - বা সিমে সিস্টেম এবং গ্রাফিকাল-ইউজার-ইন্টারফেস লাইব্রেরিতে আরও ভাল ইন্টারফেসিং whether


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

14

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

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

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


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

14

আমি নেটলিব থেকে ক্লাসিক লেভাইন-ক্যালাহান-দোঙ্গারা বেঞ্চমার্কের সাথে ফোর্টরান, সি এবং সি ++ এর গতি তুলনা করি। ওপেনএমপি সহ একাধিক ভাষার সংস্করণ হ'ল http://sites.google.com/site/tprincesite/levine-callahan-dongarra-vectors স্বয়ংক্রিয় অনুবাদ দিয়ে শুরু হওয়ার সাথে সাথে কিছুটা সীমাবদ্ধ এবং প্রাগমাস সন্নিবেশের সাথে সি সিটি খারাপ হয় is কম্পাইলার। প্রযোজ্য যেখানে এসটিএল টেম্পলেটগুলির সাথে সি ++ কেবলমাত্র সি। আমার দৃষ্টিতে, এসটিএল হ'ল এটি একটি মিশ্র ব্যাগ যা এটি রক্ষণাবেক্ষণযোগ্যতার উন্নতি করে কিনা।

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

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

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


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

12

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

আমি জানি না এটি কোনও historicতিহাসিক সত্য কিনা তবে ফোর্টরান মনে হচ্ছে এটি সমান্তরাল / বিতরণ / ভেক্টরাইজড / যাই হোক না কেন- বহু-কোর-আইজড হিসাবে নির্মিত। এবং আজ যখন আমরা গতির কথা বলছি তখন এটি বেশ "স্ট্যান্ডার্ড মেট্রিক": "এটি কি স্কেল করে?"

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

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

আমার মধ্যপন্থী উদ্দেশ্য উত্তরটি: আপনি যদি উভয় ভাষা সমানভাবে / দুর্বলভাবে জানেন তবে আমি মনে করি ফোরট্রান দ্রুততর কারণ আমি সি'র চেয়ে ফোর্ট্রানে সমান্তরাল / বিতরণ কোড লিখতে সহজ মনে করেছি (একবার আপনি বুঝতে পেরেছিলেন যে আপনি "ফ্রিফর্ম" ফোর্ট্রান লিখতে পারেন এবং কেবল কঠোর F77 কোড নয়)

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

পিএস: আমি আনন্দিত আপনি বিশেষত লিবসকে বাদ দিয়েছিলেন কারণ ফোর্টরান জিইউআই লিবস সম্পর্কে আমার বলার মতো প্রচুর খারাপ জিনিস রয়েছে। :)


11

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


10

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

যাইহোক, একটি ভাল প্রোগ্রামার যে কোনও ভাষায় ফোর্টরান লিখতে পারে।


@ স্কট ক্লাউসন: আপনি -1 পেয়েছেন এবং আমি জানি না কেন। এটির প্রতিকার করতে +1 করেছেন। যাইহোক, কিছু বিবেচনার জন্য ফোর্টরান আমাদের পিতামাতার অনেকের চেয়ে দীর্ঘ সময় ধরে ছিল। সংকলক আউটপুট
অনুকূলকরণের

আমি রাজী. আমি সমান্তরালে একটি খুব অনুরূপ উত্তর পোস্ট করেছি।
লম্বা জেফ

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

1
@ ক্লুজ: "ফোর্টরানের অভ্যন্তরীণ কিছুই নেই যা এটিকে সি এর চেয়ে দ্রুততর করে তুলবে"। পয়েন্টার আলিয়াসিং, নিবন্ধগুলিতে যৌগিক মানগুলি ফিরিয়ে দেওয়া, অন্তর্নির্মিত উচ্চ স্তরের সংখ্যাসূচক
কাঠামো

9

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

একটি উদাহরণ সি পয়েন্টার হয়। সি পয়েন্টারগুলি সর্বত্র বেশ ব্যবহৃত হয়, তবে পয়েন্টারগুলির সাথে সমস্যাটি হ'ল সংকলক সাধারণত তারা বলতে পারে না যে তারা একই অ্যারের বিভিন্ন অংশের দিকে ইঙ্গিত করছে কিনা।

উদাহরণস্বরূপ, আপনি যদি এমন একটি স্ট্রিপিপি রুটিন লিখে থাকেন যা দেখতে এইরকম দেখাচ্ছে:

strcpy(char *d, const char* s)
{
  while(*d++ = *s++);
}

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

[আমার মনে রাখা উচিত যে সি 99 এর একটি "সীমাবদ্ধ" কীওয়ার্ড রয়েছে যা সংকলকগুলিকে স্পষ্টভাবে বলে যে পয়েন্টারগুলি ওভারল্যাপ করে না। আরও মনে রাখবেন যে ফোর্টরানেও পয়েন্টার রয়েছে, সি-এর তুলনায় শব্দার্থকগুলি আলাদা, তবে পয়েন্টারগুলি সি হিসাবে সর্বব্যাপী নয়]

তবে সি বনাম ফোর্টরান ইস্যুতে ফিরে এসে অনুমেয় যে কোনও ফোর্টরান সংকলক এমন কিছু অপটিমাইজেশন সম্পাদন করতে সক্ষম হয়েছে যা সম্ভবত (সরাসরিভাবে লিখিত) সি প্রোগ্রামের পক্ষে সম্ভব নয়। সুতরাং আমি দাবিটি দেখে খুব অবাক হব না। তবে, আমি আশা করি যে পারফরম্যান্সের পার্থক্য এতটা হবে না। [~ 5-10%]


9

দ্রুত এবং সহজ: উভয়ই সমান দ্রুত, তবে ফোর্টরান সহজ। আসলে কী দ্রুত শেষ হয় তা অ্যালগরিদমের উপর নির্ভর করে তবে যাইহোক কোনও গতির পার্থক্য নেই। ২০১৫ সালে জার্মানির স্টুটগার্ডের উচ্চ পারফরম্যান্স কেন্দ্রের একটি ফোর্টরান ওয়ার্কশপে আমি এটি শিখেছি Fort আমি ফোর্টরান এবং সি উভয়ের সাথেই কাজ করি এবং এই মতামতটি ভাগ করি।

ব্যাখ্যা:

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

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

উদাহরণ: আমরা কোনও ফাংশনে ইনপুট আর্গুমেন্ট হিসাবে একটি বৃহত কাঠামো দিতে চাই (ফরট্রান: সাব্রোটিন)। ফাংশনের মধ্যে যুক্তিটি পরিবর্তিত হয় না।

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

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


আপনি কি সিতে একটি দেশীয় সমান্তরাল অ্যাপ্লিকেশন লিখতে পারেন (অর্থাত্, কোনও লাইব্রেরি কল না করে?) না, আপনি ফোর্টরানে একটি দেশীয় সমান্তরাল অ্যাপ্লিকেশন লিখতে পারেন? হ্যাঁ, কয়েকটি ভিন্ন উপায়ে। এরগো, ফোর্টরান "দ্রুত"। যাইহোক, সত্যি কথা বলতে, 2010 সালে আপনি যখন আপনার মন্তব্য লিখেছিলেন, সমান্তরাল কর এবং ফোর্টরানের সহ-বৈশিষ্ট্যগুলির বৈশিষ্ট্যগুলি এখনকার মতো সম্ভবত বিস্তৃত ছিল না।
মালি রিমর্কার

@ মালিরেমর্কার তিনি এটি ২০১০ সালে লিখেছিলেন, ২০১০ সালে নয়
কোওলস্কি

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

8

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

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

সি-তে আপনাকে নিজের থ্রেডগুলি পরিচালনা করতে হবে এবং মাল্টি-প্রসেসিংয়ের জন্য আপনার অ্যালগরিদম সাবধানে ডিজাইন করতে হবে এবং তারপরে প্যারালালিজমটি সঠিকভাবে ঘটেছিল তা নিশ্চিত করতে একগুচ্ছ এপিআই কল ব্যবহার করতে হবে।

ফরটারনে, আপনাকে কেবল মাল্টি-প্রসেসিংয়ের জন্য আপনার অ্যালগরিদম সাবধানে ডিজাইন করতে হবে। সংকলক এবং রান-টাইম আপনার জন্য বিশ্রামটি পরিচালনা করতে পারে।

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


6
@ এস.লোট: আমি কল্পনা করতে পারি না যে আমাদের এখানে থাকা বেশিরভাগ কোডের জন্য সহজভাবে লিখিত ফোর্টরানের মতো সি কোডটি কতটা ভয়াবহ করতে হবে তা আমি ভাবতে পারি নি ... এবং আমি একজন সি প্রোগ্রামার। আপনি ফোর্টরানে সহজ কোডের বাইরে আরও ভাল পারফরম্যান্স পাবেন। আপনি বা আমি কোনও পাল্টা নমুনা খুঁজে পাইনি। : ডি
user7116

2
@ গ্রেগ রজার্স: আপনার সমস্যাটি আমাকে নয়, ফোর্টরান ভেক্টরাইজেশন লোকদের কাছে নিয়ে যেতে হবে। আমি যা পড়েছি তা কেবল রিপোর্ট করছি। পলিহেড্রন.
com

2
-1 // "সাধারণত ফরটারান সি এর চেয়ে ধীর হয় এটি প্রায় প্রতিটি ক্ষেত্রেই সত্য" " কেন? // ফরট্রান বনাম সি-তে মাল্টি-থ্রেডিং ব্যবহারের স্বাচ্ছন্দ্যের ভিত্তিতে একটি যুক্তি পারফরম্যান্স সম্পর্কে কিছু বলছে না।
স্টিবার্ট

4
@ এস.লট: "মাল্টি-থ্রেডিং কেবল পারফরম্যান্সের জন্য বিদ্যমান"। এর, না।
জন হ্যারোপ

4
@ এস.লট: "প্রায় হার্ডওয়্যার পর্যায়ে পয়েন্টার ব্যবহারের ফলে সি ফর্ট্রানের চেয়ে দ্রুত হতে পারে"। এর, না
জন হ্যারোপ

5

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

এটি সম্পর্কে আরও তথ্য: http://ed-thelen.org/1401Project/1401-IBM- সিস্টেম- জার্নাল- FORTRAN.html


3

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

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


1
আপনার কি এমন মানদণ্ড রয়েছে যা ফোর্টরান আই / ও-র জন্য সি মারছে?
জেফ

3

আধুনিক মান এবং সংকলক ব্যবহার করে, না!

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

আধুনিক বাস্তবায়নের জন্য সি জেনারেল ফরট্রানকে বাইরে রাখে (যদিও এটি খুব দ্রুত) is

http://benchmarksgame.alioth.debian.org/u64q/fortran.html

সম্পাদনা করুন:

এর সুষ্ঠু সমালোচনা বলে মনে হয় যে বেঞ্চমার্কিং পক্ষপাতদুষ্ট হতে পারে। এখানে আরও একটি উত্স (সি এর সাথে সম্পর্কিত) রয়েছে যা ফলাফলকে আরও প্রসঙ্গে ফেলেছে:

http://julialang.org/benchmarks/

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


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

2

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

ফোর্টরান দ্রুত বা বিকাশের জন্য আরও সুবিধাজনক কিনা তা নির্ভর করে আপনার যে কাজটি শেষ করা দরকার তার উপর। জিওফিজিক্সের জন্য বৈজ্ঞানিক গণনা ব্যক্তি হিসাবে, আমি ফোর্টরানে বেশিরভাগ গণনা করেছি (যার অর্থ আধুনিক ফোর্ট্রান,> = এফ 90)।


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

1

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

সম্পাদনা: অন্যান্য নোট যেমন @ নীল সি-তে পয়েন্টার ব্যবহারের পার্থক্য এবং এলিয়াস করার সম্ভাবনা সম্পর্কে ভাল বক্তব্য তুলে ধরেছে যা সম্ভবত সবচেয়ে নিখুঁত বাস্তবায়ন সিতে কমিয়ে দেয় তবে যাইহোক, সি 99 এর সাথে মোকাবিলা করার উপায় রয়েছে , সংকলক অপ্টিমাইজেশান পতাকাগুলির মাধ্যমে এবং / অথবা সি কীভাবে লিখিত হয়। এটি @ নীল উত্তর এবং তার উত্তর অনুসরণকারী পরবর্তী মন্তব্যগুলিতে ভালভাবে আচ্ছাদিত।


এটি একটি অ্যালগরিদমের একটি বেনমার্ক পরীক্ষার মতো শোনাচ্ছে। কোনটি কম সময় নেয়, ফরটারান বা সি? আমার কাছে সাবজেক্টিভ লাগছে না। সম্ভবত আমি কিছু মিস করছি।
এস.লোট

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

এটি ও (এন) অ্যালগরিদমের বিশ্লেষণ নয়। এটা পারফরম্যান্স। পারফরম্যান্স কীভাবে একটি অনুমান বাস্তবায়ন-স্বাধীন ধারণা হতে পারে তা দেখুন না Don't মনে করো আমি কিছু মিস করছি।
এস .লট

1
-1: "ফোর্টরান ওভার সি-তে এমন কিছুই নেই যা এটিকে সি এর চেয়ে সহজাতভাবে দ্রুত বা উন্নত করতে চলেছে"। এর, না।
জন হ্যারোপ

0

বেশিরভাগ পোস্ট ইতিমধ্যে আকর্ষণীয় যুক্তি উপস্থাপন করে, তাই আমি প্রবাদটি 2 সেন্ট আলাদাভাবে যুক্ত করব।

শেষ পর্যন্ত প্রসেসিং পাওয়ারের দিক থেকে দ্রুত বা ধীর হয়ে যাওয়ার জন্য এর গুরুত্ব থাকতে পারে তবে ফোর্টরানে কিছু বিকাশ করতে যদি 5 গুণ বেশি সময় লাগে কারণ:

  • খাঁটি সংখ্যা ক্রঞ্চিংয়ের চেয়ে আলাদা কাজের জন্য এটিতে কোনও ভাল গ্রন্থাগার নেই
  • ডকুমেন্টেশন এবং ইউনিট পরীক্ষার জন্য এটিতে কোনও শালীন সরঞ্জামের অভাব রয়েছে
  • কোডটি লাইন সংখ্যা আকাশচুম্বী করে এটি খুব স্বল্প প্রকাশের সাথে একটি ভাষা।
  • এটিতে স্ট্রিংগুলির পরিচালনা খুব খারাপ
  • বিভিন্ন পাগল এবং আর্কিটেকচারের মধ্যে এটি আপনাকে একটি কৌতূহলপূর্ণ করে তোলে in
  • এটির একটি অত্যন্ত দুর্বল আইও কৌশল রয়েছে (অনুক্রমিক ফাইলগুলি পড়ুন / লিখুন Yes হ্যাঁ, এলোমেলো অ্যাক্সেস ফাইল বিদ্যমান তবে আপনি কি কখনও সেগুলি ব্যবহার করতে দেখেছেন?)
  • এটি উন্নয়নের ভাল অনুশীলনগুলি, মডুলারাইজেশনকে উত্সাহ দেয় না।
  • সম্পূর্ণ মানক, সম্পূর্ণরূপে মেনে চলে ওপেনসোর্স সংকলক (গফর্ট্রান এবং জি 95 উভয়ই সমর্থন করে না) এর কার্যকর অভাব
  • সি এর সাথে খুব দুর্বল আন্তঃচঞ্চলতা (ম্যাংলিং: একটি আন্ডারস্কোর, দুটি আন্ডারস্কোর, কোন আন্ডারস্কোর নয়, সাধারণভাবে একটি আন্ডারস্কোর তবে দু'টি যদি অন্য আন্ডারস্কোর হয় এবং কেবল কমমন ব্লকগুলিতে সন্ধান না করা ...)

তাহলে বিষয়টি অপ্রাসঙ্গিক। যদি কিছু ধীরে ধীরে হয় তবে বেশিরভাগ সময় আপনি একটি নির্দিষ্ট সীমা ছাড়িয়ে এটিকে উন্নত করতে পারবেন না। আপনি যদি দ্রুত কিছু চান, তবে অ্যালগরিদম পরিবর্তন করুন। শেষ পর্যন্ত, কম্পিউটার সময় সস্তা। মানুষের সময় হয় না। মানুষের সময়কে হ্রাস করে এমন পছন্দকে মূল্য দিন। যদি এটি কম্পিউটারের সময় বাড়ায় তবে তা কার্যকরভাবে কার্যকর হয়।


3
ডাউনভোটেড যদিও আপনি আকর্ষণীয় পয়েন্টগুলি উত্থাপন করেছেন যা অন্যান্য ভাষাগুলির তুলনায় ফোর্টারানস সুবিধাগুলি / ঘাটতিগুলির আলোচনায় যুক্ত করেছে (যার সাথে আমি পুরোপুরি একমত নই), এটি সত্যই প্রশ্নের উত্তর নয় ...
স্টাইবার্ট

@ স্টাবার্ট: বাস্তবে, আমি বলেছিলামI will just add the proverbial 2 cents to a different aspect
স্টেফানো

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

10
-1। আপনি এফ 77 এর নিরিখে ফোর্টরানের কথা ভাবছেন বলে মনে হচ্ছে। এটিকে F90, F95, F03, এবং F08 দ্বারা অতিক্রম করা হয়েছিল ।
কাইল কানোজ

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

-3

ফোর্টরান traditionতিহ্যগতভাবে -fp এর মতো বিকল্পগুলি সেট করে না: কঠোর (যা আইফোর্ট ইউএসই আইইইইইইরিটিমেটিকের কিছু বৈশিষ্ট্য সক্রিয় করতে প্রয়োজন, f2003 মানের অংশ) a ইন্টেল সি ++ সেট-এফপিও সেট করে না: ডিফল্ট হিসাবে কঠোর, তবে এটি ERRNO হ্যান্ডলিংয়ের জন্য প্রয়োজন, উদাহরণস্বরূপ, এবং অন্যান্য সি ++ সংকলকগুলি ইআরআরএনও বন্ধ করা বা সিমড হ্রাস যেমন অপ্টিমাইজেশন অর্জন সুবিধাজনক করে না। জিসিসি এবং জি ++ আমাকে বিপজ্জনক সংমিশ্রণ -O3 -Fast-math -fopenmp -march = নেটিভ ব্যবহার এড়াতে মেকফিল সেট আপ করার প্রয়োজন করেছে। এই সমস্যাগুলি ব্যতীত, আপেক্ষিক কর্মক্ষমতা সম্পর্কে এই প্রশ্নটি আরও নীট-পিক হয় এবং সংকলক এবং বিকল্পগুলির পছন্দ সম্পর্কে স্থানীয় নিয়মের উপর নির্ভর করে।


ওপেনম্প এবং দ্রুত গণিতের সংমিশ্রণের সাথে সাম্প্রতিক জিসিসি আপডেটগুলি সমস্যাটি সংশোধন করেছে।
টিম 18

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