'잡동사니'에 해당되는 글 13031건

  1. 2023.08.28 debian nvme tool
  2. 2023.08.28 makefile 매크로(?)
  3. 2023.08.27 3d dlp 120Hz가 왜 망했냐면..
  4. 2023.08.26 multicast
  5. 2023.08.25 ffb - force feedback
  6. 2023.08.24 golang asm
  7. 2023.08.23 aarch64 vector register
  8. 2023.08.23 golang goarch=arm64 와 디스어셈블러
  9. 2023.08.23 dB(데시벨-상대값)과 dBm(절대값)
  10. 2023.08.23 vRAN
Linux/Ubuntu2023. 8. 28. 12:27

프리징이 조금씩 걸리는 느낌이라 불안해서 상태보는 걸 찾는 중인데..

nvme 라는 다른 유틸리티로 봐야 하는 듯.. smartctl 로는 안되나?

 

$ sudo apt-get install nvme-cli
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료        
다음 새 패키지를 설치할 것입니다:
  nvme-cli
0개 업그레이드, 1개 새로 설치, 0개 제거 및 3개 업그레이드 안 함.
474 k바이트 아카이브를 받아야 합니다.
이 작업 후 1,136 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://kr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 nvme-cli amd64 1.16-3ubuntu0.1 [474 kB]
내려받기 474 k바이트, 소요시간 2초 (229 k바이트/초)
Selecting previously unselected package nvme-cli.
(데이터베이스 읽는중 ...현재 255415개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../nvme-cli_1.16-3ubuntu0.1_amd64.deb ...
Unpacking nvme-cli (1.16-3ubuntu0.1) ...
nvme-cli (1.16-3ubuntu0.1) 설정하는 중입니다 ...
Created symlink /etc/systemd/system/default.target.wants/nvmefc-boot-connections.service → /lib/systemd/system/nvmefc-boot-connections.service.
Created symlink /etc/systemd/system/default.target.wants/nvmf-autoconnect.service → /lib/systemd/system/nvmf-autoconnect.service.
nvmf-connect.target is a disabled or a static unit, not starting it.
Processing triggers for man-db (2.10.2-1) ...


$ sudo nvme list
Node                  SN                   Model                                    Namespace Usage                      Format           FW Rev  
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1          S649NL0W000000F      Samsung SSD 980 1TB                      1         229.90  GB /   1.00  TB    512   B +  0 B   3B4QFXO7



$ sudo nvme smart-log /dev/nvme0
Smart Log for NVME device:nvme0 namespace-id:ffffffff
critical_warning : 0
temperature : 41 C (314 Kelvin)
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 0%
endurance group critical warning summary: 0
data_units_read : 483,823
data_units_written : 1,853,867
host_read_commands : 5,443,068
host_write_commands : 31,140,950
controller_busy_time : 94
power_cycles : 48
power_on_hours : 72
unsafe_shutdowns : 9
media_errors : 0
num_err_log_entries : 0
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1           : 41 C (314 Kelvin)
Temperature Sensor 2           : 40 C (313 Kelvin)
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0

[링크 : https://linuxhint.com/check-ssd-health-ubuntu/]

[링크 : https://itslinuxfoss.com/test-ssd-hdd-health-in-linux/]

'Linux > Ubuntu' 카테고리의 다른 글

우분투로 공유기 만들기  (2) 2024.02.23
ubuntu pro?  (2) 2024.01.31
edid-read  (0) 2023.08.17
ubutnu file(파일) 에서 삼바 목록 안나오고 부적절한 인수 에러  (0) 2023.07.24
htop graph style  (0) 2023.07.07
Posted by 구차니

$# 인자의 갯수

$@ 현재 타겟의 이름 (나열)

$* 현재 타겟의 이름 (하나로)

$^ 현재 타겟의 종속 항목 리스트

[링크 : https://yooloo.tistory.com/m/131]

[링크 : https://bowbowbow.tistory.com/12]

'프로그램 사용 > make, configure' 카테고리의 다른 글

make 조건식  (0) 2023.08.16
cmake ninja, cmake 옵션주기  (0) 2022.12.07
cmake 옵션 확인  (0) 2021.01.20
cmake 빌드 에러시  (0) 2021.01.19
make order  (0) 2016.06.16
Posted by 구차니
하드웨어/Display 장비2023. 8. 27. 21:54

팟플레이어 문제일수도 있지만

스킵하면 바로 싱크가 문제가 생겨 좌/우가 바뀌어 버림

 

반대로.. 상업용으로 120Hz를 2시간 동안 한번도 안틀리고 재생할 수 있을 만큼

안정적이고 강력한 성능을 지녀야 한다면 너무 비싸지지 않았을까?

 

아무튼 그런 이유로 60Hz로도 충분하게 작동하는

Side by Side나 Top and bottom(혹은 Over and Under)가 대세가 된게 아닐까 생각이 든다.

 

+

2023.09.04

5분 동안에 5번 정도 좌우가 바뀌는걸 보면

내가 셋팅을 잘못했던가, 충전이 덜 되었거나 그것도 아니면 원래 불안정한 녀석이거나..

Posted by 구차니

iptime 공유기를 보는데 iptv 사용이라는 항목에

이런 주소가 보여서 multicast 주소 같은데 왜 뜬금없이 iptv라고 해둔거야? 하면서 보는데

의외로 저 주소에 추가된 ip들이 꽤 있어서 조사해 보는 중

233.233.233.233 (01:00:5e:69:e9:e9)
224.3.1.200 (01:00:5e:03:01:c8)
239.5.6.11 (01:00:5e:05:06:0b)
239.5.6.10 (01:00:5e:05:06:0a)
239.5.6.15 (01:00:5e:05:06:0f)
239.255.255.253 (01:00:5e:7f:ff:fd)
239.255.102.18 (01:00:5e:7f:66:12)

 

     * 한편, IP 멀티캐스트 주소 변환용으로, 01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF
             범위가 예약됨 (RFC 1112 : Host Extensions for IP Multicasting)

[링크 : http://www.ktword.co.kr/test/view/view.php?m_temp1=2294]

 

ip multicast와 ethernet multicast라.. 무슨 차이지?


[링크 :
http://www.ktword.co.kr/test/view/view.php?m_temp1=5390&id=708]

 

- 주소 범위 : 224.0.0.0 ~ 239.255.255.255 

[링크 : http://www.ktword.co.kr/test/view/view.php?m_temp1=3607]

'이론 관련 > 네트워크 관련' 카테고리의 다른 글

can invader  (0) 2024.01.09
cobs  (0) 2023.05.25
PAM4  (0) 2023.01.16
nrz encoding/decoding  (0) 2022.08.24
광 케이블 DAC, AOC  (0) 2022.06.30
Posted by 구차니

 

 

[링크 : https://learn.microsoft.com/en-us/windows/uwp/gaming/racing-wheel-and-force-feedback]

 

$ apt-cache search fftest
joystick - set of testing and calibration tools for joysticks

[링크 : https://www.kernel.org/doc/html/v4.12/input/ff.html]

 

[링크 : https://github.com/tloimu/adapt-ffb-joy]

 

 

2024.10.07

https://github.com/flosse/linuxconsole/blob/master/utils/fftest.c

'모종의 음모 > force feedback' 카테고리의 다른 글

new-lg4ff 와 oversteer 설치 시도  (0) 2024.10.12
플심용 자작 시뮬레이터  (2) 2024.10.11
ffb (force feedback) linux driver  (0) 2024.10.07
AVR FFB(force feedback)  (0) 2021.06.29
usb joystick DIY / Force Feedback  (2) 2018.03.04
Posted by 구차니
Programming/golang2023. 8. 24. 10:27

고언어 에서 디스어셈블 가능하대서 해보는데

먼가.. 많이 보던(?) objdump와는 출력 포맷이 달라서 찾아보게 됨.

$ GOARCH=arm64 go build -gcflags -S .
# tt
main.main STEXT size=240 args=0x0 locals=0x818 funcid=0x0 align=0x0
0x0000 00000 (/home/user/work/src/goneon/neon.go:3) TEXT main.main(SB), ABIInternal, $2080-0
0x0000 00000 (/home/user/work/src/goneon/neon.go:3) MOVD 16(g), R16
0x0004 00004 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x0004 00004 (/home/user/work/src/goneon/neon.go:3) SUB $1952, RSP, R17
0x0008 00008 (/home/user/work/src/goneon/neon.go:3) CMP R16, R17
0x000c 00012 (/home/user/work/src/goneon/neon.go:3) BLS 220
0x0010 00016 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x0010 00016 (/home/user/work/src/goneon/neon.go:3) SUB $2080, RSP, R20
0x0014 00020 (/home/user/work/src/goneon/neon.go:3) STP (R29, R30), -8(R20)
0x0018 00024 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x0018 00024 (/home/user/work/src/goneon/neon.go:3) MOVD R20, RSP
0x001c 00028 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x001c 00028 (/home/user/work/src/goneon/neon.go:3) SUB $8, RSP, R29
0x0020 00032 (/home/user/work/src/goneon/neon.go:3) FUNCDATA $0, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:3) FUNCDATA $1, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (<unknown line number>) NOP
0x0020 00032 (/home/user/work/src/goneon/neon.go:4) MOVD $main..autotmp_5-1024(SP), R20
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) PCDATA $0, $-2
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) ADR 52, runtime.duffzero(R27)(R27)(REG)
0x0028 00040 (/home/user/work/src/goneon/neon.go:9) STP (R29, R27), -24(RSP)
0x002c 00044 (/home/user/work/src/goneon/neon.go:9) SUB $24, RSP, R29
0x0030 00048 (/home/user/work/src/goneon/neon.go:9) DUFFZERO runtime.duffzero(SB)
0x0034 00052 (/home/user/work/src/goneon/neon.go:9) SUB $8, RSP, R29
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) MOVD $main..autotmp_6-2048(SP), R20
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-2
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) ADR 76, runtime.duffzero(R27)(R27)(REG)
0x0040 00064 (/home/user/work/src/goneon/neon.go:10) STP (R29, R27), -24(RSP)
0x0044 00068 (/home/user/work/src/goneon/neon.go:10) SUB $24, RSP, R29
0x0048 00072 (/home/user/work/src/goneon/neon.go:10) DUFFZERO runtime.duffzero(SB)
0x004c 00076 (/home/user/work/src/goneon/neon.go:10) SUB $8, RSP, R29
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) MOVD ZR, R0
0x0054 00084 (/home/user/work/src/goneon/neon.go:13) JMP 120
0x0058 00088 (/home/user/work/src/goneon/neon.go:14) SBFIZ $2, R0, $32, R2
0x005c 00092 (/home/user/work/src/goneon/neon.go:14) MOVD $main..autotmp_5-1024(SP), R3
0x0060 00096 (/home/user/work/src/goneon/neon.go:14) MOVW R0, (R3)(R2)
0x0064 00100 (/home/user/work/src/goneon/neon.go:15) MOVD $256, R4
0x0068 00104 (/home/user/work/src/goneon/neon.go:15) SUB R0, R4, R5
0x006c 00108 (/home/user/work/src/goneon/neon.go:15) MOVD $main..autotmp_6-2048(SP), R6
0x0070 00112 (/home/user/work/src/goneon/neon.go:15) MOVW R5, (R6)(R2)
0x0074 00116 (/home/user/work/src/goneon/neon.go:13) ADD $1, R0, R0
0x0078 00120 (/home/user/work/src/goneon/neon.go:13) CMPW $256, R0
0x007c 00124 (/home/user/work/src/goneon/neon.go:13) BGE 144
0x0080 00128 (/home/user/work/src/goneon/neon.go:14) MOVW R0, R2
0x0084 00132 (/home/user/work/src/goneon/neon.go:14) CMP $256, R2
0x0088 00136 (/home/user/work/src/goneon/neon.go:14) BLO 88
0x008c 00140 (/home/user/work/src/goneon/neon.go:14) JMP 204
0x0090 00144 (/home/user/work/src/goneon/neon.go:14) MOVD ZR, R0
0x0094 00148 (/home/user/work/src/goneon/neon.go:13) JMP 156
0x0098 00152 (/home/user/work/src/goneon/neon.go:18) ADD $1, R0, R0
0x009c 00156 (/home/user/work/src/goneon/neon.go:18) CMPW $256, R0
0x00a0 00160 (/home/user/work/src/goneon/neon.go:18) BGE 180
0x00a4 00164 (/home/user/work/src/goneon/neon.go:19) MOVW R0, R2
0x00a8 00168 (/home/user/work/src/goneon/neon.go:19) CMP $256, R2
0x00ac 00172 (/home/user/work/src/goneon/neon.go:19) BLO 152
0x00b0 00176 (/home/user/work/src/goneon/neon.go:19) JMP 192
0x00b4 00180 (/home/user/work/src/goneon/neon.go:5) LDP -8(RSP), (R29, R30)
0x00b8 00184 (/home/user/work/src/goneon/neon.go:5) ADD $2080, RSP
0x00bc 00188 (/home/user/work/src/goneon/neon.go:5) RET (R30)
0x00c0 00192 (/home/user/work/src/goneon/neon.go:19) MOVD R2, R0
0x00c4 00196 (/home/user/work/src/goneon/neon.go:19) MOVD $256, R1
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) PCDATA $1, $0
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) CALL runtime.panicIndex(SB)
0x00cc 00204 (/home/user/work/src/goneon/neon.go:14) MOVD R2, R0
0x00d0 00208 (/home/user/work/src/goneon/neon.go:14) MOVD $256, R1
0x00d4 00212 (/home/user/work/src/goneon/neon.go:14) CALL runtime.panicIndex(SB)
0x00d8 00216 (/home/user/work/src/goneon/neon.go:14) HINT $0
0x00dc 00220 (/home/user/work/src/goneon/neon.go:14) NOP
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) PCDATA $1, $-1
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) MOVD R30, R3
0x00e0 00224 (/home/user/work/src/goneon/neon.go:3) CALL runtime.morestack_noctxt(SB)
0x00e4 00228 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x00e4 00228 (/home/user/work/src/goneon/neon.go:3) JMP 0
0x0000 90 0b 40 f9 f1 83 1e d1 3f 02 10 eb 89 06 00 54  ..@.....?......T
0x0010 f4 83 20 d1 9d fa 3f a9 9f 02 00 91 fd 23 00 d1  .. ...?......#..
0x0020 f4 63 10 91 9b 00 00 10 fd ef 3e a9 fd 63 00 d1  .c........>..c..
0x0030 00 00 00 94 fd 23 00 d1 f4 63 00 91 9b 00 00 10  .....#...c......
0x0040 fd ef 3e a9 fd 63 00 d1 00 00 00 94 fd 23 00 d1  ..>..c.......#..
0x0050 e0 03 1f aa 09 00 00 14 02 7c 7e 93 e3 63 10 91  .........|~..c..
0x0060 60 68 22 b8 e4 03 78 b2 85 00 00 cb e6 63 00 91  `h"...x......c..
0x0070 c5 68 22 b8 00 04 00 91 1f 00 04 71 aa 00 00 54  .h"........q...T
0x0080 02 7c 40 93 5f 00 04 f1 83 fe ff 54 10 00 00 14  .|@._......T....
0x0090 e0 03 1f aa 02 00 00 14 00 04 00 91 1f 00 04 71  ...............q
0x00a0 aa 00 00 54 02 7c 40 93 5f 00 04 f1 63 ff ff 54  ...T.|@._...c..T
0x00b0 04 00 00 14 fd fb 7f a9 ff 83 20 91 c0 03 5f d6  .......... ..._.
0x00c0 e0 03 02 aa e1 03 78 b2 00 00 00 94 e0 03 02 aa  ......x.........
0x00d0 e1 03 78 b2 00 00 00 94 1f 20 03 d5 e3 03 1e aa  ..x...... ......
0x00e0 00 00 00 94 c7 ff ff 17 00 00 00 00 00 00 00 00  ................
rel 48+4 t=9 runtime.duffzero+0
rel 72+4 t=9 runtime.duffzero+0
rel 200+4 t=9 runtime.panicIndex+0
rel 212+4 t=9 runtime.panicIndex+0
rel 224+4 t=9 runtime.morestack_noctxt+0
main.add STEXT size=240 args=0x0 locals=0x818 funcid=0x0 align=0x0
0x0000 00000 (/home/user/work/src/goneon/neon.go:7) TEXT main.add(SB), ABIInternal, $2080-0
0x0000 00000 (/home/user/work/src/goneon/neon.go:7) MOVD 16(g), R16
0x0004 00004 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x0004 00004 (/home/user/work/src/goneon/neon.go:7) SUB $1952, RSP, R17
var symregexp = flag.String("s", "", "only dump symbols matching this regexp")
var gnuAsm = flag.Bool("gnu", false, "print GNU assembly next to Go assembly (where supported)")
var symRE *regexp.Regexp
0x0008 00008 (/home/user/work/src/goneon/neon.go:7) CMP R16, R17
0x000c 00012 (/home/user/work/src/goneon/neon.go:7) BLS 220
0x0010 00016 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x0010 00016 (/home/user/work/src/goneon/neon.go:7) SUB $2080, RSP, R20
0x0014 00020 (/home/user/work/src/goneon/neon.go:7) STP (R29, R30), -8(R20)
0x0018 00024 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x0018 00024 (/home/user/work/src/goneon/neon.go:7) MOVD R20, RSP
0x001c 00028 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x001c 00028 (/home/user/work/src/goneon/neon.go:7) SUB $8, RSP, R29
0x0020 00032 (/home/user/work/src/goneon/neon.go:7) FUNCDATA $0, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:7) FUNCDATA $1, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:9) MOVD $main..autotmp_5-1024(SP), R20
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) PCDATA $0, $-2
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) ADR 52, runtime.duffzero(R27)(R27)(REG)
0x0028 00040 (/home/user/work/src/goneon/neon.go:9) STP (R29, R27), -24(RSP)
0x002c 00044 (/home/user/work/src/goneon/neon.go:9) SUB $24, RSP, R29
0x0030 00048 (/home/user/work/src/goneon/neon.go:9) DUFFZERO runtime.duffzero(SB)
0x0034 00052 (/home/user/work/src/goneon/neon.go:9) SUB $8, RSP, R29
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) MOVD $main..autotmp_6-2048(SP), R20
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-2
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) ADR 76, runtime.duffzero(R27)(R27)(REG)
0x0040 00064 (/home/user/work/src/goneon/neon.go:10) STP (R29, R27), -24(RSP)
0x0044 00068 (/home/user/work/src/goneon/neon.go:10) SUB $24, RSP, R29
0x0048 00072 (/home/user/work/src/goneon/neon.go:10) DUFFZERO runtime.duffzero(SB)
0x004c 00076 (/home/user/work/src/goneon/neon.go:10) SUB $8, RSP, R29
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) MOVD ZR, R0
0x0054 00084 (/home/user/work/src/goneon/neon.go:13) JMP 120
0x0058 00088 (/home/user/work/src/goneon/neon.go:14) SBFIZ $2, R0, $32, R2
0x005c 00092 (/home/user/work/src/goneon/neon.go:14) MOVD $main..autotmp_5-1024(SP), R3
0x0060 00096 (/home/user/work/src/goneon/neon.go:14) MOVW R0, (R3)(R2)
0x0064 00100 (/home/user/work/src/goneon/neon.go:15) MOVD $256, R4
0x0068 00104 (/home/user/work/src/goneon/neon.go:15) SUB R0, R4, R5
0x006c 00108 (/home/user/work/src/goneon/neon.go:15) MOVD $main..autotmp_6-2048(SP), R6
0x0070 00112 (/home/user/work/src/goneon/neon.go:15) MOVW R5, (R6)(R2)
0x0074 00116 (/home/user/work/src/goneon/neon.go:13) ADD $1, R0, R0
0x0078 00120 (/home/user/work/src/goneon/neon.go:13) CMPW $256, R0
0x007c 00124 (/home/user/work/src/goneon/neon.go:13) BGE 144
0x0080 00128 (/home/user/work/src/goneon/neon.go:14) MOVW R0, R2
0x0084 00132 (/home/user/work/src/goneon/neon.go:14) CMP $256, R2
0x0088 00136 (/home/user/work/src/goneon/neon.go:14) BLO 88
0x008c 00140 (/home/user/work/src/goneon/neon.go:14) JMP 204
0x0090 00144 (/home/user/work/src/goneon/neon.go:14) MOVD ZR, R0
0x0094 00148 (/home/user/work/src/goneon/neon.go:13) JMP 156
0x0098 00152 (/home/user/work/src/goneon/neon.go:18) ADD $1, R0, R0
0x009c 00156 (/home/user/work/src/goneon/neon.go:18) CMPW $256, R0
0x00a0 00160 (/home/user/work/src/goneon/neon.go:18) BGE 180
0x00a4 00164 (/home/user/work/src/goneon/neon.go:19) MOVW R0, R2
0x00a8 00168 (/home/user/work/src/goneon/neon.go:19) CMP $256, R2
0x00ac 00172 (/home/user/work/src/goneon/neon.go:19) BLO 152
0x00b0 00176 (/home/user/work/src/goneon/neon.go:19) JMP 192
0x00b4 00180 (/home/user/work/src/goneon/neon.go:21) LDP -8(RSP), (R29, R30)
0x00b8 00184 (/home/user/work/src/goneon/neon.go:21) ADD $2080, RSP
0x00bc 00188 (/home/user/work/src/goneon/neon.go:21) RET (R30)
0x00c0 00192 (/home/user/work/src/goneon/neon.go:19) MOVD R2, R0
0x00c4 00196 (/home/user/work/src/goneon/neon.go:19) MOVD $256, R1
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) PCDATA $1, $0
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) CALL runtime.panicIndex(SB)
0x00cc 00204 (/home/user/work/src/goneon/neon.go:14) MOVD R2, R0
0x00d0 00208 (/home/user/work/src/goneon/neon.go:14) MOVD $256, R1
0x00d4 00212 (/home/user/work/src/goneon/neon.go:14) CALL runtime.panicIndex(SB)
0x00d8 00216 (/home/user/work/src/goneon/neon.go:14) HINT $0
0x00dc 00220 (/home/user/work/src/goneon/neon.go:14) NOP
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) PCDATA $1, $-1
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) MOVD R30, R3
0x00e0 00224 (/home/user/work/src/goneon/neon.go:7) CALL runtime.morestack_noctxt(SB)
0x00e4 00228 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x00e4 00228 (/home/user/work/src/goneon/neon.go:7) JMP 0
0x0000 90 0b 40 f9 f1 83 1e d1 3f 02 10 eb 89 06 00 54  ..@.....?......T
0x0010 f4 83 20 d1 9d fa 3f a9 9f 02 00 91 fd 23 00 d1  .. ...?......#..
0x0020 f4 63 10 91 9b 00 00 10 fd ef 3e a9 fd 63 00 d1  .c........>..c..
0x0030 00 00 00 94 fd 23 00 d1 f4 63 00 91 9b 00 00 10  .....#...c......
0x0040 fd ef 3e a9 fd 63 00 d1 00 00 00 94 fd 23 00 d1  ..>..c.......#..
0x0050 e0 03 1f aa 09 00 00 14 02 7c 7e 93 e3 63 10 91  .........|~..c..
0x0060 60 68 22 b8 e4 03 78 b2 85 00 00 cb e6 63 00 91  `h"...x......c..
0x0070 c5 68 22 b8 00 04 00 91 1f 00 04 71 aa 00 00 54  .h"........q...T
0x0080 02 7c 40 93 5f 00 04 f1 83 fe ff 54 10 00 00 14  .|@._......T....
0x0090 e0 03 1f aa 02 00 00 14 00 04 00 91 1f 00 04 71  ...............q
0x00a0 aa 00 00 54 02 7c 40 93 5f 00 04 f1 63 ff ff 54  ...T.|@._...c..T
0x00b0 04 00 00 14 fd fb 7f a9 ff 83 20 91 c0 03 5f d6  .......... ..._.
0x00c0 e0 03 02 aa e1 03 78 b2 00 00 00 94 e0 03 02 aa  ......x.........
0x00d0 e1 03 78 b2 00 00 00 94 1f 20 03 d5 e3 03 1e aa  ..x...... ......
0x00e0 00 00 00 94 c7 ff ff 17 00 00 00 00 00 00 00 00  ................
rel 48+4 t=9 runtime.duffzero+0
rel 72+4 t=9 runtime.duffzero+0
rel 200+4 t=9 runtime.panicIndex+0
rel 212+4 t=9 runtime.panicIndex+0
rel 224+4 t=9 runtime.morestack_noctxt+0
go:cuinfo.producer.main SDWARFCUINFO dupok size=0
0x0000 72 65 67 61 62 69                                regabi
go:cuinfo.packagename.main SDWARFCUINFO dupok size=0
0x0000 6d 61 69 6e                                      main
go:info.main.add$abstract SDWARFABSFCN dupok size=45
0x0000 05 6d 61 69 6e 2e 61 64 64 00 01 01 0e 61 00 08  .main.add....a..
0x0010 00 00 00 00 0e 62 00 09 00 00 00 00 0e 63 00 0a  .....b.......c..
0x0020 00 00 00 00 0e 69 00 0c 00 00 00 00 00           .....i.......
rel 16+4 t=31 go:info.[]int32+0
rel 24+4 t=31 go:info.[]int32+0
rel 32+4 t=31 go:info.[]int32+0
rel 40+4 t=31 go:info.int32+0
main..inittask SNOPTRDATA size=24
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0010 00 00 00 00 00 00 00 00                          ........
type:.eqfunc1024 SRODATA dupok size=16
0x0000 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00  ................
rel 0+8 t=1 runtime.memequal_varlen+0
runtime.memequal64·f SRODATA dupok size=8
0x0000 00 00 00 00 00 00 00 00                          ........
rel 0+8 t=1 runtime.memequal64+0
runtime.gcbits.0100000000000000 SRODATA dupok size=8
0x0000 01 00 00 00 00 00 00 00                          ........
type:.namedata.*[256]int32- SRODATA dupok size=13
0x0000 00 0b 2a 5b 32 35 36 5d 69 6e 74 33 32           ..*[256]int32
type:*[256]int32 SRODATA dupok size=56
0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
0x0010 5c eb 0a 2f 08 08 08 36 00 00 00 00 00 00 00 00  \../...6........
0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0030 00 00 00 00 00 00 00 00                          ........
rel 24+8 t=1 runtime.memequal64·f+0
rel 32+8 t=1 runtime.gcbits.0100000000000000+0
rel 40+4 t=5 type:.namedata.*[256]int32-+0
rel 48+8 t=1 type:[256]int32+0
runtime.gcbits. SRODATA dupok size=0
type:[256]int32 SRODATA dupok size=72
0x0000 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0010 1e 16 ae f5 0a 04 04 11 00 00 00 00 00 00 00 00  ................
0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0040 00 01 00 00 00 00 00 00                          ........
rel 24+8 t=1 type:.eqfunc1024+0
rel 32+8 t=1 runtime.gcbits.+0
rel 40+4 t=5 type:.namedata.*[256]int32-+0
rel 44+4 t=-32763 type:*[256]int32+0
rel 48+8 t=1 type:int32+0
rel 56+8 t=1 type:[]int32+0
gclocals·g2BeySu+wFnoycgXfElmcg== SRODATA dupok size=8
0x0000 01 00 00 00 00 00 00 00                          ........

 

PCDATA 라는 녀석은 Program Counter는 절~대 아니고

걍 gabage collector 관련한 지시어라고.. 그런데 왜 컴파일러에게 알려주지?

The FUNCDATA and PCDATA directives contain information for use by the garbage collector; they are introduced by the compiler.

[링크 : https://doc.codingdict.com/golang/doc/golang.org/doc/asm.html]

  [링크 : https://stackoverflow.com/questions/53436811/what-is-the-meaning-of-pcdata-in-go-assembly]

 

Plan 9 어셈블러라는게 있는 듯.

The assembler is based on the input style of the Plan 9 assemblers, which is documented in detail elsewhere. 

[링크 : https://go.dev/doc/asm]

 

어쩌구 저쩌구.. MOVF와 MOVD를 이용해서 단배정도/복수배정도 실수에 대해서 읽거나 저장하는데

MOVWD, MOVWF, MOVDW, MOVWD, MOVFD, MOVFD 등으로 변환된다

라는데.. 레지스터도 그냥 R0~R12로만 되어있고 aarch64등과 같은 세부 아키텍쳐는 생략된 일종의 중간언어로 어셈을 쓰는 느낌?

ARM
The assembler provides access to R0 through R14 and the PC. The stack pointer is R13, the link register is R14, and the static base register is R12. R0 is the return register and also the register holding the first argument to a subroutine. The external registers in Plan 9’s C are allocated from R10 down. R11 is used by the loader as a temporary register. The assembler supports the CPSR and SPSR registers. It also knows about coprocessor registers C0 through C15. Floating registers are F0 through F7, FPSR and FPCR.
As with the other architectures, loads and stores are called MOV, e.g. MOVW for load word or store word, and MOVM for load or store multiple, depending on the operands.
Addressing modes are supported by suffixes to the instructions: .IA (increment after), .IB (increment before), .DA (decrement after), and .DB (decrement before). These can only be used with the MOV instructions. The move multiple instruction, MOVM, defines a range of registers using brackets, e.g. [R0-R12]. The special MOVM addressing mode bits W, U, and P are written in the same manner, for example, MOVM.DB.W. A .S suffix allows a MOVM instruction to access user R13 and R14 when in another processor mode. Shifts and rotates in addressing modes are supported by binary operators << (logical left shift), >> (logical right shift), -> (arithmetic right shift), and @> (rotate right); for example R7>>R2or R2@>2. The assembler does not support indexing by a shifted expression; only names can be doubly indexed.
Any instruction can be followed by a suffix that makes the instruction conditional: .EQ, .NE, and so on, as in the ARM manual, with synonyms .HS (for .CS) and .LO (for .CC), for example ADD.NE. Arithmetic and logical instructions can have a .S suffix, as ARM allows, to set condition codes.
The syntax of the MCR and MRC coprocessor instructions is largely as in the manual, with the usual adjustments. The assembler directly supports only the ARM floating-point coprocessor operations used by the compiler: CMP, ADD, SUB, MUL, and DIV, all with F or D suffix selecting single or double precision. Floating-point load or store become MOVF and MOVD. Conversion instructions are also specified by moves: MOVWD, MOVWF, MOVDW, MOVWD, MOVFD, and MOVDF.

[링크 : https://9p.io/sys/doc/asm.html]

 

 

 

'Programming > golang' 카테고리의 다른 글

golang echo 패키지 소스  (0) 2023.09.13
go packed struct  (0) 2023.09.01
golang goarch=arm64 와 디스어셈블러  (0) 2023.08.23
golang echo 서버 이상한 버그 발견?  (0) 2023.06.27
go ws server client example  (0) 2023.06.08
Posted by 구차니
embeded/ARM2023. 8. 23. 18:57

armv7에 비해서 armv8(aarch64)의 simd 통합은 더 강해졌는지

명령어가 사라지고 src와 dst의 레지스터에 vertor와 scalar가 사용된다.

 

예전에 이상하다 싶어서 찾아두기만 한 녀석인데

add 명령은 그대로이고 v0 이라는 vertor 레지스터에 4s, 4개의 32bit 변수형(아마도 signed int?)을

한번에 더하는 계산을 하라고 시킨다.

dst, src1, oper 일테니까 v0.4s = v0.4s + v1.4s 로 보면 될 듯.

 

add     v0.4s, v0.4s, v1.4s

 

2021.06.30 - [embeded/raspberry pi] - aarch, armv8 asimd build (neon)

 

scalar

평범(?)한 Q / D / S / H / B

[링크 : https://developer.arm.com/documentation/den0024/a/ARMv8-Registers/NEON-and-floating-point-registers/Scalar-register-sizes]

 

vector

D가 아마도 double형 같은 64bit(8byte) 변수일텐데

그것 조차도 한번에 2개씩 연산이 가능한 레지스터라니..

[링크 : https://developer.arm.com/documentation/den0024/a/ARMv8-Registers/NEON-and-floating-point-registers/Vector-register-sizes]

'embeded > ARM' 카테고리의 다른 글

arm asm rev  (0) 2023.09.14
cortex-a53  (0) 2023.08.31
arm vsub operator  (0) 2023.08.09
ARM NEON SLP  (0) 2023.08.07
cortex a9 ptm  (0) 2023.07.21
Posted by 구차니
Programming/golang2023. 8. 23. 17:19

go 프로그램도 java와 같은 독립된 환경이 아닌 일반적인 c와 같은 실행환경에서 도는 애다 보니

결국에는 기계어로 전환되고 objdump를 통해 디스어셈블을 할 수 있긴한데

go tool objdump를 통해 나오는 결과와 objdump를 통해 나오는 결과가 상이하다

go build -gcflags -S program.go
If you already have a compiled program and want to see the assembly code you can disassemble it with 
go tool objdump binaryFile.

[링크 : https://www.grant.pizza/blog/dissecting-go-binaries/]

 

명렁어 자체는 특이한 건 없다.

go tool objdump [-s symregexp] binary

[링크 : https://pkg.go.dev/cmd/objdump]

 

요런 go 소스를 작성하고

$ vi neon.go 
  1 package main
  2 
  3 func main() {
  4         add()
  5 }
  6 
  7 func add() {
  8         a := make([]int32, 256)
  9         b := make([]int32, 256)
 10         c := make([]int32, 256)
 11 
 12         var i int32
 13         for i = 0; i < 256; i++ {
 14                 b[i] = i;
 15                 c[i] = 256 - i;
 16         }
 17 
 18         for i = 0; i < 256; i++ {
 19                 a[i] = b[i] + c[i]
 20         }
 21 }

 

go build를 통해 빌드하면 디스어셈블 해주는데

출력 포맷이 objdump와 다른데다가.. 소스 라인만 보이고 매칭이 안되서 이래저래 불편..

그 와중에 먼가.. x86 ASM 같은 느낌은 왜일까..

일종의 중간(?) 언어로 어셈을 쓰고 이걸 다시 아키텍쳐별로 변환하는건가?

$ GOARCH=arm64 go build -gcflags -S .
# tt
main.main STEXT size=240 args=0x0 locals=0x818 funcid=0x0 align=0x0
0x0000 00000 (/home/user/work/src/goneon/neon.go:3) TEXT main.main(SB), ABIInternal, $2080-0
0x0000 00000 (/home/user/work/src/goneon/neon.go:3) MOVD 16(g), R16
0x0004 00004 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x0004 00004 (/home/user/work/src/goneon/neon.go:3) SUB $1952, RSP, R17
0x0008 00008 (/home/user/work/src/goneon/neon.go:3) CMP R16, R17
0x000c 00012 (/home/user/work/src/goneon/neon.go:3) BLS 220
0x0010 00016 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x0010 00016 (/home/user/work/src/goneon/neon.go:3) SUB $2080, RSP, R20
0x0014 00020 (/home/user/work/src/goneon/neon.go:3) STP (R29, R30), -8(R20)
0x0018 00024 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x0018 00024 (/home/user/work/src/goneon/neon.go:3) MOVD R20, RSP
0x001c 00028 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x001c 00028 (/home/user/work/src/goneon/neon.go:3) SUB $8, RSP, R29
0x0020 00032 (/home/user/work/src/goneon/neon.go:3) FUNCDATA $0, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:3) FUNCDATA $1, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (<unknown line number>) NOP
0x0020 00032 (/home/user/work/src/goneon/neon.go:4) MOVD $main..autotmp_5-1024(SP), R20
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) PCDATA $0, $-2
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) ADR 52, runtime.duffzero(R27)(R27)(REG)
0x0028 00040 (/home/user/work/src/goneon/neon.go:9) STP (R29, R27), -24(RSP)
0x002c 00044 (/home/user/work/src/goneon/neon.go:9) SUB $24, RSP, R29
0x0030 00048 (/home/user/work/src/goneon/neon.go:9) DUFFZERO runtime.duffzero(SB)
0x0034 00052 (/home/user/work/src/goneon/neon.go:9) SUB $8, RSP, R29
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) MOVD $main..autotmp_6-2048(SP), R20
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-2
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) ADR 76, runtime.duffzero(R27)(R27)(REG)
0x0040 00064 (/home/user/work/src/goneon/neon.go:10) STP (R29, R27), -24(RSP)
0x0044 00068 (/home/user/work/src/goneon/neon.go:10) SUB $24, RSP, R29
0x0048 00072 (/home/user/work/src/goneon/neon.go:10) DUFFZERO runtime.duffzero(SB)
0x004c 00076 (/home/user/work/src/goneon/neon.go:10) SUB $8, RSP, R29
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) MOVD ZR, R0
0x0054 00084 (/home/user/work/src/goneon/neon.go:13) JMP 120
0x0058 00088 (/home/user/work/src/goneon/neon.go:14) SBFIZ $2, R0, $32, R2
0x005c 00092 (/home/user/work/src/goneon/neon.go:14) MOVD $main..autotmp_5-1024(SP), R3
0x0060 00096 (/home/user/work/src/goneon/neon.go:14) MOVW R0, (R3)(R2)
0x0064 00100 (/home/user/work/src/goneon/neon.go:15) MOVD $256, R4
0x0068 00104 (/home/user/work/src/goneon/neon.go:15) SUB R0, R4, R5
0x006c 00108 (/home/user/work/src/goneon/neon.go:15) MOVD $main..autotmp_6-2048(SP), R6
0x0070 00112 (/home/user/work/src/goneon/neon.go:15) MOVW R5, (R6)(R2)
0x0074 00116 (/home/user/work/src/goneon/neon.go:13) ADD $1, R0, R0
0x0078 00120 (/home/user/work/src/goneon/neon.go:13) CMPW $256, R0
0x007c 00124 (/home/user/work/src/goneon/neon.go:13) BGE 144
0x0080 00128 (/home/user/work/src/goneon/neon.go:14) MOVW R0, R2
0x0084 00132 (/home/user/work/src/goneon/neon.go:14) CMP $256, R2
0x0088 00136 (/home/user/work/src/goneon/neon.go:14) BLO 88
0x008c 00140 (/home/user/work/src/goneon/neon.go:14) JMP 204
0x0090 00144 (/home/user/work/src/goneon/neon.go:14) MOVD ZR, R0
0x0094 00148 (/home/user/work/src/goneon/neon.go:13) JMP 156
0x0098 00152 (/home/user/work/src/goneon/neon.go:18) ADD $1, R0, R0
0x009c 00156 (/home/user/work/src/goneon/neon.go:18) CMPW $256, R0
0x00a0 00160 (/home/user/work/src/goneon/neon.go:18) BGE 180
0x00a4 00164 (/home/user/work/src/goneon/neon.go:19) MOVW R0, R2
0x00a8 00168 (/home/user/work/src/goneon/neon.go:19) CMP $256, R2
0x00ac 00172 (/home/user/work/src/goneon/neon.go:19) BLO 152
0x00b0 00176 (/home/user/work/src/goneon/neon.go:19) JMP 192
0x00b4 00180 (/home/user/work/src/goneon/neon.go:5) LDP -8(RSP), (R29, R30)
0x00b8 00184 (/home/user/work/src/goneon/neon.go:5) ADD $2080, RSP
0x00bc 00188 (/home/user/work/src/goneon/neon.go:5) RET (R30)
0x00c0 00192 (/home/user/work/src/goneon/neon.go:19) MOVD R2, R0
0x00c4 00196 (/home/user/work/src/goneon/neon.go:19) MOVD $256, R1
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) PCDATA $1, $0
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) CALL runtime.panicIndex(SB)
0x00cc 00204 (/home/user/work/src/goneon/neon.go:14) MOVD R2, R0
0x00d0 00208 (/home/user/work/src/goneon/neon.go:14) MOVD $256, R1
0x00d4 00212 (/home/user/work/src/goneon/neon.go:14) CALL runtime.panicIndex(SB)
0x00d8 00216 (/home/user/work/src/goneon/neon.go:14) HINT $0
0x00dc 00220 (/home/user/work/src/goneon/neon.go:14) NOP
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) PCDATA $1, $-1
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-2
0x00dc 00220 (/home/user/work/src/goneon/neon.go:3) MOVD R30, R3
0x00e0 00224 (/home/user/work/src/goneon/neon.go:3) CALL runtime.morestack_noctxt(SB)
0x00e4 00228 (/home/user/work/src/goneon/neon.go:3) PCDATA $0, $-1
0x00e4 00228 (/home/user/work/src/goneon/neon.go:3) JMP 0
0x0000 90 0b 40 f9 f1 83 1e d1 3f 02 10 eb 89 06 00 54  ..@.....?......T
0x0010 f4 83 20 d1 9d fa 3f a9 9f 02 00 91 fd 23 00 d1  .. ...?......#..
0x0020 f4 63 10 91 9b 00 00 10 fd ef 3e a9 fd 63 00 d1  .c........>..c..
0x0030 00 00 00 94 fd 23 00 d1 f4 63 00 91 9b 00 00 10  .....#...c......
0x0040 fd ef 3e a9 fd 63 00 d1 00 00 00 94 fd 23 00 d1  ..>..c.......#..
0x0050 e0 03 1f aa 09 00 00 14 02 7c 7e 93 e3 63 10 91  .........|~..c..
0x0060 60 68 22 b8 e4 03 78 b2 85 00 00 cb e6 63 00 91  `h"...x......c..
0x0070 c5 68 22 b8 00 04 00 91 1f 00 04 71 aa 00 00 54  .h"........q...T
0x0080 02 7c 40 93 5f 00 04 f1 83 fe ff 54 10 00 00 14  .|@._......T....
0x0090 e0 03 1f aa 02 00 00 14 00 04 00 91 1f 00 04 71  ...............q
0x00a0 aa 00 00 54 02 7c 40 93 5f 00 04 f1 63 ff ff 54  ...T.|@._...c..T
0x00b0 04 00 00 14 fd fb 7f a9 ff 83 20 91 c0 03 5f d6  .......... ..._.
0x00c0 e0 03 02 aa e1 03 78 b2 00 00 00 94 e0 03 02 aa  ......x.........
0x00d0 e1 03 78 b2 00 00 00 94 1f 20 03 d5 e3 03 1e aa  ..x...... ......
0x00e0 00 00 00 94 c7 ff ff 17 00 00 00 00 00 00 00 00  ................
rel 48+4 t=9 runtime.duffzero+0
rel 72+4 t=9 runtime.duffzero+0
rel 200+4 t=9 runtime.panicIndex+0
rel 212+4 t=9 runtime.panicIndex+0
rel 224+4 t=9 runtime.morestack_noctxt+0
main.add STEXT size=240 args=0x0 locals=0x818 funcid=0x0 align=0x0
0x0000 00000 (/home/user/work/src/goneon/neon.go:7) TEXT main.add(SB), ABIInternal, $2080-0
0x0000 00000 (/home/user/work/src/goneon/neon.go:7) MOVD 16(g), R16
0x0004 00004 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x0004 00004 (/home/user/work/src/goneon/neon.go:7) SUB $1952, RSP, R17
var symregexp = flag.String("s", "", "only dump symbols matching this regexp")
var gnuAsm = flag.Bool("gnu", false, "print GNU assembly next to Go assembly (where supported)")
var symRE *regexp.Regexp
0x0008 00008 (/home/user/work/src/goneon/neon.go:7) CMP R16, R17
0x000c 00012 (/home/user/work/src/goneon/neon.go:7) BLS 220
0x0010 00016 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x0010 00016 (/home/user/work/src/goneon/neon.go:7) SUB $2080, RSP, R20
0x0014 00020 (/home/user/work/src/goneon/neon.go:7) STP (R29, R30), -8(R20)
0x0018 00024 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x0018 00024 (/home/user/work/src/goneon/neon.go:7) MOVD R20, RSP
0x001c 00028 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x001c 00028 (/home/user/work/src/goneon/neon.go:7) SUB $8, RSP, R29
0x0020 00032 (/home/user/work/src/goneon/neon.go:7) FUNCDATA $0, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:7) FUNCDATA $1, gclocals·g2BeySu+wFnoycgXfElmcg==(SB)
0x0020 00032 (/home/user/work/src/goneon/neon.go:9) MOVD $main..autotmp_5-1024(SP), R20
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) PCDATA $0, $-2
0x0024 00036 (/home/user/work/src/goneon/neon.go:9) ADR 52, runtime.duffzero(R27)(R27)(REG)
0x0028 00040 (/home/user/work/src/goneon/neon.go:9) STP (R29, R27), -24(RSP)
0x002c 00044 (/home/user/work/src/goneon/neon.go:9) SUB $24, RSP, R29
0x0030 00048 (/home/user/work/src/goneon/neon.go:9) DUFFZERO runtime.duffzero(SB)
0x0034 00052 (/home/user/work/src/goneon/neon.go:9) SUB $8, RSP, R29
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0038 00056 (/home/user/work/src/goneon/neon.go:10) MOVD $main..autotmp_6-2048(SP), R20
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-2
0x003c 00060 (/home/user/work/src/goneon/neon.go:10) ADR 76, runtime.duffzero(R27)(R27)(REG)
0x0040 00064 (/home/user/work/src/goneon/neon.go:10) STP (R29, R27), -24(RSP)
0x0044 00068 (/home/user/work/src/goneon/neon.go:10) SUB $24, RSP, R29
0x0048 00072 (/home/user/work/src/goneon/neon.go:10) DUFFZERO runtime.duffzero(SB)
0x004c 00076 (/home/user/work/src/goneon/neon.go:10) SUB $8, RSP, R29
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) PCDATA $0, $-1
0x0050 00080 (/home/user/work/src/goneon/neon.go:10) MOVD ZR, R0
0x0054 00084 (/home/user/work/src/goneon/neon.go:13) JMP 120
0x0058 00088 (/home/user/work/src/goneon/neon.go:14) SBFIZ $2, R0, $32, R2
0x005c 00092 (/home/user/work/src/goneon/neon.go:14) MOVD $main..autotmp_5-1024(SP), R3
0x0060 00096 (/home/user/work/src/goneon/neon.go:14) MOVW R0, (R3)(R2)
0x0064 00100 (/home/user/work/src/goneon/neon.go:15) MOVD $256, R4
0x0068 00104 (/home/user/work/src/goneon/neon.go:15) SUB R0, R4, R5
0x006c 00108 (/home/user/work/src/goneon/neon.go:15) MOVD $main..autotmp_6-2048(SP), R6
0x0070 00112 (/home/user/work/src/goneon/neon.go:15) MOVW R5, (R6)(R2)
0x0074 00116 (/home/user/work/src/goneon/neon.go:13) ADD $1, R0, R0
0x0078 00120 (/home/user/work/src/goneon/neon.go:13) CMPW $256, R0
0x007c 00124 (/home/user/work/src/goneon/neon.go:13) BGE 144
0x0080 00128 (/home/user/work/src/goneon/neon.go:14) MOVW R0, R2
0x0084 00132 (/home/user/work/src/goneon/neon.go:14) CMP $256, R2
0x0088 00136 (/home/user/work/src/goneon/neon.go:14) BLO 88
0x008c 00140 (/home/user/work/src/goneon/neon.go:14) JMP 204
0x0090 00144 (/home/user/work/src/goneon/neon.go:14) MOVD ZR, R0
0x0094 00148 (/home/user/work/src/goneon/neon.go:13) JMP 156
0x0098 00152 (/home/user/work/src/goneon/neon.go:18) ADD $1, R0, R0
0x009c 00156 (/home/user/work/src/goneon/neon.go:18) CMPW $256, R0
0x00a0 00160 (/home/user/work/src/goneon/neon.go:18) BGE 180
0x00a4 00164 (/home/user/work/src/goneon/neon.go:19) MOVW R0, R2
0x00a8 00168 (/home/user/work/src/goneon/neon.go:19) CMP $256, R2
0x00ac 00172 (/home/user/work/src/goneon/neon.go:19) BLO 152
0x00b0 00176 (/home/user/work/src/goneon/neon.go:19) JMP 192
0x00b4 00180 (/home/user/work/src/goneon/neon.go:21) LDP -8(RSP), (R29, R30)
0x00b8 00184 (/home/user/work/src/goneon/neon.go:21) ADD $2080, RSP
0x00bc 00188 (/home/user/work/src/goneon/neon.go:21) RET (R30)
0x00c0 00192 (/home/user/work/src/goneon/neon.go:19) MOVD R2, R0
0x00c4 00196 (/home/user/work/src/goneon/neon.go:19) MOVD $256, R1
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) PCDATA $1, $0
0x00c8 00200 (/home/user/work/src/goneon/neon.go:19) CALL runtime.panicIndex(SB)
0x00cc 00204 (/home/user/work/src/goneon/neon.go:14) MOVD R2, R0
0x00d0 00208 (/home/user/work/src/goneon/neon.go:14) MOVD $256, R1
0x00d4 00212 (/home/user/work/src/goneon/neon.go:14) CALL runtime.panicIndex(SB)
0x00d8 00216 (/home/user/work/src/goneon/neon.go:14) HINT $0
0x00dc 00220 (/home/user/work/src/goneon/neon.go:14) NOP
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) PCDATA $1, $-1
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-2
0x00dc 00220 (/home/user/work/src/goneon/neon.go:7) MOVD R30, R3
0x00e0 00224 (/home/user/work/src/goneon/neon.go:7) CALL runtime.morestack_noctxt(SB)
0x00e4 00228 (/home/user/work/src/goneon/neon.go:7) PCDATA $0, $-1
0x00e4 00228 (/home/user/work/src/goneon/neon.go:7) JMP 0
0x0000 90 0b 40 f9 f1 83 1e d1 3f 02 10 eb 89 06 00 54  ..@.....?......T
0x0010 f4 83 20 d1 9d fa 3f a9 9f 02 00 91 fd 23 00 d1  .. ...?......#..
0x0020 f4 63 10 91 9b 00 00 10 fd ef 3e a9 fd 63 00 d1  .c........>..c..
0x0030 00 00 00 94 fd 23 00 d1 f4 63 00 91 9b 00 00 10  .....#...c......
0x0040 fd ef 3e a9 fd 63 00 d1 00 00 00 94 fd 23 00 d1  ..>..c.......#..
0x0050 e0 03 1f aa 09 00 00 14 02 7c 7e 93 e3 63 10 91  .........|~..c..
0x0060 60 68 22 b8 e4 03 78 b2 85 00 00 cb e6 63 00 91  `h"...x......c..
0x0070 c5 68 22 b8 00 04 00 91 1f 00 04 71 aa 00 00 54  .h"........q...T
0x0080 02 7c 40 93 5f 00 04 f1 83 fe ff 54 10 00 00 14  .|@._......T....
0x0090 e0 03 1f aa 02 00 00 14 00 04 00 91 1f 00 04 71  ...............q
0x00a0 aa 00 00 54 02 7c 40 93 5f 00 04 f1 63 ff ff 54  ...T.|@._...c..T
0x00b0 04 00 00 14 fd fb 7f a9 ff 83 20 91 c0 03 5f d6  .......... ..._.
0x00c0 e0 03 02 aa e1 03 78 b2 00 00 00 94 e0 03 02 aa  ......x.........
0x00d0 e1 03 78 b2 00 00 00 94 1f 20 03 d5 e3 03 1e aa  ..x...... ......
0x00e0 00 00 00 94 c7 ff ff 17 00 00 00 00 00 00 00 00  ................
rel 48+4 t=9 runtime.duffzero+0
rel 72+4 t=9 runtime.duffzero+0
rel 200+4 t=9 runtime.panicIndex+0
rel 212+4 t=9 runtime.panicIndex+0
rel 224+4 t=9 runtime.morestack_noctxt+0
go:cuinfo.producer.main SDWARFCUINFO dupok size=0
0x0000 72 65 67 61 62 69                                regabi
go:cuinfo.packagename.main SDWARFCUINFO dupok size=0
0x0000 6d 61 69 6e                                      main
go:info.main.add$abstract SDWARFABSFCN dupok size=45
0x0000 05 6d 61 69 6e 2e 61 64 64 00 01 01 0e 61 00 08  .main.add....a..
0x0010 00 00 00 00 0e 62 00 09 00 00 00 00 0e 63 00 0a  .....b.......c..
0x0020 00 00 00 00 0e 69 00 0c 00 00 00 00 00           .....i.......
rel 16+4 t=31 go:info.[]int32+0
rel 24+4 t=31 go:info.[]int32+0
rel 32+4 t=31 go:info.[]int32+0
rel 40+4 t=31 go:info.int32+0
main..inittask SNOPTRDATA size=24
0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0010 00 00 00 00 00 00 00 00                          ........
type:.eqfunc1024 SRODATA dupok size=16
0x0000 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00  ................
rel 0+8 t=1 runtime.memequal_varlen+0
runtime.memequal64·f SRODATA dupok size=8
0x0000 00 00 00 00 00 00 00 00                          ........
rel 0+8 t=1 runtime.memequal64+0
runtime.gcbits.0100000000000000 SRODATA dupok size=8
0x0000 01 00 00 00 00 00 00 00                          ........
type:.namedata.*[256]int32- SRODATA dupok size=13
0x0000 00 0b 2a 5b 32 35 36 5d 69 6e 74 33 32           ..*[256]int32
type:*[256]int32 SRODATA dupok size=56
0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
0x0010 5c eb 0a 2f 08 08 08 36 00 00 00 00 00 00 00 00  \../...6........
0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0030 00 00 00 00 00 00 00 00                          ........
rel 24+8 t=1 runtime.memequal64·f+0
rel 32+8 t=1 runtime.gcbits.0100000000000000+0
rel 40+4 t=5 type:.namedata.*[256]int32-+0
rel 48+8 t=1 type:[256]int32+0
runtime.gcbits. SRODATA dupok size=0
type:[256]int32 SRODATA dupok size=72
0x0000 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0010 1e 16 ae f5 0a 04 04 11 00 00 00 00 00 00 00 00  ................
0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x0040 00 01 00 00 00 00 00 00                          ........
rel 24+8 t=1 type:.eqfunc1024+0
rel 32+8 t=1 runtime.gcbits.+0
rel 40+4 t=5 type:.namedata.*[256]int32-+0
rel 44+4 t=-32763 type:*[256]int32+0
rel 48+8 t=1 type:int32+0
rel 56+8 t=1 type:[]int32+0
gclocals·g2BeySu+wFnoycgXfElmcg== SRODATA dupok size=8
0x0000 01 00 00 00 00 00 00 00                          ........

 

go tool objdump를 통해 디스어셈블 하고 vadd를 찾으면 먼가 나오는데

위에서 테스트한 코드가 아니라 다른 어셈블리 코드의 것이 나온다.

go tool objdump tt | grep -i vadd
  indexbyte_arm64.s:61 0x11cc4 4e24bc66 VADDP V4.B16, V3.B16, V6.B16
  indexbyte_arm64.s:62 0x11cc8 4e26bcc6 VADDP V6.B16, V6.B16, V6.B16
  indexbyte_arm64.s:82 0x11cfc 4ee6bcc6 VADDP V6.D2, V6.D2, V6.D2
  indexbyte_arm64.s:91 0x11d10 4e24bc66 VADDP V4.B16, V3.B16, V6.B16
  indexbyte_arm64.s:92 0x11d14 4e26bcc6 VADDP V6.B16, V6.B16, V6.B16

 

경로와 파일명만 보면 arm64용 배열에 대한 내부 변환 알고리즘 같긴한데..

Text file src/internal/bytealg/indexbyte_arm64.s

[링크 : https://tip.golang.org/src/internal/bytealg/indexbyte_arm64.s]

 

그래서 그냥 디스어셈블 하니 87만 라인?

$ aarch64-linux-gnu-objdump -d tt > t2
$ wc -l t2
87170 t2

 

vadd로 검색하면 하나도 안나온다 -_-

$ aarch64-linux-gnu-objdump -d tt | grep -i vadd
$

 

그래서 된다고 봐야 하나 말아야 하나..

 

 

+

일단 실행시간으로 비교!

$ cat neon.go 
package main

func main() {
add()
}

func add() {
cnt := 10000000
a := make([]int32, cnt)
b := make([]int32, cnt)
c := make([]int32, cnt)

i := 0
for i = 0; i < cnt; i++ {
b[i] = int32(i);
c[i] = int32(cnt - i);
}

for i = 0; i < cnt; i++ {
a[i] = b[i] + c[i]
}
}

 

위의 소스로 테스트를 해보니 arm64가 좀 빨라지긴 한데... 미묘하네

/// GOARCH=arm go build -gcflags -S .
# time ./tt

real    0m0.196s
user    0m0.161s
sys     0m0.036s
/// GOARCH=arm64 go build -gcflags -S .
# time ./tt.aarch64 

real    0m0.162s
user    0m0.087s
sys     0m0.075s

 

 

+

c로 하려는데

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 void main()
  5 {
  6         int cnt = 10000000;
  7         int *a,*b,*c;
  8         a = malloc(sizeof(int) * cnt);
  9         b = malloc(sizeof(int) * cnt);
 10         c = malloc(sizeof(int) * cnt);
 11 
 12         for(int i = 0; i < cnt; i++)
 13         {
 14                 b[i] = i;
 15                 c[i] = cnt - i;
 16         }
 17 
 18         for(int i = 0; i < cnt; i++)
 19         {
 20                 a[i] = b[i] + c[i];
 21         }
 22 
 23         printf("%d %d %d\n",a[0],b[0],c[0]);
 24 
 25         return 0;
 26 }

 

아무래도 printf가 없어서 계산은 하지만 사용하지 않는(출력이 없어서) 그냥 최적화 옵션에서 제외해버리니까

결과에 대해서만 출력하도록 두고 해보니

$ aarch64-poky-linux-gcc --sysroot=/opt/fsl-imx-wayland/5.15-kirkstone/sysroots/armv8a-poky-linux -march=armv8-a -O3 -fopt-info-vec neon.c
neon.c:18:19: optimized: loop vectorized using 16 byte vectors
neon.c:12:19: optimized: loop vectorized using 16 byte vectors

 

음.. 0.213s라.. go가 오히려 빠른가 싶었는데, user space로 보면 그래도 c가 빠르긴 한 듯.

# time ./a.out 
10000000 0 10000000

real    0m0.213s
user    0m0.076s
sys     0m0.135s

 

다시 출력을 추가해서

  1 package main
  2 
  3 import "fmt"
  4 
  5 func main() {
  6         add()
  7 }
  8 
  9 func add() {
 10         cnt := 10000000
 11         a := make([]int32, cnt)
 12         b := make([]int32, cnt)
 13         c := make([]int32, cnt)
 14 
 15         i := 0
 16         for i = 0; i < cnt; i++ {
 17                 b[i] = int32(i);
 18                 c[i] = int32(cnt - i);
 19         }
 20 
 21         for i = 0; i < cnt; i++ {
 22                 a[i] = b[i] + c[i]
 23         }
 24 
 25         fmt.Println("neon");
 26         fmt.Println(a[0], b[0], c[0])
 27 }

 

실행해보니 0.204s go가 조금 더 빠르다? 그런데 희한할 정도로 sys가 짧은 건 왜일까?

# time ./neon
neon
10000000 0 10000000

real    0m0.204s
user    0m0.179s
sys     0m0.025s

 

혹시나 해서 c로 짠걸 neon 옵션 빼고(-O3) 해보니 속도 상으로는 맞는 듯?

# time ./a.out.none
10000000 0 10000000

real    0m0.699s
user    0m0.550s
sys     0m0.144s

 

'Programming > golang' 카테고리의 다른 글

go packed struct  (0) 2023.09.01
golang asm  (0) 2023.08.24
golang echo 서버 이상한 버그 발견?  (0) 2023.06.27
go ws server client example  (0) 2023.06.08
golang waitgroup  (0) 2023.05.24
Posted by 구차니
이론 관련/전기 전자2023. 8. 23. 11:11

문서에 웬지 dBm 이런걸 넣으면 주옥될 느낌..

db는 log scale이라서 상대값이 아니었나? 싶어서 다시 찾아보는데

dBm 은 mili-watt 단위라는 실세계 단위랑 매칭이 되어야 한다.

 

dB란 말 자체는 어떤 값의 차이를 Log로 나타낸 (상대적) 스케일의 한 종류 입니다. 측정값 자체를 지칭하는 것이 아닙니다.

 

 dBm의 정의
그렇다면 dBm은 상대값인가? 아닙니다. dBm은 절대값입니다. dBm이란, mW 단위의 전력을 dB 스케일로 나타낸 단위 를 의미

[링크 : http://www.rfdh.com/bas_rf/begin/dbdbm.htm]

'이론 관련 > 전기 전자' 카테고리의 다른 글

아날로그 컴퓨터  (0) 2023.10.11
rc 시정수 계산  (0) 2023.10.05
역극성 보호  (0) 2023.08.01
유선 전화기 들면 들리는 소리  (0) 2023.07.25
envelope detection  (0) 2023.07.14
Posted by 구차니

Virtualized radio area network

intel에서 xeon에 넣어서 판다고 광고를 해대서 먼가~ 하고 찾아봄

radio area network라면서 5G 기지국을 만드는 것 처럼 보이는데, 일종의 SDR 가속 기능 같기도 하고...

 

[링크 : https://www.intel.com/content/www/us/en/products/docs/processors/network/4th-gen-xeon-scalable-vran.html]

 

Software-Defined Virtualized RAN (vRAN)
Radio Access Network (RAN) 

[링크 : https://www.parallelwireless.com/products/software-defined-virtualized-ran/]

 

'이론 관련 > 컴퓨터 관련' 카테고리의 다른 글

gps kalman  (0) 2024.03.13
db 식별/비식별 관계  (0) 2024.02.15
cordic (coordinate rotation digital computer)  (0) 2023.02.27
tlv  (0) 2022.10.19
DR - Disaster Recovery Plan  (0) 2022.10.17
Posted by 구차니