«compiler-optimization» 태그된 질문

컴파일러 최적화에는 런타임이나 개체 크기 또는 둘 다를 줄이기 위해 컴파일러를 조정하는 작업이 포함됩니다. 이는 컴파일러 인수 (예 : CFLAGS, LDFLAGS), 컴파일러 플러그인 (예 : DEHYDRA) 또는 컴파일러에 대한 직접 수정 (예 : 소스 코드 수정)을 사용하여 수행 할 수 있습니다.


12
GCC가 a * a * a * a * a * a를 (a * a * a) * (a * a * a)로 최적화하지 않는 이유는 무엇입니까?
과학 응용 프로그램에서 수치 최적화를하고 있습니다. 내가 주목 한 것은 GCC가 호출 pow(a,2)을 컴파일 하여 호출 을 최적화 a*a하지만 호출 pow(a,6)이 최적화되지 않고 실제로 라이브러리 함수를 호출 pow하여 성능이 크게 저하 된다는 것 입니다. 반대로, 실행 가능한 Intel C ++ Compilericc 는 라이브러리 호출을 제거합니다 pow(a,6). 궁금한 점은 GCC 4.5.1 …

10
32 비트 루프 카운터를 64 비트로 바꾸면 인텔 CPU에서 _mm_popcnt_u64와 성능 차이가 심해집니다.
popcount대규모 데이터 배열에 가장 빠른 방법을 찾고있었습니다 . 나는 발생하는 매우 이상한 효과를 :에서 루프 변수 변경 unsigned에 uint64_t내 PC에 50 %에 의한 성능 저하를. 벤치 마크 #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: …

9
신속한 베타 성능 : 배열 정렬
Swift Beta에서 알고리즘을 구현하고 있었고 성능이 매우 열악하다는 것을 알았습니다. 더 깊이 파고 들자 병목 현상 중 하나가 배열 정렬과 같은 간단한 것임을 깨달았습니다. 관련 부분은 다음과 같습니다. let n = 1000000 var x = [Int](repeating: 0, count: n) for i in 0..<n { x[i] = random() } // start …

6
속도 대신 크기를 최적화하면 GCC가 15-20 % 더 빠른 코드를 생성하는 이유는 무엇입니까?
2009 년에 GCC (적어도 내 프로젝트와 컴퓨터에서)는 속도 ( 또는 ) 대신 크기 ( -Os)를 최적화하면 눈에 띄게 더 빠른 코드를 생성하는 경향이 있으며 그 이후로 궁금해하고 있습니다.-O2-O3 나는이 놀라운 행동을 보여주는 (어리석지 않은) 코드를 만들었고 여기에 게시하기에 충분히 작습니다. const int LOOP_BOUND = 200000000; __attribute__((noinline)) static int add(const int& …

1
두 개의 가변 참조가 별칭을 지정할 수 없다고 가정 할 때 Rust 컴파일러가 코드를 최적화하지 않는 이유는 무엇입니까?
내가 아는 한, 참조 / 포인터 앨리어싱은 컴파일러가 최적화 된 코드를 생성하는 능력을 방해 할 수 있는데, 두 참조 / 포인터가 실제로 앨리어스 인 경우 생성 된 바이너리가 올바르게 동작해야하기 때문입니다. 예를 들어 다음 C 코드에서 void adds(int *a, int *b) { *a += *b; *a += *b; } 로 …

12
SSE4.2 및 AVX 명령어로 Tensorflow를 컴파일하는 방법은 무엇입니까?
이것은 Tensorflow가 작동하는지 확인하기 위해 스크립트를 실행하여 수신 한 메시지입니다. I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally …

2
C에서 &&& 란 무엇입니까
#include <stdio.h> volatile int i; int main() { int c; for (i = 0; i < 3; i++) { c = i &&& i; printf("%d\n", c); } return 0; } 를 사용하여 컴파일 된 위 프로그램의 출력 gcc은 0 1 1 으로 -Wall또는 -Waddress옵션, gcc경고를 : warning: the address of …

3
왜 GCC는 거의 동일한 C 코드에 대해 이렇게 완전히 다른 어셈블리를 생성합니까?
최적화 된 ftol함수를 작성하는 동안 에서 매우 이상한 동작을 발견했습니다 GCC 4.6.1. 먼저 코드를 보여 드리겠습니다 (명확하게하기 위해 차이점을 표시했습니다). fast_trunc_one, C : int fast_trunc_one(int i) { int mantissa, exponent, sign, r; mantissa = (i & 0x07fffff) | 0x800000; exponent = 150 - ((i >> 23) & 0xff); sign = …

4
정수 범위를 지정하여 최적화 프로그램에 힌트를 줄 수 있습니까?
나는 사용하고 int값을 저장하는 유형입니다. 프로그램의 의미에 따라 값은 항상 매우 작은 범위 (0-36)로 변하며 int(a char아님)는 CPU 효율성 때문에 사용됩니다. 이러한 작은 범위의 정수에서 많은 특수 산술 최적화가 수행되는 것처럼 보입니다. 이러한 정수에 대한 많은 함수 호출은 작은 "마법"연산 세트로 최적화 될 수 있으며 일부 함수는 테이블 조회로 최적화 …

2
컴파일러가 일반 함수보다 람다를 더 잘 최적화 할 수있는 이유는 무엇입니까?
그의 책에서 The C++ Standard Library (Second Edition)Nicolai Josuttis는 람다는 컴파일러가 일반 함수보다 더 잘 최적화 할 수 있다고 말합니다. 또한 C ++ 컴파일러는 일반적인 기능보다 람다를 더 잘 최적화합니다. (213 페이지) 왜 그런 겁니까? 인라인에 관해서는 더 이상 차이가 없어야한다고 생각했습니다. 내가 생각할 수있는 유일한 이유는 컴파일러가 람다와 더 …


2
Shapeless에서 Nat 유형의 한계
형태가없는 경우 Nat 유형은 유형 수준에서 자연수를 인코딩하는 방법을 나타냅니다. 예를 들어 고정 크기 목록에 사용됩니다. 유형 레벨에서 계산을 수행 할 수도 있습니다. 예를 들어 N요소 목록에 요소 목록을 추가하고 K컴파일시 알려진 목록을 가져와 N+K요소 를 갖습니다 . 이 표현이 많은 수 (예 : 10000002 53)를 표현할 수 있습니까 , …

5
향상된 GCC 6 최적화 프로그램이 실용적인 C ++ 코드를 깨뜨리는 이유는 무엇입니까?
GCC 6에는 새로운 최적화 기능이 있습니다 . this항상 null이 아니라고 가정하고이를 기반으로 최적화합니다. 값 범위 전파는 이제 C ++ 멤버 함수의 this 포인터가 널이 아닌 것으로 가정합니다. 이것은 일반적인 널 포인터 검사를 제거 하지만 부적합한 코드 기반 (예 : Qt-5, Chromium, KDevelop)도 중단 합니다. 임시 해결 방법으로 -fno-delete-null-pointer-checks를 사용할 수 …

7
컴파일러가 예측 가능한 추가 루프를 곱셈으로 최적화 할 수없는 이유는 무엇입니까?
이것은 질문에 대한 Mysticial 의 훌륭한 답변을 읽는 동안 염두에 두었던 질문입니다. 정렬되지 않은 배열보다 정렬 된 배열을 처리하는 것이 왜 더 빠릅 니까? 관련된 유형에 대한 컨텍스트 : const unsigned arraySize = 32768; int data[arraySize]; long long sum = 0; 그의 대답에서 그는 인텔 컴파일러 (ICC)가 이것을 최적화한다고 설명합니다. …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.