PDA

View Full Version : سوال: استفاده کردن از تمام ظرفیت سیستم بدون هنگ کردن



Desaghi
شنبه 17 خرداد 1393, 20:01 عصر
بعضی نرم افزار ها با اینکه به نظر میرسه از تمام ظرفیت cpu استفاده می کنند ولی باز هم مانع اجرای سایر برنامه های سبک نمیشن (سیستم هنگ نمیکنه)ولی برنامه های محاسباتی سنگین معمول پس از اجرا سیستم روی اون برنامه قفل میشه و دیگه نمیشه کاری انجام داد.سوالم اینه که چطور میشه برنامه های نوع اول را نوشت؟

parvizwpf
شنبه 17 خرداد 1393, 20:06 عصر
به نوع پیاده سازی و کد نویسی و طراحی برنامه مربوط میشه معمولا.

omid_kma
شنبه 17 خرداد 1393, 20:11 عصر
همون طوری که خودت گفتی برنامه های نوع اول فقط به نظر میرسه دارن از تمام ظرفیت cpu استفاده می کنن ولی عملا این کارو نمی کنن .
مثلا این سورس کد رو بگیر اجرا کن تقریبا از تمام قدرت cpu استفاده می کنه (مواظب باشه فقط cpu ت ذوب نشه :) )
من که بعد از اجرا موس رو هم نمی تونستم تکون بدم !
https://github.com/Mysticial/Flops

کامبیز اسدزاده
شنبه 17 خرداد 1393, 22:03 عصر
خب چنین کد هایی ۲ حالت داره یا از روی نادانی نوشته میشوند و ... عملیات رو یکجا میفرسه به CPU که موجب هنگ کردنش میشه یا اینکه خیر به صورت آگاهانه اینجوری مینویسند که فکر نکنم کسی بیکار باشه ...
در کل کد هرچقدر استاندارد و هرچقدر مدیریت شده نوشته شود چنین اتفاقاتی نخواهد افتاد ... حال که در C++ مدیریت حافظه و پردازش به نوع کد نویسی بستگی داره این اتفاقات عادی هستش چون Managed نیست پس اگر کد نویسی حتی به مقدار ناچیزی درست نوشته نشود موجب هنگ کردن خواهد شد.

کد نویسی Native اونم با C++ در صورت رعایت نکردن اصول کد نویسی میتونه خطرناک باشه این دسته از برنامه ها که معمولا موجب هنگ کردن سیستم میشوند ناشی از همین مواردی هستش که گفتم.

Desaghi
یک شنبه 18 خرداد 1393, 07:07 صبح
چطور میشه یک سقف برای استفاده از cpu تعیین کرد؟منظورتون از فرستادن عملیات یکجا به cpu چیه؟

کامبیز اسدزاده
یک شنبه 18 خرداد 1393, 11:54 صبح
چطور میشه یک سقف برای استفاده از cpu تعیین کرد؟منظورتون از فرستادن عملیات یکجا به cpu چیه؟

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

روش های مختلفی برای این کار ها وجود داره مثلا استفاده از Thread به صورت مناسب میتوته خیلی کارآمد و جواب گو باشه...که در کل به این جور روش ها برنامه نویسی Multi tasking یا همان چند وظیفه ای میگویند.

توضیحات دقیق تر :‌http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm

مثال های زیر رو دقت کنید :

http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm
http://www.cplusplus.com/reference/thread/thread/

rahnema1
یک شنبه 18 خرداد 1393, 14:41 عصر
چطور میشه یک سقف برای استفاده از cpu تعیین کرد؟منظورتون از فرستادن عملیات یکجا به cpu چیه؟

این یک روش ساده
به ازای 100 میلی ثانیه کار 100 میلی ثانیه استراحت می کنه روی سیستم من که 50 درصد استفاده از cpu نشون میده

#include <time.h>
#include <windows.h>
int main(){
clock_t t=clock();
while(1)
{
if ((clock()-t)>100)
{
Sleep(100);
t=clock();
}
}
}

motherboard
یک شنبه 18 خرداد 1393, 14:56 عصر
این یک روش ساده
به ازای 100 میلی ثانیه کار 100 میلی ثانیه استراحت می کنه روی سیستم من که 50 درصد استفاده از cpu نشون میده

#include <time.h>
#include <windows.h>
int main(){
clock_t t=clock();
while(1)
{
if ((clock()-t)>100)
{
Sleep(100);
t=clock();
}
}
}


این دیگه چه کدی بود؟؟؟!!!! تو مال من کامپایل شد ولی مشخص نشد نتیجه چی شد!!!حالا نه فایل exe رو میشه پاک کرد و نه دیگه اون کد دوباره کامپایل میشه!!!!نکنه ویروس بود :لبخند:

rahnema1
یک شنبه 18 خرداد 1393, 15:30 عصر
این دیگه چه کدی بود؟؟؟!!!! تو مال من کامپایل شد ولی مشخص نشد نتیجه چی شد!!!حالا نه فایل exe رو میشه پاک کرد و نه دیگه اون کد دوباره کامپایل میشه!!!!نکنه ویروس بود :لبخند:

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

Desaghi
یک شنبه 18 خرداد 1393, 15:44 عصر
این نرم افزار (Xilisoft Video Converter) یک مثال از اون چیزیه که منظورم هست.(استفاده حداکثر از cpu بدون هنگ کردن)نمونه های متن باز مشابه این مورد را سراغ دارید؟در ضمن اگر براتون مقدور هست یک بار نصبش کنید. این نرم افزار از چه کتابخانه هایی استفاده میکنه؟

omid_kma
دوشنبه 19 خرداد 1393, 00:53 صبح
خب برای parallel نوشتن از خیلی چیزا میشه استفاده کرد مثلا :
TBB
OpenMP
thread در C++‎‎‎11
SSE
pthreads
وووو
برای کارت گرافیک
CUDA
Microsoft C++‎‎‎ AMP
یک راه برای هنگ نکردن میتونه این باشه که درصد مصرف cpu مدل cpu , system رو تعیین کرد بعد بر اساس اون تعدادprocess ,thread ها رو تعیین کرد.