国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

如何才能提高代碼運(yùn)行效率?

Linux愛好者 ? 來源:嵌入式與Linux那些事 ? 作者:嵌入式那些事 ? 2021-05-10 17:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們寫程序的目的就是使它在任何情況下都可以穩(wěn)定工作。一個(gè)運(yùn)行的很快但是結(jié)果錯(cuò)誤的程序并沒有任何用處。在程序開發(fā)和優(yōu)化的過程中,我們必須考慮代碼使用的方式,以及影響它的關(guān)鍵因素。通常,我們必須在程序的簡潔性與它的運(yùn)行速度之間做出權(quán)衡。今天我們就來聊一聊如何優(yōu)化程序的性能。

1. 減小程序計(jì)算量

1.1 示例代碼

1.2 分析代碼

1.3 改進(jìn)代碼

2. 提取代碼中的公共部分

2.1 示例代碼

2.2 分析代碼

2.3 改進(jìn)代碼

3. 消除循環(huán)中低效代碼

3.1 示例代碼

3.2 分析代碼

3.3 改進(jìn)代碼

4. 消除不必要的內(nèi)存引用

4.1 示例代碼

4.2 分析代碼

4.3 改進(jìn)代碼

5. 減小不必要的調(diào)用

5.1 示例代碼

5.2 分析代碼

5.3 改進(jìn)代碼

6. 循環(huán)展開

6.1 示例代碼

6.2 分析代碼

6.3 改進(jìn)代碼

7. 累計(jì)變量,多路并行

7.1 示例代碼

7.2 分析代碼

7.3 改進(jìn)代碼

8. 重新結(jié)合變換

8.1 示例代碼

8.2 分析代碼

8.3 改進(jìn)代碼

9 條件傳送風(fēng)格的代碼

9.1 示例代碼

9.2 分析代碼

9.3 改進(jìn)代碼

10. 總結(jié)

1. 減小程序計(jì)算量1.1 示例代碼

for (i = 0; i 《 n; i++) {

int ni = n*i;

for (j = 0; j 《 n; j++)

a[ni + j] = b[j];

}

1.2 分析代碼

代碼如上所示,外循環(huán)每執(zhí)行一次,我們要進(jìn)行一次乘法計(jì)算。i = 0,ni = 0;i = 1,ni = n;i = 2,ni = 2n。因此,我們可以把乘法換成加法,以n為步長,這樣就減小了外循環(huán)的代碼量。

1.3 改進(jìn)代碼

int ni = 0;

for (i = 0; i 《 n; i++) {

for (j = 0; j 《 n; j++)

a[ni + j] = b[j];

ni += n; //乘法改加法

}

計(jì)算機(jī)中乘法指令要比加法指令慢得多。

2. 提取代碼中的公共部分2.1 示例代碼

想象一下,我們有一個(gè)圖像,我們把圖像表示為二維數(shù)組,數(shù)組元素代表像素點(diǎn)。我們想要得到給定像素的東、南、西、北四個(gè)鄰居的總和。并求他們的平均值或他們的和。代碼如下所示。

up = val[(i-1)*n + j ];

down = val[(i+1)*n + j ];

left = val[i*n + j-1];

right = val[i*n + j+1];

sum = up + down + left + right;

2.2 分析代碼

將以上代碼編譯后得到匯編代碼如下所示,注意下3,4,5行,有三個(gè)乘以n的乘法運(yùn)算。我們把上面的up和down展開后會發(fā)現(xiàn)四格表達(dá)式中都有i*n + j。因此,可以提取出公共部分,再通過加減運(yùn)算分別得出up、down等的值。

leaq 1(%rsi), %rax # i+1

leaq -1(%rsi), %r8 # i-1

imulq %rcx, %rsi # i*n

imulq %rcx, %rax # (i+1)*n

imulq %rcx, %r8 # (i-1)*n

addq %rdx, %rsi # i*n+j

addq %rdx, %rax # (i+1)*n+j

addq %rdx, %r8 # (i-1)*n+j

2.3 改進(jìn)代碼

long inj = i*n + j;

up = val[inj - n];

down = val[inj + n];

left = val[inj - 1];

right = val[inj + 1];

sum = up + down + left + right;

改進(jìn)后的代碼的匯編如下所示。編譯后只有一個(gè)乘法。減少了6個(gè)時(shí)鐘周期(一個(gè)乘法周期大約為3個(gè)時(shí)鐘周期)。

imulq %rcx, %rsi # i*n

addq %rdx, %rsi # i*n+j

movq %rsi, %rax # i*n+j

subq %rcx, %rax # i*n+j-n

leaq (%rsi,%rcx), %rcx # i*n+j+n

。..

對于GCC編譯器來說,編譯器可以根據(jù)不同的優(yōu)化等級,有不同的優(yōu)化方式,會自動完成以上的優(yōu)化操作。下面我們介紹下,那些必須是我們要手動優(yōu)化的。

3. 消除循環(huán)中低效代碼3.1 示例代碼

程序看起來沒什么問題,一個(gè)很平常的大小寫轉(zhuǎn)換的代碼,但是為什么隨著字符串輸入長度的變長,代碼的執(zhí)行時(shí)間會呈指數(shù)式增長呢?

void lower1(char *s)

{

size_t i;

for (i = 0; i 《 strlen(s); i++)

if (s[i] 》= ‘A’ && s[i] 《= ‘Z’)

s[i] -= (‘A’ - ‘a(chǎn)’);

}

3.2 分析代碼

那么我們就測試下代碼,輸入一系列字符串。

ab7e19f0-b0bf-11eb-bf61-12bb97331649.png

lower1代碼性能測試

當(dāng)輸入字符串長度低于100000時(shí),程序運(yùn)行時(shí)間差別不大。但是,隨著字符串長度的增加,程序的運(yùn)行時(shí)間呈指數(shù)時(shí)增長。

我們把代碼轉(zhuǎn)換成goto形式看下。

void lower1(char *s)

{

size_t i = 0;

if (i 》= strlen(s))

goto done;

loop:

if (s[i] 》= ‘A’ && s[i] 《= ‘Z’)

s[i] -= (‘A’ - ‘a(chǎn)’);

i++;

if (i 《 strlen(s))

goto loop;

done:

}

以上代碼分為初始化(第3行),測試(第4行),更新(第9,10行)三部分。初始化只會執(zhí)行一次。但是測試和更新每次都會執(zhí)行。每進(jìn)行一次循環(huán),都會對strlen調(diào)用一次。

下面我們看下strlen函數(shù)的源碼是如何計(jì)算字符串長度的。

size_t strlen(const char *s)

{

size_t length = 0;

while (*s != ‘’) {

s++;

length++;

}

return length;

}

strlen函數(shù)計(jì)算字符串長度的原理為:遍歷字符串,直到遇到‘’才會停止。因此,strlen函數(shù)的時(shí)間復(fù)雜度為O(N)。lower1中,對于長度為N的字符串來說,strlen 的調(diào)用次數(shù)為N,N-1,N-2 。.. 1。對于一個(gè)線性時(shí)間的函數(shù)調(diào)用N次,其時(shí)間復(fù)雜度接近于O(N2)。

3.3 改進(jìn)代碼

對于循環(huán)中出現(xiàn)的這種冗余調(diào)用,我們可以將其移動到循環(huán)外。將計(jì)算結(jié)果用于循環(huán)中。改進(jìn)后的代碼如下所示。

void lower2(char *s)

{

size_t i;

size_t len = strlen(s);

for (i = 0; i 《 len; i++)

if (s[i] 》= ‘A’ && s[i] 《= ‘Z’)

s[i] -= (‘A’ - ‘a(chǎn)’);

}

將兩個(gè)函數(shù)對比下,如下圖所示。lower2函數(shù)的執(zhí)行時(shí)間得到明顯提升。

ab86c780-b0bf-11eb-bf61-12bb97331649.png

lower1和lower2代碼效率

4. 消除不必要的內(nèi)存引用4.1 示例代碼

以下代碼作用為,計(jì)算a數(shù)組中每一行所有元素的和存在b[i]中。

void sum_rows1(double *a, double *b, long n) {

long i, j;

for (i = 0; i 《 n; i++) {

b[i] = 0;

for (j = 0; j 《 n; j++)

b[i] += a[i*n + j];

}

}

4.2 分析代碼

匯編代碼如下所示。

# sum_rows1 inner loop

.L4:

movsd (%rsi,%rax,8), %xmm0 # 從內(nèi)存中讀取某個(gè)值放到%xmm0

addsd (%rdi), %xmm0 # %xmm0 加上某個(gè)值

movsd %xmm0, (%rsi,%rax,8) # %xmm0 的值寫回內(nèi)存,其實(shí)就是b[i]

addq $8, %rdi

cmpq %rcx, %rdi

jne .L4

這意味著每次循環(huán)都需要從內(nèi)存中讀取b[i],然后再把b[i]寫回內(nèi)存 。b[i] += b[i] + a[i*n + j]; 其實(shí)每次循環(huán)開始的時(shí)候,b[i]就是上一次的值。為什么每次都要從內(nèi)存中讀取出來再寫回呢?

4.3 改進(jìn)代碼

/* Sum rows is of n X n matrix a

and store in vector b */

void sum_rows2(double *a, double *b, long n) {

long i, j;

for (i = 0; i 《 n; i++) {

double val = 0;

for (j = 0; j 《 n; j++)

val += a[i*n + j];

b[i] = val;

}

}

匯編如下所示。

# sum_rows2 inner loop

.L10:

addsd (%rdi), %xmm0 # FP load + add

addq $8, %rdi

cmpq %rax, %rdi

jne .L10

改進(jìn)后的代碼引入了臨時(shí)變量來保存中間結(jié)果,只有在最后的值計(jì)算出來時(shí),才將結(jié)果存放到數(shù)組或全局變量中。

5. 減小不必要的調(diào)用5.1 示例代碼

為了方便舉例,我們定義一個(gè)包含數(shù)組和數(shù)組長度的結(jié)構(gòu)體,主要是為了防止數(shù)組訪問越界,data_t可以是int,long等類型。具體如下所示。

typedef struct{

size_t len;

data_t *data;

} vec;

ab91f240-b0bf-11eb-bf61-12bb97331649.png

vec向量示意圖

get_vec_element函數(shù)的作用是遍歷data數(shù)組中元素并存儲在val中。

int get_vec_element (*vec v, size_t idx, data_t *val)

{

if (idx 》= v-》len)

return 0;

*val = v-》data[idx];

return 1;

}

我們將以以下代碼為例開始一步步優(yōu)化程序。

void combine1(vec_ptr v, data_t *dest)

{

long int i;

*dest = NULL;

for (i = 0; i 《 vec_length(v); i++) {

data_t val;

get_vec_element(v, i, &val);

*dest = *dest * val;

}

}

5.2 分析代碼

get_vec_element函數(shù)的作用是獲取下一個(gè)元素,在get_vec_element函數(shù)中,每次循環(huán)都要與v-》len作比較,防止越界。進(jìn)行邊界檢查是個(gè)好習(xí)慣,但是每次都進(jìn)行就會造成效率降低。

5.3 改進(jìn)代碼

我們可以把求向量長度的代碼移到循環(huán)體外,同時(shí)抽象數(shù)據(jù)類型增加一個(gè)函數(shù)get_vec_start。這個(gè)函數(shù)返回?cái)?shù)組的起始地址。這樣在循環(huán)體中就沒有了函數(shù)調(diào)用,而是直接訪問數(shù)組。

data_t *get_vec_start(vec_ptr v)

{

return v-》data;

}

void combine2 (vec_ptr v, data_t *dest)

{

long i;

long length = vec_length(v);

data_t *data = get_vec_start(v);

*dest = NULL;

for (i=0;i 《 length;i++)

{

*dest = *dest * data[i];

}

}

6. 循環(huán)展開6.1 示例代碼

我們在combine2的代碼上進(jìn)行改進(jìn)。

6.2 分析代碼

循環(huán)展開是通過增加每次迭代計(jì)算的元素的數(shù)量,減少循環(huán)的迭代次數(shù)。

6.3 改進(jìn)代碼

void combine3(vec_ptr v, data_t *dest)

{

long i;

long length = vec_length(v);

long limit = length-1;

data_t *data = get_vec_start(v);

data_t acc = NULL;

/* 一次循環(huán)處理兩個(gè)元素 */

for (i = 0; i 《 limit; i+=2) {

acc = (acc * data[i]) * data[i+1];

}

/* 完成剩余數(shù)組元素的計(jì)算 */

for (; i 《 length; i++) {

acc = acc * data[i];

}

*dest = acc;

}

在改進(jìn)后的代碼中,第一個(gè)循環(huán)每次處理數(shù)組的兩個(gè)元素。也就是每次迭代,循環(huán)索引i加2,在一次迭代中,對數(shù)組元素i和i+1使用合并運(yùn)算。一般我們稱這種為2×1循環(huán)展開,這種變換能減小循環(huán)開銷的影響。

注意訪問不要越界,正確設(shè)置limit,n個(gè)元素,一般設(shè)置界限n-1

7. 累計(jì)變量,多路并行7.1 示例代碼

我們在combine3的代碼上進(jìn)行改進(jìn)。

7.2 分析代碼

對于一個(gè)可結(jié)合和可交換的合并運(yùn)算來說,比如說整數(shù)加法或乘法,我們可以通過將一組合并運(yùn)算分割成兩個(gè)或更多的部分,并在最后合并結(jié)果來提高性能。

特別注意:不要輕易對浮點(diǎn)數(shù)進(jìn)行結(jié)合。浮點(diǎn)數(shù)的編碼格式和其他整型數(shù)等都不一樣。

7.3 改進(jìn)代碼

void combine4(vec_ptr v, data_t *dest)

{

long i;

long length = vec_length(v);

long limit = length-1;

data_t *data = get_vec_start(v);

data_t acc0 = 0;

data_t acc1 = 0;

/* 循環(huán)展開,并維護(hù)兩個(gè)累計(jì)變量 */

for (i = 0; i 《 limit; i+=2) {

acc0 = acc0 * data[i];

acc1 = acc1 * data[i+1];

}

/* 完成剩余數(shù)組元素的計(jì)算 */

for (; i 《 length; i++) {

acc0 = acc0 * data[i];

}

*dest = acc0 * acc1;

}

上述代碼用了兩次循環(huán)展開,以使每次迭代合并更多的元素,也使用了兩路并行,將索引值為偶數(shù)的元素累積在變量acc0中,而索引值為奇數(shù)的元素累積在變量acc1中。因此,我們將其稱為”2×2循環(huán)展開”。運(yùn)用2×2循環(huán)展開。通過維護(hù)多個(gè)累積變量,這種方法利用了多個(gè)功能單元以及它們的流水線能力

8. 重新結(jié)合變換8.1 示例代碼

我們在combine3的代碼上進(jìn)行改進(jìn)。

8.2 分析代碼

到這里其實(shí)代碼的性能已經(jīng)基本接近極限了,就算做再多的循環(huán)展開性能提升已經(jīng)不明顯了。我們需要換個(gè)思路,注意下combine3代碼中第12行的代碼,我們可以改變下向量元素合并的順序(浮點(diǎn)數(shù)不適用)。重新結(jié)合前combine3代碼的關(guān)鍵路徑如下圖所示。

ab9c4ad8-b0bf-11eb-bf61-12bb97331649.png

combine3代碼的關(guān)鍵路徑

8.3 改進(jìn)代碼

void combine7(vec_ptr v, data_t *dest)

{

long i;

long length = vec_length(v);

long limit = length-1;

data_t *data = get_vec_start(v);

data_t acc = IDENT;

/* Combine 2 elements at a time */

for (i = 0; i 《 limit; i+=2) {

acc = acc * (data[i] * data[i+1]);

}

/* Finish any remaining elements */

for (; i 《 length; i++) {

acc = acc * data[i];

}

*dest = acc;

}

重新結(jié)合變換能夠減少計(jì)算中關(guān)鍵路徑上操作的數(shù)量,這種方法增加了可以并行執(zhí)行的操作數(shù)量了,更好地利用功能單元的流水線能力得到更好的性能。重新結(jié)合后關(guān)鍵路徑如下所示。

aba84d92-b0bf-11eb-bf61-12bb97331649.png

combine3重新結(jié)合后關(guān)鍵路徑

9 條件傳送風(fēng)格的代碼9.1 示例代碼

void minmax1(long a[],long b[],long n){

long i;

for(i = 0;i《n;i++){

if(a[i]》b[i]){

long t = a[i];

a[i] = b[i];

b[i] = t;

}

}

}

9.2 分析代碼

現(xiàn)代處理器的流水線性能使得處理器的工作遠(yuǎn)遠(yuǎn)超前于當(dāng)前正在執(zhí)行的指令。處理器中的分支預(yù)測在遇到比較指令時(shí)會進(jìn)行預(yù)測下一步跳轉(zhuǎn)到哪里。如果預(yù)測錯(cuò)誤,就要重新回到分支跳轉(zhuǎn)的原地。分支預(yù)測錯(cuò)誤會嚴(yán)重影響程序的執(zhí)行效率。因此,我們應(yīng)該編寫讓處理器預(yù)測準(zhǔn)確率提高的代碼,即使用條件傳送指令。我們用條件操作來計(jì)算值,然后用這些值來更新程序狀態(tài),具體如改進(jìn)后的代碼所示。

9.3 改進(jìn)代碼

void minmax2(long a[],long b[],long n){

long i;

for(i = 0;i《n;i++){

long min = a[i] 《 b[i] ? a[i]:b[i];

long max = a[i] 《 b[i] ? b[i]:a[i];

a[i] = min;

b[i] = max;

}

}

在原代碼的第4行中,需要對a[i]和b[i]進(jìn)行比較,再進(jìn)行下一步操作,這樣的后果是每次都要進(jìn)行預(yù)測。改進(jìn)后的代碼實(shí)現(xiàn)這個(gè)函數(shù)是計(jì)算每個(gè)位置i的最大值和最小值,然后將這些值分別賦給a[i]和b[i],而不是進(jìn)行分支預(yù)測。

10. 總結(jié)??我們介紹了幾種提高代碼效率的技巧,有些是編譯器可以自動優(yōu)化的,有些是需要我們自己實(shí)現(xiàn)的。現(xiàn)總結(jié)如下。

消除連續(xù)的函數(shù)調(diào)用。在可能時(shí),將計(jì)算移到循環(huán)外。考慮有選擇地妥協(xié)程序的模塊性以獲得更大的效率。

消除不必要的內(nèi)存引用。引入臨時(shí)變量來保存中間結(jié)果。只有在最后的值計(jì)算出來時(shí),才將結(jié)果存放到數(shù)組或全局變量中。

展開循環(huán),降低開銷,并且使得進(jìn)一步的優(yōu)化成為可能。

通過使用例如多個(gè)累積變量和重新結(jié)合等技術(shù),找到方法提高指令級并行。

用功能性的風(fēng)格重寫條件操作,使得編譯采用條件數(shù)據(jù)傳送。

原文標(biāo)題:這幾個(gè)提高代碼運(yùn)行效率的小技巧我一直在用

文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73990

原文標(biāo)題:這幾個(gè)提高代碼運(yùn)行效率的小技巧我一直在用

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    資產(chǎn)管理怎么提高效率

    資產(chǎn)管理怎么提高效率資產(chǎn)管理效率提升需從流程自動化、數(shù)據(jù)可視化、資源優(yōu)化三方面入手,通過智能工具替代人工操作。廣州杰眾智能科技有限公司的RFID技術(shù)方案,可使資產(chǎn)盤點(diǎn)效率提升90%,閑置資產(chǎn)利用率
    的頭像 發(fā)表于 01-28 16:49 ?461次閱讀
    資產(chǎn)管理怎么<b class='flag-5'>提高效率</b>

    提高系統(tǒng)效率幾個(gè)誤解解析

    才會提高系統(tǒng)效率。所以在通信系統(tǒng)中一般只打開指令CACHE,數(shù)據(jù)CACHE即使打開也只局限在部分存儲空間,如堆棧部分。同時(shí)也要求程序設(shè)計(jì) 要兼顧C(jī)ACHE的容量及塊大小,這涉及到關(guān)鍵代碼循環(huán)體的長度
    發(fā)表于 12-15 06:09

    FLASH中的代碼是如何得到運(yùn)行的呢

    以ARM為例: ARM-cortex-M3/4的單片機(jī)(比如STM32 等):該類單片機(jī)的代碼在nor flash中,cortex內(nèi)核可以直接運(yùn)行,不需要將代碼加載到ram中運(yùn)行
    發(fā)表于 12-04 08:06

    MCU代碼需要搬到RAM中才能運(yùn)行嗎?不這樣做會有什么不妥嘛?

    大部分單片機(jī)的代碼直接在nor flash中運(yùn)行,少部分需要加載到ram中。 nor flash可以直接尋址一個(gè)字節(jié),可以找到一個(gè)指令的具體地址,因此可以直接運(yùn)行。 nand flash 的存儲單元
    發(fā)表于 12-04 07:39

    HarmonyOS應(yīng)用代碼混淆技術(shù)方案

    代碼混淆技術(shù)可以增加代碼的復(fù)雜性和模糊性,從而提高攻擊者分析代碼的難度。
    的頭像 發(fā)表于 11-21 16:17 ?5607次閱讀
    HarmonyOS應(yīng)用<b class='flag-5'>代碼</b>混淆技術(shù)方案

    通過優(yōu)化代碼提高MCU運(yùn)行效率

    編譯器優(yōu)化 熟悉并合理使用編譯器優(yōu)化選項(xiàng),如GCC的 -O2, -Os。 -O2:側(cè)重于速度優(yōu)化。 -Os:側(cè)重于代碼大小優(yōu)化,有時(shí)對緩存更友好,反而更快。 將常用函數(shù)聲明為 inline,減少函數(shù)
    發(fā)表于 11-12 08:21

    怎樣提高單相交流電機(jī)的效率

    提高單相交流電機(jī)效率是一個(gè)涉及設(shè)計(jì)優(yōu)化、材料選擇、運(yùn)行維護(hù)等多方面的系統(tǒng)工程。以下從技術(shù)原理、實(shí)用方法和前沿趨勢三個(gè)維度,系統(tǒng)闡述提升效率的可行方案: 一、核心原理與
    的頭像 發(fā)表于 11-12 07:40 ?625次閱讀

    在極海APM32系列MCU中如何把代碼重定位到SDRAM運(yùn)行

    在有些情況下,我們想要把代碼放到SDRAM運(yùn)行。下面介紹在APM32的MCU中,如何把代碼重定位到SDRAM運(yùn)行。對于不同APM32系列的MCU,方法都是一樣的。
    的頭像 發(fā)表于 11-04 09:14 ?5179次閱讀
    在極海APM32系列MCU中如何把<b class='flag-5'>代碼</b>重定位到SDRAM<b class='flag-5'>運(yùn)行</b>

    提高RISC-V在Drystone測試中得分的方法

    速度。 優(yōu)化內(nèi)存系統(tǒng):優(yōu)化內(nèi)存控制器設(shè)計(jì),提高內(nèi)存的讀寫速度、降低延遲,或者增大內(nèi)存帶寬。 優(yōu)化指令集和編譯器:通過優(yōu)化或定制指令集,以及優(yōu)化編譯器來生成更高效的機(jī)器代碼。 軟件優(yōu)化:對運(yùn)行的軟件進(jìn)行優(yōu)化
    發(fā)表于 10-21 13:58

    諧波會對新能源設(shè)備的運(yùn)行效率產(chǎn)生哪些影響?

    諧波對新能源設(shè)備運(yùn)行效率的影響,本質(zhì)是通過 增加額外損耗、干擾控制邏輯、導(dǎo)致設(shè)備降額運(yùn)行 三大路徑實(shí)現(xiàn),覆蓋光伏、風(fēng)電、儲能及配套并網(wǎng)設(shè)備,最終表現(xiàn)為 “轉(zhuǎn)換效率下降、出力受限、隱性能
    的頭像 發(fā)表于 10-14 16:47 ?822次閱讀

    嵌入式系統(tǒng)中,F(xiàn)LASH 中的程序代碼必須搬到 RAM 中運(yùn)行嗎?

    嵌入式系統(tǒng)里,F(xiàn)LASH 中的程序代碼并非必須搬到 RAM 中運(yùn)行,這得由硬件配置、實(shí)際性能需求和應(yīng)用場景共同決定。就像很多低端單片機(jī),無論是依賴片內(nèi) Flash 還是外掛的 SPI NOR
    的頭像 發(fā)表于 08-06 10:19 ?1366次閱讀
    嵌入式系統(tǒng)中,F(xiàn)LASH 中的程序<b class='flag-5'>代碼</b>必須搬到 RAM 中<b class='flag-5'>運(yùn)行</b>嗎?

    TLE9893 怎么將代碼放在ram中運(yùn)行

    如題,我希望將我的中斷回調(diào)函數(shù)放進(jìn)ram中運(yùn)行以保證他的運(yùn)行速度更快。那么我該怎么修改程序才能做到呢?或者有沒有相關(guān)的例程給我參考一下。
    發(fā)表于 07-14 08:00

    RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫運(yùn)行代碼

    在RAKsmart企業(yè)服務(wù)器上部署并運(yùn)行DeepSeek模型的代碼示例和詳細(xì)步驟。假設(shè)使用 Python + Transformers庫 + FastAPI實(shí)現(xiàn)一個(gè)基礎(chǔ)的AI服務(wù)。主機(jī)推薦小編為您整理發(fā)布RAKsmart企業(yè)服務(wù)器上部署DeepSeek編寫
    的頭像 發(fā)表于 03-25 10:39 ?705次閱讀

    功率設(shè)備控制可使用過零檢芯片CN71102提高轉(zhuǎn)換效率

    功率設(shè)備控制可使用過零檢芯片CN71102提高轉(zhuǎn)換效率
    的頭像 發(fā)表于 03-25 09:43 ?822次閱讀
    功率設(shè)備控制可使用過零檢芯片CN71102<b class='flag-5'>提高</b>轉(zhuǎn)換<b class='flag-5'>效率</b>

    STM32使用ISp燒錄HEX文件運(yùn)行代碼重新編譯之后的產(chǎn)生的新hex文件選擇全片擦除就沒辦法正常運(yùn)行,為什么?

    ISP選擇擦除重要部分在下載,才是正常的正確的代碼現(xiàn)象是燈可以閃爍,能連接上串口。新編譯的HEX文件如果全片擦除,則沒有任何現(xiàn)象。只有選擇老的(正確的)HEX文件ISP下載一次,新編譯的HEX文件再ISP燒錄一遍才能運(yùn)行成功。
    發(fā)表于 03-10 07:42