GPU 프로그래밍은 약간 번거롭습니다. 이를 수행하기 위한 여러 프레임워크가 있지만, 특정 플랫폼에서만 작동하거나, 이상한 셰이딩 언어를 사용하거나, 일부 기능을 지원하지 않습니다. 어떤 경우에는
하나의 프로젝트에서 여러 프레임워크를 조합해야 합니다. 저는 이 모든 불편함에 대해 불평하기 위해 영상 하나를 통째로
만들었습니다.
반면 CPU 프로그래밍은 훨씬 더 편리합니다: 현대 프로그래밍 언어로 작성된 애플리케이션은 시장에 있는 거의 모든 CPU에서 실행될 수 있습니다. 예전에는 훨씬 더 나빴습니다: 개발자들은
다양한 CPU 아키텍처에 맞게 프로그램을 수동으로 변환하고[1], 애플리케이션을 빌드하기 위해 컴파일러 툴체인을
구매해야 했습니다[2]. 하지만 시간이 지나면서 많이 개선되었습니다.
그렇다면 두 가지 사이에 왜 이렇게 큰 차이가 있을까요? 왜 GPU 프로그래밍은 이렇게 혼란스러울까요?
이 질문에 답하기 위해, 먼저 CPU 프로그래밍이 어떻게 발전했는지 살펴봐야 합니다. 이것이
GPU 섹션에 중요하다고 약속합니다.
중앙 처리 장치 또는 CPU는 컴퓨터의 전기 부품으로, 수학적 계산이나 입출력 작업과 같은
명령을 실행합니다[3]. 이는 이런 모양의 명령어 시퀀스인 기계어를 읽어서 작동합니다[4][5]. 기계어를 직접 손으로
작성하는 것은 매우 지루하고 오류가 발생하기 쉽기 때문에, 1940년대부터[6] 사람들은 어셈블리
언어를 사용해 왔습니다. 이는 기계어 명령을 간단한 니모닉에 매핑하여 프로그래밍을 용이하게 합니다.
하지만 여전히 사용하기 상당히 어렵고, 어셈블러가 특정 CPU 아키텍처에 묶여 있기 때문에
코드를 다른 플랫폼에 맞게 조정해야 합니다[3].
또 다른 개선점은 포트란과 C와 같은 프로그래밍 언어의 형태로 나타났습니다. 이들은 어셈블리보다
더 고수준입니다: CPU가 실행할 명령어를 직접 작성하는 대신, 키워드와 수학적 기호로 이루어진