Röportaj: Intel oneAPI ve Direct Parallel C++'ın Vaadi
Yayınlanan: 2022-03-11Gezegendeki en etkili ve yenilikçi teknoloji şirketlerinden biri olmasına rağmen, yazılım geliştirme denilince akla gelen ilk isim Intel değildir. Kırk yıl önce, Intel'in 8088 işlemcisi PC devriminin başlatılmasına yardımcı oldu ve bunu bir masaüstü veya dizüstü bilgisayarda okuyorsanız, muhtemelen bir Intel Inside'ınız var. Aynı şey sunucular ve her gün güvendiğimiz bir dizi başka donanım için de geçerli. Bu, AMD ve diğer satıcıların rekabetçi ürünlere sahip olmadığı anlamına gelmiyor, çünkü varlar, ancak Intel hala x86 CPU pazarına hakim.
Yazılım mühendisleri, Intel donanım platformlarını on yıllardır, genellikle arkalarındaki yazılımı ve bellenimi bile düşünmeden kullanıyorlar. Daha fazla sanallaştırma performansına ihtiyaçları varsa, çok çekirdekli, hiper iş parçacıklı Core i7 veya Xeon ürünlerini tercih ettiler. Yerel veritabanı kurcalaması için bir Intel SSD alabilirler. Ancak şimdi Intel, geliştiricilerin de yazılımlarından daha fazlasını kullanmaya başlamasını istiyor.
Intel oneAPI nedir?
Intel tarafından farklı donanım mimarileri (CPU'lar, GPU'lar, FPGA'lar, AI hızlandırıcıları ve daha fazlası) arasında geliştirmeyi basitleştirmeyi amaçlayan tek bir birleşik programlama modeli olarak lanse edilen oneAPI'ye girin. Hepsinin çok farklı özellikleri var ve farklı operasyon türlerinde mükemmeller.
Intel artık "önce yazılım" stratejisini benimsiyor ve geliştiricilerin bunu dikkate almasını bekliyor. oneAPI'nin arkasındaki ana fikir, bir dizi farklı donanım için tek bir platformun kullanılmasını sağlamaktır, bu nedenle geliştiriciler, örneğin CPU'lar ve GPU'lar için kod yazarken farklı diller, araçlar ve kitaplıklar kullanmak zorunda kalmazlar. OneAPI ile araç kutusu ve kod tabanı her ikisi için de aynı olacaktır.
Bunu mümkün kılmak için Intel, belirli donanımları (örn. GPU'lar veya FFPGA'lar) programlamak için tipik olarak kullanılan tescilli dillere açık kaynaklı bir alternatif olarak Data Parallel C++ (DPC++) geliştirdi. Bu yeni programlama dilinin, farklı donanım hedefleri arasında dağıtmak için bir derleyici içerirken, C++'ın üretkenliğini ve aşinalığını sağlaması bekleniyor.
Data Parallel C++, veri paralelliğini ve heterojen programlamayı desteklemek için Khronos Group'un SYCL'sini de içerir. Intel şu anda DevCloud'a ücretsiz erişim sunarak yazılım mühendislerinin araçlarını denemelerine ve bulutta oneAPI ve DPC++ ile çok fazla uğraşmadan kurcalamalarına olanak tanıyor.
Ama bekleyin, diğer satıcılar tarafından yapılan donanım üzerinde çalışacak mı? Peki ya lisanslama, ücretsiz mi? Evet ve evet: oneAPI, donanımdan bağımsız ve açık kaynaklı olacak şekilde tasarlanmıştır ve bu değişmeyecektir.
oneAPI hakkında daha fazla bilgi edinmek için, Intel'in Mimari, Grafik ve Yazılım Grubu Başkan Yardımcısı ve Intel'de Teknik, Kurumsal ve Bulut Bilişim genel müdürü Sanjiv M. Shah ile onun oluşumunu ve geleceğini tartıştık.
Sanjiv: OneAPI'de ne var diye dört parça olarak düşünüyorum. Biri bir dil ve standart bir kitaplık, ikincisi bir dizi derin öğrenme aracı, üçüncüsü gerçekten bir donanım soyutlama katmanı ve farklı hızlandırıcıları soyutlayabilen bir yazılım sürücüsü katmanı ve dördüncü parça bir dizi etki alanı odaklı kitaplık. , Matlab ve benzeri gibi. Bunlar oneAPI'deki dört kategoridir, ancak daha derine inebilir ve oneAPI'nin dokuz öğesi hakkında konuşabiliriz. Bu dokuz öğe, temel olarak, Data Parallel C++ ve standart kitaplığı olarak adlandırılan tanıttığımız yeni dildir.
Biri sinir ağları ve diğeri iletişim için olmak üzere iki öğrenme kitaplığı vardır. Donanım soyutlaması için sıfır düzeyi dediğimiz kitaplık var ve dört etki alanı odaklı kitaplık var. Bunu çok, çok açık bir şekilde yapıyoruz. Tüm bunların özellikleri zaten açık ve mevcut. Biz onlara sürüm 0.5 diyoruz. 2020'nin sonunda 1.0'a geçmeyi amaçlıyoruz ve bunların hepsinin açık kaynaklı uygulamalarına da sahibiz. Yine amacımız, insanların zaten orada olanlardan yararlanmalarını sağlamaktır. Bir donanım satıcısı bu dili uygulamak isterse, açık kaynaklı olanı alabilir ve onunla çalışabilir.
S: Algoritmalar ve uygulama ile ilgili olarak, bu nasıl çalışır?
Sağladığımız şey, algoritmaların kullanacağı ilkellerdir: temeldeki matematiksel ilkeller ve iletişim ilkelleri. Tipik olarak, algoritma yeniliği bundan daha yüksek bir seviyede gerçekleşir, burada temel matematik, matris matematiği, evrişim matematiği ve benzerlerini gerçekten yeniden yapmazlar. Bu matematiği kullanmanın yeni yollarını ve iletişim kalıplarını kullanmanın yeni yollarını bulmakla ilgilidir. Hedefimiz gerçekten bizim için ilkel olanı, sıfır seviyesini sağlamak, böylece başkaları bunun üzerine yenilik getirebilecek.
S: Donanım düzeyinde nasıl çalışır?
Bir donanım sağlayıcısıysanız, örneğin bir AI ASIC oluşturan bir AI matrisi alalım - bu donanım satıcısının "takılması" ve AI ekosisteminden yararlanması için iki yol vardır. Biri, seviye sıfır olarak adlandırdığımız bu düşük seviyeli donanım arayüzünü sağlamak olacaktır ve eğer standart API'yi kullanarak sıfır seviye versiyonlarını sağlarlarsa, isterlerse açık kaynaktan ve ardından yukarıdaki tüm yazılım katmanlarından yararlanabilirler. otomatik olarak bundan yararlanabilir.
Bu, segment odaklı ASIC'ler için sıfır seviyesinin tam genelliğini sağlamak zor olabilir. Buna alternatif olarak, alanımızda ve derin öğrenme kitaplıklarımızda bulunan matematik çekirdeklerini ve iletişim çekirdeklerini de sağlayabilirler ve sonra bu kitaplıkları daha üst düzey çerçevelere “tesisat etme” işini yapacağız, bu yüzden bunu otomatik olarak alacaklardı.
S: Şu anda sahip olduğunuz sürümün 0,5 olarak belirlendiğinden ve tüm özelliklerin 2020'nin sonunda hazır olması gerektiğinden bahsettiniz.
Yani oneAPI girişimimizin iki bölümü var. Biri endüstri kısmı, diğeri ise Intel ürünleri. Endüstri spesifikasyonu 0,5'te ve yıl ortasında bunu 1.0'a çıkarmak istiyoruz. Buna paralel olarak, Intel bir dizi ürün geliştiriyor ve Intel'in ürettiği ürünler bugün beta aşamasında ve 0,5 spesifikasyonunu uyguluyorlar. Yıl sonuna kadar 1.0 ürüne ulaşmak istiyoruz.
Intel'in ürünü oneAPI'nin dokuz öğesinin ötesine geçer, çünkü sağladığımız temel programlama öğelerine ek olarak, hata ayıklayıcılar, çözümleyiciler ve uyumluluk araçları gibi programcıların gerçekten ihtiyaç duyduğu şeyleri de sağlamak istiyoruz, böylece mevcut dillerden Veri'ye geçerler. Paralel C++ dili.
S: Geliştiricinin geçiş yapması ne kadar zor? Daha geniş çevre, yıllardır kullandıklarına benzer mi?
Evet, çok benzer. Data Parallel C++'ı biraz tarif edeyim çünkü bu yaptığımızın büyük bir parçası. DPC++ üç şeydir. ISO uluslararası standart C++ dili üzerine inşa edilmiştir. SYCL adlı standardı tanımlayan Khronos adında bir grup var ve SYCL, C++'ın üzerine katmanlanmıştır. SYCL'yi alıyoruz ve ardından SYCL'nin üstüne uzantılar ekliyoruz. Data Parallel C++'ı oluşturma şeklimiz, gerçekten üzerinde uzantıları olan C++'dır, SYCL de budur.
Herhangi bir C++ derleyicisi onu derleyebilir. DPC++'ın güzelliği, herhangi bir derleyicinin onu derleyebilmesidir, sadece bilgili bir derleyici o dilde olanlardan faydalanabilir ve hızlandırıcı kodu oluşturabilir. Bu dili yürütme şeklimizi çok, çok açık bir şekilde yapıyoruz, bu nedenle Data Parallel C++ hakkındaki tüm tartışmalarımız SYCL komitesiyle gerçekleşiyor. Uygulamalar açık kaynaklıdır, tüm uzantılar zaten yayınlanmıştır ve gelecekteki SYCL standartlarına iyi bir geçiş yolumuz olduğundan emin olmak için çok ama çok dikkatli çalışıyoruz. Bundan 5-10 yıl sonrasına bakıldığında, ISO C++'a da geçiş.
S: Derleyiciler ve DPC++'a geçiş ile ilgili olarak, öğrenme eğrisi çok fazla sorun olmamalı mı?
Evet, elbette nereden başladığınıza bağlı. Bir C++ programcısı için öğrenme eğrisi çok küçük olacaktır. Bir C programcısı için C++ öğrenme engelini aşmanız gerekir, ama hepsi bu. Çok tanıdık bir C++. OpenCL gibi dillere alışkın bir programcı için çok benzer olmalıdır.
Vurgulamam gereken diğer kısım ise, işi LLVM altyapısını kullanarak açık kaynakta yapıyoruz. Tüm kaynağımız zaten açık, gidip dil uygulamasına bakabileceğiniz, hatta açık kaynaklı bir derleyici indirebileceğiniz bir Intel GitHub deposu var. Tüm Intel araçları, beta olan ürün tekliflerimiz de herkesin oynaması ve indirmesi için ücretsiz olarak mevcuttur. Ayrıca, insanların herhangi bir şey indirmesi veya yüklemesi gerekmediği, sadece kodu yazabilecekleri ve bahsettiğimiz tüm araçları kullanmaya başlayabilecekleri bir geliştirici bulutumuz da var.

S: C++ performanslı ve nispeten basit, ancak hepimiz biliyoruz ki yaşlanıyor, geliştirme yavaş, çok fazla paydaş var, bu yüzden her şeyi yavaşlatıyorlar. Bu açıkça DPC++ ile durum böyle olmazdı. Çok daha hızlı yinelemeler ve güncellemeler olur mu?
Sanırım bizim için çok ama çok önemli bir noktaya ulaştınız, bu da standartlara göre yavaşlamayan hızlı evrim. Bu nedenle, tartışmalarımızı standartla açıkça yapmak istiyoruz, bu yüzden standartlara girmenin bir yolu var, ama aynı zamanda bunu hızlı bir şekilde yapmak istiyoruz.
Diller, mimariler geliştikçe kullanıcıları ve uygulayıcıları tarafından birlikte tasarlandıklarında en iyi sonucu verir. Amacımız, bir şeyler üzerinde çalıştığımız, bir şeyler yapmanın en iyi yolunu bulduğumuz ve bunları standart hale getirdiğimiz gerçekten hızlı yinelemeli kod tasarımıdır. Yani, kesinlikle, hızlı yineleme büyük bir hedeftir.
S: Bazı meslektaşlarım tarafından gündeme getirilen bir soru (büyük bir şirketten gelen herhangi bir şeyle ilgili açıklık konusunda biraz endişe duyduklarını muhtemelen anlayabilirsiniz): DPC++ her zaman tüm kullanıcılara ve satıcılara açık kalacak mı?
Kesinlikle! Spesifikasyon, bir yaratıcı ortak lisansla yapılır. Herkes bu özelliği kullanabilir, isterse alıp çatallayabilir ve geliştirebilir. oneAPI'nin tüm öğelerinin açık kaynaklı olmadığını vurgulamak istiyorum, ancak neredeyse tüm öğeleri açık kaynak yapma yolundayız. Bunların hepsini herkes alabilir ve kullanabilir - uygulama için hazırdır.
Birleşik Krallık dışında bir şirket olan Codeplay, Nvidia'nın DPC++ uygulamasını duyurdu ve tüm donanım satıcılarını ve yazılım satıcılarını bağlantı noktalarını yapmaya gerçekten teşvik ediyoruz. Hızlandırıcıların birden fazla satıcı için yaygınlaştığı sektörde benzersiz bir noktadayız. Tarihte bu olduğunda, yalnızca bir sağlayıcı olduğunda, dilleri hakimdir. Yazılım endüstrisi, standart bir çözüm ve birden çok sağlayıcı gerektirir.
Burada yapmaya çalıştığımız şey, yaklaşık iki buçuk yıl önce OpenMP ile yaptığımız, birden çok paralel dilin olduğu ama tek bir gerçekten baskın olanın olmadığı şey. Bunların hepsini aldık ve 25 yıl sonra şimdi, HPC için programlamanın yolu olan bir standartta birleştirdik.
S: DPC++'ın önümüzdeki birkaç yıl içinde çok fazla evrim geçireceğini söylemek doğru olur mu? Peki ya tensörler, ya ortaya çıkan yeni donanımlar?
Evet, kesinlikle, haklısın. Ortaya çıkan yeni donanımı desteklemek için dili geliştirmeliyiz. Daha hızlı yinelemenin amacı budur. Vurgulamak istediğim bir diğer nokta da Data Parallel C++ tasarlıyoruz, böylece isterseniz mimariye özgü uzantıları da takabilirsiniz.
Bu nedenle, birden çok mimaride çalıştırmak istediğimiz standart bir dil olsa da, bazen bir hedef kitlenin, çok önemli bir kitlenin mümkün olan maksimum performansa ihtiyacı olduğunun da farkındayız. Mimari tarafından taşınabilir olması gerekmeyen çok düşük seviyeli programlamaya dalmak isteyebilirler. Uzantılar ve mekanizmalar oluşturuyoruz, böylece tensörler için uzantılara sahip olabilirsiniz ve bu mimariye özgü olacaktır.
S: Bir geliştirici, donanım için oluşturulan kod üzerinde ne kadar kontrole sahip olabilir? Sistem ve çeşitli hızlandırıcılar arasında bellek yönetimi üzerinde ne kadar kontrole sahip olabilirler?
Kullanıcıya çok açık bir bellek kontrolü veren SYCL'den arabellek kavramını ödünç alıyoruz, ancak buna ek olarak birleşik bellek kavramını da ekliyoruz. Amacımız, programcıya yalnızca belleği yönetmek için değil, aynı zamanda hızlı kod oluşturmak için ihtiyaç duydukları bir kontrol düzeyi sağlamaktır. SYCL üzerinden eklediğimiz uzantılardan bazıları, alt gruplar, indirgemeler, borular vb. gibi şeylerdir. Bu, farklı mimariler için çok daha iyi kod oluşturmanıza izin verecektir.
S: İlginç bir nokta Python için oneAPI dağıtımıdır—Intel özellikle NumPy, SciPy, SciKit Learn listelenmiştir. oneAPI aracılığıyla elde edilebilecek performans kazanımını ve üretkenlik avantajlarını merak ediyorum. Bununla ilgili bir ölçünüz var mı?
Bu harika bir soru. Biz bu ekosistemi destekliyoruz. Python neden bir hızlandırıcı kullanmak istesin ki? Matematik kitaplıklarından, analitik kitaplıklarından performans elde etmektir. Yaptığımız şey NumPy, SciPy, SciKit Learn, vb. "tesisat" yapmaktır, böylece üzerinde sahip olduğumuz kitaplıklardan yararlanarak iyi bir performans elde edebiliriz. NumPy, SciPy, SciKit Learn ve benzerlerinin varsayılan uygulaması, optimize edilmiş yerel paketlerle düzgün şekilde donatılanla karşılaştırıldığında, çok, çok büyük kazanımlar görebilir. 200x, 300x vb. mertebesinde kazançlar gördük.
Python ile hedefimiz, yerel kod performansının 2 katı, belki de yüzde 80'i içinde makul bir kesir içine girmek istememizdir. Günümüzdeki en son teknoloji, sıklıkla 10x veya daha fazla olmanızdır. Tüm yüksek performanslı görevleri düzenleyerek bu boşluğu gerçekten kapatmak istiyoruz, böylece 2 faktör içinde ve aslında bundan çok daha yükseksiniz.
S: Ne tür donanımlardan bahsediyoruz? Geliştiriciler sıradan bir iş istasyonunda bu potansiyeli açığa çıkarabilir mi, yoksa biraz daha güçlü bir şey mi gerektirir?
Hayır, her yerde olurdu. Kazancın nereden geldiğini düşünürseniz anlarsınız. Normal Python kitaplıkları, CPU'lardaki sanallaştırma özelliklerinin hiçbirini kullanmaz. CPU'larda çok çekirdekli yeteneklerin hiçbirini kullanmıyorlar. Optimize edilmemişler, bellek sistemi ve optimize edilmemiş her şey. Bu nedenle, saf bir programcı tarafından yazılan ve herhangi bir optimizasyon olmadan bir derleyici tarafından derlenen bir matris çarpımına gelir ve ardından bunu bir uzmanın derleme kodunda yazdıklarıyla karşılaştırır. Bu ikisini karşılaştırdığınızda multi-100x kazançlar görebilirsiniz ve Python dünyasında, esasen, olan budur.
Python yorumlayıcıları ve standart kitaplıkları o kadar üst düzeydir ki, sonunda elde ettiğiniz kod çok, çok saf kod haline gelir. Optimize edilmiş kitaplıklarla düzgün bir şekilde kurduğunuzda, bu büyük kazanımları elde edersiniz. Bir dizüstü bilgisayar zaten iki ila altı veya sekiz CPU çekirdeğine sahiptir, çok iş parçacıklıdır ve içlerinde oldukça iyi vektörleştirme yetenekleri vardır, belki 256, belki 512'dir. Yani, dizüstü bilgisayarlarda ve iş istasyonlarında çok fazla performans var. Bunu GPU'lara kadar ölçeklendirdiğinizde, kullanılabilir grafiklere sahip olduğunuzda, kazanımların nereden geldiğini hayal edebilirsiniz.
Entegre grafiklerimize bakarsanız, onlar da çok güçlü hale geliyor. Entegre grafiklerin önceki nesilden önemli ölçüde daha iyi olduğu Ice Lake Gen 11'i görmüşsünüzdür. Dizüstü bilgisayarlarda bile faydaların nereden geleceğini görebilirsiniz.
S: DevCloud kullanılabilirliği ne durumda? Yanlış hatırlamıyorsam şu an herkes için ücretsiz ama seneye altın olduktan sonra böyle mi kalacak?
Bu iyi bir soru. Bu noktada, dürüst olacağım, cevabı bilmiyorum. Bu noktada niyetimiz sonsuza kadar özgür olmasıdır. Geliştirme için, oyun oynamak için ve orada çok fazla beygir gücü var, bu yüzden insanlar gerçekten koşularını yapabilirler.
S: Yani, birkaç bin geliştiriciden denemesini istesek sorun olmaz mı?
Kesinlikle hayır. Bunun olmasını çok isteriz!
Yapmaya çalıştığımız şeyi özetleyebilirim. İlk olarak, oneAPI için çok ama çok heyecanlıyız. Artık piyasada birden fazla satıcı bulunduğundan, çok satıcılı bir çözümün başlama zamanı geldi. Yalnızca gelen GPU'lara değil, daha güçlü entegre GPU'lara ve FPGA yol haritamıza değil, işlemci serimize bir göz atarsanız, tüm bunlar için bir standart oluşturmak için heyecan verici bir zaman. Hedefimiz üretkenlik, performans ve sektör altyapısıdır, böylece üzerine inşa edebilirsiniz.
Bahsettiğim üç hedef kitleye gelince, uygulama geliştiriciler, zaten mevcut oldukları için, şeylerden kolayca yararlanabilirler. Donanım satıcıları yazılım yığınından faydalanabilir ve yeni donanımı takabilirken, araç ve dil satıcıları bunu kolayca kullanabilir. Intel dünyadaki tüm dilleri ve araçları oluşturamaz, bu nedenle diğerlerinin çok kolay bir şekilde yararlanabileceği ve geliştirebileceği açık kaynaklı bir altyapıdır.