Arm平臺下各種memcpy優化對比<二>

??????? 因memcpy導致tda4vm上的h264解碼占CPU較高而改棄,從網上找到各種memcpy的優化代碼,在一起做了個運行速度對比,請查收;

#include <stdio.h>
#include <stdlib.h>     /* rand, srand */
#include <string.h>
#include <assert.h>
#include <sys/time.h>
#include <time.h>       /* time() *//* Nonzero if either X or Y is not aligned on a "long" boundary.  */
#define UNALIGNED(X, Y)    (((long)X & (sizeof(long) - 1)) | ((long)Y & (sizeof(long) - 1)))/* How many bytes are copied each iteration of the 4X unrolled loop.  */
#define BIGBLOCKSIZE    (sizeof(long) << 2)/* How many bytes are copied each iteration of the word copy loop.  */
#define LITTLEBLOCKSIZE (sizeof(long))/* Threshhold for punting to the byte copier.  */
#define TOO_SMALL(LEN)  ((LEN) < BIGBLOCKSIZE)char *memcopy_super(char* dest0, const char *src0, size_t len0)
{assert(dest0 && src0 && (len0 > 0));char *dest = dest0;const char *src = src0;long *aligned_dest;const long *aligned_src;/* If the size is small, or either SRC or DST is unaligned,then punt into the byte copy loop.  This should be rare.  */if (!TOO_SMALL(len0) && !UNALIGNED(src, dest)) {aligned_dest = (long *)dest;aligned_src = (long *)src;/* Copy 4X long words at a time if possible.  */while (len0 >= BIGBLOCKSIZE) {*aligned_dest++ = *aligned_src++;*aligned_dest++ = *aligned_src++;*aligned_dest++ = *aligned_src++;*aligned_dest++ = *aligned_src++;len0 -= BIGBLOCKSIZE;}/* Copy one long word at a time if possible.  */while (len0 >= LITTLEBLOCKSIZE) {*aligned_dest++ = *aligned_src++;len0 -= LITTLEBLOCKSIZE;}/* Pick up any residual with a byte copier.  */dest = (char *)aligned_dest;src = (char *)aligned_src;}while (len0--)*dest++ = *src++;return dest0;
}static void get_rand_bytes(unsigned char *data, int len)
{int i;srand((unsigned)time(NULL)); //種下隨機種子for (i = 0; i < len; i++) {data[i] = rand() % 255; //取隨機數,并保證數在0-255之間//printf("%02X ", data[i]);}  
}static int get_cur_time_us(void)
{struct timeval tv;gettimeofday(&tv, NULL);  //使用gettimeofday獲取當前系統時間return (tv.tv_sec * 1000 * 1000 + tv.tv_usec); //利用struct timeval結構體將時間轉換為ms
}#define ARRAY_SIZE(n)  sizeof(n) / sizeof(n[0])int main(void)
{int size_list[] = {1024 * 1024 * 10,  // 10MB1024 * 1024 * 1,  // 1MB1024 * 100, // 100KB1024 * 10, // 10KB1024 * 1, // 1KB};char *data1;char *data2;int t1;int t2;int i = 0;data1 = (char *)malloc(size_list[0]);data2 = (char *)malloc(size_list[0]);get_rand_bytes((unsigned char *)data1, size_list[0]);for (i = 0; i < ARRAY_SIZE(size_list); i++) {t1 = get_cur_time_us();memcpy(data2, data1, size_list[i]);t2 = get_cur_time_us();printf("copy %d bytes, memcpy   waste time %dus\n", size_list[i], t2 - t1);t1 = get_cur_time_us();memcopy_super(data2, data1, size_list[i]);t2 = get_cur_time_us();printf("copy %d bytes, memcopy_super  waste time %dus\n\n", size_list[i], t2 - t1);}free(data1);free(data2);return 0;
}

#if 0

copy 10485760 bytes, memcpy?? waste time 6502us
copy 10485760 bytes, memcopy_super? waste time 12689us

copy 1048576 bytes, memcpy?? waste time 659us
copy 1048576 bytes, memcopy_super? waste time 999us

copy 102400 bytes, memcpy?? waste time 76us
copy 102400 bytes, memcopy_super? waste time 73us

copy 10240 bytes, memcpy?? waste time 1us
copy 10240 bytes, memcopy_super? waste time 5us

copy 1024 bytes, memcpy?? waste time 1us
copy 1024 bytes, memcopy_super? waste time 1us


#endif

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

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

相關文章

智慧公廁:打造智慧城市的環衛明珠

在城市建設中&#xff0c;公共衛生設施的完善和智能化一直是重要環節。而智慧公廁作為智慧城市建設的重要組成部分&#xff0c;發揮著不可替代的作用。本文以智慧公廁源頭實力廠家廣州中期科技有限公司&#xff0c;大量精品案例現場實景實圖&#xff0c;解讀智慧公廁如何助力打…

【數據結構】B樹

1 B樹介紹 B樹&#xff08;英語&#xff1a;B-tree&#xff09;&#xff0c;是一種在計算機科學自平衡的樹&#xff0c;能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作&#xff0c;都在對數時間內完成。B樹&#xff0c;概括來說是一個一般化的…

MySQL高可用性攻略:快速搭建MySQL主從復制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主從復制集群 &#xff01; MySQL基礎知識&#xff1a;介紹MySQL數據庫的基本概念和常用命令&#xff0c;如何創建數據庫、表、用戶和權限管理等。 MySQL安裝教程&#xff1a;Centos7 安裝MySQL5.7.29詳細安裝手冊 MySQL數據類型&…

【大廠AI課學習筆記NO.63】模型的維護

說是模型的維護&#xff0c;其實這堂課都是在講“在工業環境中開發和部署機器學習模型的流程”。 上圖來自于我的筆記思維腦圖&#xff0c;已經上傳&#xff0c;要鏈接的訪問的主頁查看資源。 一路走來&#xff0c;我們學習了數據管理、模型學習、模型驗證、模型部署等重要的步…

arm板運行程序時尋找動態庫的路徑設置

問題&#xff1a;error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file&#xff1f; 第一種方法---- 解決&#xff1a; ①復制需要用到的arm庫到板子上。 ②pwd指令獲取該庫的絕對路徑&#xff0c;把路徑復制到/etc/ld.so.conf文件 ③輸…

Leetcoder Day37| 動態規劃part04 背包問題

01背包理論基礎 面試掌握01背包&#xff0c;完全背包和重背包就夠用了。 背包問題的理論基礎重中之重是01背包&#xff0c;一定要理解透&#xff01; 01 背包 有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品…

隱式馬爾科夫算法

隱式馬爾科夫算法 隱式馬爾科夫算法概述算法使用HMM 模型參數設置HMM 模型分類1. Gaussian HMM2. Multinomial HMM3. GMM HMM 其他機器學習算法&#xff1a;機器學習實戰工具安裝和使用 隱式馬爾科夫算法概述 隱式馬爾科夫算法是一種用于處理時序數據的強大工具&#xff0c;其…

css通過calc動態計算寬度

max-width: calc(100% - 40px) .m-mj-status-drawing-info-data{ display: inline-block; margin: 10px; min-width: 200px; padding: 10px;border-radius: 10px; background: #ddd;max-width: calc(100% - 40px);word-wrap: break-word;white-space: pre-line;}我開發的chatg…

計算機二級(Python)真題講解每日一題:《字典字符查找》

描述???????????????????????????????????????????????????????????????????????????????????????????????????????????????? 在右側的答題模板中&#xf…

Crash 實例

1.spinlock原理 為了解決這個spinlock的不公平問題&#xff0c;linux 2.6.25內核以后&#xff0c;spinlock采用了一種"FIFO ticket-based"算法的spinlock機制&#xff0c;可以很好的實現先來先搶占的思想。具體的做法如下&#xff1a; (1)、spinlock的核心字段有ow…

C語言-柔性數組成員的使用

文章目錄 摘要柔性數組成員基本使用細節探究 零長度數組-定長數組-變長數組 摘要 本文先介紹柔性數組成員(flexible array member)的基本使用&#xff0c;然后介紹其內存結構。最后&#xff0c;補充了一些數組相關的其他概念。 柔性數組成員 基本使用 參考: 【C語言內功修煉…

[項目設計] 從零實現的高并發內存池(一)

&#x1f308; 博客個人主頁&#xff1a;Chris在Coding &#x1f3a5; 本文所屬專欄&#xff1a;[高并發內存池] ?? 前置學習專欄&#xff1a;[Linux學習] ? 我們仍在旅途 ? 目錄 前言 項目介紹 1.內存池 1.1 什么是內存池 池化技術 內存池 1.2 為什…

word使用bib添加參考文獻

文章目錄 安裝TexLive安裝bibtex4word使用在word中添加參考文獻使用bibtex4word在word中添加參考文獻設置參考文獻格式為畢業論文格式 參考 安裝TexLive 從下載地址下載鏡像iso文件texlive2023.iso雙擊打開iso鏡像文件運行 install-tl-windows.bat點擊安裝非常非常非常耐心地安…

Shell學習 - 2.20 Shell exit命令:退出當前進程

exit 是一個 Shell 內置命令&#xff0c;用來退出當前 Shell 進程&#xff0c;并返回一個退出狀態&#xff1b;使用$?可以接收這個退出狀態&#xff0c;這一點已在《Shell $?》中進行了講解。 exit 命令可以接受一個整數值作為參數&#xff0c;代表退出狀態。如果不指定&…

Linux命令-clock命令(用于調整 RTC 時間)

說明 clock命令用于調整 RTC 時間。 RTC 是電腦內建的硬件時間&#xff0c;執行這項指令可以顯示現在時刻&#xff0c;調整硬件時鐘的時間&#xff0c;將系統時間設成與硬件時鐘之時間一致&#xff0c;或是把系統時間回存到硬件時鐘。 語法 clock [--adjust][--debug][--dir…

客戶端/服務器協議是啥意思?

客戶端/服務器協議是指在網絡通信中&#xff0c;客戶端和服務器之間進行數據傳輸時所使用的規定。簡單來說&#xff0c;客戶端是用戶使用的設備&#xff0c;如電腦或手機&#xff0c;而服務器則是提供數據或服務的遠程計算機。當客戶端需要獲取數據或服務時&#xff0c;它會向服…

【RT-DETR有效改進】結合SOTA思想利用雙主干網絡改進RT-DETR(全網獨家創新,重磅更新)

一、本文介紹 本文給大家帶來的改進機制是結合目前SOTAYOLOv9的思想利用雙主干網絡來改進RT-DETR&#xff08;本專欄目前發布以來改進最大的內容&#xff0c;同時本文內容為我個人一手整理全網獨家首發 | 就連V9官方不支持的模型寬度和深度修改我都均已提供&#xff0c;本文內…

【活動】金三銀四,前端工程師如何把握求職黃金期

隨著春意盎然的氣息彌漫大地&#xff0c;程序員群體中也迎來了一年一度的“金三銀四”求職熱潮。這個時間段對于廣大前端工程師而言&#xff0c;不僅象征著生機勃發的新起點&#xff0c;更是他們職業生涯中至關重要的轉折點。眾多知名公司在這一時期大規模開啟招聘通道&#xf…

ChatGPT 4.0使用之論文閱讀

文章目錄 閱讀環境準備打開AskYourPDF進入主站 粗讀論文直接通過右側邊框進行提問選中文章內容翻譯或概括插圖的理解 總結 擁有了GPT4.0之后&#xff0c;最重要的就是學會如何充分發揮它的強大功能&#xff0c;不然一個月20美元的費用花費的可太心疼了&#xff08;家境貧寒&…

WP外貿營銷型網站模板

WordPress外貿獨立站主題 簡潔實用的WordPress外貿獨立站主題&#xff0c;適合時尚服裝行業搭建wordpress企業官網使用。 零件配件WordPress外貿建站模板 汽車行業零配件WordPress外貿建站模板&#xff0c;賣配件、零件的外貿公司可以使用的WordPress主題。 https://www.jia…