【问题标题】:How to run multiple tasks on specific multiple cores/processors simultaneously/synchronously如何同时/同步地在特定的多个内核/处理器上运行多个任务
【发布时间】:2014-03-19 23:01:30
【问题描述】:

我有多个任务,我需要同时在特定的多个内核或处理器上运行它们。

例如,如果我有两个不同的任务或只有一个任务但会运行两次.

我知道如何运行每个特定的处理器,但我不知道如何同时运行它们。我试图使用多线程然后任务并行库在特定处理器上同时运行不同的任务,但我失败了。

在下面的代码中,我尝试使用多线程但它不起作用或者我可以使用任务并行库吗???

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;


namespace ConsoleApplication14

{
    class Program
{

    public static double DumbCountSqr(int dumnum)
    {

        Random random = new Random();
        int randomNumber = random.Next(0, 10);
        double result = 0;
        for (int i = 1; i < 10000; i++)
        {
            for (int j = 1; j < 10000; j++)
            {
                result += random.Next(0, 10) * Math.Sqrt(i) * Math.Sqrt(j) + Math.Abs(Math.Sqrt(i));
            }
        }
        return result;
    }

    public static void Main()
    {

        Thread t = new Thread(new ThreadStart(Go));
        t.Start();


        for (int i = 0; i < 1; i++)
        {

            Process Proc = Process.GetCurrentProcess();
            long AffinityMask = (long)Proc.ProcessorAffinity;

            AffinityMask = 0x0004;//processor    3
            Proc.ProcessorAffinity = (IntPtr)AffinityMask;

            var result1 = DumbCountSqr(i);
            Console.WriteLine("result1 =  " + result1);

        }
    }


   public static void Go()
    {

        for (int i = 0; i < 1; i++)
        {

                Process Proc = Process.GetCurrentProcess();
                long AffinityMask = (long)Proc.ProcessorAffinity;

                AffinityMask = 0x0001;//processor    1
                Proc.ProcessorAffinity = (IntPtr)AffinityMask;

                var result2 = DumbCountSqr(i);
                Console.WriteLine("result2 =  " + result2);

        }

    }

}

}

【问题讨论】:

  • 您如何确定它们没有同时运行? “它不起作用”......它怎么不起作用?

标签: c# multithreading parallel-processing task-parallel-library


【解决方案1】:

使用任务并行库并查看 Parallel.For 方法。这为您利用了多个内核。但请注意您如何使用它。并行循环可能并不总是比顺序循环快。

这是一个关于如何在 MSDN 上使用的示例:http://msdn.microsoft.com/en-us/library/dd460713(v=vs.110).aspx

这里:http://msdn.microsoft.com/en-us/library/dd460703(v=vs.110).aspx

这里:http://msdn.microsoft.com/en-us/library/ff963552.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多