Sıra L - SequenceL

Sıra L
ParadigmalarParalel hesaplama, İşlevsel, Tamamen işlevsel, Bildirime dayalı programlama
Tarafından tasarlandıDaniel Cooke,
Nelson Rushton,
Dr. Brad Nemanich
GeliştiricilerTexas Tech Üniversitesi,
Texas Çok Çekirdekli Teknolojiler
İlk ortaya çıktı1989; 31 yıl önce (1989)
Yazma disipliniStatik, tür çıkarımı
Platformx86, GÜÇ, KOL
işletim sistemipencereler, Mac os işletim sistemi, Linux
LisansTescilli[1]
İnternet sitesitekstrom çok çekirdekli.com[ölü bağlantı ]

Sıra L genel bir amaçtır fonksiyonel programlama dil ve otomatik paralelleştirme (Paralel hesaplama ) birincil tasarım hedefleri performans olan derleyici ve araç seti çok çekirdekli işlemci donanım, programlama kolaylığı, platform taşınabilirliği / optimizasyonu ve kod netliği ve okunabilirliği. Başlıca avantajı, mevcut tüm işlem gücünden otomatik olarak tam olarak yararlanan basit kod yazmak için kullanılabilmesidir. programcılar tanımlama ile ilgilenilmesi gereken paralellikler, belirterek vektörleştirme kaçınmak yarış koşulları ve kılavuzun diğer zorlukları direktif tabanlı programlama gibi yaklaşımlar OpenMP.

SequenceL ile yazılmış programlar şu şekilde derlenebilir: çok iş parçacıklı bir programcıdan nasıl veya neyin paralelleştirileceğine dair açık bir gösterge olmadan paralel çalışan kod. 2015 itibariyle, SequenceL sürümleri derleyici paralel kod oluşturmak C ++ ve OpenCL, en popüler programlama dilleriyle çalışmasına izin veren C, C ++, C #, Fortran, Java, ve Python. Platforma özgü bir çalışma zamanı, iş parçacıklarını güvenli bir şekilde yönetir, mevcut çekirdek sayısına göre otomatik olarak paralel performans sağlar ve şu anda desteklenir x86, POWER8, ve KOL platformlar.

Tarih

SequenceL ilk olarak 1989'da başlayarak 20 yıllık bir süre boyunca geliştirildi, çoğunlukla Texas Tech Üniversitesi. Birincil finansman kaynağı NASA başlangıçta "kendi kendini doğrulayan" bir belirtim dili geliştirmek isteyen; yani, bir kez yazıldıktan sonra gereksinimler idamve sonuçlar istenen sonuca göre doğrulanmıştır.

Projenin baş araştırmacısı başlangıçta Dr. Daniel Cooke idi.[2] Dr. Nelson Rushton (başka bir Texas Tech profesörü) ve daha sonra Dr. Brad Nemanich (daha sonra Cooke altında bir doktora öğrencisi) katıldı. Okunabilecek kadar basit, ancak yürütülebilir olması için yeterince açık olan bir dil yaratma hedefi, mucitleri bir işlevsel, beyan edici bir programcının istenen sonuçları elde etme araçlarından ziyade açıkladığı dil yaklaşımı. Dil daha sonra sorunu bulabileceği en verimli şekilde çözmekte özgürdür.

Dil geliştikçe, araştırmacılar yeni hesaplama yaklaşımları geliştirdiler. tüket-basitleştir-üret (CSP).[3] 1998'de araştırma, SequenceL'yi paralel hesaplama. Bu, 2004 yılında, daha eksiksiz şeklini aldığında, normalize-devrik (NT) anlamsal,[4][5] ana satıcıları ile aynı zamana denk geldi merkezi işlem birimleri (CPU'lar) büyük bir değişiklik yapıyor çok çekirdekli işlemciler saat hızlarını artırmaya devam etmek yerine. NT, yapıları basitleştirmek ve ayrıştırmak için kullanılan anlamsal çalışma atıdır. veri akışı GAMMA'ya benzer benzeri uygulama stratejisi[6] ve NESL.[7] NT semantik, Lämmel ve Peyton-Jones’un ortak şablon eleme işlemine benzer bir hedefe ulaşır.[8][9] Dilin diğer tüm özellikleri bu iki yasadan tanımlanabilir - dahil özyineleme, alt yazı yapıları, işlev referansları ve işlev gövdelerinin değerlendirilmesi.[10][11]

İlk amaç bu olmasa da, bu yeni yaklaşımlar, dilin gerçekleştirdiği işlemlerin büyük bir bölümünü programcıya şeffaf bir şekilde paralelleştirmesine izin verdi. 2006'da Texas Tech University'de prototip otomatik paralelleme derleyicisi geliştirildi. 2009 yılında Texas Tech, fikri mülkiyeti Texas Multicore Technologies'e (TMT) lisansladı,[12] devam eden ticari gelişim için. Ocak 2017'de TMT, ticari Profesyonel Sürüme ek olarak indirilmek üzere ücretsiz bir Topluluk Sürümü içeren v3'ü piyasaya sürdü.

Tasarım

SequenceL, değer kattığı algoritmik koda odaklanarak, öğrenmesi ve kullanması mümkün olduğu kadar basit olacak şekilde tasarlanmıştır, örneğin, mucitler, C bunu iyi idare ettiğinden G / Ç'yi yeniden icat etmemeyi seçmişlerdir. Sonuç olarak, tam SequenceL için dil referansı sadece 40 sayfadır, bol örneklerle ve resmi gramerinin yaklaşık 15 üretim kuralı vardır.[13]

SequenceL kesinlikle değerlendirilir (örneğin Lisp ), statik olarak yazılır tür çıkarımı (sevmek Haskell ) ve standart, gayri resmi matematiksel gösterime benzeyen infix ve önek operatörlerinin bir kombinasyonunu kullanır (örneğin C, Pascal, Python, vb.). Tamamen bildirimsel bir dildir, yani bir programcının işlevleri matematiksel anlamda, uygulanmaları için talimat vermeden tanımladığı anlamına gelir. Örneğin, matris çarpımının matematiksel tanımı aşağıdaki gibidir:

Ürünü m×p matris Bir ile p×n matris B ... m×n matris kimin (ben,j) 'inci giriş

SequenceL tanımı, bu tanımı aşağı yukarı tam olarak yansıtır:

   matmul (A (2), B (2)) [i, j]: = let k: = 1 ... boyut (B); toplamda (A [i, k] * B [k, j]);

Her parametreyi takip eden alt simgeler Bir ve B tanımın sol tarafında şunu belirtin: Bir ve B derinlik-2 yapılarıdır (yani, burada matrisler olarak düşünülen skalar listelerinin listeleri). Bu biçimsel tanımdan, SequenceL, tanımlanmış ürünün boyutlarını formülünden çıkarır (ben, j) 'inci giriş (çiftler kümesi olarak (ben, j) sağ taraf tanımlanmıştır) ve her girişi yukarıdaki gayri resmi tanımdakiyle aynı formülle hesaplar. Bu tanımda yineleme için veya işlemlerin gerçekleştirileceği sıra için açık bir talimat olmadığına dikkat edin. Bu nedenle, SequenceL derleyicisi, tanımlayıcı denklemi karşılayan herhangi bir sırada (paralel sıra dahil) işlemleri gerçekleştirebilir. Bu örnekte, üründeki koordinatların hesaplanması, büyük matrisler için işlemci sayısı ile doğrusal olarak ölçeklenecek şekilde paralelleştirilecektir.

Yukarıda belirtildiği gibi, SequenceL'in aşağıdakiler için yerleşik yapıları yoktur: giriş çıkış (I / O), diğer programlama dilleriyle ek bir şekilde çalışmak üzere tasarlandığından. Çok iş parçacıklı C ++ 'ya derleme ve 20'den fazla Basitleştirilmiş Sarmalayıcı ve Arayüz Oluşturucuyu (SWIG ) diller (C, C ++, C #, Java, Python, vb.), mevcut tasarım akışlarına, eğitime ve araçlara kolayca uyması anlamına gelir. Mevcut uygulamaları geliştirmek, çok çekirdekli kitaplıklar oluşturmak ve hatta elde edilen kodu G / Ç görevlerini gerçekleştiren diğer kodlarla ilişkilendirerek bağımsız uygulamalar oluşturmak için kullanılabilir. SequenceL fonksiyonları ayrıca bir çevirmen Python ve diğer yorumlanmış diller gibi belirli girdilerle.

Normalize-devrik

SequenceL'in skaler olmayan ana yapısı, esasen bir liste olan dizidir. Diziler herhangi bir seviyeye yuvalanabilir. Pek çok tamamen işlevsel dilde yaygın olan özyinelemenin rutin kullanımından kaçınmak için, SequenceL adı verilen bir teknik kullanır. normalize-devrik (NT), skaler işlemlerin otomatik olarak bir dizinin öğelerine dağıtıldığı.[14] Örneğin, SequenceL'de

Bu, '+' operatörünün aşırı yüklenmesinden değil, hem yerleşik hem de kullanıcı tanımlı tüm işlemleri kapsayan NT etkisinden kaynaklanır. Başka bir örnek olarak, eğer f (), argümanları skaler olan bir 3 argüman işleviyse , o zaman herhangi bir uygun x ve z için sahip olacağız

NT yapısı, örneğin, olduğu gibi, aynı anda birden fazla argüman için kullanılabilir.

Ayrıca, beklenen bağımsız değişken herhangi bir T türünde skaler olmadığında ve gerçek bağımsız değişken, T türündeki nesnelerin bir listesiyse (veya daha genel olarak, koordinatları T türü olan herhangi bir veri yapısı) olduğunda da çalışır. Örneğin, eğer Bir bir matristir ve Xs matrislerin bir listesidir [X1, ..., Xn] ve yukarıdaki matris çarpımı tanımı verildiğinde, SequenceL'de

   matmul (A, Xs) = [matmul (A, X1), ..., matmul (A, Xn)]

Bir kural olarak, NT'ler, yineleme, özyineleme veya üst düzey işlevsel operatörlere olan ihtiyacı ortadan kaldırır.

  1. bir veri yapısının her üyesine aynı şeyleri yapmak veya
  2. benzer şekilli yapıların karşılık gelen parçalarını birlikte işleyin.

Bu, yineleme ve özyinelemenin çoğu kullanımını hesaba katma eğilimindedir.

Örnek: asal sayılar

Yukarıdaki kavramları gösteren iyi bir örnek asal sayıları bulmaktır. Bir asal sayı olarak tanımlanır

Kendisinden ve 1'den başka pozitif bölenleri olmayan, 1'den büyük bir tam sayı.

Yani pozitif bir tam sayı z 2 ile arasında sayı yoksa asaldır z-1, her şey dahil, eşit olarak bölün. SequenceL, yukarıdaki tanımı kelimenin tam anlamıyla dile dönüştürerek bu sorunun programlanmasına izin verir.

SequenceL'de, 2'den 2'ye kadar bir sayı dizisi z-1, dahil, sadece (2 ... (z-1)), yani 100 ile 200 arasındaki tüm asal sayıları bulan bir program yazılabilir:

   prime (z): = z yokken (z mod (2 ... (z-1)) = 0);

İngilizcede sadece diyor ki,

... 2 ile 1 arasındaki sayılardan hiçbiri bağımsız değişkenin kendisinden daha küçük değilse, bağımsız değişkeni döndür.

Bu koşul karşılanmazsa işlev hiçbir şey döndürmez. Sonuç olarak, bu programı çalıştırmak,

   cmd:> prime (17) 17 cmd:> prime (18) boş

"100 ile 200 arasında" dizesi programda görünmüyor. Aksine, bir programcı tipik olarak bu bölümü argüman olarak aktarır. Program bağımsız değişken olarak bir skaler beklediğinden, bunun yerine ona bir dizi sayı iletmek, SequenceL'nin işlemi dizinin her bir üyesi üzerinde otomatik olarak gerçekleştirmesine neden olur. İşlev, başarısız değerler için boş döndüğünden, sonuç girdi dizisi olacaktır, ancak yalnızca asal sayılar için kriterleri karşılayan sayıları döndürmek üzere filtrelenir:

   cmd:> prime (100 ... 200) [101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]

Bu problemi çok kısa ve okunabilir bir programla çözmenin yanı sıra, SequenceL’nin iç içe dizileri değerlendirmesi, paralel olarak gerçekleştirilecektir.

Bileşenler

Aşağıdaki yazılım bileşenleri mevcuttur ve SequenceL kodu yazılırken kullanılmak üzere TMT tarafından desteklenmektedir. Tüm bileşenler şurada mevcuttur x86 çalışan platformlar pencereler, Mac os işletim sistemi ve çoğu çeşidi Linux (dahil olmak üzere CentOS, Kırmızı şapka, OpenSUSE, ve Ubuntu ), ve üzerinde KOL ve IBM GÜÇ çoğu çeşidi çalıştıran platformlar Linux.

Çevirmen

Bir Komut satırı çevirmen doğrudan bir komut kabuğuna kod yazmaya veya önceden yazılmış metin dosyalarından kod yüklemeye izin verir. Bu kod, kod doğruluğunun kontrol edilmesine veya hızlı bir yanıt bulunmasına yardımcı olmak için çalıştırılabilir ve sonuçlar değerlendirilebilir. Ayrıca popüler Tutulma entegre geliştirme ortamı (IDE). Yorumlayıcıda yürütülen kod paralel olarak çalışmaz; tek iş parçacığında yürütülür.

Derleyici

Bir komut satırı derleyici SequenceL kodunu okur ve yüksek oranda paralelleştirilmiş üretir, vektörleştirilmiş, C ++ ve isteğe bağlı olarak OpenCL, yürütülmesi için SequenceL çalışma zamanı kitaplığına bağlanması gerekir.

Çalışma süresi

Çalışma zamanı ortamı, hedef platformda en iyi şekilde çalıştırmak için derlenmiş paralelleştirilmiş C ++ koduyla çalışan önceden derlenmiş bir kitaplık kümesidir. Intel Dişli Yapı Taşları (TBB) üzerine inşa edilmiştir[15] ve önbellek optimizasyonu, bellek yönetimi, iş kuyrukları çalma ve performans izleme gibi şeyleri yönetir.

Hata ayıklayıcıya sahip Eclipse IDE eklentisi

Bir Tutulma entegre geliştirme ortamı Eklenti standart düzenleme yetenekleri (işlev toplama, krom kodlama, vb.) ve SequenceL hata ayıklama ortamı sağlar. Bu eklenti SequenceL Interpreter ile çalışır, bu nedenle çok iş parçacıklı kodda hata ayıklamak için kullanılamaz; ancak, otomatik paralelleştirme sağlayarak, paralel SequenceL kodunun hata ayıklaması gerçekten sıralı SequenceL kodunun doğruluğunu doğrulamaktadır. Yani, sırayla doğru şekilde çalışıyorsa, paralel olarak doğru şekilde çalışması gerekir - bu nedenle yorumlayıcıda hata ayıklama yeterlidir.

Kitaplıklar

Programlama sürecini kolaylaştırmak ve en iyi uygulama örnekleri olarak hizmet etmek için SequenceL kaynak kodu olarak çeşitli matematik ve diğer standart işlev kitaplıkları dahil edilmiştir. Bunlar, C veya C ++ kitaplıklarının # dahil edilmesine çok benzer şekilde içe aktarılabilir.

Ayrıca bakınız

Referanslar

  1. ^ "SequenceL Lisansı". Arşivlenen orijinal 2017-02-02 tarihinde. Alındı 2017-01-26.
  2. ^ "Texas Multicore Technologies'de Dr. Daniel Cooke". Arşivlenen orijinal 2016-03-04 tarihinde. Alındı 2016-02-24.
  3. ^ "Tüket-basitleştir-üret (CSP)" (PDF). Arşivlenen orijinal (PDF) 2017-02-02 tarihinde. Alındı 2017-01-26.
  4. ^ Nemanich, Brad; Cooke, Daniel; Rushton Nelson (2010), SequenceL: Şeffaflık ve Çok Çekirdekli Paralellikler (PDF), DAMP '10 Proceedings of 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming, New York, NY, ABD: ACM, s. 45–52, arşivlenen orijinal (PDF) 2017-02-02 tarihinde, alındı 2017-01-26
  5. ^ Cooke, Daniel; Rushton, Nelson; Nemanich, Brad; Watson, Robert G .; Andersen, Per (Mart 2008), "Normalize Edin, Aktarın ve Dağıtın: Skalar Olmayan Durumları Ele Almak İçin Otomatik Bir Yaklaşım", Programlama Dilleri ve Sistemlerinde ACM İşlemleri, 30 (2): 1–49, doi:10.1145/1330017.1330020
  6. ^ Banater, J-P; Le Metayer, D. (Ocak 1993), "Çoklu Küme Dönüşümü ile Programlama" (PDF), ACM'nin iletişimi, 36 (1): 98–111, doi:10.1145/151233.151242
  7. ^ Blelloch, Guy (Mart 1996), "Paralel Algoritmaları Programlama", ACM'nin iletişimi, 39 (3): 85–97, CiteSeerX  10.1.1.141.5884, doi:10.1145/227234.227246
  8. ^ Lämmel, Ralf; Peyton-Jones, Simon (2003), "Şablonunuzu kaydedin: genel programlama için pratik bir tasarım modeli", TLDI 2003 Tutanakları
  9. ^ Lämmel, Ralf; Peyton-Jones, Simon (2004), "Daha fazla klişe hurda: yansıtma, fermuarlar ve genelleştirilmiş yayınlar", ICFP 2004 Tutanakları
  10. ^ Cooke, Daniel; Rushton Nelson (Ocak 1993), "Üst Düzey Dil İzlerinden Yinelemeli ve Paralel Algoritma Tasarımı" (PDF), ICCS'05 5. Uluslararası Hesaplamalı Bilim Konferansı Bildirileri, Bölüm III: 891–894, doi:10.1007/11428862_132, ISBN  978-3-540-26044-8, dan arşivlendi orijinal (PDF) 2017-02-02 tarihinde, alındı 2017-01-26
  11. ^ Cooke, Daniel; Rushton, Nelson (27–30 Haziran 2005), "SequenceL - Basit Bir Dile Genel Bakış", 2005 Uluslararası Programlama Dilleri ve Derleyicileri Konferansı Bildirileri, PLC 2005
  12. ^ Texas Multicore Technologies, Inc.
  13. ^ Nemanich, Brad; Cooke, Daniel; Rushton Nelson (2010), SequenceL: Şeffaflık ve Çok Çekirdekli Paralellikler (PDF), DAMP '10 Proceedings of 5th ACM SIGPLAN workshop on Declarative Aspects of Multicore Programming, New York, NY, ABD: ACM, s. 45–52, arşivlenen orijinal (PDF) 2017-02-02 tarihinde, alındı 2017-01-26
  14. ^ Cooke, Daniel; Rushton, Nelson (27–30 Haziran 2005), "SequenceL - Basit Bir Dile Genel Bakış", 2005 Uluslararası Programlama Dilleri ve Derleyicileri Konferansı Bildirileri, PLC 2005
  15. ^ Intel Dişli Yapı Taşları (TBB)

Dış bağlantılar