IT이야기

하드 부동 소수점 숫자와 소프트 부동 소수점 숫자의 차이점은 무엇입니까?

cyworld 2022. 6. 11. 11:49
반응형

하드 부동 소수점 숫자와 소프트 부동 소수점 숫자의 차이점은 무엇입니까?

크로스 툴 체인으로 C 코드를 컴파일하면 링커는 실행 파일은 하드 플로트를 사용하지만 libc는 소프트 플로트를 사용한다는 경고 페이지를 출력합니다.뭐가 다른데?

하드 플로트는 온칩 부동소수점 유닛을 사용합니다.소프트 플로트는 소프트웨어에서 에뮬레이트됩니다.차이점은 속도입니다.칩에 FPU가 있는지 없는지 여부에 관계없이 동일한 타깃 아키텍처에서 사용되는 것은 이상합니다.-msoft-float을 사용하여 GCC에서 소프트 부동소수를 이노블로 할 수 있습니다.libc를 사용하는 경우 하드웨어 부동소수를 사용하도록 다시 컴파일할 수 있습니다.

엄밀히 말하면, 이 답들은 모두 틀린 것 같다.

크로스 툴 체인으로 C 코드를 컴파일하면 링커는 실행 파일은 하드 플로트를 사용하지만 libc는 소프트 플로트를 사용한다는 경고 페이지를 출력합니다.뭐가 다른데?

Debian VFP Wiki에는 다음 3가지 선택지에 대한 정보가 있습니다.-mfloat-abi ,

  • soft 야 - 이건 순정 소프트웨어야
  • softfp하드웨어 FPU를 지원하지만 ABI는 소프트 호환성이 있습니다.
  • hard- ABI는 플로트 레지스터 또는 VFP 레지스터를 사용합니다.

링커(로더) 오류는 정수 레지스터에서 부동소수점 값을 전달하는 공유 라이브러리가 있기 때문입니다. 할 수 .-mfpu=vfp , , , , , , , , , , , , , , , , , , , , , , , , , , ,-mfloat-abi=softfplibc가 플로트를 필요로 하는 경우 라이브러리가 이해하는 방법으로 전달되도록 합니다.

Linux VFP의 VFP입니다.이 더 낫습니다.-mfpu=noneLinux 커널 에뮬레이션에 의존하지 않고 컴파일이 직접 코드를 생성하도록 합니다.하지만 OP의 오류는 이 문제와 관련이 없다고 생각합니다..-mfloat-abi.

ArmV7 CPU를 탑재한 Armv5 공유 라이브러리는 이와 반대입니다.libc는 하드 플로트였지만 어플리케이션은 소프트뿐이었습니다.이 문제를 해결하는 방법은 몇 가지 있지만 올바른 옵션을 사용하여 다시 컴파일하는 것이 항상 가장 쉽습니다.

또 다른 문제는 컨텍스트스위치에 레지스터를 저장/복원하기 위해 Linux 커널이 VFP 태스크(또는 존재하는 ARM 부동소수점)를 지원해야 한다는 것입니다.

부동 소수점 산술에는 다음 세 가지 방법이 있습니다.

  • CPU에 FPU가 있는 경우 float 명령을 사용합니다.(고속)
  • 컴파일러가 부동소수점 연산을 정수 연산으로 변환하도록 합니다.(느리다)
  • 부동소수점 명령어와 FPU가 없는 CPU를 사용합니다.CPU는 예외(예약된 명령, 구현되지 않은 명령 등)를 생성하고 OS 커널에 부동소수점 에뮬레이터가 포함되어 있는 경우 해당 명령을 에뮬레이트합니다(가장 느림).

계산은 부동소수점 하드웨어에 의해 수행되거나 정수 산술에 기초한 소프트웨어로 수행될 수 있습니다.

하드웨어에서 실행하는 것이 훨씬 빠르지만 많은 마이크로 컨트롤러에는 부동소수점 하드웨어가 없습니다.이 경우 부동소수점(일반적으로 가장 좋은 옵션)을 사용하지 않거나 C 라이브러리의 일부가 되는 소프트웨어 구현에 의존할 수 있습니다.

ARM 등 일부 컨트롤러 패밀리에서는 부동소수점 하드웨어가 패밀리의 일부 모델에만 존재하기 때문에 이들 패밀리의 gcc는 둘 다 지원합니다.두 가지 옵션을 혼동한 것이 문제인 것 같습니다.

libc는 소프트웨어 부동소수점 조작용으로 구축되어 있는 반면 exe는 부동소수점 하드웨어 지원을 가정하여 컴파일되어 있는 것 같습니다.단기적으로는 컴파일러 플래그로서 소프트 플로트를 강제할 수 있습니다.(gcc를 사용하고 있다면 -msoft-float인 것 같습니다)

장기적으로는 타깃 프로세서가 부동소수점 조작을 하드웨어로 지원한다면 일반적으로 하드웨어 플로트가 활성화되어 있는 크로스 툴체인을 구축하거나 찾을 수 있습니다.프로세서 패밀리에 따라서는 하드웨어 지원이 있는 모델도 있고 지원되지 않는 모델도 있습니다.예를 들어 프로세서가 ARM이라고 하는 것만으로는 하드웨어 부동소수점 지원 여부를 알 수 없습니다.

언급URL : https://stackoverflow.com/questions/3321468/whats-the-difference-between-hard-and-soft-floating-point-numbers

반응형