chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)使用CUDA GPU共享內(nèi)存

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:Mark Harris ? 2022-04-11 10:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

共享內(nèi)存是編寫(xiě)優(yōu)化良好的 CUDA 代碼的一個(gè)強(qiáng)大功能。共享內(nèi)存的訪問(wèn)比全局內(nèi)存訪問(wèn)快得多,因?yàn)樗挥谛酒?。因?yàn)楣蚕韮?nèi)存由線程塊中的線程共享,它為線程提供了一種協(xié)作機(jī)制。利用這種線程協(xié)作使用共享內(nèi)存的一種方法是啟用全局內(nèi)存合并,如本文中的數(shù)組反轉(zhuǎn)所示。通過(guò)使用 CUDA GPU 共享內(nèi)存,我們可以在 GPU 上執(zhí)行所有讀操作。在下一篇文章中,我將通過(guò)使用共享內(nèi)存來(lái)優(yōu)化矩陣轉(zhuǎn)置來(lái)繼續(xù)我們的討論。


在 上一篇文章 中,我研究了如何將一組線程訪問(wèn)的全局內(nèi)存合并到一個(gè)事務(wù)中,以及對(duì)齊和跨步如何影響 CUDA 各代硬件的合并。對(duì)于最新版本的 CUDA 硬件,未對(duì)齊的數(shù)據(jù)訪問(wèn)不是一個(gè)大問(wèn)題。然而,不管 CUDA 硬件是如何產(chǎn)生的,在全局內(nèi)存中大步前進(jìn)都是有問(wèn)題的,而且在許多情況下似乎是不可避免的,例如在訪問(wèn)多維數(shù)組中沿第二個(gè)和更高維的元素時(shí)。但是,在這種情況下,如果我們使用共享內(nèi)存,就可以合并內(nèi)存訪問(wèn)。在我在下一篇文章中向您展示如何避免跨越全局內(nèi)存之前,首先我需要詳細(xì)描述一下共享內(nèi)存。

共享內(nèi)存

因?yàn)樗瞧系?,共享?nèi)存比本地和全局內(nèi)存快得多。實(shí)際上,共享內(nèi)存延遲大約比未緩存的全局內(nèi)存延遲低 100 倍(前提是線程之間沒(méi)有內(nèi)存沖突,我們將在本文后面討論這個(gè)問(wèn)題)。共享內(nèi)存是按線程塊分配的,因此塊中的所有線程都可以訪問(wèn)同一共享內(nèi)存。線程可以訪問(wèn)由同一線程塊中的其他線程從全局內(nèi)存加載的共享內(nèi)存中的數(shù)據(jù)。此功能(與線程同步結(jié)合)有許多用途,例如用戶管理的數(shù)據(jù)緩存、高性能的協(xié)作并行算法(例如并行縮減),以及在不可能實(shí)現(xiàn)全局內(nèi)存合并的情況下促進(jìn)全局內(nèi)存合并。

線程同步

在線程之間共享數(shù)據(jù)時(shí),我們需要小心避免爭(zhēng)用情況,因?yàn)殡m然塊中的線程并行運(yùn)行 邏輯上 ,但并非所有線程都可以同時(shí)執(zhí)行 身體上 。假設(shè)兩個(gè)線程 A 和 B 分別從全局內(nèi)存加載一個(gè)數(shù)據(jù)元素并將其存儲(chǔ)到共享內(nèi)存中。然后,線程 A 想從共享內(nèi)存中讀取 B 的元素,反之亦然。我們假設(shè) A 和 B 是兩個(gè)不同翹曲中的線。如果 B 在 A 嘗試讀取它之前還沒(méi)有完成它的元素的編寫(xiě),我們就有一個(gè)競(jìng)爭(zhēng)條件,它可能導(dǎo)致未定義的行為和錯(cuò)誤的結(jié)果。

為了保證并行線程協(xié)作時(shí)的正確結(jié)果,必須同步線程。 CUDA 提供了一個(gè)簡(jiǎn)單的屏障同步原語(yǔ) __syncthreads() 。一個(gè)線程的執(zhí)行只能在其塊中的所有線程都執(zhí)行了 __syncthreads() 之后通過(guò) __syncthreads() 繼續(xù)執(zhí)行。因此,我們可以通過(guò)在存儲(chǔ)到共享內(nèi)存之后和從共享內(nèi)存加載任何線程之前調(diào)用 __syncthreads() 來(lái)避免上面描述的競(jìng)爭(zhēng)條件。需要注意的是,在發(fā)散代碼中調(diào)用 __syncthreads() 是未定義的,并且可能導(dǎo)致死鎖,線程塊中的所有線程都必須在同一點(diǎn)調(diào)用 __syncthreads() 。

共享內(nèi)存示例

使用 Clara 變量 D __shared__ 指定說(shuō)明符在 CUDA C / C ++設(shè)備代碼中聲明共享內(nèi)存。在內(nèi)核中聲明共享內(nèi)存有多種方法,這取決于內(nèi)存量是在編譯時(shí)還是在運(yùn)行時(shí)已知的。下面的完整代碼( 在 GitHub 上提供 )演示了使用共享內(nèi)存的各種方法。

#include __global__ void staticReverse(int *d, int n)
{ __shared__ int s[64]; int t = threadIdx.x; int tr = n-t-1; s[t] = d[t]; __syncthreads(); d[t] = s[tr];
} __global__ void dynamicReverse(int *d, int n)
{ extern __shared__ int s[]; int t = threadIdx.x; int tr = n-t-1; s[t] = d[t]; __syncthreads(); d[t] = s[tr];
} int main(void)
{ const int n = 64; int a[n], r[n], d[n]; for (int i = 0; i < n; i++) { a[i] = i; r[i] = n-i-1; d[i] = 0; } int *d_d; cudaMalloc(&d_d, n * sizeof(int)); // run version with static shared memory cudaMemcpy(d_d, a, n*sizeof(int), cudaMemcpyHostToDevice); staticReverse<<<1,n>>>(d_d, n); cudaMemcpy(d, d_d, n*sizeof(int), cudaMemcpyDeviceToHost); for (int i = 0; i < n; i++) if (d[i] != r[i]) printf("Error: d[%d]!=r[%d] (%d, %d)n", i, i, d[i], r[i]); // run dynamic shared memory version cudaMemcpy(d_d, a, n*sizeof(int), cudaMemcpyHostToDevice); dynamicReverse<<<1,n,n*sizeof(int)>>>(d_d, n); cudaMemcpy(d, d_d, n * sizeof(int), cudaMemcpyDeviceToHost); for (int i = 0; i < n; i++) if (d[i] != r[i]) printf("Error: d[%d]!=r[%d] (%d, %d)n", i, i, d[i], r[i]);?

}此代碼使用共享內(nèi)存反轉(zhuǎn) 64 元素?cái)?shù)組中的數(shù)據(jù)。這兩個(gè)內(nèi)核非常相似,只是在共享內(nèi)存數(shù)組的聲明方式和內(nèi)核的調(diào)用方式上有所不同。

靜態(tài)共享內(nèi)存

如果共享內(nèi)存數(shù)組大小在編譯時(shí)已知,就像在 staticReverse 內(nèi)核中一樣,那么我們可以顯式地聲明一個(gè)該大小的數(shù)組,就像我們對(duì)數(shù)組 s 所做的那樣。

__global__ void staticReverse(int *d, int n)
{ __shared__ int s[64]; int t = threadIdx.x; int tr = n-t-1; s[t] = d[t]; __syncthreads(); d[t] = s[tr];

}在這個(gè)內(nèi)核中, ttr 是分別表示原始順序和反向順序的兩個(gè)索引。線程使用語(yǔ)句 s[t] = d[t] 將數(shù)據(jù)從全局內(nèi)存復(fù)制到共享內(nèi)存,然后在兩行之后使用語(yǔ)句 d[t] = s[tr] 完成反轉(zhuǎn)。但是在執(zhí)行最后一行之前,每個(gè)線程訪問(wèn)共享內(nèi)存中由另一個(gè)線程寫(xiě)入的數(shù)據(jù),請(qǐng)記住,我們需要通過(guò)調(diào)用 __syncthreads() 來(lái)確保所有線程都已完成對(duì)共享內(nèi)存的加載。

在這個(gè)例子中使用共享內(nèi)存的原因是為了在舊的 CUDA 設(shè)備(計(jì)算能力 1 . 1 或更早版本)上促進(jìn)全局內(nèi)存合并。由于全局內(nèi)存總是通過(guò)線性對(duì)齊索引 t 訪問(wèn),所以讀寫(xiě)都可以實(shí)現(xiàn)最佳的全局內(nèi)存合并。反向索引 tr 僅用于訪問(wèn)共享內(nèi)存,它不具有全局內(nèi)存的順序訪問(wèn)限制以獲得最佳性能。共享內(nèi)存的唯一性能問(wèn)題是銀行沖突,我們將在后面討論。(請(qǐng)注意,在計(jì)算能力為 1 . 2 或更高版本的設(shè)備上,內(nèi)存系統(tǒng)甚至可以將反向索引存儲(chǔ)完全合并到全局內(nèi)存中。但是這種技術(shù)對(duì)于其他訪問(wèn)模式仍然有用,我將在下一篇文章中展示。)

動(dòng)態(tài)共享內(nèi)存

本例中的其他三個(gè)內(nèi)核使用動(dòng)態(tài)分配的共享內(nèi)存,當(dāng)編譯時(shí)共享內(nèi)存的數(shù)量未知時(shí),可以使用該內(nèi)存。在這種情況下,必須使用可選的第三個(gè)執(zhí)行配置參數(shù)指定每個(gè)線程塊的共享內(nèi)存分配大小(以字節(jié)為單位),如下面的摘錄所示。

dynamicReverse<<<1, n, n*sizeof(int)>>>(d_d, n);

動(dòng)態(tài)共享內(nèi)存內(nèi)核 dynamicReverse() 使用未大小化的外部數(shù)組語(yǔ)法 extern shared int s[] 聲明共享內(nèi)存數(shù)組(注意空括號(hào)和 extern 說(shuō)明符的使用)。大小在內(nèi)核啟動(dòng)時(shí)由第三個(gè)執(zhí)行配置參數(shù)隱式確定。內(nèi)核代碼的其余部分與 staticReverse() 內(nèi)核相同。

如果在一個(gè)內(nèi)核中需要多個(gè)動(dòng)態(tài)大小的數(shù)組怎么辦?您必須像前面一樣聲明一個(gè) extern 非大小數(shù)組,并使用指向它的指針將其劃分為多個(gè)數(shù)組,如下面的摘錄所示。

extern __shared__ int s[];
int *integerData = s; // nI ints
float *floatData = (float*)&integerData[nI]; // nF floats
char *charData = (char*)&floatData[nF]; // nC chars

在內(nèi)核中指定啟動(dòng)所需的總內(nèi)存。

myKernel<<>>(...);

共享內(nèi)存庫(kù)沖突

為了實(shí)現(xiàn)并發(fā)訪問(wèn)的高內(nèi)存帶寬,共享內(nèi)存被分成大小相等的內(nèi)存模塊(庫(kù)),這些模塊可以同時(shí)訪問(wèn)。因此,任何跨越 b 不同內(nèi)存組的 n 地址的內(nèi)存負(fù)載或存儲(chǔ)都可以同時(shí)進(jìn)行服務(wù),從而產(chǎn)生的有效帶寬是單個(gè)存儲(chǔ)庫(kù)帶寬的 b 倍。

但是,如果多個(gè)線程的請(qǐng)求地址映射到同一個(gè)內(nèi)存庫(kù),則訪問(wèn)將被序列化。硬件根據(jù)需要將沖突內(nèi)存請(qǐng)求拆分為多個(gè)獨(dú)立的無(wú)沖突請(qǐng)求,將有效帶寬減少一個(gè)與沖突內(nèi)存請(qǐng)求數(shù)量相等的因子。一個(gè)例外情況是,一個(gè) warp 中的所有線程都使用同一個(gè)共享內(nèi)存地址,從而導(dǎo)致廣播。計(jì)算能力 2 . 0 及更高版本的設(shè)備具有多播共享內(nèi)存訪問(wèn)的額外能力,這意味著在一個(gè) warp 中通過(guò)任意數(shù)量的線程對(duì)同一個(gè)位置的多個(gè)訪問(wèn)同時(shí)進(jìn)行。

為了最小化內(nèi)存沖突,了解內(nèi)存地址如何映射到內(nèi)存庫(kù)是很重要的。共享存儲(chǔ)庫(kù)被組織成這樣,連續(xù)的 32 位字被分配給連續(xù)的存儲(chǔ)庫(kù),帶寬是每個(gè)庫(kù)每個(gè)時(shí)鐘周期 32 位。對(duì)于計(jì)算能力為 1 . x 的設(shè)備, warp 大小為 32 個(gè)線程,庫(kù)的數(shù)量為 16 個(gè)。一個(gè) warp 的共享內(nèi)存請(qǐng)求被分為一個(gè)對(duì) warp 前半部分的請(qǐng)求和一個(gè)對(duì) warp 后半部分的請(qǐng)求。請(qǐng)注意,如果每個(gè)內(nèi)存庫(kù)只有一個(gè)內(nèi)存位置被半個(gè)線程訪問(wèn),則不會(huì)發(fā)生庫(kù)沖突。

對(duì)于計(jì)算能力為 2 . 0 的設(shè)備, warp 大小是 32 個(gè)線程,而 bank 的數(shù)量也是 32 個(gè)。 warp 的共享內(nèi)存請(qǐng)求不會(huì)像計(jì)算能力為 1 . x 的設(shè)備那樣被拆分,這意味著 warp 前半部分的線程和同一 warp 后半部分的線程之間可能會(huì)發(fā)生庫(kù)沖突。

計(jì)算能力為 3 . x 的設(shè)備具有可配置的存儲(chǔ)大小,可以使用 CUDA Devicsetsharedmeconfig() 將其設(shè)置為四個(gè)字節(jié)( CUDA SharedMemBankSizeFourByte ,默認(rèn)值)或八個(gè)字節(jié)( cudaSharedMemBankSizeEightByte) 。將存儲(chǔ)大小設(shè)置為 8 字節(jié)有助于避免訪問(wèn)雙精度數(shù)據(jù)時(shí)的共享內(nèi)存庫(kù)沖突。

配置共享內(nèi)存量

在計(jì)算能力為 2 . x 和 3 . x 的設(shè)備上,每個(gè)多處理器都有 64KB 的片上內(nèi)存,可以在一級(jí)緩存和共享內(nèi)存之間進(jìn)行分區(qū)。對(duì)于計(jì)算能力為 2 . x 的設(shè)備,有兩個(gè)設(shè)置: 48KB 共享內(nèi)存/ 16KB 一級(jí)緩存和 16KB 共享內(nèi)存/ 48KB 一級(jí)緩存。默認(rèn)情況下,使用 48KB 共享內(nèi)存設(shè)置。這可以在運(yùn)行時(shí) API 期間使用 cudaDeviceSetCacheConfig() 為所有內(nèi)核配置,也可以使用 cudaFuncSetCacheConfig() 在每個(gè)內(nèi)核的基礎(chǔ)上進(jìn)行配置。它們接受以下三個(gè)選項(xiàng)之一: cudaFuncCachePreferNone 、 cudaFuncCachePreferSharedcudaFuncCachePreferL1 。驅(qū)動(dòng)程序?qū)⒆裱付ǖ氖走x項(xiàng),除非內(nèi)核每個(gè)線程塊需要比指定配置中可用的共享內(nèi)存更多的共享內(nèi)存。計(jì)算能力為 3 . x 的設(shè)備允許使用選項(xiàng) cudaFuncCachePreferEqual 獲得 32KB 共享內(nèi)存/ 32kbl1 緩存的第三個(gè)設(shè)置。

關(guān)于作者

Mark Harris 是 NVIDIA 杰出的工程師,致力于 RAPIDS 。 Mark 擁有超過(guò) 20 年的 GPUs 軟件開(kāi)發(fā)經(jīng)驗(yàn),從圖形和游戲到基于物理的模擬,到并行算法和高性能計(jì)算。當(dāng)他還是北卡羅來(lái)納大學(xué)的博士生時(shí),他意識(shí)到了一種新生的趨勢(shì),并為此創(chuàng)造了一個(gè)名字: GPGPU (圖形處理單元上的通用計(jì)算)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    20323

    瀏覽量

    254608
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5682

    瀏覽量

    110086
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    內(nèi)存要取代GPU?HBM之父警告:以英偉達(dá)GPU為核心的架構(gòu)要被顛覆

    主板和CPU成為了主角。 ? 而最近“HBM之父”金正浩教授也語(yǔ)出驚人,提出未來(lái)內(nèi)存將成為主角:“GPU和CPU將會(huì)被集成到內(nèi)存(HBM和HBF)里,淪為內(nèi)存中的一個(gè)組件”。 ? 倒反
    的頭像 發(fā)表于 04-03 09:54 ?6611次閱讀
    <b class='flag-5'>內(nèi)存</b>要取代<b class='flag-5'>GPU</b>?HBM之父警告:以英偉達(dá)<b class='flag-5'>GPU</b>為核心的架構(gòu)要被顛覆

    借助NVIDIA CUDA Tile IR后端推進(jìn)OpenAI Triton的GPU編程

    NVIDIA CUDA Tile 是基于 GPU 的編程模型,其設(shè)計(jì)目標(biāo)是為 NVIDIA Tensor Cores 提供可移植性,從而釋放 GPU 的極限性能。CUDA Tile 的
    的頭像 發(fā)表于 02-10 10:31 ?492次閱讀

    如何在NVIDIA CUDA Tile中編寫(xiě)高性能矩陣乘法

    本博文是系列課程的一部分,旨在幫助開(kāi)發(fā)者學(xué)習(xí) NVIDIA CUDA Tile 編程,掌握構(gòu)建高性能 GPU 內(nèi)核的方法,并以矩陣乘法作為核心示例。
    的頭像 發(fā)表于 01-22 16:43 ?5241次閱讀
    如何在NVIDIA <b class='flag-5'>CUDA</b> Tile中編寫(xiě)高性能矩陣乘法

    NVIDIA RTX PRO 5000 Blackwell GPU的深度評(píng)測(cè)

    需求進(jìn)行了優(yōu)化設(shè)計(jì)。無(wú)論是 CUDA 核心計(jì)算性能、實(shí)時(shí)渲染能力,還是 AI 推理效率,亦或顯存帶寬與容量的顯著提升,均使得新一代 RTX PRO 5000 Blackwell GPU 能夠輕松應(yīng)對(duì)更復(fù)雜、更嚴(yán)苛的工作負(fù)載。
    的頭像 發(fā)表于 01-06 09:51 ?3797次閱讀
    NVIDIA RTX PRO 5000 Blackwell <b class='flag-5'>GPU</b>的深度評(píng)測(cè)

    NVIDIA CUDA Tile的創(chuàng)新之處、工作原理以及使用方法

    NVIDIA CUDA 13.1 推出 NVIDIA CUDA Tile,這是自 2006 年 NVIDIA CUDA 平臺(tái)發(fā)明以來(lái),最大的一次技術(shù)進(jìn)步。這一令人振奮的創(chuàng)新引入了一套面向
    的頭像 發(fā)表于 12-24 10:17 ?621次閱讀
    NVIDIA <b class='flag-5'>CUDA</b> Tile的創(chuàng)新之處、工作原理以及使用方法

    在Python中借助NVIDIA CUDA Tile簡(jiǎn)化GPU編程

    NVIDIA CUDA 13.1 版本新增了基于 Tile 的GPU 編程模式。它是自 CUDA 發(fā)明以來(lái) GPU 編程最核心的更新之一。借助 GP
    的頭像 發(fā)表于 12-13 10:12 ?1377次閱讀
    在Python中借助NVIDIA <b class='flag-5'>CUDA</b> Tile簡(jiǎn)化<b class='flag-5'>GPU</b>編程

    NVIDIA CUDA 13.1版本的新增功能與改進(jìn)

    NVIDIA CUDA 13.1 是自 CUDA 二十年前發(fā)明以來(lái),規(guī)模最大、內(nèi)容最全面的一次更新。
    的頭像 發(fā)表于 12-13 10:08 ?2415次閱讀

    如何通過(guò)交替式幾何處理實(shí)現(xiàn)更優(yōu)的多核?GPU?擴(kuò)展

    在理論上,通過(guò)增加更多GPU核心來(lái)提升性能似乎很簡(jiǎn)單:核心越多,性能越強(qiáng)。但在實(shí)踐中,這是圖形架構(gòu)領(lǐng)域最棘手的挑戰(zhàn)之一。雖然某些工作負(fù)載因其獨(dú)立特性能實(shí)現(xiàn)良好擴(kuò)展,但另一些工作負(fù)載(尤其是幾何
    的頭像 發(fā)表于 12-01 10:12 ?764次閱讀
    如何<b class='flag-5'>通過(guò)</b>交替式幾何處理實(shí)現(xiàn)更優(yōu)的多核?<b class='flag-5'>GPU</b>?擴(kuò)展

    如何看懂GPU架構(gòu)?一分鐘帶你了解GPU參數(shù)指標(biāo)

    GPU架構(gòu)參數(shù)如CUDA核心數(shù)、顯存帶寬、TensorTFLOPS、互聯(lián)方式等,并非“冰冷的數(shù)字”,而是直接關(guān)系設(shè)備能否滿足需求、如何發(fā)揮最大價(jià)值、是否避免資源浪費(fèi)等問(wèn)題的核心要素。本篇文章將全面
    的頭像 發(fā)表于 10-09 09:28 ?1475次閱讀
    如何看懂<b class='flag-5'>GPU</b>架構(gòu)?一分鐘帶你了解<b class='flag-5'>GPU</b>參數(shù)指標(biāo)

    RTOS怎么實(shí)現(xiàn)共享內(nèi)存?

    K230的RTOS支持POSIX標(biāo)準(zhǔn)的共享內(nèi)存嗎 我嘗試使用卻失敗 還是說(shuō)需要源碼部分配置的開(kāi)啟才可以使用 求教大佬
    發(fā)表于 08-04 08:06

    aicube的n卡gpu索引該如何添加?

    請(qǐng)問(wèn)有人知道aicube怎樣才能讀取n卡的gpu索引呢,我已經(jīng)安裝了cuda和cudnn,在全局的py里添加了torch,能夠調(diào)用gpu,當(dāng)還是只能看到默認(rèn)的gpu0,顯示不了
    發(fā)表于 07-25 08:18

    高性能緩存設(shè)計(jì):如何解決緩存?zhèn)?b class='flag-5'>共享問(wèn)題

    緩存行,引發(fā)無(wú)效化風(fēng)暴,使看似無(wú)關(guān)的變量操作拖慢整體效率。本文從緩存結(jié)構(gòu)原理出發(fā),通過(guò)實(shí)驗(yàn)代碼復(fù)現(xiàn)偽共享問(wèn)題(耗時(shí)從3709ms優(yōu)化至473ms),解析其底層機(jī)制;同時(shí)深入剖析高性能緩存庫(kù) Caffeine 如何通過(guò)
    的頭像 發(fā)表于 07-01 15:01 ?869次閱讀
    高性能緩存設(shè)計(jì):如何解決緩存?zhèn)?b class='flag-5'>共享</b>問(wèn)題

    黑芝麻智能一芯多域零拷貝共享內(nèi)存技術(shù):破解車(chē)載大數(shù)據(jù)傳輸效能困局

    通過(guò) 零拷貝共享內(nèi)存技術(shù) ,黑芝麻智能解決車(chē)載多域間大數(shù)據(jù)傳輸?shù)难舆t與資源消耗問(wèn)題。核心技術(shù)包括 全局內(nèi)存管理單元 和 dmabuf機(jī)制優(yōu)化 ,顯著降低CPU負(fù)載與DDR帶寬占用,推動(dòng)
    發(fā)表于 06-23 17:53 ?1753次閱讀
    黑芝麻智能一芯多域零拷貝<b class='flag-5'>共享</b><b class='flag-5'>內(nèi)存</b>技術(shù):破解車(chē)載大數(shù)據(jù)傳輸效能困局

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問(wèn)題性能優(yōu)化一

    出現(xiàn)崩潰和卡頓的情況。因此,主動(dòng)減少應(yīng)用內(nèi)存的占用對(duì)于整個(gè)系統(tǒng)至關(guān)重要。通過(guò)減少應(yīng)用內(nèi)存的占用,可以有效提高應(yīng)用的性能和響應(yīng)速度,節(jié)省系統(tǒng)資源,讓設(shè)備的運(yùn)行效率更高,延長(zhǎng)設(shè)備的續(xù)航時(shí)間。開(kāi)發(fā)者應(yīng)該在
    發(fā)表于 05-21 11:27