일부 코드를 더 빨리 실행하려고합니다.부동 소수점 코드 용 g ++ 최적화 스위치
- 파라미터 (상수 배, INT)의 입력 값
- 어레이 (상수 배)
출력된다
-
: 입력으로서 고려 -이 지점 집중적 코드 부동
- 값 배열 (double)
- 자바 스크립트 매트릭스
g++-7 (Ubuntu 7.2.0-1ubuntu1~16.04) 7.2.0
을 사용하고
다음과 같은 명령 행 : 내 메모리 G ++ 과거 컴파일러 제작 나은 코드에서
g++-7 -S -fPIC -O3 -DNDEBUG -funroll-loops -march=native -ffast-math \
-I $BOOST_DIR tmp.cpp -std=c++17 \
-D__forceinline='__attribute__((always_inline))' \
-frecord-gcc-switches -Wno-attributes
는 - 그리고 훨씬 이러한 코드에 씹는되었다 더 길게. 나는 다양한 옵션을 재생하려고했지만, 단지
--param max-gcse-memory=1
어떤 효과가있는 것 - 사용하거나이 인수를 사용하지 않는 사이입니다. 매개 변수 값의 변경 사항은 무시됩니다.
더 나은 코드에 대한 나의 기준은 vmul [sp] d 명령어와 비교하여 코드에서 vmov/mov 명령어의 양입니다. 더 나은 코드에는 더 적은 [v] mov 명령어가 있어야합니다.
내가 10766은 [V] MOV 명령이 매개 변수없이 11,325에 비해 얻고있다
--param max-gcse-memory=1
를 사용하여. 이것은 1000 vmulpd와 1900 vmulsd를 비교합니다.이 숫자는 두 시도간에 어느 정도 일정합니다.
다시 - 컴파일 시간에 신경 쓰지 마십시오. 나는 더 나은 코드를 원한다. 그리고 내가 과거 (2010)에 기억했던 것에서 나는 훨씬 더 긴 컴파일 시간을 포함하여 더 나은 코드를 얻었다.
이전 버전을 설치하고 비교할 수 없습니까? 또한 기본 아키텍처가 변경되지 않았습니까? – visibleman
이 수준에서 mov vs mul을 계산하는 것은 실제적인 발견 적 방법이므로 대표 데이터에서 실행 시간을 비교해야합니다. –