sách gpt4 ai đã đi

c# - 打开/关闭编译器优化标志的CPU密集型应用程序

In lại 作者:行者123 更新时间:2023-12-03 13:21:17 26 4
mua khóa gpt4 Nike

我编写了一个小程序来比较笔记本电脑的性能。为了使程序CPU更加密集,我用一些多线程代码(通过Parallel API实现)实现了Rabin-Karp模式匹配算法。

我注意到,当在关闭编译器优化标志的情况下执行程序时,所花费的时间要比打开优化标志时所花费的时间多得多。

Ví dụ:

  • 花费的时间(优化标记关闭时):40秒(大约)
  • 花费的时间(打开优化标志时):18秒(大约)

  • 我很好奇,因为编译器正在应用哪种优化,从而极大地提高了性能。在打开/关闭此标志的情况下执行代码时,任何有关如何理解发生情况的指针都将非常有帮助。

    Mã số
    void Main()
    {
    Dictionary collection = new Dictionary();
    IEnumerable commonWords = File.ReadAllLines(@"G:\LINQPad4\words.txt")
    .Where(x => !string.IsNullOrEmpty(x)).Select(t => t.Trim());

    string magna_carta = File.ReadAllText(@"G:\LINQPad4\magna-carta.txt");

    Parallel.ForEach(commonWords,
    () => new Dictionary(),
    (word, loopState, localState) =>
    {
    RabinKarpAlgo rbAlgo = new RabinKarpAlgo(magna_carta,word);
    localState.Add(word,rbAlgo.Match());
    return localState;
    },
    (localState) =>
    {
    lock(collection){
    foreach(var item in localState)
    {
    collection.Add(item.Key, item.Value);
    }
    }
    });

    collection.Dump();
    }

    public class RabinKarpAlgo
    {
    private readonly string inputString;
    private readonly string pattern;
    private ulong siga = 0;
    private ulong sigb = 0;
    private readonly ulong Q = 100007;
    private readonly ulong D = 256;

    public RabinKarpAlgo(string inputString, string pattern)
    {
    this.inputString = inputString;
    this.pattern = pattern;
    }

    public bool Match()
    {
    for (int i = 0; i < pattern.Length; i++)
    {
    siga = (siga * D + (ulong)inputString[i]) % Q;
    sigb = (sigb * D + (ulong)pattern[i]) % Q;
    }

    if(siga == sigb)
    trả về giá trị đúng;

    ulong pow = 1;
    for (int k = 1; k <= pattern.Length - 1; k++)
    pow = (pow * D) % Q;

    for (int j = 1; j <= inputString.Length - pattern.Length; j++)
    {
    siga = (siga + Q - pow * (ulong)inputString[j - 1] %Q) % Q;
    siga = (siga * D + (ulong)inputString[j + pattern.Length - 1]) % Q;

    if (siga == sigb)
    {
    if (inputString.Substring(j, pattern.Length) == pattern)
    {
    trả về giá trị đúng;
    }
    }
    }

    trả về false;
    }
    }

    您可以从以下gitHub存储库下载相关文件: Rabin-Karp Test

    文章: Performance Testing

    1 Câu trả lời

    在您的特殊情况下,在并行foreach中有3个for循环,
    我坚信,大多数优化都是通过动态循环转换以及数学部分完成的。

    以下是一些可以通过循环执行的示例:Loop transformation

    C#编译器团队的Eric Lippert对此有一个博客条目:
    what does the optimize switch do

    关于c# - 打开/关闭编译器优化标志的CPU密集型应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990831/

    26 4 0
    Bài viết được đề xuất: c# - C# 委托(delegate)中的线程 sleep 时间
    Bài viết được đề xuất: .net - 带参数的WCF服务实例
    Bài viết được đề xuất: c# - 多线程
    Bài viết được đề xuất: c# - 原子列表-此集合线程安全且快速吗?
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com