討論區快速選單
知識庫快速選單
網路投保旅行平安險 討論區最近新進100則主題 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
C# C++ Assembly 可以有高效率的結合
更改我的閱讀文章字型大小
作者 : ho520(ho)
[ 貼文 16 | 人氣 9 | 評價 60 | 評價/貼文 3.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/6 下午 05:51:26
提供我的測試程式

https://www.youtube.com/watch?v=YSa4FvjxapU
作者 : xiaolaba(xiaolaba)
[ 貼文 23 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/5/27 上午 10:19:06
如果可以直接在此提供連結CODE會更好
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2180 | 人氣 89850 | 評價 10110 | 評價/貼文 4.64 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/5/31 上午 01:56:49
沒源碼, 本應沒法有意思的討論的.
可是呢... 其實只需簡單地把 C# 除掉 + 單純用正確地用C++寫程式 + 不編半調子的Assembly, 大概會比你現在的程式跑得更快.

C# 是超慢的東東, C#程式 是用模擬器跑的啊. 用C#寫程式, 執行速度嘛... 比單純用C++寫的程式, 根本就連論討的意義也沒有.

至於在C++源碼裡, 補一刀自訂Assembly呢... 這是多此一舉了. C++編譯器的其中一項主要工作, 就是對 machine code 進行優化.

打個比喻吧, 你的自訂Assembly, 就彷彿是在電腦底版上 拔掉一顆廉價電容 換上一顆貴價電容 一般; 對整體效能而言,
這行動是有點多餘吧. 人家設計電腦底版時, 是對著全局考慮 去優化, "瞎子摸象地亂改" 是無法相提並論的.

C++ 配搭 Assembly 寫視窗程式 的例子嘛... 很久很久以前, 用多媒體指令集(SSE)時, 會這樣寫的. 可是, 少說都是20年以前的事了,
當然, 現在這些都由 C++編譯器 代勞啦.

作者 : ho520(ho)
[ 貼文 16 | 人氣 9 | 評價 60 | 評價/貼文 3.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 上午 08:42:28
;如何將(rgb)的圖最高速轉成灰階(aaa)?
;比c++快至少6倍


.data

align 16

; Gray = R* 0.299 + G* 0.587 + B* 0.114

; 0.299 * 256 = 77
; 0.587 * 256 = 150
; 0.114 * 256 = 29

;一半(無號數)
;0.2989*128=37
;0.587*128=75
;0.114*128=15


_Mu db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0
db 15 , 75 , 37 , 0

_IDX DB 1,1,1,-1
DB 3,3,3,-1
DB 5,5,5,-1
DB 7,7,7,-1
DB 09,09,09,-1
DB 11,11,11,-1
DB 13,13,13,-1
DB 15,15,15,-1



.code

ConvertGray32 Proc

SRC equ rcx
DES equ rdx
LEN equ r8d

mov eax , 0080h
movd xmm0 , eax
VPBROADCASTW ymm5 , xmm0

vMOVDQA ymm3 , ymmword ptr _Mu
vMOVDQA ymm4 , ymmword ptr _IDX


shr LEN , 4 ;一次算16個點

align 16

@loop:

vmovdqa ymm0 , ymmword ptr [src]
vpmaddubsw ymm0 , ymm0 , ymm3

vmovdqa ymm1 , ymmword ptr [src+32]
vpmaddubsw ymm1 , ymm1 , ymm3

vphaddw ymm0 , ymm0 , ymm1
vpsllw ymm0 , ymm0 , 1 ; x2
VPADDUSW ymm0 ,ymm0 ,ymm5 ;用於四捨五入

VPERMQ ymm1 , ymm0 , 10001000b ;Qwords元素置換 3,2,1,0 to 2,0,2,0
vpshufb ymm1 , ymm1 , ymm4 ;亂序存放
vmovdqa ymmword ptr [des] , ymm1

VPERMQ ymm2 , ymm0 , 11011101b ;Qwords元素置換 3,2,1,0 to 3,1,3,1
vpshufb ymm2 , ymm2 , ymm4 ;亂序存放
vmovdqa ymmword ptr [des+32] , ymm2

dec LEN
lea SRC , [SRC+32*2]
lea DES , [DES+32*2]
jnz @loop

ret

ConvertGray32 Endp

end



作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2180 | 人氣 89850 | 評價 10110 | 評價/貼文 4.64 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 上午 10:56:09

論快慢,就是比較,要兩件東東 才能比。你只貼一個程式的原碼,比較什麼?
作者 : wallace_tsou(Wallace) 貼文超過200則
[ 貼文 256 | 人氣 314 | 評價 960 | 評價/貼文 3.75 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 下午 01:21:13
利用定點數運算是可以速度快一點.
但等於是寫法VS演算法(組語)
但C也可以寫出定點數運算。
若是用C寫的定點數VS組合語言定點數。這樣才是同一個基準。
不過成本分析就很划不來。
C寫不用一小時含除錯, 組合這言除錯不易,最好是和C一樣,一般多出二倍以上。
另外C工程師和組合語言工程師薪水也不同,C比較便宜又好找。

若是固定式影像計算公式,轉去GPU或用FPGA更合適。
這個時代,組合語言用處不大。
作者 : wallace_tsou(Wallace) 貼文超過200則
[ 貼文 256 | 人氣 314 | 評價 960 | 評價/貼文 3.75 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 下午 01:35:07
再論不用GPU是好事嗎?
現在每一台PC/NB都有GPU,這是很普遍的東西,不去用為何好處?
轉去伺服器一樣有GPU。
除非你是MCU工程師,才會只有使用CPU的這個限制存在。
作者 : ho520(ho)
[ 貼文 16 | 人氣 9 | 評價 60 | 評價/貼文 3.75 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 下午 10:19:05
只能說,組合語言沒20年功力,真的不如用C++寫

或是組合語言沒有超過C++效能的2倍以上,也不必多花時間寫ASM

我寫程式方式可能超乎你的想像

先用C++寫出正確的結果當範本,在重寫一套最佳化組合語言

這樣DEBUG時可以跟C++的程式作對照,縮短除錯時間

還有一個好處,就是C++設成最佳化效能的機器碼可以當成寫組合語言的參考,看他如何利用CPU cache

如果發現C++的機器碼確實沒有更好的最佳化,那就略過組合語言的重寫
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2180 | 人氣 89850 | 評價 10110 | 評價/貼文 4.64 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 下午 11:27:08
哦... 這樣啊... 哦哦... 這樣這樣啊...

傳聞中 被用作比較的C++原碼 呢? 有打算貼出來,令上面 不可能被證明的"6倍速度",變成能被驗證嗎?

(... 至於覆歷嘛... 請問覆歷跟編程式有啥關係? 真的這麼想要拼覆歷,我把我的覆歷寄你,讓你自己一個人拼個夠吧。 -_-||| 真是的。 )
作者 : wallace_tsou(Wallace) 貼文超過200則
[ 貼文 256 | 人氣 314 | 評價 960 | 評價/貼文 3.75 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2019/2/17 下午 11:54:58
C/C++是用來對付少量處理器用的語言.
遇到GPU或是平行處理,就有點不太行。為此才會又誕生go語言。
至於組語寫GPU真的就不是人寫的了。
個人認為終極語言是一種高階語言,在編譯時才生成處理器結構。
也就是以FPGA做為實行方法,實在上依據寫出來的工作,合成單一或是多處理器結構。
根本也不會生成組合語言,直接生成電路。

這樣的想法是有語言存在= system C

因為看到這樣的規格。個人覺得去研究組合語言並沒有未來。所以就轉向去看其他加速處理的方法。
 板主 : 徵求中
 > 組合語言 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 組合語言 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
組合語言
1 H 2220 
2 liaoo 990 
3 青衫 970 
4 牧童哥 940 
5 史努比 920 
6 qq 480 
7 GHOST-JACKY 330 
8 ]CALL-151 310 
9 harrison 300 
10 掌握文武半邊天 280 
組合語言
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875