CHI協議學習

原始文檔:https://developer.arm.com/documentation/102407/0100/?lang=en

CHI 總線拓撲結構

在這里插入圖片描述
CHI總線拓撲是實現自定義的,可以是RING/MESH/CROSSBAR的類型;

  • RING 一般適用于中等規模芯片
  • MESH 一般適用于大規模芯片
  • CROSSBAR 一般適用于小規模芯片
    上面總線拓撲的選擇,一般會參考訪問延時和RN/SN數量

CHI cacheline狀態

在這里插入圖片描述
大的分類:

  • Valid/Invalid來描述cacheline的狀態是否有效;
  • Valid的cacheline,必須是Unique或者Shared的狀態;
    – unique就是只有這個cache中存在,其他人(這里指RN)的cache里面都沒有這個地址/數據,只有unique的狀態才能被寫;
    – shared表示RN自己手里有這個cacheline,但是其他人(RN)手里有沒有這個cacheline,不知道(可能有,也可能沒有);
  • Valid的cacheline,必須是clean或者dirty的狀態;
    – clean表示這個cacheline不負責更新數據到主存,由于其他人可能刷數據到主存,所以clean的cacheline數據可能和主存不同;
    – dirty指的是cahceline相對于主存已經被修改;當想把dirty的cacheline清掉時,要么把數據刷進主存,要么把dirty的責任轉給其他人(RN或者HN);
  • cacheline可以有partial或者empty的狀態:
    – empty的cacheline,里面沒有有效數據,但是RN有對應操作的權限/特性(比如UCE的cacheline,RN是可以直接寫這個cacheline,invalid的話,還要snoop別人);
    – partial狀態表示有一些數據是有效的(也可能全部有效或者全部無效);有可能因為先更新狀態但是數據還沒來,或者是數據先變了,但是狀態還沒變這種狀態cacheline被snoop時,CHI協議有額外的限制;

詳細的cacheline狀態:
Invalid(I)
cacheline是無效的(也就是這個cache沒有緩存這個地址/數據)

Unique Dirty(UD)
cacheline只存在于當前cache,認為相對于主存發生了修改;RN可以直接修改cacheline的數據(因為是Unique),如果收到snoop請求,必須把cacheline的數據給出去;

Unique Dirty Partial(UDP)
和UD的區別,一個是partial的狀態,另一個是被snoop的時候,不能直接把cacheline數據發給RN;

Shared Dirty(SD)
相對于主存有修改,并且有更新主存的責任;SD的cacheline也可能存在于其它人手里,但是其他人都是SC的狀態;Unique cacheline才能被寫,SD狀態怎么來的?有可能是snoop了別人的cacheline,或者dirty的責任傳遞到了這里;

Unique Clean(UC)
可以不用知會別人,直接修改cacheline數據;

Unique Clean Empty(UCE)
可以不用知會別人,直接修改cacheline數據;但是如果收到snoop的時候,不能給數據到home或者其他RN;

Shared Clean(SC)
可能存在于一個或多個cache里,也可能相對于主存有修改,但是這個cacheline evict的時候不負責刷主存;

CHI節點類型

有三大類節點:RN,HN,SN,另外還有一個MN;

  • RN節點細分:
    – RNF,全一致性節點,有一致性cache,并且響應snoop請求;
    – RNI,IO一致性節點,沒有一致性cache,不接受snoop;
    – RND,支持DVM的節點,相比RNI多了一個能接受DVM事務;

  • HN節點細分:
    – HNF,全一致性節點,排序一致性內存的訪問以及給RNF發送snoop請求;
    – HNI,非一致性HN,排序對于IO子系統的請求;
    – MN,處理RN發出的DVM事務,DVM事務有時也由HND來實現;

  • SN節點細分:
    – SNF連接到支持一致性內存空間的內存設備;
    – SNI連接IO外設或者非一致性內存;
    在這里插入圖片描述
    在這里插入圖片描述

CHI的SAM

CHI總線中每一個組件都有一個Node ID,CHI使用SAM負責物理地址到Node ID的轉換;
每個RN和HN都要有SAM;
在這里插入圖片描述
對于RN SAM的要求:

  • 必須完全描述整個系統的地址空間;
  • 沒有組件對應的地址空間,要映射到一個能返回錯誤響應的節點;
  • 所有RN的SAM必須是一致的,某個特定的地址只能去向特定的HN節點;

CHI通道

在這里插入圖片描述
SNP通道的約束:

  • 只有HNF和MN從SNP通道發起事務;
  • RNF SNP通道只接收SNP事務;
  • MN SNP通道只接收DVM事務;

CHI FLIT

FLIT就是數據包,下面是一個REQ Flit的示例:
在這里插入圖片描述
每個通道都有一個FLITV信號,為高時下拍FLIT有效;當發送方有接收方credit的時候才可以發送;LCRDV信號傳輸credit;
CHI在FLIT中定義了很多ID域段:

  • SrcID:用來路由FLIT,表示發送方的ID,每一個FLIT都要有SrcID;
  • TgtID:表示接收這個消息的節點ID,除了snoop的FLIT都需要TgtID(snoop發給誰是實現自定義的,snoop可以廣播,也可以由SF來管理到底發給誰);
  • TxnID:每個FLIT都需要,RN outstanding出去的事務必須有著唯一的TxnID,其位寬決定了RN能outstanding多少事務;
  • Opcode:REQ FLIT需要,表示傳輸類型,并且決定了事務結構(比如區分讀寫事務);
  • DBID:只存在于RSP或者數據FLIT,目標節點通過這個來分配寫數據buffer,并且可以要求一個完成響應來釋放buffer;
    – 對于寫,RN收到收方響應帶的DBID之后才能發寫數據;
    – 一些需要完成響應(表示RN已經收到了讀數據)的讀事務,也使用讀數FLIT據攜帶的DBID;
    在這里插入圖片描述

寫事務傳輸流示例

在這里插入圖片描述
在這里插入圖片描述
RN NodeID是1, SN NodeID是2:

  1. RN給SN發了個TxnID為3的寫請求;
  2. SN為這個事務分配一個可用的數據buffer(BDID 0),關聯到TxnID和SrcID;
  3. SN回DBIDResp給RN,TxnID為3,DBID為0;
  4. RN使用接收到的DBID 0和TxnID 3發給SN寫數據;
  5. 當傳輸完成的時候,SN的SBID 0對應的buffer空間可以釋放;

ReadNoSnp事務流示例

下面是ReadNoSnp事務;RN0發送ReadNoSnp請求,SN5提供讀數據:

  1. RN發送ReadNoSnp到ICN,TgtID是HN3:
    在這里插入圖片描述

  2. HN發ReadNoSnp到SN5來取回數據:
    在這里插入圖片描述

  3. SN5使用CompData響應把數據回給HN3:
    在這里插入圖片描述

  4. HN3把CompData給RN0:
    在這里插入圖片描述

WriteNoSnp事務流示例

下面是WriteNoSnp事務,RN0發給SN5:

  1. RN0發給HN3 WriteNoSnp事務:
    在這里插入圖片描述

  2. HN3返回CompDBIDResp事務給RN0,這表示HN3可以接收寫數據并且其它RN均可觀測到這個寫事務;
    在這里插入圖片描述

  3. 下面兩步是獨立的,可亂序:
    a. HN3把WriteNoSnp發到SN5,接收CompDBIDResp響應:
    在這里插入圖片描述
    b. RN0給HN3發送寫數據
    在這里插入圖片描述

  4. HN3接收到SN5的CompDBIDResp和RN0的寫數據以后,HN3給SN5發送寫數據:
    在這里插入圖片描述

CHI的完成響應

CHI使用完成響應來維護下面事務的順序:

  • RNF發出的事務
  • RNF事務導致的Snoop

完成響應確保snoop事務和他前面的RNF的一致性事務,只有一致性事務完成之后,snoop事務才能被接收;

HNF是維護cache一致性和保序的中心點,比如:一個RNF正在outstanding訪問一個特定的cacheline,如果其它RN的請求導致需要snoop這個cacheline,HNF會暫停后面的這個事務;當第一個RNF的一次性操作完了之后,它會給HNF發送完成響應;這樣HNF就可以讓后面的snoop繼續往下走;

不是所有事務都需要完成響應,請求FLIT中包含ExpCompAck來標識是否需要完成響應;

下面是發送需要完成響應的讀事務:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
snoop事務的CompAck
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
下面RN2要發一個地址A的ReadShared事務,這個時候HN3還沒有完成RN0的MakeUnique事務,所以ReadShared事務的snoop操作都被阻塞住;
在這里插入圖片描述
HN3完成第一個事務的snoop操作之后,給RN0發送Comp_UC消息;RN0給HN3發送CompAck消息;
此時HN3可以執行RN2的事務所產生的snoop操作;

端點順序和請求順序

  1. Endpoint Order:

    • 定義: 維持從單個RN到單一SN的事務順序。
    • 例子: 多個設備訪問一個可編程的寄存器區間,是Endpoint Order。
  2. Request Order:

    • 定義: 維持從單個RN到相同地址的事務順序。
    • 例子: 一個SN對于有交疊的non_cacheable空間(Normal NC, Device-GRE 和Device-nGRE)的多筆操作需要保序;Request Order需要保序的地址空間粒度,是實現自己定義的;

如果設置了Endpoint Order,也就意味著Request Order;

只有一部分事務可以使用Request Order和Endpoint Order:

  • ReadNoSnp和所有的ReadOnce事務
    – RN發起ReadNoSnp或者ReadOnce類型事務需要保序;
    – SN接收上述REQ,并回ReadReceipt消息,ReadReceipt表示可以發下一個需要保序的事務;
    – 發送ReadReceipt之后,SN需要保證執行保序(按照接收的事務順序);
  • WriteNoSnp和WriteUnique類型事務:
    – RN發起WriteNoSnp或者WriteUnique類型的事務要求保序;
    – SN響應DBIDResp表示他可以接收這個消息,他的databuffer可以接收寫數據,并且RN可以發送下一個保序的REQ;
    – 發完DBIDResp,SN需要保證執行保序;

保序舉例如下:

  1. RN給SN發起讀請求1,ReqOrder為1;
  2. RN給SN發讀請求2,ReqOrder為1,但是發不出去,因為前面這個讀還沒完成;
  3. SN回ReadReceipt給RN,表明第一個讀已經接收了;
  4. 下面兩個可以亂序:
    a. RN發讀請求2給SN;
    b. SN回給RN讀請求1的數據;

請求retry

有時候目標節點沒有資源來接收請求,為了不阻塞ICN,CHI提供了retry機制,SN需要依照請求來決定和記錄其對應的Pcrd;

可以使用不同類型的Pcrd來記錄不同的資源,比如讀寫使用分離的databuffer,那么每個buffer都可以使用不同的credit來標識;不同的Pcrd值是實現自定義的;

詳細流程不介紹了,看協議的2.3.8章節;

DVM事務

CHI使用DVM事務來維護虛擬內存;

DVM操作有如下事務:

  • TLB清除;
  • 指令cache清除
  • 分支預測清除
  • DVM同步

CHI中,所有的DVM事務分兩部分給MN,下面是順序要求:

  • 第一部分是給MN發DVMOp請求,請求FLIT使用地址域段來編碼操作選項;
  • 第二部分是當RN接收到MN的DBIDResp之后,通過data FLIT發送DVM消息;這一步攜帶了DVM事務目標地址;

當MN收齊了兩步DVM事務,MN給相關一致性domain的RN發起SVM snoop請求,也是分兩步,兩步必須使用相同的TxnID和opcode SnpDVMOp:

  • 第一部分使用地址域段編碼操作屬性和目標地址高位;
  • 第二部分使用地址域段發送剩余的地址;

上面兩部分是通過Address的bit[3]來標識;0表示第一步,1表示第二步;這兩步可以亂序;

DVM操作類型

CHI定義了兩類DVM事務:DVM Non-Sync和DVM Sync;這決定了RN是否先等當前操作完成再響應DVM snoop;

同步DVM只做同步動作;

非同步DVM非同步DVM就是 TLB/指令cache/分支預測 無效的操作;非同步DVM事務可以outstanding;

下面一個outstanding的例子:

  1. RNF/RND接收一個DVM Non-Sync的snoop操作;
  2. RNF/RND給MN發snoop響應,這只表明他接收了DVM事務,但不表示DVM事務的執行;
  3. MN給最初發DVM事務的RNF/RNI完成響應,表示別人已經收到DVM事務;

為了確保所有outstanding的DVM已經執行,看下面的例子:

  1. RNF發起同步DVM事務給MN,需要DVM Sync同步的outstanding的DVM事務,需要先回完成響應,才能發起DVM Sync;
  2. MN給所有的RNF和RND發起 DVM Sync的snoop;
  3. 每個RN需要確保前面收到的outstanding的DVM事務都已經執行;
  4. 所有RN給MN回snoop響應,表示所有的DVM操作已經執行完成;
  5. MN在給發DVM Sync的RN發起完成響應;

ARM核的DSB指令會產生DVM Sync操作,但是實現如果確認沒有需要同步的DVM操作時,可以不用發DVM Sync;

DVM操作流

下面是一個TLB無效的DVM事務 + DVM Sync;

  1. RN0給Mn發TLB無效的DVM事務;
  2. MN響應DBIDResp,表示他可以接收DVM事務的第二步;
  3. RN0給MN發起寫數據消息,作為DVM事務的第二步;
  4. MN給RN1發起兩步DVM事務;
  5. RN1通過給MN發送snoop響應表示已經接收DVM請求;
  6. MN接收snoop響應;
  7. MN給RN0發完成響應;
  8. RN0給MN發起DVM Sync;
  9. MN給RN0回DBIDResp;
  10. RN0給MN發寫數據消息, 作為DVM事務的第二步;
  11. MN給RN1發DVM Sync snoop;
  12. RN1執行完所有outstanding的DVM操作;
  13. RN1給MN發snoop響應,表示已經執行完所有操作;
  14. MN給RN0發完成響應,作為DVN Sync的響應;

Cache stashing

cache stash是把數據放在系統特定cache中的機制,通過把數據放在臨近將來要用的位置,減少訪問延時來提升系統的性能;

一般情況下,RNI和RND會發stash操作,stash請求只是一個建議,并不是強制的要求;一個設備收到stash類型的操作,也可以忽略掉;

CHI有兩種cache stash事務:帶數據的和不帶數據的;

stash傳輸流

基礎的傳輸示例:

  1. RN通過REQ通道發起stash請求;
  2. stash請求發給HNF;
  3. HNF可以有如下方式:
  • 忽略stash事務,把它當成非stash的操作;
  • 支持stash,給RNF發snoopRNF把cacheline預取至自己cache中;
  1. stash目標RNF收到一個Stashing Snoop;

RNF可以有如下方式:

  • 回Snoop響應,就像收到使用datapull機制的cacheline讀一樣;
  • 不使用datapull回snoop響應,然后發起那個cacheline的讀;
  • 回snoop響應,不預取這個cacheline,忽略掉stash的提示;

stash snoop請求

所有的cache stash請求發給HNF節點,HNF處理cache stash請求,他會給RNF發stashing snoop;

CHI有四種類型的cache stash事務:
在這里插入圖片描述
cache stash控制域段

stash事務REQ,snoop,response,data FLIT均有下面域段:

  • stash目的節點NodeID
  • RNF中的邏輯處理器cache,比如L2$
  • 是否會使用datapull機制

stash事務REQ FLIT使用下面域段:

  • StashNID
  • StashNIDValid,標識是否有用StashNID
  • StashLPID
  • StashLPIDValid,標識StashLPID是否有使用;

snoop FLIT有如下域段:

  • StashLPID和StashLPIDValid
  • DoNotDataPull

寫數據的傳輸
RN發起WriteUniqueStash來寫一個新數據并且希望Target來stash這個數據;寫的cacheline可以是full或者partial;

下面是一個RNI發起stash操作的例子,目標節點是RNF:

  1. RNI發起WriteUniqueFullStash,為了簡化流程,例子不給RNF的DBIDResp
    在這里插入圖片描述
  2. HNF收到stash事務后發送SnpMakeInvalidStash給HNF
    在這里插入圖片描述
  3. RNF接收HNF的snoop
  4. RNF接收stash并且返回snoop resp

在這里插入圖片描述
5. 如果使用datapull,RNF要么發起一個帶implicit讀請求的snoop響應,或者一個snoop響應和一個單獨的讀請求,這里是一個implicit snoop響應和讀請求,不是完整的datapull流程;
6. HNF發送從RNI收到的寫數據給RNF;

無寫數據的傳輸

  1. RNI發起StashOnceUnique請求到HNF;
    在這里插入圖片描述
  2. HNF接收stash請求;
  3. HNF給主存發ReadNoSnp來獲取cacheline,同時發起SnpStashUnique給RNF;
    在這里插入圖片描述
  4. 主存把cacheline數據給到HNF;
    在這里插入圖片描述
  5. RNF響應snoop,請求cacheline;
  6. HNF把cacheline數據給到RNF;

如果stash沒有對應的Target,那么HNF就是stash target;如果HNF要做stash,就發起ReadNoSnp到主存,拿到數據之后存到自己的cache里;

datapull機制

datapull機制是可以在snoop響應中帶一個讀請求,這樣可以少發一個讀請求;只在stash snoop中可以用;

RNF收到要求datapull的snoop,可以使用datapull或者單獨發一個讀請求;
在這里插入圖片描述
在這里插入圖片描述

I/O Deallocation

CHI提供了IO請求者釋放全一致性節點cacheline的提示操作;I/O Deallocation操作可以提示一個cacheline應當invalid掉,臟數據可以踢下去或者直接丟掉;因為是提示性操作,一致性節點也可以只回數據而不無效掉cacheline;注意提示性操作不能替代CMO;

CHI有兩種I/O deallocation事務:ReadOnceCleanInvalid和ReadOnceMakeInvalid;這倆對于防止cache被不在用的數據污染很有效(防止命中率下降),MakeInvalid和CleanInvalid的區別是,MakeInvalid是不踢入主存,直接把數據丟掉,所以使用時要小心一些;

I/O Deallocation示例

ReadOnceCleanInvalid的例子:
在這里插入圖片描述
在這里插入圖片描述
然后RNF無效掉自己的臟cacheline并刷到HNF中,HNF把數據給到RNI,并寫入主存;

DMT,DCT和PrefetchTgt

DMT和DCT可以讓數據直接在RN和SN之間傳輸,省的中間經過HN的轉發拖慢性能;但是傳輸完成的時候,HN仍然需要收到CompAck來確認傳輸已經完成;

PrefetchTgt事務可以減少內存訪問的延時,PrefetchTgt可以直接由RNF送到SNF,不需要返回數據,MC可以把這個作為一提示,提前把數據放到讀buffer中;這樣后面普通的讀下來的時候,數據可以很快回去;

DMT

對于讀事務的DMT傳輸,見下圖:
在這里插入圖片描述
在這里插入圖片描述
MC取回數據后直接把數據給到CPU;

使用DMT之后ICN的效率高了很多,絕大多數的讀操作都可以使用DMT,cache stash導致的DataPull也可以使用DMT;

不能使用DMT的請求:

  • EX操作;
  • ReadNoSnp并且ExpCompAck = 0并且Order != 0
  • ReadOnce并且ExpCompAck = 0并且Order != 0

為了支持DMT,CHI包含了如下ID域段:

  • REQ FLIT使用ReturnNID和ReturnTxnID
  • DATA FLIT使用HomeNID

DMT傳輸流示例:
在這里插入圖片描述

有order要求的DMT傳輸示例:
在這里插入圖片描述
當HNF收到Read Receipt之后就可以把自己的資源釋放了;

Prefetch Target

PrefetchTgt可以提升DMT的效率,其由RN直接發給SNF,不需要響應,不需要TxnID,不計入outstanding,SNF也可以選擇忽略掉這個事務;

如果SNF決定預取數據,它會一直buffer住數據,直到發生了對這個地址的讀操作;一般情況下認為很快就有一個讀事務走常規路徑(RN->HN->SN)過來;

DATA FLIT的DataSource域段,可以用來指示RNPrefetchTgt事務是否有用:
— 0bR0110 PrefetchTgt 對于本次傳輸有用.
提前預取數據對于數據傳輸而言延時降低;
— 0bR0111 PrefetchTgt 本次傳輸沒有用
和普通的讀而言,本次數據預取沒有改善延時;

RN可以根據上面的反饋來調整是否發送PrefetchTgt;

流程比較好理解,這里就不詳細描述了;對于RN而言,就是在知道會miss的情況下先發PrefetchTgt再發讀事務;

DCT

為了減少snoop hit的延時,引入DCT;和DMT類似,DCT是用于snoop數據傳輸的;

對于信號量和生產者-消費者這種類型的工作負載(常見的并發控制和同步機制。這些用例從數據一致性技術中受益,因為它們通常涉及多個進程或線程共享和修改共同資源),DCT可以帶來性能提升。

Forward Snoop Requests

Forward Snoop 請求告訴被snoop的RNF把snoop數據直接給到原始的RN,除了原子事務和EX事務,均可使用DCT;

Forward Snoop需要下面域段:

  • FwdNID
  • FwdTxnID
  • RetToSrc 為1要求snoopee把cacheline給到HN節點,防止后面訪問這個地址又要snoop;

DATA FLIT和RESP FLIT需要一個FwdState域段,這個域段告訴HNF DCT數據的cache狀態以供SF維護一致性; 同時cache狀態通常會在RESP域段中給到原始RNF;

和普通的讀一樣,原始RN通過CompData消息來接受snoop數據;
在這里插入圖片描述
RetToSrc = 0的傳輸流圖:

在這里插入圖片描述

RetToSrc = 1的傳輸流圖:
在這里插入圖片描述

原子操作

使用原子操作,相比EX操作可以節省大量時間;原子事務可以一次執行多個原子性的操作不被打斷;
原子操作類型有四個:

  • AtomicStore
  • AtomicLoad
  • AtomicSwap
  • AtomicCompare

對于AtomicStore ,支持如下細分操作:
在這里插入圖片描述
對于AtomicLoad,支持如下細分操作:
在這里插入圖片描述
對于AtomicSwap,target把原始數據和事務攜帶數據相交換,再返回原始數據;

對于AtomicCompare,事務會攜帶兩個值,比較值和交換值,target拿比較值和原始數據進行比較,如果數據相等,target把swap值寫進去,如果不相等,target不會寫目標地址;返回數據為目標地址的原始數據;

下面是一個有數據返回的原子操作傳輸流,其他場景見協議5.4章節;
在這里插入圖片描述

RAS特性

CHI支持下面RAS特性:

  • 數據poison和datacheck來標識失效數據
  • Trace Tag來幫助分析和調試

poison和datacheck

一般ECC算法都是糾一檢二,超過1bit錯誤哦叫做不可久錯誤(UR或者UCE,注意根據上下文和cache狀態相區別),把數據標記為有毒的,poison標識會和數據一起傳遞直到數據被消費,這允許即使數據錯了也可以讓系統使用;

poison的粒度可以是64或者128bit;

數據被消費的含義:

  • 數據被用來做計算了;
  • 數據被給到了不支持poison的地方;這種情況需要進入異常;

datacheck提供data域段的奇偶校驗,8bit粒度對應1bit的datacheck校驗位;

TraceTag

CHI每個通道都有1bit的TraceTag,TraceTag為1表示這個FLIT被標記來做trace,所有后面的FLIT也要打上trace標記,RN事務導致后面新產生的事務;比如導致HNF產生額外的命令;

TraceTag可以在初始RN節點置1,也可以在ICN的中間節點置1;比如中間的觀測節點可以把TraceTag置1;也可以中間的觀測節點被設置為所有路過去往地址A的事務都把TraceTag置1;

傳輸流示例:

  1. RN0發送地址A的MakeUnique請求到HN3:
    在這里插入圖片描述
  2. ICN把snoop和snoop的響應的TraceTag都置1;
  3. RN2發送ReadShared事務給HN3,ReadShared事務產生的snoop的TraceTag為0;

在這里插入圖片描述
4. HNF給RN0發送完成響應,TraceTag為1;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718788.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718788.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718788.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中科數安 | 公司文檔數據如何才能防止他人泄密?

為了防止公司文檔數據被他人泄密,中科數安提供了一系列綜合性的解決方案和服務。 www.weaem.com 以下是一些關鍵策略和措施: 訪問控制:首先,實施嚴格的文件訪問控制是至關重要的。中科數安提供身份驗證和權限管理系統&#xff0c…

hnust 湖南科技大學 2022 數據挖掘課設 完整代碼+報告+圖源文件+指導書

hnust 湖南科技大學 2022 數據挖掘課設 完整代碼報告圖源文件指導書 目錄 實驗一 Apriori算法設計與應用 - 1 - 一、 背景介紹 - 1 - 二、 實驗內容 - 1 - 三、 實驗結果與分析 - 2 - 四、 小結與心得體會 - 3 - 實驗二 KNN算法設計與應用 - 4 - 一、 背景介紹 - 4 - 二、 實…

解鎖智慧之門:自然語言處理與神奇的語言模型

在數字化浪潮席卷全球的今天,自然語言處理(NLP)已成為人工智能領域最璀璨的明珠之一。而在這顆明珠中,語言模型(LM)更是閃耀著奪目的光芒。它們不僅讓機器能夠理解和生成人類的語言,更在智能助手、搜索引擎、翻譯工具等眾多應用中發揮著不可或缺的作用。今天,就讓我們一…

SAP VT01N創建Shipment Number

調用BAPI:BAPI_SHIPMENT_CREATE創建裝運單本身很簡單,但是如果是第一次使用的話,可能會對抬頭的一些日期感到困惑 BAPI_SHIPMENT_CREATE抬頭日期字段處理代碼:Include程序:LV56I_BAPIHEA,子程序:set_heade…

論如何采用神秘顧客工具提升營業廳的服務質量?

神秘顧客工具能進一步提升營業廳的服務質量,對于這方面深圳神秘顧客(SMS)公司有以下建議: 1、建立顧客反饋機制:除了神秘顧客的反饋外,營業廳還可以建立其他顧客反饋渠道,如在線調查、顧客滿意…

大數據面試經驗分享

隨著大數據技術的快速發展,大數據相關職位的需求也日益增長。對于想要進入大數據領域的求職者來說,面試是通往理想職位的重要一關。下面我將分享一些大數據面試的經驗,希望能夠幫助大家在面試中脫穎而出。 一、面試前準備 了解公司背景和業…

(已解決)emoji及其特殊符號在vue中的使用

問題敘述 使用問題&#xff1a;在表情庫中點擊后無法展示對應的emoji表情&#xff0c;僅僅顯示Unicode代碼編號&#xff0c;按照vue eslint規則更改添加分號后&#xff0c;沒有報錯但是依舊無法正確渲染。 問題源碼&#xff1a; <template><div><!-- 被點擊的…

Git Bash中安裝tree

文章目錄 問題描述解決辦法A備選辦法BRef 問題描述 在Git Bash中使用tree報錯&#xff1a; tree # bash: tree: command not found解決辦法A 下載二進制文件&#xff1a; https://gnuwin32.sourceforge.net/packages/tree.htm -> 選binary。下載后解壓.zip 把解壓后的tre…

全新攻擊面管理平臺

首頁大屏 內測階段&#xff0c;免費試用一個月 有興趣體驗的師傅&#xff0c;來長亭云圖極速版群里找我 py

AI通識教育:可能是我們領先于世界AI的關鍵

在人工智能時代&#xff0c;要想在全球AI競爭中占據一席之地&#xff0c;擺脫對外部先進機構如OpenAI的依賴&#xff0c;減少對英偉達等公司在GPU等硬件技術上的制約&#xff0c;以及盡快縮小與世界最前沿AI技術水平之間的差距&#xff0c;這是一項艱巨而又緊迫的任務。 實現這…

如何保證 HTTPS 證書的有效性?

隨著互聯網的蓬勃發展&#xff0c;保障用戶在網絡上的隱私和安全成為至關重要的任務。HTTPS證書&#xff0c;作為一種安全套接字層協議&#xff0c;扮演著網站安全的守護者。 1. 什么是HTTPS 證書&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff…

vue 安裝各種問題

新下載了個項目模板&#xff0c;安裝包就遇到了各種各樣問題 電腦&#xff1a;mac 使用npm i 等命令一直安裝項目&#xff0c;然后一直報錯 2534 info run canvas2.11.2 install node_modules/canvas node-pre-gyp install --fallback-to-build --update-binary 2535 info r…

vscode + visual studio keymap插件

備注&#xff1a;主要推薦代碼遞歸折疊代碼展開單個函數折疊單個代碼展開。原因&#xff1a;vscode中的visual studio keymap插件對于代碼折疊支持不充分&#xff0c;查看大型項目時不方便。 一、個人快捷鍵推薦 1、前進&#xff1a;ctrl shift - 2、回退&#xff1a;ctrl…

uni-app webview 打開baidu.com

在uni-app中&#xff0c;你可以使用web-view組件來打開外部網頁&#xff0c;比如百度首頁。以下是一個簡單的示例代碼&#xff0c;展示了如何在uni-app中使用web-view組件打開百度首頁&#xff1a; <template> <view> <web-view :src"baiduUrl">&l…

【new IntersectionObserver】vue3 數據懶加載

new IntersectionObserver js方法描述步驟 實現邏輯&#xff1a;通過監視底部節點可視情況&#xff0c;獲取新數據進行渲染&#xff0c;如果獲取不到最新數據則顯示暫無其他數據 new IntersectionObserver 是用于監視元素可見度&#xff0c;所以我們只需要監視數據下方的dom是…

ubuntu docker deamon無法連接的問題

現象 ubuntu 下使用docker&#xff0c;禿然一天報了一個錯誤 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 排查 排查了半天&#xff0c;是dockerd啟動的時候指定的API listen 和默認的不一致。 systemctl 啟動的時…

【JS】indexedDB基本入門使用;

本文基本僅做個人簡單學習記錄&#xff1b; 相關TS類型&#xff1a; IDBDatabase&#xff1a;open成功后的 result 為 IDBDatabase類型 > idb.result; transaction&#xff1a; transaction(storeNames: string | string[], mode?: IDBTransactionMode, options?: IDBTr…

C++入門全集(4):類與對象【下】

一、再談構造函數 1.1 構造函數體內賦值 我們知道&#xff0c;在創建對象時&#xff0c;編譯器會自動調用構造函數給對象中的各個成員變量一個合適的初始值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _yea…

windows zip壓縮報錯includes characters that cannot be used in a compressed folder

Windows 用 zip 壓縮文件夾時報錯&#xff1a; <文件> cannot be compressed because includes characters that cannot be used in a compressed folder, such as <非法字符>. You should rename this file or directory.同 [1]。考慮用 python 批量檢測非 ascii…

SOCKS55代理 VS Http代理,如何選擇?

在使用IPFoxy全球代理時&#xff0c;選擇 SOCKS55代理還是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http協議自主切換&#xff0c;但要怎么選擇&#xff1f;為解決這個問題&#xff0c;得充分了解兩種代理的工作原理和配置情況。 在這篇文章中&#xff0c;我們會簡要介紹 …