cpu-cache

    1熱度

    1回答

    我使用HashMap緩存通過遞歸算法計算出的約200萬個值。我使用集合框架中的HashMap<Integer, Double>或者Trove庫中的TIntDoubleHashMap,由boolean useTrove變量控制,如下面的代碼所示。 我不指望特羅韋庫要快,因爲它比500ms左右的HashMap<>避免自動裝箱等。而實際上,put()和get()通話大約需要300毫秒運行(總量)爲THa

    0熱度

    1回答

    當我讀了Intel的系統編程指南,我發現這一點: 存儲緩衝將提高寫入性能,那麼,什麼是它的大小?進入意味着什麼?

    1熱度

    1回答

    假設緩存行大小爲64字節,並且我有一個大小也是64字節的對象。如果該對象被訪問時,這將是: 所有加載到一個高速緩存行 只有對象的開始和64個字節的倍數之間的部分將被加載 對象將被裝入兩個不同的高速緩存行 別的東西 我有一種感覺,答案從不同處理器到處理器,但什麼是現代CPU的最可能的結果?

    0熱度

    1回答

    當內存頻繁訪問時,它被放到CPU高速緩存(L1,L2,L3)上。然而,mmap與生活在/ dev/shm中的文件的內存是否一樣?我問,因爲我想知道是否將它備份到/ dev/shm中的文件將繞過CPU的任何緩存,而讓它通過緩存未命中。

    4熱度

    1回答

    看完這個article我決定在我的筆記本電腦上檢查它。這個想法是創建大小爲[1..40] Mb的數組,然後對其進行1024次迭代(例如,對於大小爲1的數組,步長爲1024,對於2 mb大小的數組步長爲2048等)。我的代碼是: public class L3CacheBenchmark { @State(Scope.Benchmark) public static class

    0熱度

    3回答

    一般來說,桌面有兩種CPU高速緩存以加快內存訪問速度。 1)指令緩存 - >加速可執行指令。 2)數據緩存 - >加快數據的獲取和存儲。 根據我的理解,指令緩存操作程序的代碼段,數據緩存操作程序的數據段。這是正確的嗎? 從堆分配的內存沒有緩存優勢嗎?數據緩存中是否覆蓋了堆內存訪問?

    0熱度

    2回答

    據我所知,CPU的內存訪問涉及CPU緩存和MMU。 CPU將嘗試在高速緩存中找到其目標,如果發生高速緩存未命中,CPU將轉爲MMU。在MMU訪問期間,對應頁表項的被訪問/髒位將由硬件置位。但是據我所知,大多數CPU設計不會觸發MMU,除非有一個緩存未命中,這裏我的問題是,頁表項的被訪問/髒位仍然會被設置在緩存命中下?或者它與建築相關?

    0熱度

    1回答

    我有兩段代碼,桌面上有32個內核。 代碼A使用32個線程,並執行以下的事情, 1)將值寫入存儲器 2一些隨機位置)原子將值添加到全局變量。 代碼B使用16個線程向隨機位置寫入值,並使用另外16個線程自動將值添加到全局變量。 我想知道爲什麼代碼B在每秒對全局變量執行多少次原子操作方面速度更快。 這裏是碼A var a uint64 = 0 const N = 10 * 1024 * 1024

    12熱度

    1回答

    以下示例代碼生成大小N的矩陣,並且調換它SAMPLES的次數。 當N = 512轉置運算的平均執行時間是2144 μs(coliru link)。 第一眼看上去沒有什麼特別的,對不對?...... 嗯,這裏是 N = 513→1451 μs N = 519→600 μs N = 530→486 μs N = 540結果→492 μs(最後!理論開始工作:)。 那麼,爲什麼在實踐中這些簡單的計算,從

    0熱度

    1回答

    我想知道通常存儲標籤的位置。我看到了一些標籤和數據一起存儲的標籤數據緩存,當存儲器地址有匹配的標籤時,只有標籤部分在訪問數據部分之前被訪問。另一方面,我看到完全分離的標籤和數據高速緩存,分離的有效位和其他位。 我想知道哪種方法是常用的,以及這兩種結構之間在性能或能效方面是否存在差異? 在此先感謝。