衡阳派盒市场营销有限公司

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

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

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

CUDA 6中的統(tǒng)一內(nèi)存模型

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 作者:Linuxer ? 2020-07-02 14:08 ? 次閱讀

CUDA介紹

CUDA(Compute Unified Device Architecture,統(tǒng)一計(jì)算設(shè)備架構(gòu))是由NVIDIA公司于 2006 年所推出的一種并行計(jì)算技術(shù),是該公司對(duì)于GPGPU( General-purpose computing on graphics processing units, 圖形處理單元上的通用計(jì)算 )技術(shù)的正式命名。通過(guò)此技術(shù),用戶(hù)可在GPU上進(jìn)行通用計(jì)算,而開(kāi)發(fā)人員可以使用C語(yǔ)言來(lái)為CUDA架構(gòu)編寫(xiě)程序 。相比CPU,擁有CUDA技術(shù)的GPU成本不高,但計(jì)算性能很突出。本文中提到的是2014年發(fā)布的CUDA6, CUDA6最重要的新特性就是支持統(tǒng)一內(nèi)存模型(Unified Memory)。

注:文中經(jīng)常出現(xiàn)“主機(jī)和設(shè)備”,本文的“主機(jī)”特指CPU、“設(shè)備”特指GPU。

CUDA 6中的統(tǒng)一內(nèi)存模型

NVIDIA在CUDA 6中引入了統(tǒng)一內(nèi)存模型 ( Unified Memory ),這是CUDA歷史上最重要的編程模型改進(jìn)之一。在當(dāng)今典型的PC或群集節(jié)點(diǎn)中,CPU和GPU的內(nèi)存在物理上是獨(dú)立的,并通過(guò)PCI-Express總線(xiàn)相連。在CUDA6之前, 這是程序員最需要注意的地方。CPU和GPU之間共享的數(shù)據(jù)必須在兩個(gè)內(nèi)存中都分配,并由程序直接地在兩個(gè)內(nèi)存之間來(lái)回復(fù)制。這給CUDA編程帶來(lái)了很大難度。

統(tǒng)一內(nèi)存模型創(chuàng)建了一個(gè)托管內(nèi)存池(a pool of managed memory),該托管內(nèi)存池由CPU和GPU共享,跨越了CPU與GPU之間的鴻溝。CPU和GPU都可以使用單指針訪(fǎng)問(wèn)托管內(nèi)存。關(guān)鍵是系統(tǒng)會(huì)自動(dòng)地在主機(jī)和設(shè)備之間遷移在統(tǒng)一內(nèi)存中分配的數(shù)據(jù),從而使那些看起來(lái)像CPU內(nèi)存中的代碼在CPU上運(yùn)行,而另一些看起來(lái)像GPU內(nèi)存中的代碼在GPU上運(yùn)行。

在本文中,我將向您展示統(tǒng)一內(nèi)存模型如何顯著簡(jiǎn)化GPU加速型應(yīng)用程序中的內(nèi)存管理。下圖顯示了一個(gè)非常簡(jiǎn)單的示例。兩種代碼都從磁盤(pán)加載文件,對(duì)其中的字節(jié)進(jìn)行排序,然后在釋放內(nèi)存之前使用CPU上已排序的數(shù)據(jù)。右側(cè)的代碼使用CUDA和統(tǒng)一內(nèi)存模型在GPU上運(yùn)行。和左邊代碼唯一的區(qū)別是,右邊代碼由GPU來(lái)啟動(dòng)一個(gè)內(nèi)核(并在啟動(dòng)后進(jìn)行同步),并使用新的API cudaMallocManaged() 在統(tǒng)一內(nèi)存模型中為加載的文件分配空間。

CUDA 6中的統(tǒng)一內(nèi)存模型

如果您曾經(jīng)編程過(guò)CUDA C / C++,那么毫無(wú)疑問(wèn),右側(cè)的代碼會(huì)為您帶來(lái)震撼。請(qǐng)注意,我們只分配了一次內(nèi)存,并且只有一個(gè)指針指向主機(jī)和設(shè)備上的可訪(fǎng)問(wèn)數(shù)據(jù)。我們可以直接地將文件的內(nèi)容讀取到已分配的內(nèi)存,然后就可以將內(nèi)存的指針傳遞給在設(shè)備上運(yùn)行的CUDA內(nèi)核。然后,在等待內(nèi)核處理完成之后,我們可以再次從CPU訪(fǎng)問(wèn)數(shù)據(jù)。CUDA運(yùn)行時(shí)隱藏了所有復(fù)雜性,自動(dòng)將數(shù)據(jù)遷移到訪(fǎng)問(wèn)它的地方。

統(tǒng)一內(nèi)存模型提供了什么

統(tǒng)一內(nèi)存模型為程序員提供了兩大捷徑

簡(jiǎn)化編程、簡(jiǎn)化內(nèi)存模型

統(tǒng)一內(nèi)存模型通過(guò)使設(shè)備內(nèi)存管理(device memory management)成為一項(xiàng)可選的優(yōu)化,而不是一項(xiàng)硬性的要求,從而降低了CUDA平臺(tái)上并行編程的門(mén)檻。借助統(tǒng)一內(nèi)存模型,程序員現(xiàn)在可以直接開(kāi)發(fā)并行的CUDA內(nèi)核,而不必?fù)?dān)心分配和復(fù)制設(shè)備內(nèi)存的細(xì)節(jié)。這將降低在CUDA平臺(tái)上編程的學(xué)習(xí)成本,也使得將現(xiàn)有代碼移植到GPU的工作變得容易。但這些好處不僅有利于初學(xué)者。我在本文后面的示例中將展示統(tǒng)一內(nèi)存模型如何使復(fù)雜的數(shù)據(jù)結(jié)構(gòu)更易于與設(shè)備代碼一起使用,以及它與C++結(jié)合時(shí)的強(qiáng)大威力。

通過(guò)數(shù)據(jù)局部性原理提高性能

通過(guò)在CPU和GPU之間按需遷移數(shù)據(jù),統(tǒng)一內(nèi)存模型可以滿(mǎn)足GPU上本地?cái)?shù)據(jù)的性能需求,同時(shí)還提供了易于使用的全局共享數(shù)據(jù)。這個(gè)功能的復(fù)雜細(xì)節(jié)被 CUDA驅(qū)動(dòng)程序和運(yùn)行時(shí)隱藏了,以確保應(yīng)用程序代碼更易于編寫(xiě)。遷移的關(guān)鍵是從每個(gè)處理器獲得全部帶寬。250 GB / s的GDDR5內(nèi)存對(duì)于保證開(kāi)普勒( Kepler )GPU的計(jì)算吞吐量至關(guān)重要。

值得注意的是, 一個(gè)經(jīng)過(guò)精心調(diào)優(yōu)的CUDA程序,即使用流(streams)和 cudaMemcpyAsync來(lái)有效地將執(zhí)行命令與數(shù)據(jù)傳輸重疊的程序,會(huì)比僅使用統(tǒng)一內(nèi)存模型的CUDA程序更好 。可以理解的是:CUDA運(yùn)行時(shí)從來(lái)沒(méi)有像程序員那樣提供何處需要數(shù)據(jù)或何時(shí)需要數(shù)據(jù)的信息!CUDA程序員仍然可以顯式地訪(fǎng)問(wèn)設(shè)備內(nèi)存分配和異步內(nèi)存拷貝,以?xún)?yōu)化數(shù)據(jù)管理和CPU-GPU并發(fā)機(jī)制 。首先,統(tǒng)一內(nèi)存模型提高了生產(chǎn)力,它為并行計(jì)算提供了更順暢的入口,同時(shí)它又不影響高級(jí)用戶(hù)的任何CUDA功能。

統(tǒng)一內(nèi)存模型 vs 統(tǒng)一虛擬尋址?

自CUDA4起,CUDA就支持統(tǒng)一虛擬尋址(UVA),并且盡管統(tǒng)一內(nèi)存模型依賴(lài)于UVA,但它們并不是一回事。UVA為 系統(tǒng)中的所有內(nèi)存提供了單個(gè)虛擬內(nèi)存地址空間,無(wú)論指針位于系統(tǒng)中的何處,無(wú)論在設(shè)備內(nèi)存(在相同或不同的GPU上)、主機(jī)內(nèi)存、或片上共享存儲(chǔ)器。UVA也允許 cudaMemcpy在不指定輸入和輸出參數(shù)確切位置的情況下使用。UVA啟用“零復(fù)制(Zero-Copy)” 內(nèi)存,“零復(fù)制”內(nèi)存是固定的主機(jī)內(nèi)存,可由設(shè)備上的代碼通過(guò)PCI-Express總線(xiàn)直接訪(fǎng)問(wèn),而無(wú)需使用 memcpy。零復(fù)制為統(tǒng)一內(nèi)存模型提供了一些便利,但是卻沒(méi)有提高性能,因?yàn)樗偸峭ㄟ^(guò)帶寬低而且延遲高的PCI-Express進(jìn)行訪(fǎng)問(wèn)。

UVA不會(huì)像統(tǒng)一內(nèi)存模型一樣自動(dòng)將數(shù)據(jù)從一個(gè)物理位置遷移到另一個(gè)物理位置。由于統(tǒng)一內(nèi)存模型能夠在主機(jī)和設(shè)備內(nèi)存之間的各級(jí)頁(yè)面自動(dòng)地遷移數(shù)據(jù),因此它需要進(jìn)行大量的工程設(shè)計(jì),因?yàn)樗枰贑UDA運(yùn)行時(shí)(runtime)、設(shè)備驅(qū)動(dòng)程序、甚至OS內(nèi)核中添加新功能。以下示例旨在讓您領(lǐng)會(huì)到這一點(diǎn)。示例:消除深層副本

統(tǒng)一內(nèi)存模型的主要優(yōu)勢(shì)在于,在訪(fǎng)問(wèn)GPU內(nèi)核中的結(jié)構(gòu)化數(shù)據(jù)時(shí),無(wú)需進(jìn)行深度復(fù)制(deep copies),從而簡(jiǎn)化了異構(gòu)計(jì)算內(nèi)存模型。如下圖所示,將包含指針的數(shù)據(jù)結(jié)構(gòu)從CPU傳遞到GPU要求進(jìn)行“深度復(fù)制”。

下面以struct dataElem為例。

struct dataElem {int prop1;int prop2;char *name;}

要在設(shè)備上使用此結(jié)構(gòu)體,我們必須復(fù)制結(jié)構(gòu)體本身及其數(shù)據(jù)成員,然后復(fù)制該結(jié)構(gòu)體指向的所有數(shù)據(jù),然后更新該結(jié)構(gòu)體。副本中的所有指針。這導(dǎo)致下面的復(fù)雜代碼,這些代碼只是將數(shù)據(jù)元素傳遞給內(nèi)核函數(shù)。

void launch(dataElem *elem) { dataElem *d_elem;char *d_name;

int namelen = strlen(elem-》name) + 1;

// Allocate storage for struct and name cudaMalloc(&d_elem, sizeof(dataElem)); cudaMalloc(&d_name, namelen);

// Copy up each piece separately, including new “name” pointer value cudaMemcpy(d_elem, elem, sizeof(dataElem), cudaMemcpyHostToDevice); cudaMemcpy(d_name, elem-》name, namelen, cudaMemcpyHostToDevice); cudaMemcpy(&(d_elem-》name), &d_name, sizeof(char*), cudaMemcpyHostToDevice);

// Finally we can launch our kernel, but CPU & GPU use different copies of “elem” Kernel《《《 。.. 》》》(d_elem);}

可以想象,在CPU和GPU代碼之間分享復(fù)雜的數(shù)據(jù)結(jié)構(gòu)所需的額外主機(jī)端代碼對(duì)生產(chǎn)率有嚴(yán)重影響。統(tǒng)一內(nèi)存模型中分配我們的“ dataElem”結(jié)構(gòu)可消除所有多余的設(shè)置代碼,這些代碼與主機(jī)代碼被相同的指針操作,留給我們的就只有內(nèi)核啟動(dòng)了。這是一個(gè)很大的進(jìn)步!

void launch(dataElem *elem) { kernel《《《 。.. 》》》(elem);}

但統(tǒng)一內(nèi)存模型不僅大幅降低了代碼復(fù)雜性。還可以做一些以前無(wú)法想象的事情。讓我們看另一個(gè)例子。

Example: CPU/GPU Shared Linked Lists

鏈表是一種非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),但是由于它們本質(zhì)上是由指針組成的嵌套數(shù)據(jù)結(jié)構(gòu),因此在內(nèi)存空間之間傳遞它們非常復(fù)雜。如果沒(méi)有統(tǒng)一內(nèi)存模型,則無(wú)法在CPU和GPU之間分享鏈表。唯一的選擇是在零拷貝內(nèi)存(被pin住的主機(jī)內(nèi)存)中分配鏈表,這意味著GPU的訪(fǎng)問(wèn)受限于PCI-express性能。通過(guò)在統(tǒng)一內(nèi)存模型中分配鏈表數(shù)據(jù),設(shè)備代碼可以正常使用GPU上的指針,從而發(fā)揮設(shè)備內(nèi)存的全部性能。程序可以維護(hù)單鏈表,并且無(wú)論在主機(jī)或設(shè)備中都可以添加和刪除鏈表元素。

將具有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的代碼移植到GPU上曾經(jīng)是一項(xiàng)艱巨的任務(wù),但是統(tǒng)一內(nèi)存模型使此操作變得非常容易。我希望統(tǒng)一內(nèi)存模型能夠?yàn)镃UDA程序員帶來(lái)巨大的生產(chǎn)力提升。

Unified Memory with C++

統(tǒng)一內(nèi)存模型確實(shí)在C++數(shù)據(jù)結(jié)構(gòu)中大放異彩。C++通過(guò)帶有拷貝構(gòu)造函數(shù)(copy constructors)的類(lèi)來(lái)簡(jiǎn)化深度復(fù)制問(wèn)題。拷貝構(gòu)造函數(shù)是一個(gè)知道如何創(chuàng)建類(lèi)所對(duì)應(yīng)對(duì)象的函數(shù),拷貝構(gòu)造函數(shù)為對(duì)象的成員分配空間并從其他對(duì)象復(fù)制值過(guò)來(lái)。C++還允許 new和 delete這倆個(gè)內(nèi)存管理運(yùn)算符被重載。這意味著我們可以創(chuàng)建一個(gè)基類(lèi),我們將其稱(chēng)為 Managed,它在重載的 new運(yùn)算符內(nèi)部使用 cudaMallocManaged(),如以下代碼所示。

class Managed {public:void *operator new(size_t len) {void *ptr; cudaMallocManaged(&ptr, len); cudaDeviceSynchronize();return ptr; }

void operator delete(void *ptr) { cudaDeviceSynchronize(); cudaFree(ptr); }};

然后,我們可以讓 String類(lèi)繼承 Managed類(lèi),并實(shí)現(xiàn)一個(gè)拷貝構(gòu)造函數(shù),該拷貝構(gòu)造函數(shù)為需要拷貝的字符串分配統(tǒng)一內(nèi)存。

// Deriving from “Managed” allows pass-by-referenceclass String : public Managed { int length; char *data;

public:// Unified memory copy constructor allows pass-by-value String (const String &s) { length = s.length; cudaMallocManaged(&data, length); memcpy(data, s.data, length); }

// 。..};

同樣,我們使我們的 dataElem類(lèi)也繼承 Managed。

// Note “managed” on this class, too.// C++ now handles our deep copiesclass dataElem : public Managed {public:int prop1;int prop2; String name;};

通過(guò)這些更改,C++的類(lèi)將在統(tǒng)一內(nèi)存中分配空間,并自動(dòng)處理深度復(fù)制。我們可以像分配任何C++的對(duì)象那樣在統(tǒng)一內(nèi)存中分配一個(gè) dataElem。

dataElem *data = new dataElem;

請(qǐng)注意,您需要確保樹(shù)中的每個(gè)類(lèi)都繼承自 Managed,否則您的內(nèi)存映射中會(huì)有一個(gè)漏洞。實(shí)際上,任何你想在CPU和GPU之間分享的內(nèi)容都應(yīng)該繼承 Managed。如果你傾向于對(duì)所有程序都簡(jiǎn)單地使用統(tǒng)一內(nèi)存模型,你可以在全局重載 new和 delete, 但這只在這種情況下有作用——你的程序中沒(méi)有僅被CPU訪(fǎng)問(wèn)的數(shù)據(jù)(即程序中的所有數(shù)據(jù)都被GPU訪(fǎng)問(wèn)),因?yàn)橹挥蠧PU數(shù)據(jù)時(shí)沒(méi)有必要遷移數(shù)據(jù)。

現(xiàn)在,我們可以選擇將對(duì)象傳遞給內(nèi)核函數(shù)了。如在C++中一樣,我們可以按值傳遞或按引用傳遞,如以下示例代碼所示。

// Pass-by-reference version__global__ void kernel_by_ref(dataElem &data) { 。.. }

// Pass-by-value version__global__ void kernel_by_val(dataElem data) { 。.. }

int main(void) { dataElem *data = new dataElem; 。..// pass data to kernel by reference kernel_by_ref《《《1,1》》》(*data);

// pass data to kernel by value -- this will create a copy kernel_by_val《《《1,1》》》(*data);}

多虧了統(tǒng)一內(nèi)存模型,深度復(fù)制、按值傳遞和按引用傳遞都可以正常工作。統(tǒng)一內(nèi)存模型為在GPU上運(yùn)行C++代碼提供了巨大幫助。

這篇文章的例子可以在Github上找到。

統(tǒng)一內(nèi)存模型的光明前景

CUDA 6中關(guān)于統(tǒng)一內(nèi)存模型的最令人興奮的事情之一就是它僅僅是個(gè)開(kāi)始。我們針對(duì)統(tǒng)一內(nèi)存模型有一個(gè)包括性能提升與特性的長(zhǎng)遠(yuǎn)規(guī)劃。我們的第一個(gè)發(fā)行版旨在使CUDA編程更容易,尤其是對(duì)于初學(xué)者而言。從CUDA 6開(kāi)始, cudaMemcpy()不再是必需的。通過(guò)使用 cudaMallocManaged(),您可以擁有一個(gè)指向數(shù)據(jù)的指針,并且可以在CPU和GPU之間共享復(fù)雜的C / C++數(shù)據(jù)結(jié)構(gòu)。這使編寫(xiě)CUDA程序變得容易得多,因?yàn)槟梢灾苯泳帉?xiě)內(nèi)核,而不是編寫(xiě)大量數(shù)據(jù)管理代碼并且要維護(hù)在主機(jī)和設(shè)備之間所有重復(fù)的數(shù)據(jù)。您仍然可以自由使用 cudaMemcpy()(特別是 cudaMemcpyAsync())來(lái)提高性能,但現(xiàn)在這不是一項(xiàng)要求,而是一項(xiàng)優(yōu)化。

CUDA的未來(lái)版本可能會(huì)通過(guò)添加數(shù)據(jù)預(yù)取和遷移提示來(lái)提高使用統(tǒng)一內(nèi)存模型的應(yīng)用程序的性能。我們還將增加對(duì)更多操作系統(tǒng)的支持。我們的下一代GPU架構(gòu)將帶來(lái)許多硬件改進(jìn),以進(jìn)一步提高性能和靈活性。
責(zé)任編輯:pj

聲明:本文內(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)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7145

    瀏覽量

    89584
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3055

    瀏覽量

    74334
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3637

    瀏覽量

    93988
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    拋棄8GB內(nèi)存,端側(cè)AI大模型加速內(nèi)存升級(jí)

    電子發(fā)燒友網(wǎng)報(bào)道(文/黃晶晶)端側(cè)AI大模型的到來(lái)在存儲(chǔ)市場(chǎng)產(chǎn)生了最直接的反應(yīng)。年初在我們對(duì)旗艦智能手機(jī)的存儲(chǔ)容量統(tǒng)計(jì),16GB內(nèi)存+512GB存儲(chǔ)成為幾乎所有旗艦機(jī)型都提供的選擇。畢竟AI大
    的頭像 發(fā)表于 11-03 00:02 ?4790次閱讀
    拋棄8GB<b class='flag-5'>內(nèi)存</b>,端側(cè)AI大<b class='flag-5'>模型</b>加速<b class='flag-5'>內(nèi)存</b>升級(jí)

    芯盾時(shí)代助力建科技統(tǒng)一身份認(rèn)證項(xiàng)目圓滿(mǎn)結(jié)項(xiàng)

    近日,芯盾時(shí)代承建的建科技集團(tuán)有限公司(簡(jiǎn)稱(chēng)“建科技”)統(tǒng)一身份認(rèn)證期項(xiàng)目已圓滿(mǎn)結(jié)項(xiàng),并成功進(jìn)入二期建設(shè)階段。 自項(xiàng)目啟動(dòng)以來(lái),芯盾時(shí)代憑借其專(zhuān)業(yè)的技術(shù)實(shí)力和豐富的項(xiàng)目經(jīng)驗(yàn),為
    的頭像 發(fā)表于 01-07 15:02 ?232次閱讀

    芯盾時(shí)代繼續(xù)深化建科技統(tǒng)一身份認(rèn)證平臺(tái)建設(shè)

    芯盾時(shí)代承建的建科技集團(tuán)有限公司(簡(jiǎn)稱(chēng)“建科技”)統(tǒng)一身份認(rèn)證期項(xiàng)目圓滿(mǎn)結(jié)項(xiàng),目前平臺(tái)運(yùn)行情況良好,獲得客戶(hù)的高度認(rèn)可。目前雙方已開(kāi)展二期建設(shè),芯盾時(shí)代將持續(xù)優(yōu)化
    的頭像 發(fā)表于 01-07 11:23 ?250次閱讀

    【「大模型啟示錄」閱讀體驗(yàn)】對(duì)大模型更深入的認(rèn)知

    的平衡,解釋得清清楚楚,讓我這個(gè)非專(zhuān)業(yè)人士也能明白大模型在實(shí)際應(yīng)用面臨的挑戰(zhàn)和限制,也對(duì)這些模型的復(fù)雜性和挑戰(zhàn)有了更深的理解。 而且,書(shū)中還提到了OpenAI的成功案例和CUDA
    發(fā)表于 12-20 15:46

    KerasHub統(tǒng)一、全面的預(yù)訓(xùn)練模型庫(kù)

    深度學(xué)習(xí)領(lǐng)域正在迅速發(fā)展,在處理各種類(lèi)型的任務(wù),預(yù)訓(xùn)練模型變得越來(lái)越重要。Keras 以其用戶(hù)友好型 API 和對(duì)易用性的重視而聞名,始終處于這動(dòng)向的前沿。Keras 擁有專(zhuān)用的內(nèi)容庫(kù),如用
    的頭像 發(fā)表于 12-20 10:32 ?171次閱讀

    CNN, RNN, GNN和Transformer模型統(tǒng)一表示和泛化誤差理論分析

    函數(shù)、參數(shù)調(diào)和函數(shù)和剩余函數(shù)。 我們先前的研究表明,RPN 在構(gòu)建不同復(fù)雜性、容量和完整性水平的模型方面具有很強(qiáng)的通用性,同時(shí)可以作為統(tǒng)一多種基礎(chǔ)模型(包括 PGM、核 SVM、MLP 和 KAN)的框架。 然而,先前的 RPN
    的頭像 發(fā)表于 12-06 11:31 ?483次閱讀
    CNN, RNN, GNN和Transformer<b class='flag-5'>模型</b>的<b class='flag-5'>統(tǒng)一</b>表示和泛化誤差理論分析

    虛擬內(nèi)存溢出該怎么處理 虛擬內(nèi)存在服務(wù)器的應(yīng)用

    在現(xiàn)代計(jì)算機(jī)系統(tǒng),虛擬內(nèi)存種重要的資源管理技術(shù),它允許系統(tǒng)使用硬盤(pán)空間來(lái)擴(kuò)展物理內(nèi)存的容量。然而,當(dāng)系統(tǒng)運(yùn)行的程序和進(jìn)程超出了物理內(nèi)存
    的頭像 發(fā)表于 12-04 09:49 ?282次閱讀

    【「大模型時(shí)代的基礎(chǔ)架構(gòu)」閱讀體驗(yàn)】+ 第、二章學(xué)習(xí)感受

    如下圖所示。無(wú)論是CPU還是GPU,所有運(yùn)算過(guò)程的中間結(jié)果都需要被保存到內(nèi)存,而TPU根本沒(méi)有將中間結(jié)果保存到內(nèi)存,而是在執(zhí)行完畢后直接將中間結(jié)果傳遞給下
    發(fā)表于 10-10 10:36

    統(tǒng)一多云管理平臺(tái)怎么用?

    的IT基礎(chǔ)設(shè)施管理功能,幫助企業(yè)在日益復(fù)雜的云計(jì)算環(huán)境實(shí)現(xiàn)高效管理和成本優(yōu)化,Rak小編統(tǒng)一多云管理平臺(tái)怎么用?
    的頭像 發(fā)表于 08-14 11:28 ?272次閱讀

    打破英偉達(dá)CUDA壁壘?AMD顯卡現(xiàn)在也能無(wú)縫適配CUDA

    電子發(fā)燒友網(wǎng)報(bào)道(文/梁浩斌)直以來(lái),圍繞CUDA打造的軟件生態(tài),是英偉達(dá)在GPU領(lǐng)域最大的護(hù)城河,尤其是隨著目前AI領(lǐng)域的發(fā)展加速,市場(chǎng)火爆,英偉達(dá)GPU+CUDA的開(kāi)發(fā)生態(tài)則更加穩(wěn)固,AMD
    的頭像 發(fā)表于 07-19 00:16 ?4890次閱讀

    在PyTorch搭建個(gè)最簡(jiǎn)單的模型

    在PyTorch搭建個(gè)最簡(jiǎn)單的模型通常涉及幾個(gè)關(guān)鍵步驟:定義模型結(jié)構(gòu)、加載數(shù)據(jù)、設(shè)置損失函數(shù)和優(yōu)化器,以及進(jìn)行模型訓(xùn)練和評(píng)估。
    的頭像 發(fā)表于 07-16 18:09 ?2193次閱讀

    軟件生態(tài)上超越CUDA,究竟有多難?

    神壇的,還是圍繞CUDA打造的系列軟件生態(tài)。 ? 英偉達(dá)——CUDA的絕對(duì)統(tǒng)治 ? 相信對(duì)GPU有過(guò)定了解的都知道,英偉達(dá)的最大護(hù)城河就是CUD
    的頭像 發(fā)表于 06-20 00:09 ?3793次閱讀

    Keil使用AC6編譯提示CUDA版本過(guò)高怎么解決?

    \' ArmClang: warning: Unknown CUDA version 10.2. Assuming the latest supported version 10.1
    發(fā)表于 04-11 07:56

    摩爾線(xiàn)程MUSA/MUSIFY與英偉達(dá)CUDA無(wú)依賴(lài),開(kāi)發(fā)者無(wú)憂(yōu)

    首先,摩爾線(xiàn)程MUSA/MUSIFY并不受到英偉達(dá)CUDA這項(xiàng)條款的限制,使用者可以放心地使用其相關(guān)內(nèi)容。MUSA即摩爾線(xiàn)程自行研發(fā),享有高度自主知識(shí)產(chǎn)權(quán)的全功能GPU先進(jìn)計(jì)算統(tǒng)一系統(tǒng)架構(gòu);
    的頭像 發(fā)表于 03-06 09:22 ?1408次閱讀

    物理內(nèi)存模型的演變

    內(nèi)存管理概述,主要是以L(fǎng)inux v2.6.11為例進(jìn)行分析的,但是計(jì)算技術(shù)在不斷發(fā)展,新的存儲(chǔ)架構(gòu)、新的指令集架構(gòu)、新的SoC架構(gòu)等都對(duì)物理內(nèi)存模型的抽象提出了更高要求。為此,必須
    的頭像 發(fā)表于 02-25 10:35 ?534次閱讀
    百家乐官网闲和庄| 百家乐官网大小技巧| 大发888pt| 涂山百家乐官网的玩法技巧和规则| 百家乐官网真人娱乐场| 大三巴娱乐城开户| 威尼斯人娱乐城好吗| 百家乐设备电子路| 百家乐网站那个好| 伯爵百家乐官网赌场娱乐网规则| 缅甸百家乐官网玩假吗| 易赢百家乐官网软件| 德州扑克官网| 百家乐园百乐彩| 百家乐六手变化混合赢家打| 至尊百家乐贺一航| 乐百家乐彩现金开户| 黄金城百家乐游戏| 财神百家乐娱乐城| 网上百家乐看牌器| 百家乐赢新全讯网| 百家乐怎么赢对子| 百家乐官网美国玩法| 百家乐官网赌场分析网| 百家乐官网游戏平台架设| 大港区| 缅甸百家乐官网赌| 在线百家乐官网电脑| 百家乐官网计划| 新锦江百家乐官网娱乐场开户注册 | 七胜百家乐官网赌场娱乐网规则| 百家乐官网真人博彩的玩法技巧和规则 | 缅甸百家乐博彩真假| 百家乐之三姐妹赌博机| 百家乐赌的是心态吗| 保时捷百家乐娱乐城| 赌场百家乐赢钱| 百家乐套装| 百家乐赌场优势| 百家乐赌场软件| 百家乐最新产品|