91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何使用CUDA使warp級編程安全有效

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-28 16:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NVIDIA GPUs 以 SIMT (單指令,多線程)方式執(zhí)行稱為 warps 的線程組。許多 CUDA 程序通過利用 warp 執(zhí)行來獲得高性能。在這個博客中,我們將展示如何使用 CUDA 9 中引入的原語,使您的 warp 級編程安全有效。

扭曲級別基本體

NVIDIA GPUs 和 CUDA 編程模型采用一種稱為 SIMT (單指令,多線程)的執(zhí)行模型。 SIMT 擴(kuò)展了計算機(jī)體系結(jié)構(gòu)的 弗林分類學(xué) ,它根據(jù)指令和數(shù)據(jù)流的數(shù)量描述了四類體系結(jié)構(gòu)。作為 Flynn 的四個類之一, SIMD (單指令,多數(shù)據(jù))通常用于描述類似 GPUs 的體系結(jié)構(gòu)。但是 SIMD 和 SIMT 之間有一個微妙但重要的區(qū)別。在 SIMD 體系結(jié)構(gòu)中,同一個指令中有多個并行操作。 SIMD 通常使用帶有向量寄存器和執(zhí)行單元的處理器來實(shí)現(xiàn);標(biāo)量線程發(fā)出以 SIMD 方式執(zhí)行的向量指令。在 SIMT 體系結(jié)構(gòu)中,多線程向任意數(shù)據(jù)發(fā)出通用指令,而不是單線程發(fā)出應(yīng)用于數(shù)據(jù)向量的向量指令。

SIMT 對于可編程性的好處使得 NVIDIA 的 GPU 架構(gòu)師為這種架構(gòu)命名,而不是將其描述為 SIMD 。 NVIDIA GPUs 使用 SIMT 執(zhí)行 32 個并行線程的 warp ,這使得每個線程能夠訪問自己的寄存器,從不同的地址加載和存儲,并遵循不同的控制流路徑。 CUDA 編譯器和 GPU 一起工作,以確保 warp 的線程盡可能頻繁地一起執(zhí)行相同的指令序列,從而最大限度地提高性能。

雖然通過 warp 執(zhí)行獲得的高性能發(fā)生在場景后面,但是許多 CUDA 程序可以通過顯式 warp 級編程獲得更高的性能。并行程序通常使用集體通信操作,例如并行縮減和掃描。 CUDA C ++通過提供扭曲級基元和合作群集合來支持這樣的集合運(yùn)算。合作組 collectives ( 在上一篇文章中描述過 )是在本文關(guān)注的 warp 原語之上實(shí)現(xiàn)的。

Part of a warp-level parallel reduction using shfl_down_sync().

使用 shfl _ down _ sync ()進(jìn)行扭曲級別并行減少的一部分。

清單 1 顯示了一個使用 warp 級別原語的示例。它使用 __shfl_down_sync() 執(zhí)行樹縮減來計算扭曲中每個線程持有的 val 變量的總和。在第一個環(huán)的末尾, val 包含第一個線程的和。

__match_all_sync

活動掩碼查詢:返回一個 32 位掩碼,指示扭曲中的哪些線程與當(dāng)前正在執(zhí)行的線程處于活動狀態(tài)。

__activemask

線程同步:同步扭曲中的線程并提供內(nèi)存邊界。

__syncwarp

請看

同步數(shù)據(jù)交換

每個“同步數(shù)據(jù)交換”原語在一個 warp 中的一組線程之間執(zhí)行一個集體操作。例如,清單 2 顯示了其中的三個。調(diào)用 __shfl_sync() 或 __shfl_down_sync() 的每個線程都從同一個 warp 中的線程接收數(shù)據(jù),而調(diào)用 __ballot_sync() 的每個線程都會接收一個位掩碼,該掩碼表示 warp 中為謂詞參數(shù)傳遞真值的所有線程。

int __shfl_sync(unsigned mask, int val, int src_line, int width=warpSize);

int __shfl_down_sync(unsigned mask, int var, unsigned detla,

                     int width=warpSize);

int __ballot_sync(unsigned mask, int predicate);

參與調(diào)用每個原語的線程集是使用 32 位掩碼指定的,這是這些原語的第一個參數(shù)。所有參與線程必須同步,集體操作才能正常工作。因此,如果線程尚未同步,這些原語將首先同步線程。

一個常見的問題是“對于mask參數(shù),我應(yīng)該使用什么?”. 可以將遮罩視為扭曲中應(yīng)參與集體操作的線程集。這組線程由程序邏輯決定,通常可以通過程序流中早期的某些分支條件來計算。以清單 1 中的縮減代碼為例。假設(shè)我們要計算一個數(shù)組input[],的所有元素的總和,該數(shù)組的大小NUM_ELEMENTS小于線程塊中的線程數(shù)。我們可以使用清單 3 中的方法。

unsigned mask = __ballot_sync(FULL_MASK, threadIdx.x < NUM_ELEMENTS);

if (threadIdx.x < NUM_ELEMENTS) {

    val = input[threadIdx.x];

    for (int offset = 16; offset > 0; offset /= 2)

        val += __shfl_down_sync(mask, val, offset);

    …

}

代碼使用條件thread.idx.x < NUM_ELEMENTS來確定線程是否將參與縮減。__ballot_sync()用于計算__shfl_down_sync()操作的成員掩碼。__ballot_sync()本身使用FULL_MASK0xffffffff表示 32 個線程),因?yàn)槲覀兗僭O(shè)所有線程都將執(zhí)行它。

在 Volta 和更高版本的 GPU 架構(gòu)中,數(shù)據(jù)交換原語可以用于線程發(fā)散的分支:在這種分支中, warp 中的一些線程采用不同于其他線程的路徑。清單 4 顯示了一個示例,其中一個 warp 中的所有線程都從第 0 行的線程獲得val的值。偶數(shù)和奇數(shù)編號的線程采用if語句的不同分支。

if (threadIdx.x % 2) {

    val += __shfl_sync(FULL_MASK, val, 0);

…

}

else {

val += __shfl_sync(FULL_MASK, val, 0);

…

}

在最新(和將來 )的 Volta 的 GPU 上,您可以運(yùn)行使用 warp 同步原語的庫函數(shù),而不必?fù)?dān)心函數(shù)是否在線程發(fā)散分支中被調(diào)用。

活動掩碼查詢

__activemask() 返回調(diào)用扭曲中所有當(dāng)前活動線程的 32 位 unsigned int 掩碼。換句話說,它顯示了在其 warp 中的線程也在執(zhí)行相同的 __activemask() 的調(diào)用線程。這對于我們稍后解釋的:機(jī)會扭曲級編程”技術(shù)以及調(diào)試和理解程序行為非常有用。

但是,正確使用 __activemask() 很重要。清單 5 說明了一個不正確的用法。代碼嘗試執(zhí)行與清單 4 中所示相同的總和縮減,但是它在分支內(nèi)部使用了 __activemask() ,而不是在分支之前使用 __ballot_sync() 來計算掩碼。這是不正確的,因?yàn)檫@將導(dǎo)致部分和而不是總和。 CUDA 執(zhí)行模型并不能保證將分支連接在一起的所有線程將一起執(zhí)行 __activemask() 。正如我們將要解釋的那樣,不能保證隱式鎖步驟的執(zhí)行。

//

// Incorrect use of __activemask()

//

if (threadIdx.x < NUM_ELEMENTS) {

    unsigned mask = __activemask();

    val = input[threadIdx.x];

    for (int offset = 16; offset > 0; offset /= 2)

        val += __shfl_down_sync(mask, val, offset);

    …

}

翹曲同步

當(dāng) warp 中的線程需要執(zhí)行比數(shù)據(jù)交換原語提供的更復(fù)雜的通信或集體操作時,可以使用 __syncwarp() 原語來同步 warp 中的線程。它類似于 __syncthreads() 原語(同步線程塊中的所有線程),但粒度更細(xì)。

void __syncwarp(unsigned mask=FULL_MASK);

__syncwarp()原語使執(zhí)行線程等待,直到mask中指定的所有線程都執(zhí)行了__syncwarp()(使用相同的mask),然后再繼續(xù)執(zhí)行。它還提供了一個記憶柵欄,允許線程在調(diào)用原語之前和之后通過內(nèi)存進(jìn)行通信。

清單 6 顯示了一個在 warp 中的線程之間混亂矩陣元素所有權(quán)的示例。

float val = get_value(…);

__shared__ float smem[4][8];



//   0  1  2  3  4  5  6  7

//   8  9 10 11 12 13 14 15

//  16 17 18 19 20 21 22 23

//  24 25 26 27 28 29 30 31

int x1 = threadIdx.x % 8;

int y1 = threadIdx.x / 8;



//   0  4  8 12 16 20 24 28

//   1  5 10 13 17 21 25 29

//   2  6 11 14 18 22 26 30

//   3  7 12 15 19 23 27 31

int x2= threadIdx.x / 4;

int y2 = threadIdx.x % 4;



smem[y1][x1] = val;

__syncwarp();

val = smem[y2][x2];



use(val);

假設(shè)使用了一維線程塊(即 threadIdx . y 始終為 0 )。在代碼的開頭,一個 warp 中的每個線程都擁有一個 4 × 8 矩陣的元素,該矩陣具有行主索引。換句話說,第 0 車道擁有[0][0]車道,第 1 車道擁有[0][1]。每個線程將其值存儲到共享內(nèi)存中 4 × 8 數(shù)組的相應(yīng)位置。然后使用__syncwarp()來確保在每個線程從數(shù)組中的一個轉(zhuǎn)置位置讀取數(shù)據(jù)之前,所有線程都完成了存儲。最后, warp 中的每一個線程都擁有一個矩陣元素,列主索引為: lane0 擁有[0][0], lane1 擁有[1][0]。

確保__syncwarp()將共享內(nèi)存讀寫分開,以避免爭用情況。清單 7 演示了共享內(nèi)存中樹和縮減的錯誤用法。在每兩個__syncwarp()調(diào)用之間有一個共享內(nèi)存讀取,然后是共享內(nèi)存寫入。 CUDA 編程模型不能保證所有的讀操作都會在所有的寫操作之前執(zhí)行,因此存在競爭條件。

unsigned tid = threadIdx.x;



// Incorrect use of __syncwarp()

shmem[tid] += shmem[tid+16]; __syncwarp();

shmem[tid] += shmem[tid+8];  __syncwarp();

shmem[tid] += shmem[tid+4];  __syncwarp();

shmem[tid] += shmem[tid+2];  __syncwarp();

shmem[tid] += shmem[tid+1];  __syncwarp();

清單 8 通過插入額外的__syncwarp()調(diào)用修復(fù)了競爭條件。 CUDA 編譯器可以在最終生成的代碼中省略一些同步指令,這取決于目標(biāo)體系結(jié)構(gòu)(例如,在預(yù)伏打體系結(jié)構(gòu)上)。

unsigned tid = threadIdx.x;

int v = 0;



v += shmem[tid+16]; __syncwarp();

shmem[tid] = v;     __syncwarp();

v += shmem[tid+8];  __syncwarp();

shmem[tid] = v;     __syncwarp();

v += shmem[tid+4];  __syncwarp();

shmem[tid] = v;     __syncwarp();

v += shmem[tid+2];  __syncwarp();

shmem[tid] = v;     __syncwarp();

v += shmem[tid+1];  __syncwarp();

shmem[tid] = v;

在最新的 Volta (和 future ) GPUs 上,也可以在線程發(fā)散分支中使用 __syncwarp() 來同步兩個分支的線程,但是一旦它們從原語返回,線程就會再次發(fā)散。請參見清單 13 中的示例。

機(jī)會主義翹曲水平編程

正如我們在同步數(shù)據(jù)交換一節(jié)中所示,在同步數(shù)據(jù)交換原語中使用的成員關(guān)系 mask 通常是在程序流中的分支條件之前計算的。在許多情況下,程序需要沿著程序流傳遞掩碼;例如,在函數(shù)內(nèi)部使用扭曲級原語時,作為函數(shù)參數(shù)。如果要在庫函數(shù)內(nèi)使用 warp 級編程,但不能更改函數(shù)接口,則這可能很困難。

有些計算可以使用碰巧一起執(zhí)行的任何線程。我們可以使用一種稱為機(jī)會主義翹曲級別編程的技術(shù),如下例所示。

// increment the value at ptr by 1 and return the old value

__device__ int atomicAggInc(int *ptr) {

    int mask = __match_any_sync(__activemask(), (unsigned long long)ptr);

    int leader = __ffs(mask) – 1;    // select a leader

    int res;

    if(lane_id() == leader)                  // leader does the update

        res = atomicAdd(ptr, __popc(mask));

    res = __shfl_sync(mask, res, leader);    // get leader’s old value

    return res + __popc(mask & ((1 << lane_id()) – 1)); //compute old value

}

atomicAggInc() 以原子方式將 ptr 指向的值遞增 1 并返回舊值。它使用 atomicAdd() 函數(shù),這可能會引發(fā)爭用。為了減少爭用, atomicAggInc 用 per-warp atomicAdd() 替換了 per-thread atomicAdd() 操作。第 4 行中的 __activemask() 在 warp 中查找將要執(zhí)行原子操作的線程集。[zx7]的傳入線程具有相同的值,這些線程的[zx7]與[ez3]的值相同。每個組選擇一個引導(dǎo)線程(第 5 行),該線程為整個組執(zhí)行 atomicAdd() (第 8 行)。每個線程從 atomicAdd() 返回的前導(dǎo)(第 9 行)獲取舊值。第 10 行計算并返回當(dāng)前線程調(diào)用函數(shù)而不是 atomicAggInc 時從 atomicInc() 獲得的舊值。

隱式 Warp 同步編程是不安全的

CUDA 版本 9 。 0 之前的工具箱提供了一個(現(xiàn)在是遺留的) warp 級別基本體版本。與 CUDA 9 原語相比,傳統(tǒng)原語不接受 mask 參數(shù)。例如, int __any(int predicate) 是 int __any_sync(unsigned mask, int predicate) 的舊版本。

如前所述, mask 參數(shù)指定扭曲中必須參與原語的線程集。如果掩碼指定的線程在執(zhí)行過程中尚未同步,則新基元將執(zhí)行扭曲線程級內(nèi)同步。

傳統(tǒng)的 warp 級別原語不允許程序員指定所需的線程,也不執(zhí)行同步。因此,必須參與翹曲級別操作的線程不是由 CUDA 程序顯式表示的。這樣一個程序的正確性取決于隱式 warp 同步行為,這種行為可能從一個硬件體系結(jié)構(gòu)改變到另一個,從一個 CUDA 工具包版本到另一個(例如,由于編譯器優(yōu)化的變化),甚至從一個運(yùn)行時執(zhí)行到另一個。這種隱式 warp 同步編程是不安全的,可能無法正常工作。

例如,在下面的代碼中,假設(shè) warp 中的所有 32 個線程一起執(zhí)行第 2 行。第 4 行的 if 語句導(dǎo)致線程發(fā)散,奇數(shù)線程在第 5 行調(diào)用 foo() ,偶數(shù)線程在第 8 行調(diào)用 bar() 。

// Assuming all 32 threads in a warp execute line 1 together.

assert(__ballot(1) == FULL_MASK);

int result;

if (thread_id % 2) {

    result = foo();

}

else {

    result = bar();

}

unsigned ballot_result = __ballot(result);

CUDA 編譯器和硬件將嘗試在第 10 行重新聚合線程,以獲得更好的性能。但這一重新收斂是不保證的。因此,ballot_result可能不包含來自所有 32 個線程的投票結(jié)果。

__ballot()之前的第 10 行調(diào)用新的__syncwarp()原語,如清單 11 所示,也不能解決這個問題。這又是隱式翹曲同步編程。它假設(shè)同一個扭曲中的線程一旦同步,將保持同步,直到下一個線程發(fā)散分支為止。盡管這通常是真的,但在 CUDA 編程模型中并不能保證它。

__syncwarp();

unsigned ballot_result = __ballot(result);

正確的修復(fù)方法是使用清單 12 中的__ballot_sync()。

unsigned ballot_result = __ballot_sync(FULL_MASK, result);

一個常見的錯誤是假設(shè)在舊的 warp 級別原語之前和/或之后調(diào)用__syncwarp()在功能上等同于調(diào)用原語的sync版本。例如,__syncwarp(); v = __shfl(0); __syncwarp();__shfl_sync(FULL_MASK, 0)相同嗎?答案是否定的,有兩個原因。首先,如果在線程發(fā)散分支中使用序列,那么__shfl(0)不會由所有線程一起執(zhí)行。清單 13 顯示了一個示例。第 3 行和第 7 行的__syncwarp()將確保在執(zhí)行第 4 行或第 8 行之前, warp 中的所有線程都會調(diào)用foo()。一旦線程離開__syncwarp(),奇數(shù)線程和偶數(shù)線程將再次發(fā)散。因此,第 4 行的__shfl(0)將得到一個未定義的值,因?yàn)楫?dāng)?shù)?4 行執(zhí)行時,第 0 行將不活動。__shfl_sync(FULL_MASK, 0)可以在線程發(fā)散的分支中使用,沒有這個問題。

v = foo();

if (threadIdx.x % 2) {

    __syncwarp();

    v = __shfl(0);       // L3 will get undefined result because lane 0

    __syncwarp();        // is not active when L3 is executed. L3 and L6

} else {                 // will execute divergently.

    __syncwarp();

    v = __shfl(0);

    __syncwarp();

}

第二,即使所有線程一起調(diào)用序列, CUDA 執(zhí)行模型也不能保證線程在離開__syncwarp()后保持收斂,如清單 14 所示。不能保證隱式鎖步驟的執(zhí)行。請記住,線程收斂只在顯式同步的扭曲級別原語中得到保證。

assert(__activemask() == FULL_MASK); // assume this is true

__syncwarp();

assert(__activemask() == FULL_MASK); // this may fail

因?yàn)槭褂盟鼈兛赡軙?dǎo)致不安全的程序,所以從 CUDA 9 。 0 開始就不推薦使用舊的 warp 級別原語。
更新舊版曲速級編程

如果您的程序使用舊的 warp 級原語或任何形式的隱式 warp 同步編程(例如在沒有同步的 warp 線程之間通信),您應(yīng)該更新代碼以使用原語的 sync 版本。您可能還需要重新構(gòu)造代碼以使用 Cooperative Groups ,這提供了更高級別的抽象以及諸如多塊同步等新功能。

使用翹曲級別原語最棘手的部分是找出要使用的成員掩碼。我們希望以上幾節(jié)能給你一個好主意,從哪里開始,注意什么。以下是建議列表:

不要只使用 FULL_MASK (即對于 32 個線程使用 0xffffffff )作為 mask 值。如果不是所有的線程都能根據(jù)程序邏輯到達(dá)原語,那么使用 FULL_MASK 可能會導(dǎo)致程序掛起。

不要只使用 __activemask() 作為掩碼值。 __activemask() 告訴您調(diào)用函數(shù)時哪些線程會收斂,這可能與您希望在集合操作中的情況不同。

分析程序邏輯并理解成員資格要求。根據(jù)程序邏輯提前計算掩碼。

如果您的程序執(zhí)行機(jī)會主義 warp 同步編程,請使用“ detective ”函數(shù),如 __activemask() 和 __match_all_sync() 來找到正確的掩碼。

使用 __syncwarp() 來分離與內(nèi)部扭曲相關(guān)的操作。不要假設(shè)執(zhí)行鎖步。

最后一個訣竅。如果您現(xiàn)有的 CUDA 程序在 Volta architecture GPUs 上給出了不同的結(jié)果,并且您懷疑差異是由 Volta 新的獨(dú)立線程調(diào)度 引起的,它可能會改變翹曲同步行為,您可能需要使用 nvcc 選項 -arch=compute_60 -code=sm_70 重新編譯程序。這樣的編譯程序選擇使用 Pascal 的線程調(diào)度。當(dāng)有選擇地使用時,它可以幫助更快地確定罪魁禍?zhǔn)啄K,允許您更新代碼以避免隱式 warp 同步編程。


Volta 獨(dú)立的線程調(diào)度允許交叉執(zhí)行來自不同分支的語句。這使得執(zhí)行細(xì)粒度并行算法成為可能,其中 warp 中的線程可以同步和通信。

關(guān)于作者

Yuan Lin 是 NVIDIA 編譯團(tuán)隊的首席工程師。他對所有使程序更高效、編程更高效的技術(shù)感興趣。在加入 NVIDIA 之前,他是 Sun Microsystems 的一名高級職員工程師。

Vinod Grover 是 CUDA C ++編譯器團(tuán)隊 NVIDIA 的主管。在此之前,他曾在微軟和太陽微系統(tǒng)公司擔(dān)任各種研究、工程和管理職務(wù)。

審核編輯:郭婷

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

    關(guān)注

    14

    文章

    5594

    瀏覽量

    109731
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5194

    瀏覽量

    135450
  • CUDA
    +關(guān)注

    關(guān)注

    0

    文章

    127

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    NVIDIA CUDA Tile 是基于 GPU 的編程模型,其設(shè)計目標(biāo)是為 NVIDIA Tensor Cores 提供可移植性,從而釋放 GPU 的極限性能。CUDA Tile 的一大優(yōu)勢是允許開發(fā)者基于其構(gòu)建自定義的 DS
    的頭像 發(fā)表于 02-10 10:31 ?243次閱讀

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

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

    GPU與汽車安全有何關(guān)聯(lián)?

    汽車行業(yè)正在經(jīng)歷自電子技術(shù)應(yīng)用于汽車以來最深刻的變革。車輛正朝著軟件定義、智能網(wǎng)聯(lián)、AI驅(qū)動和持續(xù)迭代的方向演進(jìn)。這一轉(zhuǎn)型帶來了前所未有的新功能,同時也引入了更高層級的網(wǎng)絡(luò)安全與功能安全風(fēng)險。GPU
    的頭像 發(fā)表于 01-12 13:21 ?826次閱讀
    GPU與汽車<b class='flag-5'>安全有</b>何關(guān)聯(lián)?

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

    Tile-based 并行編程的虛擬指令集,使開發(fā)者能夠在更高層級編寫算法,而無需關(guān)心底層專用硬件(如 Tensor Cores)的復(fù)雜細(xì)節(jié)。
    的頭像 發(fā)表于 12-24 10:17 ?466次閱讀
    NVIDIA <b class='flag-5'>CUDA</b> Tile的創(chuàng)新之處、工作原理以及使用方法

    請問CW32L是如何提供3程序安全防護(hù)?

    芯源的安全低功耗CW32L MCU是如何提供3程序安全防護(hù)的,采用了哪些手段?
    發(fā)表于 12-24 08:12

    在Python中借助NVIDIA CUDA Tile簡化GPU編程

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

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

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

    看不見的安全防線:信而泰儀表如何驗(yàn)證零信任有效

    導(dǎo)語:零信任- 數(shù)字化轉(zhuǎn)型的安全基石 在數(shù)字化轉(zhuǎn)型浪潮中,企業(yè)網(wǎng)絡(luò)邊界日益模糊,遠(yuǎn)程辦公、多云環(huán)境、移動設(shè)備和第三方協(xié)同成為常態(tài),傳統(tǒng)安全架構(gòu)已難以應(yīng)對無處不在的接入挑戰(zhàn)和愈發(fā)復(fù)雜的內(nèi)部威脅。傳統(tǒng)
    發(fā)表于 09-09 15:33

    ADI解讀機(jī)器人控制系統(tǒng)中的安全風(fēng)險和有效安全措施 為機(jī)器人技術(shù)的未來發(fā)展筑牢安全防線

    本文探討了機(jī)器人控制系統(tǒng)中的安全風(fēng)險和有效安全措施。文中介紹了工業(yè)安全標(biāo)準(zhǔn),并分析了滿足工業(yè)安全標(biāo)準(zhǔn)所需達(dá)到的基本要求。
    的頭像 發(fā)表于 08-11 11:27 ?1.2w次閱讀
    ADI解讀機(jī)器人控制系統(tǒng)中的<b class='flag-5'>安全</b>風(fēng)險和<b class='flag-5'>有效</b><b class='flag-5'>安全</b>措施 為機(jī)器人技術(shù)的未來發(fā)展筑牢<b class='flag-5'>安全</b>防線

    硅片的 TTV,Bow, Warp,TIR 等參數(shù)定義

    引言 在半導(dǎo)體制造領(lǐng)域,硅片作為核心基礎(chǔ)材料,其質(zhì)量參數(shù)對芯片性能和生產(chǎn)良率有著重要影響。TTV、Bow、Warp、TIR 等參數(shù)是衡量硅片質(zhì)量與特性的關(guān)鍵指標(biāo)。本文將對這些參數(shù)進(jìn)行詳細(xì)定義與闡述
    的頭像 發(fā)表于 07-01 09:55 ?4259次閱讀
    硅片的 TTV,Bow, <b class='flag-5'>Warp</b>,TIR 等參數(shù)定義

    wafer晶圓幾何形貌測量系統(tǒng):厚度(THK)翹曲度(Warp)彎曲度(Bow)等數(shù)據(jù)測量

    在先進(jìn)制程中,厚度(THK)翹曲度(Warp)彎曲度(Bow)三者共同決定了晶圓的幾何完整性,是良率提升和成本控制的核心參數(shù)。通過WD4000晶圓幾何形貌測量系統(tǒng)在線檢測,可減少其對芯片性能的影響。
    發(fā)表于 05-28 11:28 ?2次下載

    wafer晶圓幾何形貌測量系統(tǒng):厚度(THK)翹曲度(Warp)彎曲度(Bow)等數(shù)據(jù)測量

    在先進(jìn)制程中,厚度(THK)翹曲度(Warp)彎曲度(Bow)三者共同決定了晶圓的幾何完整性,是良率提升和成本控制的核心參數(shù)。通過WD4000晶圓幾何形貌測量系統(tǒng)在線檢測,可減少其對芯片性能的影響。
    的頭像 發(fā)表于 05-23 14:27 ?1416次閱讀
    wafer晶圓幾何形貌測量系統(tǒng):厚度(THK)翹曲度(<b class='flag-5'>Warp</b>)彎曲度(Bow)等數(shù)據(jù)測量

    Leadway電源模塊的使能信號是如何作用的

    /5V)時,模塊輸出電源至電機(jī)驅(qū)動器,啟動電機(jī)運(yùn)行;低電平則切斷供電。 l 低電平有效:部分型號可能采用反向邏輯,需根據(jù)模塊手冊確認(rèn)。 2、安全保護(hù)聯(lián)動 Leadway電源模塊的使能信號可與驅(qū)動器
    發(fā)表于 05-15 09:38

    當(dāng)電車變成“巨型充電寶”,如何安全有效放電?BOBC測試給答案

    雙向OBC是實(shí)現(xiàn)車載外放電的核心組件,其可靠性直接影響用電安全。致遠(yuǎn)儀器PSA6000和PSB8000具備高精度參數(shù)控制能力,不僅滿足OBC測試關(guān)鍵指標(biāo)且超越行業(yè)標(biāo)準(zhǔn),為新能源汽車的安全外放電提供
    的頭像 發(fā)表于 05-14 11:30 ?690次閱讀
    當(dāng)電車變成“巨型充電寶”,如何<b class='flag-5'>安全有效</b>放電?BOBC測試給答案

    直流充電安全測試負(fù)載方案解析

    反接等),覆蓋國標(biāo)GB/T 18487.1規(guī)定的安全測試項目。 測試精度要求高 絕緣電阻檢測需達(dá)到±1%精度(0-10MΩ范圍),漏電流檢測靈敏度≤1mA。 動態(tài)安全保護(hù)驗(yàn)證 要求負(fù)載系統(tǒng)在μs時間內(nèi)
    發(fā)表于 03-13 14:38