نقل قول: بالا بردن سرعت یک تابع
در ابتدا تابع اين كد رو اضافه كنيد
System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;
نقل قول: بالا بردن سرعت یک تابع
سلام
نمی دونم کدتون چی کار می کنه ولی می تونید از Parallel.For برای توزیع اجرا روی تمام هسته های CPU استفاده کنید البته به شرط اینکه با اجرای موازی منطق کار از بین نره.
مثلاً در مورد اینکه بدونیم یک عدد اول هست یا نه میشه رنج تقسیم رو مثلاً 4 قسمت کرد و هر قسمت رو یک هسته اجرا کنه اما در مورد تابعی مثل هانوی عمل موازی سازی معنی نداره چون در هر لحظه فقط یک دیسک رو میشه برداشت امیدوارم متوجه منظورم شده باشید:
using System.Threading.Tasks;
class Test
{
static int N = 1000;
static void TestMethod()
{
// Using a named method.
Parallel.For(0, N, Method2);
// Using an anonymous method.
Parallel.For(0, N, delegate(int i)
{
// Do Work.
});
// Using a lambda expression.
Parallel.For(0, N, i =>
{
// Do Work.
});
}
static void Method2(int i)
{
// Do work.
}
}
نقل قول: بالا بردن سرعت یک تابع
نقل قول:
نوشته شده توسط
youngold
در ابتدا تابع اين كد رو اضافه كنيد
System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;
این کد که شما نوشتین اولویت می ده به تابع من و نتیجه برنامه من رو با مشکل مواجه می کنه. یعنی کارهایی که باید فرضا 2 ثانیه بعد انجام بشه اول انجام می شه و نتیجه اشتباه می شه.
من نیاز به روش های دیگه ای دارم.
نقل قول: بالا بردن سرعت یک تابع
نقل قول:
نوشته شده توسط
tooraj_azizi_1035
سلام
نمی دونم کدتون چی کار می کنه ولی می تونید از Parallel.For برای توزیع اجرا روی تمام هسته های CPU استفاده کنید البته به شرط اینکه با اجرای موازی منطق کار از بین نره.
مثلاً در مورد اینکه بدونیم یک عدد اول هست یا نه میشه رنج تقسیم رو مثلاً 4 قسمت کرد و هر قسمت رو یک هسته اجرا کنه اما در مورد تابعی مثل هانوی عمل موازی سازی معنی نداره چون در هر لحظه فقط یک دیسک رو میشه برداشت امیدوارم متوجه منظورم شده باشید:
using System.Threading.Tasks;
class Test
{
static int N = 1000;
static void TestMethod()
{
// Using a named method.
Parallel.For(0, N, Method2);
// Using an anonymous method.
Parallel.For(0, N, delegate(int i)
{
// Do Work.
});
// Using a lambda expression.
Parallel.For(0, N, i =>
{
// Do Work.
});
}
static void Method2(int i)
{
// Do work.
}
}
از پارالل سعی کردم توی حلقه های for ساده برنامه استفاده کنم اما برنامه با مشکل مواجه می شه چون از بعضی از متغیرها خطا می گیره و می گه که null هستن. یعنی فکر نمی کنم بشه از موازی هم استفاده کرد. برای اون قسمتی که داره بصورت بازگشتی تابع رو دوباره فراخوانی می کنه یا برای حلقه for کسی ایده ای نداره؟
البته بدم نمی آد حلقه for این تابع رو پارالل استفاده کنم اما حقیقتش نمی دونم چطور توی این حلقه contour رو توی parallel.for بنویسم.
نقل قول: بالا بردن سرعت یک تابع
نقل قول: بالا بردن سرعت یک تابع
نقل قول:
نوشته شده توسط
tooraj_azizi_1035
روش من رو تست کردید؟
روش شما رو توی این تابع نتونستم پیاده سازی کنم... نمی دونم چطور حلقه for این تابع رو تبدیل کنم. روی حلقه های معمولی انجام دادم اما اینو نمی دونم چطور حلقه parallel.for رو براش بنویسم. اگه شما می دونید لطفا کمک بدید.
ممنون