728x90
반응형

assembly 4

잘 작성된 C 코드보다 어셈블리가 더 빠른 경우의 예

질문 : 조립이 C보다 빠른 때는 언제입니까? 어셈블러를 아는 이유 중 하나는 때때로 더 높은 수준의 언어, 특히 C로 코드를 작성하는 것보다 더 성능이 좋은 코드를 작성하는 데 사용될 수 있다는 것입니다. 그러나 전적으로 잘못된 것은 아니지만 어셈블러를 실제로 사용하여 더 많은 성능의 코드를 생성 할 수있는 경우는 극히 드물고 어셈블리에 대한 전문 지식과 경험이 필요하다고 여러 번 언급 한 적이 있습니다. 이 질문은 어셈블러 명령어가 기계별로 다르고 이식 불가능하다는 사실이나 어셈블러의 다른 측면에 대해서도 설명하지 않습니다. 물론이 외에도 어셈블리를 아는 데는 많은 이유가 있지만, 이것은 어셈블러 대 상위 수준 언어에 대한 확장 된 담론이 아니라 예제와 데이터를 요청하는 특정 질문을 의미합니다. 누구..

개발관련/other 2021.11.10

gcc의 C / C ++ 소스에서 assembler output 얻는 방법

질문 : gcc의 C / C ++ 소스에서 어셈블러 출력을 어떻게 얻습니까? 어떻게해야합니까? 무언가가 어떻게 컴파일되는지 분석하고 싶다면 내 보낸 어셈블리 코드를 어떻게 얻을 수 있습니까? 답변 gcc (또는 g ++)에 -S 옵션을 사용합니다. gcc -S helloworld.c 이것은 helloworld.c를 통해 전 처리기 (cpp)를 실행하고 초기 컴파일을 수행 한 다음 어셈블러가 실행되기 전에 중지됩니다. helloworld.s 파일을 출력합니다. -o 옵션을 사용하여 출력 파일을 설정할 수 있습니다. gcc -S -o my_asm_output.s helloworld.c 물론 이것은 원본 소스가있는 경우에만 작동합니다. 결과 객체 파일 만있는 경우 대안 --disassemble 옵션 (또는 축..

Collatz 추측을 테스트하기위한 C ++ 코드가 손으로 작성한 어셈블리보다 빠르게 실행되는 이유

질문 : Collatz 추측을 테스트하기위한 C ++ 코드가 손으로 작성한 어셈블리보다 빠르게 실행되는 이유는 무엇입니까? 이 두 가지 솔루션을 Project Euler Q14 , 어셈블리 및 C ++로 작성했습니다. 그들은 Collatz 추측 을 테스트하기 위해 동일한 무차별 대입 접근 방식을 구현합니다. 조립 솔루션은 다음과 같이 조립되었습니다. nasm -felf64 p14.asm && gcc p14.o -o p14 C ++는 다음과 같이 컴파일되었습니다. g++ p14.cpp -o p14 어셈블리, p14.asm : section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rd..

32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다.

질문 : 32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다. 대규모 데이터 배열 popcount 하는 가장 빠른 방법을 찾고있었습니다. 매우 이상한 효과가 발생했습니다. 루프 변수를 unsigned 에서 uint64_t 로 변경하면 내 PC에서 성능이 50 % 저하되었습니다. #include #include #include int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr

728x90
반응형