سریع ترین زبان برنامه نویسی برای محاسبات عددی

مدیر انجمن: parse

ارسال پست
Paradoxy

عضویت : دوشنبه ۱۳۹۳/۱۰/۲۲ - ۲۲:۱۷


پست: 2211

سپاس: 1012

سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط Paradoxy »

به نظر من هر فیزیکدانی چه بخواد چه نخواد باید برنامه نویسی یاد بگیره برای حل هر معادله ای. روش های سنتی حل تحلیلی معادلات (فارغ ازین که در چه حوزه ای از فیزیک باشه) دیگه به علت پیچیدگی مسائل ممکن نیست. و خب طبیعتا گره ای که با دست باز میشه رو کسی با دندون باز نمیکنه. منتهی انقدر زبان برنامه‌نویسی وجود داره که آدم گاهی میمونه اصلا با چه زبانی باید محاسبات خودش رو انجام بده. من میدونم هرچی زبان سطح پایین تر باشه، اجرای اون سریع تر میشه چون چیزی که مینویسیم به زبان رایانه نزدیک تره و هرچی زبان سطح بالاتر باشه کار کردن باهاش راحت تره اما فرآیند برنامه‌ نویسی کند تر میشه. نظر دوستانی که با زبان خاصی کار کردن و درش تجربه دارن رو خوشحال میشم بشنوم.

من با متلب بیشتر از هر زبانی کار کردم. خوبیه متلب اینه که همه چیز آمادست و نیاز به اضافه کردن کتابخونه ای نیست. میشه موازی سازیش کرد و حتی محاسبات رو با gpu انجام داد. چیزی که توی متلب مینویسیم بسیار شبیه چیزیه که روی کاغذ مینویسیم و خب این خیلی خوبه. من اگه بخوام مثلا ویژه مقدارای یه معادله رو حساب کنم صرفا یه دستور eig مینویسم. باقی کارهارو متلب میکنه. اما مشکلش اینه که پولیه. سالی دو هزار دلار لایسنسش میخواد و خب ما که ایرانیم کرک میکنیم و استفاده میکنیم. منتهی به شخصه خیلی دوست ندارم برنامه کرک شده بریزم رو سیستمم. و این که متلب به شدت ریاضی محوره و باهاش کار دیگه ای نمیشه کرد. مثلا نمیشه اپلیکیشنی چیزی ساخت. بهترین ویژگی متلب به نظرم IDE ش هست که تقریبا تمام نیازای کاربر رو واسه دیباگ و ... برطرف میکنه.

ولفرام مثماتیکا برنامه دیگه ای هستش که باهاش کار کردم. توی محاسبات به نظرم از متلب به شدت کندتره و IDE دیفالت مضخرفی داره نسبت متلب. با این حال واسه وقتایی که کار تحلیلی میخوایم بکنیم من مثماتیکا رو ترجیح میدم. خودش ذاتا سمبلیکه و نیاز به deceleration خاصی نداره. علاوه بر این مجموعه داده های خیلی کاربردی ای داره برای رسم سه بعدی ملوکولها، مواد شیمیایی و ... که متلب نداره کلا. منتهی من در عموم شرایط متلب رو ترجیح میدم.

زبان جاوا رو برای برنامه نویسی اندروید استفاده کردم. اصلا و ابدا به درد برنامه نویسی محاسباتی نمیخوره. بینهایت کنده و تقریبا هیچ کنترلی روی جریان داده هاش نیست. منتهی کتابخونه فراوون داره و رایگانه. ولی همچنان به نظرم نمیشه باهاش برنامه نویسی محاسباتی کرد.

سی پلاس پلاس رو کم کار کردم. خیلی شبیه جاواست ولی سرعتش خیلی بیشتره و آبجکت محور هم هست. منتهی نمیدونم تا چه حد کتابخونه داره برای استفاده و چطور میشه کار با کتابخونه هاشو یاد گرفت؟ هیچ منبع جامعی برای سی پلاس نداریم. برخلاف جاوا که oracle تمام متد ها و کتابخونه های اصلی رو توضیح داده. موازی سازی چطور انجام میشه با mpi؟ آیا مثل متلب میشه با سی پلاس پلاس از gpu برای محاسبات استفاده کرد؟ بهترین کتابخونه های محاسباتی سی پلاس پلاس چیا هستن؟ سرعت سی پلاس پلاس نسبت به متلب چطوره؟ آیا میشه مستقیم بدون ابزار واسطه نمودار رسم کرد توی سی؟ نمودار سه بعدی مثلا؟

پایتون باز یه زبان دیگس که میدونم فیزیک دانا زیاد استفاده میکنن ازش. شخصا کار نکردم باهاش اما اینطور که میخوندم کتابخونه های وسیع و جامعی داره. چیزی که توی ذوقم زد این بود که خودش بر پایه سی هستش و واسه همین از سی کندتره. کار راه بنداز هست، چون رایگانه بر خلاف متلب و کتابخونه هاش میتونن کارو راه بندازن. اما IDE هاش ظاهرا نسبت به متلب ضعیف ترن.

فرترن باز یه زبان دیگست که سخته یکم کار کردن باهاش نسبت به پایتون اما سریعه. منتهی خیلی قدیمیه و به نظرم خیلیا دارن کوچ میکنن ازش به زبانای دیگه. کسی اینجا کار کرده باهاش؟

با زبانای دیگه هم کار کردم مثل html, css و ... که اینجا مطرح نیستند. سوال من اینه که برای پردازش حجم عظیمی از داده ها با کمترین منابع سیستمی چه زبانی رو انتخاب میکنید؟ تجربتون چی بوده و فکر میکنید کدوم زبان بهتره؟ برای من سخت زبان مطرح نیست. تقریبا سینتکس هر زبانی رو که دیدم توی یه روز یاد گرفتم. بحثم بیشتر روی عملکرد قضیه و سرعتشه. آیا سی پلاس کتابخونه ای داره که ویژه مقدار حساب کنه و سرعتش به متلب برسه و بیشتر باشه؟ پایتون چطور؟ یا زبانای دیگه.

نمایه کاربر
You-See

نام: U30

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۹۳/۵/۱۹ - ۱۹:۰۵


پست: 1280

سپاس: 787

جنسیت:

تماس:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط You-See »

سلام. اون دوتای آخری که زبان نیستند.
سی پلاس پلاس و دلفی زبان های خیلی سریعی هستند، که تقریبا برای هر چیزی کتابخونه دارند.
برای رسم سه بعدی که خودشون پلتفرم مبتنی بر اوپن جی ال دارند.
برای کار های ریاضی در سطوح عادی خوبن، ولی برای کار با بیگ نامبر ها، باید کتابخونه هاشون رو اضافه کنید.
تقریبا همه توابع رو در سطح اسمبلی پیاده کردند و استفاده می کنند، چون native هستند و کدهاشون مستقیم به اسمبلی تبدیل می شه، می تونیم بگیم که بعد از اسمبلی مستقیم، بهترین کارایی رو دارند در صورتی که درست نوشته بشن.
پاراللیزم و جی پی یو هم کتابخونه مخصوص خودش رو داره.
برای محاسبات اگر سختی مد نظرت نیست برو سراع سی پلاس پلاس، سی شارپ رو کلا فراموش کن، جاوا رو هم بنداز دور.
پایتون رو تجربه خاصی توش ندارم، فرترن هم در حد دو سه تا برنامه که از شدت قدیمی بودنش ترجیج می دادم اسمبلی بنویسم تا فرترن.
سی پلاس پلاس از اونجا که پایه خود سیستم عامل ویندوز هم هست، بهتر می تونی از توابعش استفاده کنی و ویندوز باهاش راحت تر کنار میاد، مثلا برای ارسال پارامترهای توابع، کامپایلر نیاز به تبدیل ضمنی خاصی نداره، ولی دلفی یک تبدیل کوچیک انجام می ده که اگر چه خیلی خیلی ریز هست ولی ممکنه در بیگ نامبر ها به چشم بیاد. اما از اون طرف کار با محیط دلفی بسیار سریع و خوش دسته و همونطور که خودش ادعا می کنه، RAD هست، یعنی فاصله بین تصمیم برای نوشتن برنامه تا اجرای اون خیلی بالاست.
پی اچ پی و روبی و این چیزا هم فکر می کنم برای وب مناسب باشه تا لوکال. شی گرایی مناسبی هم پشتش ندارن.
از نظر استاندارد شی گرایی برای کار شما اول دلفی هست، بعد سی پلاس پلاس، (جاوا شی گرایی عالی داره ولی اینجا مد نظر نیست)
سی پلاس پلاس قوانین شی گرایی خودشو داره که فقط و فقط هم سی پلاس پلاس این طوره، مثلا شما می تونی همزمان از دو کلاس، یک مشتق مشترک ایجاد کنی.

بگذریم،

توصیه من سی پلاس پلاسه.
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/

Paradoxy

عضویت : دوشنبه ۱۳۹۳/۱۰/۲۲ - ۲۲:۱۷


پست: 2211

سپاس: 1012

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط Paradoxy »

Html زبان نیست؟Hypertext Markup Language البته من تعریف تخصصی زبان و اینارو نمیدونم چون خودم نشستم تجربی یاد گرفتم بدون کلاس و ممکنه اشتباه کنم.
منظور از مشتق مشترک اینجا همون inheritance یا به ارث بردن کلاس بالاییه؟ مثلا تو جاوا هر کلاس فقط میتونه یه مادر داشته باشه و اون رو extend کنه اما فکر کنم توی سی پلاس بشه چندتا کلاس رو extend کرد. هرچند توی جاواش هم میشه یه interface ساخت و اونو implement کردش. من تنها کاربردی که برای جاوا دیدم برنامه نویسی اپلیکیشن اندرویده. اصلا به درد بازی سازی نمیخوره و ازونور موتور های بازی سازیم ازش پشتیبانی نمیکنن. مگه بخوای یه چیز دو بعدی ساده ای بسازی که خیلی لگ درش مطرح نباشه. برنامه واسه کامپیوتر میشه نوشت، اما ساختن GUI براش خیلی لذت بخش نیست. ضمن اینکه با سی پلاسم میشه همون کار جاوا رو کرد. Garbage collector جاوا خوبه اما اصلا به درد کارای سنگین نمیخوره. حقیقتش یکم حالم گرفتس که نشستم جاوا یاد گرفتم وقتی میتونستم سی پلاس یاد بگیرم. آخه با سی پلاسم میشه اپ اندرویدی ساخت.
اسمبلی خیلی سطح پایینه و چیزی که مثلا با یه خط توی سی پلاس جمع میشه رو اونجا باید چند خطی براش نوشت. برای همین سمتش نمیرم. اما دلفی رو اولین باره میشنوم. حتما چکش میکنم. چه IDE ای رو برای سی پلاس خوبه؟ برای اپلیکیشنی که GUI میخواد، و برای برنامه ریاضی محوری که صرفا قراره کامپایل بشه و به مشت داده بدون GUI بریزه بیرون.

نمایه کاربر
You-See

نام: U30

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۹۳/۵/۱۹ - ۱۹:۰۵


پست: 1280

سپاس: 787

جنسیت:

تماس:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط You-See »

HTML زبان نشانه گذاریه نه زبان برنامه نویسی، مثل SQL که زبان کوئری گرفتننه.
مثلا شما نمیای با HTML محاسبه ای رو انجام بدی مگر این که توش از جاوا اسکریپت یا هر اسکریپت دیگه ای (سمت کلاینت منظورمه) استفاده کنی.
CSS هم که استایلینگه ..

منظورم از مشتق رو درست متوجه شدی، خوب هم شی گرایی رو بلدی، اما اینترفیس گرفتن چندگانه فقط در سطح متدها امکان پذیره نه پراپرتی ها.
در مورد C++ IDE ظاهرا NetBeans خیلی طرفدار داره، بیشتر برای جاوا می رن سراغش ولی برای این کار هم ظاهرا خوب جواب می ده.
اکلیپس زیاد خوب نیست، امکاناتش محدوده، بیشتر همه فن حریفه تا تخصصی.
VSCode هم خوبه ولی اونم بیشتر همه فن حریفه تا تخصصی یک زبان خاص.
C++ Builder هم خوبه، آی دی ای شبیه به دلفی داره، اگر اشتباه نکنم همون شرکت هم زده.
من تخصصی C++ کار نکردم، به نظر بهتره با یکی که کارش C++ هست مشورت کنی، اگر لازم بود شماره اش رو می دم. با خودش حرف بزن.

در مورد دلفی هم آخرین انتشارش برا امساله، نسخه RIO 10.3 خوبه که IDE سرخوده.
اگر همه فیچرهاش رو نصب کنی خروجی اندروید و iOS و لینوکس و تری دی و ویندوز هم می ده.

من بازم می گم برو سراغ C++ بخاطر کتابخونه های خوبش و انطباق ذاتی با ویندوز، اما اگر خودم بودم با دلفی می نوشتم چون باهاش خیلی کار کردم.
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/

mr.keeper

نام: محمد رضا محسنی

عضویت : یک‌شنبه ۱۳۹۸/۸/۱۲ - ۱۲:۳۶


پست: 3



Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط mr.keeper »

برای IDE چرا از ویژوال استودیو (visual studio) استفاده نمیکنی هم ابزار خوبی داره و هم زبانهای دیگه رو پشتیبانی میکنه .

زبانهای برنامه نویسی محاسباتی من دو تاشو میشناسم که یکیش پاسکال و اون یکی پرل هست ولی فکر کنم بیشتر پاسکال رو استفاده میکنن .

نمایه کاربر
You-See

نام: U30

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۹۳/۵/۱۹ - ۱۹:۰۵


پست: 1280

سپاس: 787

جنسیت:

تماس:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط You-See »

پاسکال قدیمی دلفی هست،
ویزوال استودیو از نظر من یکی از بدترین IDE ها رو داره.
البته این نظر منه و ممکنه اشتباه باشه.
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/

mr.keeper

نام: محمد رضا محسنی

عضویت : یک‌شنبه ۱۳۹۸/۸/۱۲ - ۱۲:۳۶


پست: 3



Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط mr.keeper »

نظرتون برام محترمه واقعا .

میشه دلایلتون رو ذکر کنید ممنون میشم میخوام بدونم چرا بدترین ؟! یکی بهم گفت IDE ویژوال خوبه واقعا .

نمایه کاربر
You-See

نام: U30

محل اقامت: تهران

عضویت : یک‌شنبه ۱۳۹۳/۵/۱۹ - ۱۹:۰۵


پست: 1280

سپاس: 787

جنسیت:

تماس:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط You-See »

وقتی با IDE قوی ای مثل بورلند کار می کنی و می ری روی ویژوال استودیو فرقش رو متوجه می شی، این که هر بیلدت خیلی طول می کشه، برک پوینت ها دیر اجرا می شن، آدم حس می کنه برنامه روی یک برنامه واسط دیگه بالا اومده، که البته بعید هم نیست روی دات نت بالا اومده باشه، کلا باهاش راحت نیستم و احساس خیلی بدی بهم می ده.
اکلیپس هم همین طوره، ولی چون جاوا هست طبیعیه که این طور باشه.
ولی وقتی با دلفی (بورلند، و جدیدا امبارکادرو) کار کنی متوجه تفاوتش می شی.
سی بیلدر هم همین شرکت زده با همون خصوصیات.

ممکنه سی شارپ کارها بیان بگن که نه این طور نیست، خیلی هم خوبه، خب تجربه من این رو نمی گه. شاید اگر جای اونا بودم نظرم برعکس بود.
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/

hessamhashemi

عضویت : سه‌شنبه ۱۳۹۸/۸/۱۴ - ۱۴:۱۰


پست: 2

سپاس: 2

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط hessamhashemi »

سلام
بحث انجام پرسرعت محاسبات بستگی به چند مورد داره.

1- محاسبات اعداد اعشاری هست یا برداری
2- آیا نیاز به رسم نمودار هست یا نه
3- حجم داده ها چقدر هست؟ در حد چند مگابایت یا چند گیگابایت
4- زمان مناسب از نظر شما چقدر هست
5- محاسبات آماری هست یا ریاضی

جواب این سوالات را بدی میشه راهنمایی دقیق کرد.

بصورت کلی ابزاری که بشه باهاش همه این کارها را انجام داد نداریم. بلکه باید از مجموعه از ابزارها استفاده کرد. که این مجموعه ابزارها خیلی متنوع و فراوان هستند. جواب سوالات بالا را بدی دقیق راهنمایی میکنم.

Paradoxy

عضویت : دوشنبه ۱۳۹۳/۱۰/۲۲ - ۲۲:۱۷


پست: 2211

سپاس: 1012

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط Paradoxy »

hessamhashemi نوشته شده:سلام
بحث انجام پرسرعت محاسبات بستگی به چند مورد داره.

1- محاسبات اعداد اعشاری هست یا برداری
2- آیا نیاز به رسم نمودار هست یا نه
3- حجم داده ها چقدر هست؟ در حد چند مگابایت یا چند گیگابایت
4- زمان مناسب از نظر شما چقدر هست
5- محاسبات آماری هست یا ریاضی

جواب این سوالات را بدی میشه راهنمایی دقیق کرد.

بصورت کلی ابزاری که بشه باهاش همه این کارها را انجام داد نداریم. بلکه باید از مجموعه از ابزارها استفاده کرد. که این مجموعه ابزارها خیلی متنوع و فراوان هستند. جواب سوالات بالا را بدی دقیق راهنمایی میکنم.

طبیعتا با تمام این حالت ها ما مواجه میشیم و خب اگه بگید که در هر کدوم ازین حالت ها کدوم زبان بهتره ممنون میشم.
در هر صورت من نمیدونم چطور اعداد اعشاری در مقابل بردارها قرار میگیرن. من میتونم برداری داشته باشم که حاوی اعداد اعشاری باشه. شاید منظورتون اینه که محاسبات روی اسکالرها هستند یا بردارها؟ خب نود و نه درصد موارد ما با ماتریسا و بردارا سر و کار داریم.
رسم نمودار برای درک داده ها ضروریه اما خب میتونیم توی یه زبان محاسبات رو انجام بدیم و تو یه زبان دیگه نمودار داده هارو رسم کنیم. من اینکارو بین متلب و مثماتیکا کردم، کاملا عملی هست.
حجم خود داده متغییر هستش و به مسئله بر میگرده. ولی معمولا در حد چند گیگابایته. اون مگابایتی هارو میشه سریع حل کرد انداخت کنار.
هر چه کمتر بهتر. زمان محاسبات همیشه deterministic (نمیدونم تو فارسی چی میشه، قطعی؟) نیست. ما صرفا میخوایم کمش کنیم حالا هرچی که هست.
بازم متوجه نمیشم. شاید منظورتون اینه که محاسبات عددی اند یا تحلیلی؟ خب توی پست اصلیمم نوشتم بیشتر محاسبات عددی مد نظره. محاسبات سمبلیک ریاضی مثماتیکا، مپل و اینا خوبه.

نمایه کاربر
aalireza

عضویت : پنج‌شنبه ۱۳۸۸/۵/۸ - ۱۴:۵۲


پست: 820

سپاس: 346

جنسیت:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط aalireza »

جوابِ کوتاه:
پایتون یاد بگیر و از لایبرری‌هایِ معروف مثلِ numpy و scipy و اینا استفاده کن. پایتون زبانِ علمیِ این‌روزاست و توسطِ پروژه‌هایِ خفن و افرادِ این‌کاره استفاده می‌شه و تو هم و بیشترین ساپورت رو خواهی گرفت. وقتی یاد گرفتی، نحوه‌یِ extension نوشتنِ پایتون رو یاد بگیر. واسه extension نویسی هم از چیزی مثلِ C یا ++C ملّت استفاده می‌کنن.

جوابِ بلند:
این مدل سؤالی که پرسیدی، مثلِ سؤالاتِ نظریه‌یِ ریسمان‌هاییه که ملت می‌پرسن. جوابِ دقیق بهش طولانیه، و احتمالاً اون‌چیزی نیست که می‌خوایی. به‌هرحال:

۱. «زبان» یه مشت قواعدِ گرامریه (معمولاً تو یه فرم می‌نویسن به‌نامِ BNF) و یه مشت قواعدِ reduction semanticsئه. به‌عبارتِ دیگه یه‌چیزِ نظریه و «سرعت» براش معنی نمی‌ده. تو منظورت این‌جا «کامپایلر»ئه.

۲. رفتن سراغِ اسمبلی لزوماً سریع‌ترین جواب رو بهت نمی‌ده. تکنیکِ fast inverse square rootیِ جان‌کارمک، عملاً جواب رو سریع‌تر از دستورِ اسمبلیِ معادلش می‌ده. اسمبلی صرفاً داره راجع به ساختارِ سخت‌افزارت صحبت می‌کنه، و لزوماً بهینه‌ترین الگوریتمِ موجود رو پیاده‌سازی نکرده.

۳. واسه برنامه‌هایِ کوچیک، بینِ کامپایلرایِ مجانی، فورترن یه‌ذره از ++C بهتر بود (pointer aliasing)، ولی تو تقریباً هیچ‌وقت کارت به‌اونجاها نمی‌رسه.

۴. واسه تمامیِ برنامه‌ها، بین‌ِ کامپایلرهایِ مجانی، تفاوتی بین فورترن، و ++C و خیلی دیگه از زبان‌هایِ مبتنی بر llvm وجود نداره. (کامپایلرایِ پولیِ اینتل یا آی‌بی‌ام و اینا قضیه‌شون کاملاً فرق می‌کنه)... هم‌چنین این عدمِ تفاوت مبتنی بر این پیش‌فرضه که واسه‌یِ تو میلی‌ثانیه و میکروثانیه با هم فرقی ندارن. اگه در اون حد بخوایی دقیق بشی (که ملت فقط تو HFT و این مدل چیزا براشون مهمه) قضیه زمین تا آسمون فرق داره.

۵. وقتی می‌خوایی راجع به سرعت صحبت کنی، باید (الف) بدونی مسئله‌ت چه‌مدلیه، (ب) سخت‌افزارت چیه (ج) چه‌قدر طول می‌کشه تا بنویسی‌ش (د) چه‌قدر طول می‌کشه تا اجراش کنی و (ی) جوابی که بهت می‌ده دقیقه یا نه. پرسیدن سؤال راجع به «سرعت»ِ خالی معنی نمی‌ده. مثلاً حینِ تست‌کردن اگه کامپایل‌کردنِ برنامه‌ت ۱۰ دقیقه طول بکشه ولی اون‌وقت ظرفِ یه‌میلی‌ثانیه جوابت بده، بدتر از شرایطیه که برنامه‌ت جوابت رو در پنج‌دقیقه تو repl بده، واسه همینه که ملّت معمولاً زبانِ تست کردنشون با زبانِ پروداکشنشون یکی نیست، هرچند که مثالایِ نقضشم هست.

۶. تقریباً هر چیزی که فکرشو بکنی چندزبانی محسوب می‌شه. مثلاً gcc که کامپایلرِ C و این مدل‌چیزاست، خودش یه‌زبانِ واسطه رو درست می‌کنه و به‌کمکِ اون زبانِ واسطه کامپایل می‌کنه. Racket و SBCL و اینام همین‌طور. پایتون هم «سریعه» به‌دلیلی شبیهِ به همین: اکثرِ لایبرری‌هایِ معروف، با یه‌زبانِ دیگه نوشته شدن و تو فقط داری اونا رو تو برنامه‌ت صدا می‌زنی. تمامِ این موازی‌سازیا و اینام خارج از پایتون انجام می‌شه. apiهایِ CUDA و اینام همه از تو پایتون قابلِ صدازدن هستند.

۷. IDE یه چیزِ ثانویه‌ست و تو نباید زبانی رو به‌خاطرِ IDEش لزوماً انتخاب کنی. تو پایتون PyCharm هست که هم‌رده‌یِ IntelliJ و اینا محسوب می‌شه (منتهی بنا به‌دلایلِ فنی به‌پایِ اون نمی‌رسه: تو پایتون خیلی راحت می‌شه یه‌جمله نوشت که کارِ static analysis رو بیش از حد سخت کنه). IDE ولی واسه برنامه‌نویسایِ انترپرایز و این مدل چیزاست. واسه پروژه‌هایِ بزرگه. به‌دردِ کارایِ تحقیقاتی نمی‌خوره. توصیه‌یِ من اینه که اگه حوصله‌شو داری یه‌چیزی مثلِ vim رو یاد بگیری که خیرشو جاهایِ دیگه هم می‌بینی... ولی تقریباً همه‌یِ افرادی که می‌شناسم از vscode استفاده می‌کنن با vim keybinding (خودم از emacs+evil-mode :دی)

۸. چند تا چیزِ دیگه هم نوشتی که خب یخده مورد دارن، مثلاً اینه که بگی Java کنده (JVM به‌طرزِ وحشتناکی بهینه سازی شده، و از Java داخلِ HFT استفاده می‌شه، و حتی چیزایِ مبتنی بر JVM شبیهِ به موردِ ششم بالا خیلی سریع‌تر از آپشن‌هایِ دیگه هستند، مثلاً Clojure یه لایبرری داره به نامِ نئاندرتال واسه برنامه‌نویسیِ gpu که الان جزوِ سریع‌تریناست). صحبت Garbage collection و اینام و تأثیرِ تو سرعت یخده زیادی فنی‌ئه برایِ این‌بحث، ولی تو همیشه می‌تونی خاموشش کنی! مثلاً اینستاگرام جی‌سیِ سی‌پایتون رو خاموش کرده تو سروراش، و یه pruning روزانه انجام می‌ده.

۹. پایتون مسیرِ استاندارده، چون همه ازش استفاده می‌کنن. ولی واسه مسائلِ خاصِ عددی، گزینه‌هایِ بهتر هم هست. بعضی مسائلِ عددی خودشون رو به‌محاسباتِ ماتریسی به‌بهترین شکل نشون نمی‌دن (مثلاً time series analysis) هر چند که بازم پایتون بهترین/سرِ دست‌ترین آپشنِ مجانیه. واسه مسائلِ optimization conrol و اینام قضیه متفاوته که می‌شه راجع‌بهش صحبت کرد اگه به‌دردت می‌خوره.



پی‌نوشت:
تو که فیزیکی هستی و صحبتِ برنامه‌نویسی می‌کنی، کتابِ Structure and Interpretation of Classical Mechanics رو حتماً بخون. تماماً سمبولیکه، ولی تویِ یه‌زبانی به‌نام Scheme! فوق‌العاده‌ست!

Paradoxy

عضویت : دوشنبه ۱۳۹۳/۱۰/۲۲ - ۲۲:۱۷


پست: 2211

سپاس: 1012

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط Paradoxy »

1. من فکر میکردم همه زبان ها *کامپایل* نمیشن. ولی شاید من اشتباه میکنم.
2. الگوریتم که دست خودمونه. الگوریتمی که توی مثلا سی مینویسیم رو میتونیم توی اسمبلی هم با کمی مکافات بنویسیم. و خب اگر این کارو کنیم حتما سریع تر از سی جواب میگیریم چون خود سی اول میشه اسمبلی (کامپایل میشه) بعد Interpret میشه.
3. محاسباتی که من باهاش سر و کار دارم اکثرن مونت کارلوهایی هستند که سرور های صد هسته ای میخوان و خب، چندماه ممکنه روی سرور اجراشون طول بکشه. نانو ثانیه هم برای من مهم هست. چون توی بازه های زمانی بزرگ همین نانو ثانیه میشه یک روز یهو!
4. ...
5.خب سوالم در مورد محاسبات عددیه. که میتونه از پیدا کردن ویژه مقدارهای یه عملگر تا آنالیز انواع داده های آماری متغیر باشه. دامنه مسائل فیزیکی بینهایت گستردست، اما اول و آخرش تقریبا بیشتر مسائل به ساختن یه ماتریس از اعداد (حالا هر چند بعدی) و استفاده از اعداد تصادفی برای پیدا کردن جوابایی که از نظر تحلیلی محاله رسیدن بهشون ختم میشه. خیلی دقیق بخوای درین لحظه دارم روی مدل هایزنبرگ و سیستم های فراسترید کار میکنمhttps://en.m.wikipedia.org/wiki/Heisenberg_model_(quantum)
قبلا روی مدل آیزینگ کار میکردم که میشد یه جوری جمعش کرد. هایزنبرگ شوخی نداره. نود و نه درصد محاسبات با تولید عدد تصادفی انجام میشه.
6. چه جالب. از gccتوی command line ویندوز استفاده کرده بودم ولی نمی‌دونستم خودشم زبان واسطه میسازه. خب پس مطمئن شدم که میتونم از کارت نودیام استفاده کنم تو پایتون.
7. تمام چیزی که من از IDE میخوام اینه که یه refractor داشته باشه، امکان pause رو بده وسط کد و debugger داشته باشه. یه workspace هم که توش متغییرا به هم راه مقدارشون نمایش داده بشه. اگه کدم رو کامل کنه هم که عالیه. Note++ استفاده میکنم گاهی ولی نه واسه کارای سنگین. اتم هم بد نیست. اما یه اشتباه همانا و حالا پیدا کردنش با کرم الکاتبینه تو هزار خط کد.
8. جاوا عالیه و به نظر من وقتی صحبت آنالیز تصاویر مثلا تشخیص چهره ای چیزی مطرح باشه همه زبان هارو چه از نظر سرعت چه چه کتابخونه قورت میده. اما خب بدرد محاسبات اصلا نمیخوره. اون garbage collector ش رو هم مطمئن نیستم بشه قطع کرد. حتی اگرم به طریقی قطعش کنی برنامت کرش میخوره. نمیشه دستی آبجکتا رو از مموری پاک کنی. مثلا اگه یه arraylist داشته باشی و خودت دستی وسط برنامه null ش کنی، جاوا عین خیالش نیست. هروقت دلش خواست از مموری پاکش میکنه. هیچ کنترلی رسما روی سخت افزار آدم نداره، یا من بلد نیستم. البته میشه سی نوشت توش و این ضعفش رو جبران کرد. ولی خب خود جاوا ازین خاصیتا نداره.
9. جدا وسوسه شدم پایتون یاد بگیرم. کتابه رو هم نگاه میکنم ببینم چیه.

نمایه کاربر
aalireza

عضویت : پنج‌شنبه ۱۳۸۸/۵/۸ - ۱۴:۵۲


پست: 820

سپاس: 346

جنسیت:

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط aalireza »

خوب کاری می‌کنی! smile020 پایتون زبانِ رسمیِ همین کاریه که می‌خوایی بکنی. کارِ خودِ منم تو همین حواشیه هرچند من از اوضاعِ ایران اطلاعی ندارم. خواستی خصوصی صحبت می‌کنیم.

برایِ بقیه‌یِ موارد:

۱. «کامپایل»کردنِ یه‌زبان، یعنی بازنویسیِ اون زبان در یه‌زبانِ دیگه با قواعدِ گرامری و سمنتیکیِ مشخص. این اشتباهِ عمومیِ برنامه‌نویساس که فکر می‌کنن کامپایلر کارش نوشتنِ اسمبلیه.... مثلاً همین پایتون یکی از زبان‌هاییه که ملت می‌گن «کامپایل» نمی‌شه... که خب اشتباهه: کامپایلرِ cpython وظیفه‌ش بازنویسیِ پایتونِ عادی در یه‌زبانِ سطحِ پایین‌ترِ قابلِ فهم برایِ VM پایتون هست (شبیهِ جاوا)، ولی کامپایلرایِ دیگه هم مثلِ pypy و جایتون هستند... این حتی بدین معنی نیست که کامپایلر وظیفه‌ش تبدیل یه‌زبانِ سطحِ بالا به‌یه‌زبانِ سطحِ پایین‌تره. مثلاً می‌تونی یه کامپایلر واسه C با یه‌زبانی مثلِ Ocaml بنویسی، درصورتی که Ocaml از C خیلی سطحِ بالاتره.

۲. نگرفتی چی‌شد. ببین، مثلاً همین متلب رو در نظر بگیر. شما هم ضرب داری و هم جمع. ولی آیا برایِ این‌که بگی سه‌سه‌تا می‌شه چندتا، میایی سه رو سه‌بار با خودش جمع می‌کنی یا این‌که میایی از همون ضرب استفاده می‌کنی؟ ... خب طبیعیه که میایی از همون ضرب استفاده می‌کنی. اما تضمینی نداری که اون «ضرب» سریع‌تر از سه‌بار جمع کردن هست یا نه. تو اسمبلی هم قضیه همین‌جوره. اون مثالِ fast inverse square root رو گوگل کن خودت متوجه می‌شی. طرف برنامه‌یِ جذرگیرش رو تو C نوشته، در صورتی که «جذر» یه دستورِ اسمبلیِ سخت‌افزارش هم بوده. ولی برنامه‌یِ Cش سریع‌تره.

۳ و ۶. بهینه‌سازیِ در حدِ «نانو» معنی می‌ده، منتهی نه تحتِ اون‌چیزی که فکرش رو می‌کنی. ساعتِ سی‌پی‌یو دقتش معمولاً تا میکروثانیه‌ست. ولی تحتِ شرایطِ خاص می‌تونی صحبت از نانو بکنی (relativistic statistical arbitrage) و یا تو شرایطی که سخت‌افزارت خاص باشه، که بازم می‌گم به‌کارت نمیاد. واسه نویدیا هم یکی که سهله، ارکستریشنِ هزاران کارت گرافیکی هم تو به‌صورتِ سطحِ بالا معمولاً توی یه زبانیِ مثلِ پایتون می‌نویسن و بعد چیزایِ سطحِ پایین‌تر رو صدا می‌زنن.

۷. تو ریفکتور به‌دردت نمی‌خوره. ریفکتورِ درست و حسابی واسه زبانی شبیهِ پایتون نداریم.(*) کسی هم تو این مدت ندیدم لازم داشته باشه. تو کامل‌کردنِ کد رو می‌خوایی و هایلایت‌کردنِ سینتکس و شاید دیباگر. واسه پایتون برو سراغِ چیزی شبیه vscode از همه سرراست‌تره. دیباگرِ پایتون هم pudb بهت توصیه می‌کنم.... مهم‌ترین چیزی که می‌خوایی تو پایتون که تو نگفتی، یکی repl هست و یکی دیگه‌م ipython notebook. خودت گوگل کن.

۸. قضیه جاوا پیچیده‌تر از این‌حرفاست. مثلاً بلومبرگ، کلی از دیتاپایپلاین‌هاش رو با جاوا تکمیل کرده و سوپروایزرش رو هم با یه‌زبانِ خیلی کند واسه کارایِ عددی به‌نامِ ارلنگ نوشته. ولی بحث روی این یخده بی‌راهه‌ست.



(*) حتی پیاده‌سازیِ rename متغیرها واسه زبانی مثلِ پایتون شدیداً سخته. مثلاً تو تویِ پایتون می‌تونی بگی:

کد: انتخاب همه

globals()["x" if time() % 2 else "y"] = 0

این عملاً می‌گه x رو بایند می‌کنه به صفر، اگر ثانیه‌یِ زمانِ فعلی فرد باشه وگرنه y رو بایند می‌کنه به‌صفر.

پی‌نوشت: صحبت آیزینگ شد، این رو بخون نظرت رو حتماً بهم بگو: https://www.nkn.org/doc/NKN_Whitepaper.pdf

hessamhashemi

عضویت : سه‌شنبه ۱۳۹۸/۸/۱۴ - ۱۴:۱۰


پست: 2

سپاس: 2

Re: سریع ترین زبان برنامه نویسی برای محاسبات عددی

پست توسط hessamhashemi »

سلام
با توجه به صحبتهایی که شده نشون دهنده این هست که شما با حجم زیادی داده سروکار داری. در این مواقع شما از فکر یک کامپایل یا زبان بیرون بیا. هیچ زبانی نیست که خودش بتونه همچین کاری را انجام بده.

شما باید بیایی و از ایزارهایی غیر از کامپایلر استفاده کنی. ابزارهایی مثل Apache Hadoop که میتونه کدی که بهش میدی را بیاد و روی هزاران سرور اجرا کنه و حجم داده های زیادی را در زمان بسیار کوتاهی پردازش کنه. برای این ابزار باید با زبان جاوا کد بزنی. اینجا دیگه سرعت عمل زبان و کامپایلر دیگه مهم نیست. چون داری روی کلاستری از سرورها پردازش مورد نظرت را توزیع میکنی. البته این ابزارها برای پردازش های آماری و محاسبات اعدادی اسکالر استفاده میشه.
(منظور از محاسبات آماری استخراج آمار از داده هات هست. مثلا محاسبه فراوانی نام علی در اسامی 80 میلیون ایرانی، محاسبات عددی هم چیزی مثل محاسبه نرخ نفوذ اینترنت).البته تمام محاسبات روی CPU اجرا میشه که خیلی برای محاسبات اعشاری مناسب نیستند.

برای محاسبات اعشاری سنگین باید رفت سراغ سخت افزارهایی که تخصصی برای این کار هستند. دم دست ترین این سخت افزارها کارتهای گرافیکی هستند. اجرای محاسبات روی کارت گرافیک های مدرن مثلا کارتهای Nvidia که دارای واحد محاسباتی CUDA هستند خیلی بهینه تر از اجرای اونها روی CPU هستند. واحد اندازه گیری قدرت سخت افزار برای محاسبات اعشاری با واحد FLOPS (floating point operations per second) و پیشوندهای گیگا و ترا هست. هر چقدر این عدد بالاتر باشه تعداد محاسبات در ثانیه بیشتری انجام میده و در نتیجه محاسبات روی دادهای شما سرعتر انجام میشه. (برای سخت افزارهای خاص تر این لینک را بخونید https://en.wikipedia.org/wiki/Nvidia_Tesla)

برای محاسبات برداری کامپیوتر های عادی مناسب نیستند و باید از سخت افزارهای خاص استفاده بشه که من خودم اطلاعات چندانی راجع به اونها ندارم. (نکته: خیلی از محاسبات برداری را میشه تبدیل به محاسبات اعشاری کرد اما سرعت سخت افزارهای محاسبه برداری توی محاسبه اونها خیلی بیشتر هست).

توی CPU های مدرن دستورات مخصوصی برای پردازش های اعشاری و برداری هست که سرعت محاسبات را برای کارهای کوچیک زیاد میکنه اما برای کارهای سنگین همونطور که گفتم باید از سخت افزارهای خاص استفاده بشه.
برای مطالعه بیشتر:
https://www.intel.com/content/www/us/en ... ssors.html
https://en.wikichip.org/wiki/x86/extensions

ارسال پست