繫線組合

[已驗證 ] 上次更新時間者: Joe Schaefer 上的 週日, 14 9月 2025    來源
 

AI 產生的繫線組合.

POSIX 執行緒

我今年的任務是將最大可能性函數從單一執行緒版本移植到多重執行緒,根據該程式碼最慢部分的架構前提,實際最佳化邏輯在模型化群組 ID 的索引上迴圈,而模型化群組 ID 的每個重複都應該獨立於其餘部分。

迴圈時遇到問題

  1. 無法重新初始化相依的自動變數,
  2. 變更數個全域指標,其索引方式為建立群組 ID (人才招聘),
  3. 需要 thread_local 變數來區隔用於計算的全域記憶體區段 (以每個 ID 為基礎)。

1 和 3 是直覺的。有了 2,我發現了一個與一個概念有關的聰明演算法THREAD_BUNDLE,這是序列模型化群組 ID 的每個繫線區塊。

透過確保THREAD_BUNDLE 至少與記憶體分頁大小除以個別指標的大小為 2,我們可以確保不同的執行緒在獨立運作。頁面 在虛擬記憶體中,因此我們可以將 mutex 鎖定在這些記憶體寫入。(假設執行緒會處理它們的當然) THREAD_BUNDLE 速度大致相同。

此外,我最終將迴圈分割成偶數 / 奇數配對,以移除「相同的速度」相依性,這保證至少有一個記憶體頁面 分離使用中THREAD_BUNDLE 迴圈。

核心迴圈

  /* EVEN */
  for (jG = minG; jG <= numG; jG += 2*THREAD_BUNDLE)
  {
    pthread_t ptid; 3 refs
    arg_t* arg = mal (sizeof(*arg), "arg_t"); 12 refs

#define SET_ARG(foo) arg->foo = (foo) 30 refs

SET_ARG(jG);
    ...

#undef SET_ARG

// rsim_mlf_thread loops over the index bundle
    // from jG to MIN(numG, jG + THREAD_BUNDLE - minG), doing
    // stuff with global data structures also indexed by jG

pthread_create (&ptid, NULL, rsim_mlf_thread, arg);
    PUSH_STACK_ELT(thread_stack, ptid, pthread_t);
  }

{
    pthread_t * ptid; 3 refs
    while (POP_STACK_PTR(thread_stack, ptid, pthread_t) != NULL)
    {
      arg_t* arg; 6 refs
      pthread_join(*ptid, (void**)&arg);
      ...
  }

/* ODD */
  for (jG = THREAD_BUNDLE + minG; jG <= numG; jG += 2*THREAD_BUNDLE)
  {
    pthread_t ptid; 3 refs
    arg_t* arg = mal (sizeof(*arg), "arg_t"); 12 refs
    ...
永久鏈結  #C   #mutex   #POSIX   #pthread  

 


註解  



索引


英語依存項目


日星星級限定


2020 年 3 月 COVID-19

  • 指數成長與新冠肺炎 (COVID-19) — 使用 ** 數學 ** 區段節省您的時間— 成為受過教育且與當前疫情相關的統計資料消費者非常重要 … 週四, 06 3月 2025

 


Heyoka


NonFunctional 測試


 

  • 郵件群組 — 這些暫時地址是必要的ezmlm-idx 語言的訂閱和協調管制系統 … 週六, 27 4月 2024

 

  • 資訊安全入門 — 所有源自程式實際執行 UNIX ** 系統呼叫 ** 的資料都應視為 ** 保留 ** … 週六, 27 4月 2024

 

  • The Joy of DTrace — 測量兩次,切掉一次,再投入程式碼最佳化工作 … 週三, 17 4月 2024

 


 

  • 應用程式效能 — 許多開發人員陷入思考效能最佳化的困境,在於讓每一行程式碼儘可能有效率 … 週二, 23 4月 2024

 

  • 垃圾信問題 … — 單一最佳外掛程式qpsmtpd,雖然很難理解原因 … 週日, 29 1月 2023

雙曲蜂巢


刺青和羽毛


 

  • DevOps 移動 — 「移動」背後的大想法不只是為開發人員提供更多繩索 … 週五, 15 12月 2023

 

  • 玩 htop — 熱門 Unix 平台的進階 htop 功能 … 週四, 19 1月 2023

資訊架構

  • 資訊架構 — 與設計、簡報、關係和架構限制相關的整個技術,涵蓋您服務的每個 URL … 週一, 11 3月 2024