18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

如何在不需要特殊庫(kù)或類(lèi)的情況下實(shí)現(xiàn)C代碼并行性?

YCqV_FPGA_EETre ? 來(lái)源:FPGA開(kāi)發(fā)圈 ? 作者:FPGA開(kāi)發(fā)圈 ? 2021-02-11 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

提取實(shí)現(xiàn)任務(wù)級(jí) (task_level) 的硬件并行算法是設(shè)計(jì)高效的HLS IP內(nèi)核的關(guān)鍵。

在本文中,我們將重點(diǎn)放在如何能夠在不需要特殊的庫(kù)或類(lèi)的情況下修改代碼風(fēng)格以實(shí)現(xiàn)C代碼實(shí)現(xiàn)并行性。Xilinx HLS 編譯器的顯著特征是能夠?qū)⑷蝿?wù)級(jí)別的并行性和流水線與可尋址的存儲(chǔ)器 PIPO或 FIFO相結(jié)合。本文首先概述可以獲取任務(wù)并行的前提條件,然后以DAG(directedacyclic graph) 代碼為例,挖掘其中使用 fork-join 并行性,并結(jié)合使用 ping- pong buffer 啟用了一種基于握手的任務(wù)級(jí)粗粒度的流水線形式。

我們理解任務(wù)級(jí)并行的時(shí)候可以想象成這樣一個(gè)場(chǎng)景,每一個(gè)計(jì)算任務(wù)都是時(shí)間軸上向前奔跑的馬車(chē),馬車(chē)與馬車(chē)之間傳輸?shù)呢浳锞拖袷怯?jì)算數(shù)據(jù),他們需要管道去連接即 FIFO 和 PIPO ,FIFO 是一個(gè)先進(jìn)先出存儲(chǔ)器也就是說(shuō)使用這樣的管道傳輸數(shù)據(jù)的時(shí)候,數(shù)據(jù)進(jìn)出的順序不可以改變。而 PIPO 就是一個(gè)可尋址的存儲(chǔ)器管道,數(shù)據(jù)在任務(wù)之間進(jìn)出的順序可以改變。

最糟糕的狀態(tài)是什么?馬車(chē)在時(shí)間線上順序出發(fā),A 馬車(chē)到達(dá)終點(diǎn)后 B 再出發(fā)以此類(lèi)推,就像是 CPU 中的單進(jìn)程順序執(zhí)行模式一樣,而FPGA中有可供并行化執(zhí)行的數(shù)據(jù)傳輸管道,更多的資源就像是跑道一樣,所以這個(gè)狀態(tài)效率是最低的。

那么先做一點(diǎn)點(diǎn)改進(jìn),我們分析發(fā)現(xiàn) B 和 C 馬車(chē)不享有任何公用的數(shù)據(jù)或存儲(chǔ)計(jì)算資源,也就是他們完全可以在 A 結(jié)束后并行執(zhí)行,最后再執(zhí)行 D,這種并行情況中含有順序和并行兩種模式,我們稱(chēng)之為交叉并行 (fork-joinparallelism)。但是下一次進(jìn)程仍然是順序執(zhí)行的。

繼續(xù)深入可以發(fā)現(xiàn),四輛馬車(chē)在跑完各自的任務(wù)后都有一段的閑置時(shí)間,提高吞吐量和資源重復(fù)利用也很明顯是息息相關(guān)的。實(shí)現(xiàn)了進(jìn)程之間的流水線執(zhí)行的結(jié)果就如下圖,每一輛馬車(chē)在不同的進(jìn)程中連續(xù)執(zhí)行任務(wù),向前奔跑,重復(fù)利用資源的同時(shí)它提升了吞吐量進(jìn)而極大的減小了完成多個(gè)進(jìn)程后的延遲。

4809ccea-59ba-11eb-8b86-12bb97331649.png

最理想的狀態(tài)時(shí)什么?就是馬車(chē)盡可能的一個(gè)挨著一個(gè)一起出發(fā),并行奔跑,大家先后到達(dá)終點(diǎn)完成計(jì)算,在奔跑的過(guò)程中數(shù)據(jù)通過(guò)管道也完成了遷移,最終計(jì)算完的數(shù)據(jù)在最后一輛馬車(chē)到達(dá)終點(diǎn)的時(shí)候產(chǎn)出。下圖我們可以看到 B 和 C 開(kāi)始執(zhí)行的時(shí)間提前了,并沒(méi)有等到A完全執(zhí)行完畢,這和數(shù)據(jù)依賴息息相關(guān),也就是說(shuō)我們進(jìn)一步挖掘并行性的路上發(fā)現(xiàn):ABC 三輛馬車(chē)都可以在增加馬車(chē)數(shù)量 (擴(kuò)增資源) ,建立數(shù)據(jù)管道的并行執(zhí)行的前提下實(shí)現(xiàn)了。我們用資源換取了更大的并行性,這就是繼續(xù)挖掘并行性上需要付出的代價(jià)。

4841a066-59ba-11eb-8b86-12bb97331649.png

奔跑的馬車(chē)帶著我們理解了任務(wù)級(jí)流水線的優(yōu)化之路,下面我們結(jié)合代碼看一看HLS工具會(huì)在哪些情況下阻止 dataflow 的實(shí)現(xiàn)。

在我們談及 dataflow 的優(yōu)化之前,我們先去了解在 HLS 提醒你報(bào)錯(cuò)的方式,其中修改屬性config_dataflow-strict_mode (off | error | warning) 指令可以控制報(bào)錯(cuò)指令的級(jí)別,一般情況下默認(rèn)是 warning 級(jí)別的報(bào)錯(cuò),主要看我們的并行性需求。

以下是阻止任務(wù)級(jí)別并行性的常見(jiàn)情況:

1. 單產(chǎn)出單消耗模型違例(Single-producer-consumerviolations)

為了使 VitisHLS 執(zhí)行 DATAFLOW 優(yōu)化,任務(wù)之間傳遞的所有元素都必須遵循單產(chǎn)出單消耗模型。每個(gè)變量必須從單個(gè)任務(wù)驅(qū)動(dòng),并且只能由單個(gè)任務(wù)使用。在下面的代碼示例中是典型的單產(chǎn)出單消耗模型違例,單一的數(shù)據(jù)流 temp1 同時(shí)被 Loop2 和 Loop3 消耗。要解決這個(gè)問(wèn)題很容易,就是將兩個(gè)任務(wù)都要消耗的數(shù)據(jù)流復(fù)制成兩個(gè),如右圖的 Split 函數(shù)。當(dāng) temp1數(shù)據(jù)流被復(fù)制為 temp2 和 temp3 后,LOOP1,2,3 就可以實(shí)現(xiàn)任務(wù)級(jí)流水線了。

void foo(int data_in[N], int scale, int data_out1[N], int data_out2[N]) {

int temp1[N];

Loop1: for(int i = 0; i < N; i++) {

temp1[i] = data_in[i] * scale;

}

Loop2: for(int j = 0; j < N; j++) {

data_out1[j] = temp1[j] * 123;

}

Loop3: for(int k = 0; k < N; k++) {

data_out2[k] = temp1[k] * 456;

}

}

void Split (in[N], out1[N], out2[N]) {

// Duplicated data

L1:for(int i=1;i

out1[i] = in[i];

out2[i] = in[i];

}

}

void foo(int data_in[N], int scale, int data_out1[N], int data_out2[N]) {

int temp1[N], temp2[N]. temp3[N];

Loop1: for(int i = 0; i < N; i++) {

temp1[i] = data_in[i] * scale;

}

Split(temp1, temp2, temp3);

Loop2: for(int j = 0; j < N; j++) {

data_out1[j] = temp2[j] * 123;

}

Loop3: for(int k = 0; k < N; k++) {

data_out2[k] = temp3[k] * 456;

}

}

2. 旁路任務(wù) Bypassing Tasks

正常情況下我們期望流水線任務(wù)是一個(gè)接著一個(gè)的產(chǎn)出并消耗,然而像下面這個(gè)例子中,Loop1 產(chǎn)生了 Temp1和Temp2 兩個(gè)數(shù)據(jù)流,但是在下一個(gè)任務(wù) Loop2 中只有 temp1 參與了運(yùn)算,而 temp2 就被旁支了。Loop3 任務(wù)的執(zhí)行依賴 Loop2 任務(wù)產(chǎn)生的 temp3 數(shù)據(jù),所以 Loop2 和 Loop3 因?yàn)閿?shù)據(jù)依賴的關(guān)系無(wú)法并行執(zhí)行。

void foo(int data_in[N], int scale, int data_out1[N], int data_out2[N]) {

int temp1[N], temp2[N]. temp3[N];

Loop1: for(int i = 0; i < N; i++) {?

temp1[i] = data_in[i] * scale;

temp2[i] = data_in[i] >> scale;

}

Loop2: for(int j = 0; j < N; j++) {?

temp3[j] = temp1[j] + 123;

}

Loop3: for(int k = 0; k < N; k++) {?

data_out[k] = temp2[k] + temp3[k];

}

}

3. 任務(wù)間雙向反饋 Feedbackbetween Tasks

假如說(shuō)當(dāng)前任務(wù)的結(jié)果,需要作為之前一個(gè)任務(wù)的輸入的話,就形成了任務(wù)之間的數(shù)據(jù)反饋,它打亂了流水線從上級(jí)一直往下級(jí)輸送數(shù)據(jù)流的規(guī)則。這時(shí)候HLS就會(huì)給出警告或者報(bào)錯(cuò),有可能完成不了dataflow優(yōu)化了。有一種特例是支持的:使用hls::stream格式的數(shù)據(jù)流反饋。

我們分析以下代碼的內(nèi)容:

當(dāng)?shù)谝粋€(gè)程序 firstProc 執(zhí)行的時(shí)候,hls::stream 格式的數(shù)據(jù)流 forwardOUT 被寫(xiě)入了初始化為10的數(shù)值 fromSecond 。由于 hls::stream 格式的數(shù)據(jù)本身不支持初始化操作,所以這樣的操作避免了違反單產(chǎn)出單消耗原則。之后的迭代里,firstProc 通過(guò) backwardIN 接口從 hls :: stream 讀取數(shù)值寫(xiě)入 forwardOUT 中。

在第二個(gè)程序 secondProc 執(zhí)行的時(shí)候,secondProc 讀取 forwardIN 上的值,將其加1,然后通過(guò)按執(zhí)行順序倒退的反饋流將其發(fā)送回 FirstProc。從第二次執(zhí)行開(kāi)始,firstProc 將使用從流中讀取的值進(jìn)行計(jì)算,并且兩個(gè)過(guò)程可以使用第一次執(zhí)行的初始值,通過(guò)正向和反饋通信永遠(yuǎn)保持下去。這種交互式的反饋中,包含數(shù)據(jù)流的雙向反饋機(jī)制,但是它就像貨物一直在從左手倒到右手再?gòu)挠沂值沟阶笫忠粯?,可以不違反 Dataflow 的規(guī)范,一直進(jìn)行下去。

#include "ap_axi_sdata.h"

#include "hls_stream.h"

void firstProc(hls::stream &forwardOUT, hls::stream &backwardIN) {

static bool first = true;

int fromSecond;

//Initialize stream

if (first)

fromSecond = 10; // Initial stream value

else

//Read from stream

fromSecond = backwardIN.read(); //Feedback value

first = false;

//Write to stream

forwardOUT.write(fromSecond*2);

}

void secondProc(hls::stream &forwardIN, hls::stream &backwardOUT)

{

backwardOUT.write(forwardIN.read() + 1);

}

void top(...) {

#pragma HLS dataflow

hls::stream forward, backward;

firstProc(forward, backward);

secondProc(forward, backward);

}

4. 含有條件判斷的任務(wù)流水

DATAFLOW 優(yōu)化不會(huì)優(yōu)化有條件執(zhí)行的任務(wù)。下面的示例展現(xiàn)了這個(gè)違例。在此示例中,有條件地執(zhí)行 Loop1 和 Loop2 會(huì)阻止 Vitis HLS 優(yōu)化這些循環(huán)之間的數(shù)據(jù)流,因?yàn)?sel 條件直接控制了任務(wù)中的數(shù)據(jù)有可能不會(huì)從一個(gè)循環(huán)流到下一個(gè)循環(huán)。

void foo(int data_in1[N], int data_out[N], int sel) {

int temp1[N], temp2[N];

if (sel) {

Loop1: for(int i = 0; i < N; i++) {

temp1[i] = data_in[i] * 123;

temp2[i] = data_in[i];

}

} else {

Loop2: for(int j = 0; j < N; j++) {

temp1[j] = data_in[j] * 321;

temp2[j] = data_in[j];

}

}

Loop3: for(int k = 0; k < N; k++) {

data_out[k] = temp1[k] * temp2[k];

}

}

但是我們都知道,其實(shí)這些任務(wù)之間存在條件判斷和選擇是非常常見(jiàn)的情況,只需要稍微改變代碼風(fēng)格就可以既保留條件判斷,又完成任務(wù)流水。為了確保在所有情況下都執(zhí)行每個(gè)循環(huán),我們將條件語(yǔ)句下變化的 Temp1 移入第一個(gè)循環(huán)。這兩個(gè)循環(huán)始終執(zhí)行,并且數(shù)據(jù)始終從一個(gè)循環(huán)流向下一個(gè)循環(huán)。

void foo(int data_in[N], int data_out[N], int sel) {

int temp1[N], temp2[N];

Loop1: for(int i = 0; i < N; i++) {

if (sel) {

temp1[i] = data_in[i] * 123;

} else {

temp1[i] = data_in[i] * 321;

}

}

Loop2: for(int j = 0; j < N; j++) {

temp2[j] = data_in[j];

}

Loop3: for(int k = 0; k < N; k++) {

data_out[k] = temp1[k] * temp2[k];

}

}

5. 有多種退出機(jī)制的循環(huán)

含有多種退出機(jī)制的循環(huán)不能被包含在流水線區(qū)域內(nèi),我們來(lái)數(shù)一數(shù) Loop2 一共有多少種循環(huán)退出條件:

1. 由 for 循環(huán)定義的 K>N 的情況;

2. 由 switch 條件定義的 default 情況;

3. 由 switch 條件定義的 continue 情況

由于循環(huán)的退出條件始終由循環(huán)邊界定義,因此使用 break 或 continue 語(yǔ)句將禁止在DATAFLOW 區(qū)域中使用循環(huán)。

void multi_exit(din_t data_in[N], dsc_t scale, dsel_t select, dout_t

data_out[N]) {

dout_t temp1[N], temp2[N];

int i,k;

Loop1:

for(i = 0; i < N; i++) {

temp1[i] = data_in[i] * scale;

temp2[i] = data_in[i] >> scale;

}

Loop2:

for(k = 0; k < N; k++) {

switch(select) {

case 0: data_out[k] = temp1[k] + temp2[k];

case 1: continue;

default: break;

}

}

}

我們理解了可能阻止任務(wù)流水線的 5 種經(jīng)典情況后,我們最后推出適用于 Vitis HLS 的Dataflow 優(yōu)化的兩種規(guī)范形式 (canonical forms) ,一種直接應(yīng)用于函數(shù),一種應(yīng)用于 for循環(huán)。我們可以發(fā)現(xiàn)規(guī)范形式嚴(yán)格遵守了單產(chǎn)出單消耗的規(guī)則。

1. 適用于子程序沒(méi)有被內(nèi)聯(lián) (inline) 的規(guī)范形式

void dataflow(Input0, Input1, Output0, Output1)

{

#pragma HLS dataflow

UserDataType C0, C1, C2;

func1(read Input0, read Input1, write C0, write C1);

func2(read C0, read C1, write C2);

func3(read C2, write Output0, write Output1);

}

2. 適用于循環(huán)體內(nèi)的任務(wù)流水的規(guī)范形式:

對(duì)于 for 循環(huán) (其中沒(méi)有內(nèi)聯(lián)函數(shù)的地方),循環(huán)變量應(yīng)具有:

a. 在 for 循環(huán)的標(biāo)題中聲明初始值,并設(shè)置為 0。

b. 循環(huán)條件N是一個(gè)正數(shù)值常數(shù)或常數(shù)函數(shù)參數(shù)。

c. 循環(huán)的遞增量為1。

d. Dataflow 指令必須位于循環(huán)內(nèi)部。

void dataflow(Input0, Input1, Output0, Output1)

{

for (int i = 0; i < N; i++)

{

#pragma HLS dataflow

UserDataType C0, C1, C2;

func1(read Input0, read Input1, write C0, write C1);

func2(read C0, read C0, read C1, write C2);

func3(read C2, write Output0, write Output1);

}

}

原文標(biāo)題:Dataflow | 粗粒度并行優(yōu)化的任務(wù)級(jí)流水

文章出處:【微信公眾號(hào):FPGA開(kāi)發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(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)注

    11

    文章

    3537

    瀏覽量

    68529
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4927

    瀏覽量

    72501

原文標(biāo)題:Dataflow | 粗粒度并行優(yōu)化的任務(wù)級(jí)流水

文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開(kāi)發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    rtt使用的軟件i2c庫(kù)進(jìn)行模擬i2c時(shí)序時(shí),不需要加臨界區(qū)保護(hù)嗎?

    這里進(jìn)行模擬i2c時(shí)序,不需要加臨界區(qū)的保護(hù)。假如我有一個(gè)低優(yōu)先級(jí)的線程正在進(jìn)行i2c讀寫(xiě),這時(shí)候有個(gè)高優(yōu)先級(jí)的線程進(jìn)行搶占,做了一些工作,這個(gè)時(shí)候i2c的時(shí)序就被破壞了吧。還是說(shuō)
    發(fā)表于 09-10 08:09

    何在“SD 卡 NAND 閃存”的情況下使用 Non-OS NVTFAT?

    何在“SD 卡 NAND 閃存”的情況下使用 Non-OS NVTFAT
    發(fā)表于 09-01 07:58

    何在沒(méi)有 NuLink 編程器的情況下執(zhí)行 SWD 解鎖序列?

    我迫切需要知道如何在沒(méi)有 NuLink 編程器的情況下執(zhí)行 SWD 解鎖序列。
    發(fā)表于 08-18 07:04

    光纖線需不需要套管

    光纖線是否需要套管,需根據(jù)具體應(yīng)用場(chǎng)景、環(huán)境條件及安裝要求綜合判斷。在大多數(shù)實(shí)際工程中,為了保護(hù)光纖、確保信號(hào)穩(wěn)定性和延長(zhǎng)使用壽命,套管是必要的防護(hù)措施。以下是詳細(xì)分析: 一、需要套管的情況 戶外
    的頭像 發(fā)表于 08-07 09:45 ?611次閱讀
    光纖線需<b class='flag-5'>不需要</b>套管

    設(shè)備數(shù)據(jù)的采集可以實(shí)現(xiàn)用“不需要點(diǎn)表的網(wǎng)關(guān)”嗎

    做變壓器的工廠,它的設(shè)備數(shù)據(jù)的采集可以實(shí)現(xiàn)用“不需要點(diǎn)表的網(wǎng)關(guān)”嗎
    發(fā)表于 05-28 09:59

    FX2LP如何在不更改硬件的情況下對(duì)其進(jìn)行重新編程?

    我正在使用 FX2LP/ CY7C68013A-128AXC設(shè)備(定制板),我有一些問(wèn)題需要您的幫助。 1如果我的 EEPROM 已經(jīng)有固件并且正在運(yùn)行,如何在不更改硬件的情況下對(duì)其進(jìn)
    發(fā)表于 05-06 11:16

    LPC1227FBD48如何在沒(méi)有SDK的情況下配置FreeRTOS?

    我想在基于 LPC1227FBD48 系列的現(xiàn)有項(xiàng)目中使用 FreeRTOS,但我們沒(méi)有可用于控制器的 SDK。我們?nèi)?b class='flag-5'>何在沒(méi)有 SDK 的情況下配置 FreeRTOS。
    發(fā)表于 04-02 06:33

    是否可以在不需要TSW3100的情況下單獨(dú)使用TSW3070軟件?

    關(guān)于單獨(dú)使用 TSW3070EVM(不與 TSW3100EVM 結(jié)合使用),我想咨詢幾個(gè)問(wèn)題: 1- 是否可以在不需要 TSW3100 的情況下單獨(dú)使用 TSW3070 軟件(前提是以其他方式提供
    發(fā)表于 02-17 06:45

    包裝印刷企業(yè)實(shí)現(xiàn)生產(chǎn)中不需要點(diǎn)表工業(yè)網(wǎng)關(guān)部署架構(gòu)是怎樣的?

    深控技術(shù)的不需要點(diǎn)表工業(yè)網(wǎng)關(guān)的部署架構(gòu)圍繞實(shí)現(xiàn)快速換線與柔性生產(chǎn)展開(kāi),涉及設(shè)備層、網(wǎng)絡(luò)層、系統(tǒng)層以及管理層的多層協(xié)同
    的頭像 發(fā)表于 01-16 16:40 ?540次閱讀
    包裝印刷企業(yè)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>性</b>生產(chǎn)中<b class='flag-5'>不需要</b>點(diǎn)表工業(yè)網(wǎng)關(guān)部署架構(gòu)是怎樣的?

    5G不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)是什么,5g不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)生產(chǎn)廠家有哪些?

    深圳市深控信息技術(shù)有限公司的物聯(lián)網(wǎng)解決方案,專(zhuān)注于工業(yè)物聯(lián)網(wǎng)技術(shù)研發(fā)和應(yīng)用,其不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)在多個(gè)行業(yè)得到廣泛應(yīng)用,以先進(jìn)的自動(dòng)識(shí)別技術(shù)和穩(wěn)定的性能受到客戶好評(píng)。
    的頭像 發(fā)表于 01-07 16:24 ?570次閱讀
    5G<b class='flag-5'>不需要</b>點(diǎn)表的工業(yè)網(wǎng)關(guān)是什么,5g<b class='flag-5'>不需要</b>點(diǎn)表的工業(yè)網(wǎng)關(guān)生產(chǎn)廠家有哪些?

    請(qǐng)問(wèn)ADS1292R如何在MCU休眠的情況下通過(guò)脫落檢測(cè)喚醒MCU?

    請(qǐng)問(wèn)ADS1292R如何在MCU休眠的情況下通過(guò)脫落檢測(cè)喚醒MCU?
    發(fā)表于 11-28 08:03

    基于深控技術(shù) “不需要點(diǎn)表的邊緣計(jì)算網(wǎng)關(guān)” 的物聯(lián)網(wǎng)解決方案

    深控技術(shù)研發(fā)的 “不需要點(diǎn)表的邊緣計(jì)算網(wǎng)關(guān)” 物聯(lián)網(wǎng)解決方案憑借其無(wú)需點(diǎn)表配置、強(qiáng)大的邊緣計(jì)算能力、高度安全可靠以及廣泛的設(shè)備兼容等優(yōu)勢(shì),能夠在多個(gè)行業(yè)的物聯(lián)網(wǎng)應(yīng)用場(chǎng)景中發(fā)揮重要作用,幫助企業(yè)高效實(shí)現(xiàn)物聯(lián)網(wǎng)項(xiàng)目的部署與運(yùn)營(yíng),提
    的頭像 發(fā)表于 11-15 11:51 ?815次閱讀
    基于深控技術(shù) “<b class='flag-5'>不需要</b>點(diǎn)表的邊緣計(jì)算網(wǎng)關(guān)” 的物聯(lián)網(wǎng)解決方案

    不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)應(yīng)用案例:如何提升工業(yè)企業(yè)生產(chǎn)效率與質(zhì)量?

    不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)解決方案。技術(shù)團(tuán)隊(duì)在車(chē)間各個(gè)關(guān)鍵設(shè)備節(jié)點(diǎn)安裝了新的工業(yè)網(wǎng)關(guān)。由于不需要點(diǎn)表,安裝過(guò)程極為簡(jiǎn)便,技術(shù)人員僅需將網(wǎng)關(guān)與設(shè)備連接,并進(jìn)行簡(jiǎn)單的網(wǎng)絡(luò)設(shè)置,即可完成部署。整個(gè)車(chē)間的網(wǎng)關(guān)部署時(shí)間比之前預(yù)計(jì)縮短了 [X]%。
    的頭像 發(fā)表于 11-13 10:27 ?650次閱讀
    <b class='flag-5'>不需要</b>點(diǎn)表的工業(yè)網(wǎng)關(guān)應(yīng)用案例:如何提升工業(yè)企業(yè)生產(chǎn)效率與質(zhì)量?

    電氣行業(yè)工廠數(shù)據(jù)采集現(xiàn)狀及 “不需要點(diǎn)表的網(wǎng)關(guān)” 的作用

    電氣行業(yè)工廠在數(shù)據(jù)采集方面目前存在諸多問(wèn)題,而 “不需要點(diǎn)表的工業(yè)網(wǎng)關(guān)” 在簡(jiǎn)化配置、增強(qiáng)兼容、提升實(shí)時(shí)、降低維護(hù)成本以及提高數(shù)據(jù)質(zhì)量等方面具有顯著的優(yōu)勢(shì),能夠?yàn)殡姎庑袠I(yè)工廠的數(shù)據(jù)采集工作帶來(lái)極大的改善和調(diào)整,助力工廠
    的頭像 發(fā)表于 10-30 10:06 ?648次閱讀
    電氣行業(yè)工廠數(shù)據(jù)采集現(xiàn)狀及 “<b class='flag-5'>不需要</b>點(diǎn)表的網(wǎng)關(guān)” 的作用

    C語(yǔ)言為什么不需要包含stdio.h

    我們?cè)趯?xiě)單片機(jī)程序的時(shí)候,第一行都會(huì)包含 reg51.h,于是就有同學(xué)提出了疑問(wèn),為什么不需要包含 stdio.h?
    的頭像 發(fā)表于 10-29 15:48 ?1181次閱讀