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

  1. 2023.08.13 처갓댁 방문
  2. 2023.08.12 낮잠을 잘 수가 없네!!!
  3. 2023.08.11 피곤
  4. 2023.08.10 다이조아 부품 데이터 시트
  5. 2023.08.09 태풍도착
  6. 2023.08.09 다이조아 택베도착
  7. 2023.08.09 arm vsub operator
  8. 2023.08.08 .bashrc 설정 history
  9. 2023.08.08 gcc cortex-a9 double형 neon 연산 가속 3
  10. 2023.08.07 ARM NEON SLP

양념통닭은 없음!

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

피곤  (0) 2023.09.03
뚝섬 유원지 물놀이  (0) 2023.08.19
낮잠을 잘 수가 없네!!!  (0) 2023.08.12
피곤  (0) 2023.08.11
태풍도착  (0) 2023.08.09
Posted by 구차니

똥개들이 9시면 미친듯이 핥아서 깨우고, 8시면 느긋하게(?) 방해하고

늦잠 자고 싶다고 망할 똥개들아 ㅠㅠ  말복지났다고 난리냐?

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

뚝섬 유원지 물놀이  (0) 2023.08.19
처갓댁 방문  (0) 2023.08.13
피곤  (0) 2023.08.11
태풍도착  (0) 2023.08.09
습하지 않은 더위  (0) 2023.08.06
Posted by 구차니

우어어어어

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

처갓댁 방문  (0) 2023.08.13
낮잠을 잘 수가 없네!!!  (0) 2023.08.12
태풍도착  (0) 2023.08.09
습하지 않은 더위  (0) 2023.08.06
국립 한글박물관 현장예매  (0) 2023.07.30
Posted by 구차니

구글 찾아봐도 다이조아 내에서만 나오는 특이한 녀석들..

범용 부품이 아닌건가?

 

역전류 방지 정류 다이오드 SR310-35 X0

100V peak 70V rms 3A

[링크 : https://pdf1.alldatasheet.co.kr/datasheet-pdf/view/704691/TSC/SR310.html]

 

쇼트키다이오드(권선저항) / FR103HF / fast switch rectifier

reverse 50v~1000V / forward 1.0A TA=55'c

[링크 : https://pdf1.alldatasheet.co.kr/datasheet-pdf/view/700387/LRC/FR103.html]

 

사각 녹색 2LED

[링크 : https://pdf1.alldatasheet.com/datasheet-pdf/view/219100/BRIGHT/BA-2G2UW.html]

 

 

dolmen SM2-D6 릴레이

 

 

[링크 : https://m.helptel.kr/product/detail.html?product_no=9458&cate_no=86&display_group=1]

 

 

7-SEGMENT DES-8024AD

[링크 : https://www.diyjoa.com/product/detail.html?product_no=4138&cate_no=140]

 

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

알뜰카드 도착, 앱 설치 완료!  (0) 2023.09.14
미칠듯한 피곤  (0) 2023.08.22
다이조아 택베도착  (0) 2023.08.09
오늘의 지름  (2) 2023.08.02
줘같네  (0) 2023.07.31
Posted by 구차니

비피해 없길

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

낮잠을 잘 수가 없네!!!  (0) 2023.08.12
피곤  (0) 2023.08.11
습하지 않은 더위  (0) 2023.08.06
국립 한글박물관 현장예매  (0) 2023.07.30
피곤  (0) 2023.07.29
Posted by 구차니

베어링과 다이오드는 예상보다 크다

머하는데 가지고 놀지?

'개소리 왈왈 > 직딩의 비애' 카테고리의 다른 글

미칠듯한 피곤  (0) 2023.08.22
다이조아 부품 데이터 시트  (0) 2023.08.10
오늘의 지름  (2) 2023.08.02
줘같네  (0) 2023.07.31
현타  (0) 2023.07.18
Posted by 구차니
embeded/ARM2023. 8. 9. 13:54

저번에 작성한 프로그램에서 VFP 를 통한 연산가속을 활성화 해봤는데 혹시나 해서, 어떤 명령어를 이용했나 역으로 찾아보는 중

   111a0: f35668e8  vsub.i16 q11, q11, q12
   1120c: f35318a1  vsub.i16 d17, d19, d17
   1172c: f2600de8  vsub.f32 q8, q8, q12
   11730: f2644de8  vsub.f32 q10, q10, q12
   11784: ee377a46  vsub.f32 s14, s14, s12
   117a8: ee755ac6  vsub.f32 s11, s11, s12
   117c0: ee744ac6  vsub.f32 s9, s9, s12
   117d8: ee355a46  vsub.f32 s10, s10, s12
   117f0: ee755ac6  vsub.f32 s11, s11, s12
   1180c: ee744ac6  vsub.f32 s9, s9, s12
   11818: ee355a46  vsub.f32 s10, s10, s12
   11824: ee356ac6  vsub.f32 s12, s11, s12
   11844: f2600de8  vsub.f32 q8, q8, q12
   11848: f2644de8  vsub.f32 q10, q10, q12
   118a8: ee344a67  vsub.f32 s8, s8, s15
   118d4: ee744ae7  vsub.f32 s9, s9, s15
   118ec: ee355a67  vsub.f32 s10, s10, s15
   11908: ee755ae7  vsub.f32 s11, s11, s15
   11918: ee344a67  vsub.f32 s8, s8, s15
   11924: ee744ae7  vsub.f32 s9, s9, s15
   11930: ee355a67  vsub.f32 s10, s10, s15
   1193c: ee757ae7  vsub.f32 s15, s11, s15

역어셈블 해보니 위와 같이 vsub.i16과 같은 neon 으로도 될 것 같은 녀석은 패스하면 vsub.f32 밖에 없다.

 

vsub.f32가 neon 껀지 vfp껀지 궁금해서 찾아보는 중

VSUB (floating-point)
Floating-point subtract.
This instruction can be scalar, vector, or mixed, but VFP vector mode and mixed mode are deprecated.

[링크 : https://developer.arm.com/documentation/dui0489/i/neon-and-vfp-programming/vsub--floating-point-]

 

Instruction Section Instruction set
V{Q}SUB V{Q}SUB, VSUBL and VSUBW NEON
VSUB VSUB VFP

[링크 : https://developer.arm.com/documentation/den0018/a/NEON-and-VFP-Instruction-Summary/List-of-all-NEON-and-VFP-instructions]

 

cortex a9의 NEON MPE는 Advanced SIMD와 VFP 확장을 구현하였지만

IEEE754 연산중 아래의 연산을 하드웨어적으로 제공하지 않는다 인데

round float-point number to nearest integer-valued in floating point number 때문에

gcc 에서 --fast-math 를 켜줘야 VFP 명령이 활성화 되는걸까?

IEEE754 standard compliance
The IEEE754 standard provides a number of implementation choices. The ARM Architecture Reference Manual describes the choices that apply to the Advanced SIMD and VFPv3 architectures.

The Cortex-A9 NEON MPE implements the ARMv7 Advanced SIMD and VFP extensions. It does not provide hardware support for the following IEEE754 operations:

remainder
round floating-point number to nearest integer-valued in floating-point number
binary-to-decimal conversion
decimal-to-binary conversion
direct comparison of single-precision and double-precision values
any extended-precision operations.

[링크 : https://developer.arm.com/documentation/ddi0409/e/programmers-model/ieee754-standard-compliance]

 

+

다시 옵션에 따른 비교를 해보니

어찌 된게 ffast-math 한게 디스어셈블한 부분이 더 길다.. 그런데 왜 빠르지?

for (int i = 0; i < READ_SIZE; i += 2)
   11710: f3f48c46  vdup.32 q12, d6[0]
float diff = data[i] - avg_0;
   11714: f46c434d  vld2.16 {d20-d23}, [ip]!
   11718: f2d00a34  vmovl.s16 q8, d20
   1171c: e151000c  cmp r1, ip
   11720: f2d04a35  vmovl.s16 q10, d21
   11724: f3fb0660  vcvt.f32.s32 q8, q8
   11728: f3fb4664  vcvt.f32.s32 q10, q10
   1172c: f2600de8  vsub.f32 q8, q8, q12
   11730: f2644de8  vsub.f32 q10, q10, q12
std_0 += diff * diff;
   11734: f3400df0  vmul.f32 q8, q8, q8
   11738: f2440df4  vmla.f32 q8, q10, q10
   1173c: f2422de0  vadd.f32 q9, q9, q8
for (int i = 0; i < READ_SIZE; i += 2)
   1177c: e15e000c  cmp lr, ip
float diff = data[i] - avg_0;
   11780: ee072a90  vmov s15, r2
   11784: eef87ae7  vcvt.f32.s32 s15, s15
   11788: ee777ac6  vsub.f32 s15, s15, s12
std_0 += diff * diff;
   1178c: ee077aa7  vmla.f32 s14, s15, s15

 

흐으으으으음.. 어셈은 어려워 -_ㅠ

Instruction Section Instruction set
VMLA VMUL, VMLA, VMLS, VNMUL, VNMLA, and VNMLS VFP
VMLA{L} VMUL{L}, VMLA{L}, and VMLS{L} (by scalar) NEON

[링크 : https://developer.arm.com/documentation/den0018/a/NEON-and-VFP-Instruction-Summary/List-of-all-NEON-and-VFP-instructions]

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

cortex-a53  (0) 2023.08.31
aarch64 vector register  (0) 2023.08.23
ARM NEON SLP  (0) 2023.08.07
cortex a9 ptm  (0) 2023.07.21
openOCD와 jtag  (0) 2023.07.06
Posted by 구차니
Linux2023. 8. 8. 12:09

귀찮으니 정리해서 하나 저장해 놔야지 -_-

export HISTTIMEFORMAT="%y/%m/%d %T "
export PROMPT_COMMAND='history -a'
export PROMPT_COMMAND='echo -e "$(tty)\t$(history 1)" >> ~/bash-history-$(date "+%Y-%m-%d").log' 

'Linux' 카테고리의 다른 글

dhcpd IP 할당 규칙  (0) 2023.09.01
시스템 audit 로그  (0) 2023.08.30
lvmcache bcache  (0) 2023.07.27
sysfs ethernet link status  (0) 2023.05.17
리눅스 커맨드 라인에서 몇줄씩 건너뛰고 출력하기  (0) 2023.03.30
Posted by 구차니
프로그램 사용/gcc2023. 8. 8. 11:17

문득 cpu 사양 다시 볼까? 싶어서 보니

어? NEON이 아니라 NEON MPE?

NEON™ media-processing engine
Single and double precision Vector Floating Point Unit (VFPU)

[링크 : https://docs.xilinx.com/v/u/en-US/ds190-Zynq-7000-Overview]

 

그래서 cortex-A9 NEON MPE 명령을 뒤져보는데

VADD나 VSUB VMUL VDIV에 대해서 찾아보니 NEON으로는 float까지만 되도, double은 VFP를 통해서 가능할 것 같은데

D
Double precision floating-point values

F
Single precision floating-point values

H
Half precision floating-point values

I
Integer values

P
Polynomials with single-bit coefficients

X
Operation is independent of data representation.


Name Advanced SIMD VFP Description
VADD I, F F, D Add
VDIV - F, D Divide
VMUL I, F, P F, D Multiply
VSUB I, F F, D Subtract

[링크 : https://developer.arm.com/documentation/ddi0409/i/instruction-timing/cortex-a9-neon-mpe-instructions?lang=en]

타입을 바꾸어 봐도 안되서 골머리를 싸매다가(float는 된다매!!! double은 vfp로 된다매!!!)

main.c:187:2: missed: couldn't vectorize loop
main.c:177:6: missed: not vectorized: unsupported data-type double


main.c:187:2: missed: couldn't vectorize loop
main.c:177:6: missed: not vectorized: unsupported data-type float

 

금단의 플래그를 설정하니 잘 된다. -_-

main.c:194:2: optimized: loop vectorized using 16 byte vectors
main.c:188:2: optimized: loop vectorized using 16 byte vectors

 

IEEE를 무시하고 안전하지 않은 연산도 적용되고 하다보니 영 쓰기가 불안한데...

In addition GCC offers the -ffast-math flag which is a shortcut for several options, presenting the least conforming but fastest math mode. It enables -fno-trapping-math, -funsafe-math-optimizations, -ffinite-math-only, -fno-errno-math, -fno-signaling-nans, -fno-rounding-math, -fcx-limited-range and -fno-signed-zeros. Each of these flags violates IEEE in a different way. -ffast-math also may disable some features of the hardware IEEE implementation such as the support for denormals or flush-to-zero behavior. An example for such a case is x86_64 with it's use of SSE and SSE2 units for floating point math. 

[링크 : https://gcc.gnu.org/wiki/FloatingPointMath]


아무튼 어제 어디서 보다 찾았던 associative 옵션을 못찾아서 헤매다가 다시 생각나서 보는데

associative하지 않다.. 이게 무슨 의미지?

Goldberg 논문에 나온 것 처럼 floating-point의 계산은 associative하지 않다.
그러므로 ffast-math 연산 방식에서는 실제 값에 오류를 포함할 수 밖에 없다.
이러한 점 때문에 ffast-math 방식은 IEEE에서 정의한 방식을 따르지 못한다.

위와 같은 특징 때문에, 정확한 값을 계산해야하는 것이라면 ffast-math를 사용하면 안된다.
하지만 대충 어림잡아서 맞는 값을 원하는 것이라면?

[링크 : https://www.cv-learn.com/20210107-gcc-ffast-math/]


float 형의 오차로 인해서 계산때 마다 동일 결과가 나오지 않는다는 의미군..

결합의((a × b) × c = a × (b × c)의 예에서처럼 계산식이 부분의 순서와 상관없이 동일한 결과가 나오는)

[링크 : https://en.dict.naver.com/#/entry/enko/43a6bbaaacf546199c5d4c57b6b88ebb]


그래서 한번 -ffast-math 대신 적용해보려는데 다른 상위 옵션에 의해서 무시 당했다고 나온다.

누가 상위 옵션이려나?

-o -W -Wall -fopt-info-vec -march=armv7-a -mfpu=neon -O3 -fassociative-math

cc1: warning: ‘-fassociative-math’ disabled; other options take precedence


-ffast-math 보단 순한 맛이긴 한데 적용이 안되면 의미 없지 머..

-fassociative-math
Allow re-association of operands in series of floating-point operations. This violates the ISO C and C++ language standard by possibly changing computation result. NOTE: re-ordering may change the sign of zero as well as ignore NaNs and inhibit or create underflow or overflow (and thus cannot be used on code that relies on rounding behavior like (x + 2**52) - 2**52. May also reorder floating-point comparisons and thus may not be used when ordered comparisons are required. This option requires that both -fno-signed-zeros and -fno-trapping-math be in effect. Moreover, it doesn’t make much sense with -frounding-math. For Fortran the option is automatically enabled when both -fno-signed-zeros and -fno-trapping-math are in effect.

The default is -fno-associative-math.

[링크 : https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html]

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

gcc tree vectorize  (0) 2023.01.26
gcc fstack-protector-strong  (0) 2022.12.06
gcc vectorization 실패  (0) 2022.06.02
gcc / 문자열 선언  (0) 2022.03.17
static link  (0) 2022.02.07
Posted by 구차니
embeded/ARM2023. 8. 7. 19:10

SLP가 먼가 해서 보는데 gcc/gnu 문서 내에서는 없어서

 

word 보다 더 큰 크기의 데이터들에 대해서(super word level) 병렬화(parallelism) 한다는 의미인가?

Superword-Level Parallelism (SLP) vectorizer

[링크 : https://rcor.me/papers/cgo19snslp.pdf]

[링크 : https://llvm.org/docs/Vectorizers.html#slp-vectorizer]

 

Example 20: Basic block SLP with multiple types, loads with different offsets, misaligned load, and not-affine accesses:

void foo (int * __restrict__ dst, short * __restrict__ src,
          int h, int stride, short A, short B)
{
  int i;
  for (i = 0; i < h; i++)
    {
      dst[0] += A*src[0] + B*src[1];
      dst[1] += A*src[1] + B*src[2];
      dst[2] += A*src[2] + B*src[3];
      dst[3] += A*src[3] + B*src[4];
      dst[4] += A*src[4] + B*src[5];
      dst[5] += A*src[5] + B*src[6];
      dst[6] += A*src[6] + B*src[7];
      dst[7] += A*src[7] + B*src[8];
      dst += stride;
      src += stride;
    }
}

[링크 : https://gcc.gnu.org/projects/tree-ssa/vectorization.html#slp]

 

 

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

aarch64 vector register  (0) 2023.08.23
arm vsub operator  (0) 2023.08.09
cortex a9 ptm  (0) 2023.07.21
openOCD와 jtag  (0) 2023.07.06
cmsis (Common Microcontroller Software Interface Standard)  (0) 2023.02.27
Posted by 구차니