繫線組合
.
POSIX 執行緒
我今年的任務是將最大可能性函數從單一執行緒版本移植到多重執行緒,根據該程式碼最慢部分的架構前提,實際最佳化邏輯在模型化群組 ID 的索引上迴圈,而模型化群組 ID 的每個重複都應該獨立於其餘部分。
迴圈時遇到問題
- 無法重新初始化相依的自動變數,
- 變更數個全域指標,其索引方式為建立群組 ID (
人才招聘), - 需要 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
索引
-

-
- 知識管理系統中的 Wiki — Wiki 平台,如奧里昂 出席合作、生活文件。它們非常適合用於深度、互連的文章 … 週二, 03 3月 2026
-

-
- Perl 7 功能要求:輸入詞彙的密封子 — Perl 5 的 OO 程式實際執行方法查尋比直接、具名子常式呼叫多出 50% 的效能超載 … 週四, 08 1月 2026
-
-
- 特徵和光譜幾何的三重產品 — 我們發現一個新穎而出且熟悉的全球幾何不變 … 週一, 16 2月 2026
-
-
- 什麼是 Smart Content Dependency ManagementTM ? — 清楚瞭解您網站的 * 相依性圖表 * 可確保您能夠大規模發揮建置技術的效能 … 週日, 21 4月 2024
-

-
- 指數成長與新冠肺炎 (COVID-19) — 使用 ** 數學 ** 區段節省您的時間— 成為受過教育且與當前疫情相關的統計資料消費者非常重要 … 週四, 06 3月 2025
-
-
- Git 與非否認,已修訂 — 「確認」歷史記錄與「上傳」歷史記錄之間有明顯的區別 … 週五, 03 1月 2025
-

-
- Joe 的隨機思考 — 歡迎! … 週日, 10 11月 2024
-
-
- 資訊安全性、應用程式效能及可靠性 — 「非功能性」軟體工程解決了大約三個關鍵問題:安全性、效能及可靠性 (SPR) … 週四, 09 5月 2024
-
-
- 郵件群組 — 這些暫時地址是必要的
ezmlm-idx 語言的訂閱和協調管制系統 … 週六, 27 4月 2024
- 郵件群組 — 這些暫時地址是必要的
-
-
- 資訊安全入門 — 所有源自程式實際執行 UNIX ** 系統呼叫 ** 的資料都應視為 ** 保留 ** … 週六, 27 4月 2024
-
-
- The Joy of DTrace — 測量兩次,切掉一次,再投入程式碼最佳化工作 … 週三, 17 4月 2024
-
-
- The Joy of htop — 停機於 Solaris 11 … 週三, 17 4月 2024
-
-
- 應用程式效能 — 許多開發人員陷入思考效能最佳化的困境,在於讓每一行程式碼儘可能有效率 … 週二, 23 4月 2024
-
-
- 垃圾信問題 … — 單一最佳外掛程式
qpsmtpd,雖然很難理解原因 … 週日, 29 1月 2023
- 垃圾信問題 … — 單一最佳外掛程式
-

-
- 已結、負曲線的隨機追蹤公式 — 我的 *1997 Ph.D. 論文 * 作為部落格項目。 … 週五, 12 4月 2024
-

-
- Apache HTTPd 視為有害的開發 — 菲利普不知道太好了,那就是怎麼說peevish,vapid and territorial - 歡樂,潮流和領土 該團隊已經成為 … 週四, 25 4月 2024
-
-
- DevOps 移動 — 「移動」背後的大想法不只是為開發人員提供更多繩索 … 週五, 15 12月 2023
-
-
- 玩 htop — 熱門 Unix 平台的進階 htop 功能 … 週四, 19 1月 2023
-

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