인터뷰: Intel oneAPI 및 Direct Parallel C++의 약속
게시 됨: 2022-03-11인텔은 지구상에서 가장 영향력 있고 혁신적인 기술 회사 중 하나이지만 소프트웨어 개발을 생각할 때 가장 먼저 떠오르는 이름은 아닙니다. 40년 전 Intel의 8088 프로세서는 PC 혁명을 시작하는 데 도움이 되었으며 데스크탑이나 노트북에서 이 글을 읽고 있다면 Intel Inside가 있을 가능성이 높습니다. 우리가 매일 사용하는 서버 및 기타 다양한 하드웨어도 마찬가지입니다. AMD와 다른 벤더들이 경쟁 제품을 갖고 있지 않다는 것은 아니지만, 인텔이 여전히 x86 CPU 시장을 지배하고 있기 때문입니다.
소프트웨어 엔지니어는 일반적으로 뒤에 있는 소프트웨어와 펌웨어를 고려하지 않고 수십 년 동안 인텔 하드웨어 플랫폼을 사용해 왔습니다. 더 많은 가상화 성능이 필요한 경우 멀티코어, 하이퍼스레드 Core i7 또는 Xeon 제품을 선택했습니다. 로컬 데이터베이스 수정을 위해 인텔 SSD를 얻을 수 있습니다. 그러나 이제 인텔은 개발자들도 자사 소프트웨어를 더 많이 사용하기를 원합니다.
인텔 oneAPI란 무엇입니까?
CPU, GPU, FPGA, AI 가속기 등 다양한 하드웨어 아키텍처에서 개발을 단순화하는 것을 목표로 하는 단일 통합 프로그래밍 모델로 Intel에서 홍보하는 oneAPI를 입력하십시오. 그들 모두는 매우 다른 속성을 가지고 있으며 다양한 유형의 작업에 탁월합니다.
인텔은 이제 "소프트웨어 우선" 전략에 전념하고 있으며 개발자가 주의를 기울일 것으로 기대합니다. oneAPI의 웅대한 아이디어는 다양한 하드웨어에 대해 하나의 플랫폼을 사용할 수 있도록 하는 것입니다. 따라서 개발자는 예를 들어 CPU 및 GPU용으로 코딩할 때 다른 언어, 도구 및 라이브러리를 사용할 필요가 없습니다. oneAPI를 사용하면 도구 상자와 코드베이스가 둘 다 동일합니다.
이를 가능하게 하기 위해 인텔은 일반적으로 특정 하드웨어(예: GPU 또는 FFPGA)용 프로그래밍에 사용되는 독점 언어에 대한 오픈 소스 대안으로 Data Parallel C++(DPC++)를 개발했습니다. 이 새로운 프로그래밍 언어는 C++의 생산성과 친숙함을 제공하는 동시에 다양한 하드웨어 대상에 배포할 컴파일러를 포함해야 합니다.
Data Parallel C++는 또한 Khronos Group의 SYCL을 통합하여 데이터 병렬화 및 이기종 프로그래밍을 지원합니다. Intel은 현재 DevCloud에 대한 무료 액세스를 제공하여 소프트웨어 엔지니어가 번거로움 없이 클라우드에서 oneAPI 및 DPC++로 도구를 시험해보고 수정할 수 있도록 합니다.
하지만 잠깐만, 다른 공급업체에서 만든 하드웨어에서도 작동할까요? 라이센스는 어떻습니까? 무료입니까? 예 및 예: oneAPI는 하드웨어에 구애받지 않고 오픈 소스로 설계되었으며 변경되지 않습니다.
oneAPI에 대해 자세히 알아보기 위해 Intel의 아키텍처, 그래픽 및 소프트웨어 그룹 부사장이자 Intel의 기술, 엔터프라이즈 및 클라우드 컴퓨팅 총괄 관리자인 Sanjiv M. Shah와 함께 그 기원과 미래에 대해 논의했습니다.
Sanjiv: oneAPI에 포함된 내용을 4가지 정도로 생각합니다. 하나는 언어 및 표준 라이브러리, 두 번째는 딥 러닝 도구 세트, 세 번째는 실제로 하드웨어 추상화 계층과 다른 가속기를 추상화할 수 있는 소프트웨어 드라이버 계층, 네 번째는 도메인 중심 라이브러리 집합입니다. , Matlab 등. 이것들은 oneAPI의 4가지 범주이지만 oneAPI의 9가지 요소에 대해 더 깊이 이야기할 수 있습니다. 이 9가지 요소는 기본적으로 Data Parallel C++ 및 표준 라이브러리라고 하는 새로운 언어입니다.
두 개의 학습 라이브러리가 있습니다. 하나는 신경망용이고 다른 하나는 통신용입니다. 하드웨어 추상화를 위해 레벨 0이라고 부르는 라이브러리가 있고 4개의 도메인 중심 라이브러리가 있습니다. 우리는 이것을 매우 개방적인 방식으로 하고 있습니다. 이들 모두에 대한 사양은 이미 공개되어 사용 가능합니다. 우리는 그것들을 버전 0.5라고 부릅니다. 우리는 2020년 말까지 1.0으로 전환할 계획이며 이 모든 것을 오픈 소스로 구현했습니다. 다시 말하지만, 우리의 목표는 사람들이 이미 존재하는 것을 활용할 수 있도록 하는 것입니다. 하드웨어 공급업체가 이 언어를 구현하려는 경우 오픈 소스를 사용하여 실행할 수 있습니다.
Q: 알고리즘 및 구현과 관련하여 어떻게 작동합니까?
우리가 제공하는 것은 알고리즘이 사용할 기본 수학적 기본 요소와 통신 기본 요소입니다. 일반적으로 알고리즘 혁신은 기본 수학, 행렬 수학, 컨볼루션 수학 등을 실제로 다시 수행하지 않는 것보다 더 높은 수준에서 발생합니다. 수학을 사용하는 새로운 방법과 의사 소통 패턴을 사용하는 새로운 방법을 찾는 것입니다. 우리의 목표는 다른 사람들이 그 위에서 혁신할 수 있도록 0단계의 기본 요소를 제공하는 것입니다.
Q: 하드웨어 수준에서 어떻게 작동합니까?
하드웨어 제공업체인 경우 AI 매트릭스를 예로 들어보겠습니다. 예를 들어 누군가가 AI ASIC을 구축하는 경우 해당 하드웨어 공급업체가 AI 에코시스템을 "플러그인"하고 활용할 수 있는 두 가지 방법이 있습니다. 하나는 우리가 레벨 0이라고 부르는 이 저수준 하드웨어 인터페이스를 제공하는 것이며, 표준 API를 사용하여 레벨 0의 버전을 제공하는 경우 원하는 경우 오픈 소스를 활용할 수 있고 그 다음 위의 모든 소프트웨어 계층을 활용할 수 있습니다. 자동으로 활용할 수 있습니다.
세그먼트 중심 ASIC에서는 레벨 0의 완전한 일반성을 제공하기 어려울 수 있습니다. 따라서 이에 대한 대안으로 우리 도메인 및 딥 러닝 라이브러리에 있는 수학 커널과 통신 커널을 제공할 수도 있습니다. 그러면 우리는 이러한 라이브러리를 상위 수준 프레임워크에 "연결"하는 작업을 수행할 것입니다. 그들은 자동으로 그것을 얻을 것입니다.
Q: 현재 가지고 있는 버전은 0.5로 지정되어 있으며 전체 사양은 2020년 말까지 준비될 것이라고 언급했습니다.
따라서 oneAPI 이니셔티브에는 두 부분이 있습니다. 하나는 산업 부분이고 하나는 인텔 제품입니다. 산업 사양은 0.5이고 올해 중반쯤에 1.0으로 만들고 싶습니다. 이와 병행하여 Intel은 일련의 제품을 구축하고 있으며 Intel이 구축하고 있는 제품은 현재 베타 버전이며 0.5 사양을 구현합니다. 올해 말까지 우리는 1.0 제품을 만들고 싶습니다.
Intel의 제품은 oneAPI의 9가지 요소를 뛰어넘습니다. 우리가 제공하는 기본 프로그래밍 요소 외에도 디버거, 분석기 및 호환성 도구와 같이 프로그래머가 실제로 필요로 하는 것들을 제공하여 기존 언어에서 Data로 마이그레이션할 수 있기 때문입니다. 병렬 C++ 언어.
Q: 개발자가 전환하는 것이 얼마나 어려운가요? 더 넓은 환경이 몇 년 동안 사용했던 것과 비슷합니까?
예, 매우 유사합니다. Data Parallel C++에 대해 조금 설명하겠습니다. 이것이 우리가 하고 있는 일의 큰 부분이기 때문입니다. DPC++는 세 가지입니다. ISO 국제 표준 C++ 언어를 기반으로 합니다. SYCL이라는 표준을 정의하는 Khronos라는 그룹이 있으며 SYCL은 C++ 위에 계층화되어 있습니다. SYCL을 사용하고 SYCL 위에 확장을 추가합니다. 우리가 Data Parallel C++를 구축하는 방식은 실제로 확장이 포함된 C++이며, 이것이 바로 SYCL입니다.
모든 C++ 컴파일러에서 컴파일할 수 있습니다. DPC++의 장점은 모든 컴파일러가 이를 컴파일할 수 있다는 것입니다. 지식이 풍부한 컴파일러만 해당 언어의 내용을 활용하고 가속기 코드를 생성할 수 있습니다. 우리는 이 언어를 수행하는 방식을 매우 공개적으로 수행하고 있으므로 Data Parallel C++에 대한 모든 논의는 SYCL 위원회와 함께 진행됩니다. 구현은 오픈 소스이며 모든 확장은 이미 게시되었으며 우리는 미래의 SYCL 표준에 대한 좋은 글라이드 경로를 갖도록 매우 신중하게 작업하고 있습니다. 지금부터 5~10년 후를 내다보면 ISO C++로 가는 길도 있습니다.
Q: 컴파일러 및 DPC++로의 마이그레이션과 관련하여 학습 곡선이 그다지 문제가 되지 않아야 합니까?
예, 물론 시작 위치에 따라 다릅니다. C++ 프로그래머의 경우 학습 곡선은 매우 작습니다. C 프로그래머의 경우 C++ 학습의 장애물을 극복해야 하지만 그게 전부입니다. 매우 친숙한 C++입니다. OpenCL과 같은 언어에 익숙한 프로그래머의 경우 매우 유사해야 합니다.

강조해야 할 다른 부분은 LLVM 인프라를 사용하여 오픈 소스에서 작업을 수행하고 있다는 것입니다. 우리의 모든 소스는 이미 열려 있으며 언어 구현을 살펴보고 오픈 소스 컴파일러를 다운로드할 수 있는 Intel GitHub 리포지토리가 있습니다. 모든 인텔 도구, 베타인 제품 오퍼링도 누구나 무료로 플레이하고 다운로드할 수 있습니다. 우리는 또한 사람들이 아무것도 다운로드하거나 설치할 필요가 없고 코드를 작성하고 우리가 이야기한 모든 도구를 사용하기 시작할 수 있는 개발자 클라우드를 사용할 수 있습니다.
Q: C++는 성능이 좋고 상대적으로 단순하지만, 우리 모두는 그것이 오래되고 개발이 느리고 이해 관계자가 너무 많아 모든 것이 느려지고 있다는 것을 알고 있습니다. 이것은 분명히 DPC++의 경우가 아닐 것입니다. 훨씬 더 빠른 반복 및 업데이트가 가능합니까?
표준에 의해 속도가 느려지지 않는 빠른 발전이라는 매우 중요한 시점에 도달했다고 생각합니다. 그래서 우리는 표준과 공개적으로 논의를 하고 싶기 때문에 표준에 들어갈 수 있는 방법이 있지만 빨리 하고 싶기도 합니다.
언어는 아키텍처가 발전함에 따라 사용자와 구현자가 공동 설계할 때 가장 잘 작동합니다. 우리의 목표는 작업을 연습하고 작업을 수행하는 가장 좋은 방법을 찾고 표준으로 만드는 매우 빠른 반복 코드 디자인입니다. 따라서 절대적으로 빠른 반복이 큰 목표입니다.
Q: 동료 중 일부가 제기한 한 가지 질문(대기업에서 제공하는 모든 것에 대한 개방성에 대해 다소 우려하고 있음을 이해할 수 있을 것입니다): DPC++는 항상 모든 사용자와 공급업체에게 열려 있습니까?
전적으로! 사양은 크리에이티브 커먼즈 라이선스로 수행됩니다. 누구든지 사양을 사용하고 원하는 경우 가져와서 포크하고 진화시킬 수 있습니다. oneAPI의 모든 요소가 오픈 소스로 제공되는 것은 아니지만 거의 모든 요소를 오픈 소스로 만드는 길에 있다는 점을 강조하고 싶습니다. 이 모든 것을 누구나 잡고 활용할 수 있습니다. 구현에 사용할 수 있습니다.
영국에 있는 회사인 Codeplay는 Nvidia의 DPC++ 구현을 발표했으며 모든 하드웨어 공급업체와 소프트웨어 공급업체가 이식을 하도록 적극 권장하고 있습니다. 우리는 여러 공급업체에서 액셀러레이터가 일반화되고 있는 업계 고유의 시점에 있습니다. 역사에서 그런 일이 발생하면 공급자가 하나뿐일 때 그들의 언어가 지배적입니다. 소프트웨어 산업은 표준 솔루션과 여러 공급자를 요구합니다.
여기서 우리가 하려고 하는 것은 약 25년 전 OpenMP로 했던 일입니다. 여러 병렬 언어가 있었지만 실제로 지배적인 언어는 하나도 없었습니다. 우리는 이 모든 것을 취하여 25년이 지난 지금 HPC를 위한 프로그래밍 방식인 표준으로 통합했습니다.
Q: DPC++가 앞으로 몇 년 동안 많은 발전을 보일 것이라고 말하는 것이 맞습니까? 텐서는 어떻습니까? 새로운 하드웨어가 나오면 어떻습니까?
네, 절대적으로 맞습니다. 우리는 나올 새로운 하드웨어를 지원하기 위해 언어를 발전시켜야 합니다. 그것이 더 빠른 반복의 목표입니다. 강조하고 싶은 또 다른 요점은 원하는 경우 아키텍처별 확장을 연결할 수도 있도록 데이터 병렬 C++를 설계하고 있다는 것입니다.
따라서 여러 아키텍처에서 실행하려는 표준 언어이지만 때로는 청중, 즉 매우 중요한 청중이 가능한 최대 성능을 필요로 한다는 것도 알고 있습니다. 그들은 아키텍처 이식이 반드시 필요하지 않은 매우 낮은 수준의 프로그래밍을 원할 수 있습니다. 아키텍처에 따라 달라지는 텐서 등에 대한 확장을 가질 수 있도록 확장 및 메커니즘을 구축하고 있습니다.
Q: 개발자는 하드웨어용으로 생성된 코드를 어느 정도 제어할 수 있습니까? 시스템과 다양한 가속기 간의 메모리 관리를 얼마나 제어할 수 있습니까?
우리는 사용자에게 매우 명시적인 메모리 제어를 제공하는 SYCL에서 버퍼의 개념을 차용하고 있지만 이에 더하여 통합 메모리 의 개념도 추가하고 있습니다. 우리의 목표는 프로그래머가 메모리를 관리할 뿐만 아니라 빠른 코드를 생성하는 데 필요한 수준의 제어를 허용하는 것입니다. SYCL을 통해 추가하는 확장 중 일부는 하위 그룹, 축소, 파이프 등과 같은 것입니다. 그러면 다른 아키텍처에 대해 훨씬 더 나은 코드를 생성할 수 있습니다.
Q: 흥미로운 점은 Python용 oneAPI 배포입니다. Intel은 NumPy, SciPy, SciKit Learn을 구체적으로 나열했습니다. oneAPI를 통해 얻을 수 있는 성능 향상과 생산성 이점이 궁금합니다. 이에 대한 측정항목이 있습니까?
훌륭한 질문입니다. 우리는 그 생태계를 지원하고 있습니다. 왜 파이썬은 가속기를 사용하려고 할까요? 수학 라이브러리, 분석 라이브러리에서 성능을 얻기 위한 것입니다. 우리가 하고 있는 것은 NumPy, SciPy, SciKit Learn 등을 "배관"하는 것이므로 우리가 가지고 있는 라이브러리를 활용하여 좋은 성능을 얻을 수 있습니다. NumPy, SciPy, SciKit Learn 등의 기본 구현은 최적화된 기본 패키지로 적절하게 연결된 것과 비교하여 매우 큰 이득을 볼 수 있습니다. 우리는 200x, 300x 등의 순서로 이익을 보았습니다.
Python에 대한 우리의 목표는 네이티브 코드 성능의 2배 이내, 아마도 80% 이내로 합리적인 부분을 얻는 것입니다. 오늘날 기술의 상태는 자주 10배 이상에 있다는 것입니다. 우리는 모든 고성능 작업을 연결하여 2의 요소 내에 있고 실제로는 그보다 훨씬 더 높은 수준에 도달하도록 하여 이러한 격차를 해소하고자 합니다.
Q: 어떤 유형의 하드웨어에 대해 이야기하고 있습니까? 개발자가 일반 워크스테이션에서 이러한 잠재력을 발휘할 수 있습니까? 아니면 좀 더 강력한 것이 필요합니까?
아니, 어디에나 있을 것이다. 이익이 어디에서 오는지 생각해보면 이해가 될 것입니다. 일반 Python 라이브러리는 CPU에서 가상화 기능을 사용하지 않습니다. 그들은 CPU에서 멀티 코어 기능을 사용하지 않습니다. 최적화되지 않은 메모리 시스템과 최적화되지 않은 모든 것입니다. 따라서 순진한 프로그래머가 작성하고 최적화 없이 컴파일러로 컴파일한 행렬 곱셈으로 귀결됩니다. 그런 다음 이를 전문가가 어셈블리 코드로 작성하는 것과 비교합니다. 이 둘을 비교할 때 다중 100배의 이득을 볼 수 있으며 Python 세계에서는 본질적으로 그것이 일어나고 있습니다.
Python 인터프리터와 표준 라이브러리는 너무 높은 수준이어서 최종적으로 완성되는 코드는 매우 순진한 코드가 됩니다. 최적화된 라이브러리로 적절하게 연결하면 엄청난 이득을 얻을 수 있습니다. 랩톱에는 이미 2~6개 또는 8개의 CPU 코어가 있고 멀티스레드이며 꽤 괜찮은 벡터화 기능을 가지고 있습니다. 아마도 256개일 수도 있고 512개일 수도 있습니다. 따라서 랩톱과 워크스테이션에는 많은 성능이 있습니다. GPU로 확장할 때 그래픽을 사용할 수 있게 되면 이득이 어디에서 오는지 상상할 수 있습니다.
통합 그래픽을 보면 매우 강력해지고 있습니다. 통합 그래픽이 이전 세대보다 훨씬 뛰어난 Ice Lake Gen 11을 보셨을 것입니다. 노트북에서도 이점이 어디에서 오는지 알 수 있습니다.
Q: DevCloud 가용성은 어떻습니까? 제 기억이 맞다면 지금은 누구나 무료로 사용할 수 있지만 내년에 골드를 획득한 후에도 그대로 유지될까요?
그건 좋은 질문이야. 이 시점에서 나는 솔직히 답을 모릅니다. 이 시점에서 우리의 의도는 영원히 무료가 되는 것입니다. 그것은 개발을 위한 것이고, 놀기 위한 것입니다. 거기에는 많은 마력이 있습니다. 그래서 사람들은 실제로 달리기를 할 수 있습니다.
Q: 그렇다면 수천 명의 개발자에게 한 번 해보라고 요청해도 괜찮을까요?
아, 절대 아닙니다. 그렇게 되기를 바랍니다!
우리가 하려는 것을 요약할 수 있습니다. 첫째, 우리는 oneAPI에 대해 매우 매우 흥분하고 있습니다. 현재 시장에 여러 공급업체가 있으므로 다중 공급업체 솔루션이 등장할 때입니다. 향후 출시될 GPU뿐만 아니라 점점 더 강력해지는 통합 GPU, FPGA 로드맵을 비롯한 당사의 프로세서 라인을 살펴보면 이 모든 것에 대한 표준을 구축할 수 있는 흥미로운 시기입니다. 우리의 목표는 생산성, 성능 및 산업 인프라를 구축하여 이를 기반으로 구축하는 것입니다.
내가 이야기한 세 대상에 대해, 애플리케이션 개발자는 이미 사용 가능하므로 이를 쉽게 활용할 수 있습니다. 하드웨어 공급업체는 소프트웨어 스택을 활용하고 새 하드웨어를 플러그인할 수 있는 반면 도구 및 언어 공급업체는 이를 쉽게 사용할 수 있습니다. 인텔은 전 세계의 모든 언어와 도구를 구축할 수 없으므로 다른 사람들이 매우 쉽게 활용하고 구축할 수 있는 오픈 소스 인프라입니다.