Berimsel bilimlerde Duff aygıtı, Assembly Dilinde yüksek başarıma izin veren tekniğini kullanan seri kopyalama yordamına ait bir uygulamadır. Tom Duff'ın Lucasfilm'de görev yaptığı Kasım 1983'te bulguladığı yöntem, C programlama dilindeki yapısının en ilginç kullanımlarından birini oluşturmaktadır. Duff, yalnızca bu yöntemi bulguladığını savunmakta ve genel döngü çözme yöntemi üzerinde herhangi bir hak iddia etmemektedir.
Özgün sürüm
Seri kopyalama işleminin olağan uygulaması aşağıdaki gibidir.
do { /* count > 0 koşulunun sağlandığı varsayılıyor */ *hedef = *kaynak++; /* ''hedef'' imleci artırılMAmaktadır */ } while (--toplam > 0);
hedef
imlecinin artırılmamasının nedeni Duff'ın kopyalama için tek yazmaç kullanıyor olmasıdır. Bu işlem, hedef
imlecinin ifadesiyle tanımlanmasıyla da yerine getirilebilir.
Duff, bu betiğin başarımını artırmaya çalışırken bunun switch ve döngü yapılarını iç içe geçirmekle de sağlanabileceğini görmüştür.
dsend(hedef, kaynak, toplam) char *hedef, *kaynak; int toplam; { int n = (toplam + 7) / 8; switch (toplam % 8) { case 0: do { *hedef = *kaynak++; case 7: *hedef = *kaynak++; case 6: *hedef = *kaynak++; case 5: *hedef = *kaynak++; case 4: *hedef = *kaynak++; case 3: *hedef = *kaynak++; case 2: *hedef = *kaynak++; case 1: *hedef = *kaynak++; } while (--n > 0); } }
Bir kopyalama işlemi sırasında gerekli karşılaştırma sayısını en aza indirgemeye yarayan assembly yordamını temel alan Duff aygıtı, C'de uygulandığında açık bir fark yaratmıştır. Switch ifadesinin dildeki esnek tanımı bu yöntemin C'nin tüm kurallarıyla uyuşmasına yardımcı olmuştur. Aygıtın bulgulanması 'nin ilk baskısından hemen sonraya rastlamakta ve aygıtın sözdizimi kitapta öngörülen switch kullanımıyla örtüşmektedir. Break ifadesinin bulunmadığı switch betiklerinde akışın kesintisiz biçimde sürdüğü göz önüne alındığında Duff aygıtının sıralı kaynaklardan çıktı yazmaçlarına toplam kopyaları aktardığı görülür. Burada, toplam değişkeninin 0'dan büyük olması zorunludur.
Çoğu derleyici switch'i bir çevirecektir. C'nin case ifadesindeki öntanımlı akış yordamı dilin en çok tartışılan özelliklerindendir. Duff bu konuda şunları söylemiştir: "Bu betik, tartışmaya bir yerden giriyor ancak bunun olumlu mu olumsuz mu olduğu konusunda emin değilim."
Hızı artıran ana etken bir döngü içinde yapılan karşılaştırmaların sayısını azaltan yöntemidir. Switch/case ifadesi toplam verinin çözülen işlem sayısına bölümünden kalan kısmını işlemektedir (8'li döngü çözmenin uygulandığı örnekte switch/case ifadesi kalan 1–7 baytlık bölümü hedef almaktadır).
Kalan bölümün bu biçimde işlenmesi tüm sistem ya da derleyicilerde aynı başarımı göstermeyebilir. Kimi durumlarda iki ayrı döngü (ilk döngü ana kopyalamayı yaparken ikinci döngü kalan veriyi işler) kullanmak daha iyi sonuç verebilir. Sorun, derleyicinin aygıtı doğru bir biçimde hızlandırmasına indirgenebilir ancak bu kullanımın kimi sistemlerde ardışıklama ve sıçrama tahminini olumsuz etkileyebileceği düşünülmektedir. Bu nedenle, bu aygıtın birlikte kullanılacağı sistem, hızlandırma değişkenleri ve derleyicinin iyi seçilmesi gerekmektedir.
Stroustrup uyarlaması
Bir konumdan diğerine kopyalama yapabilmek için hedef imlecinin aşağıda gösterildiği gibi sürekli artırılması gerekmektedir.
*hedef++ = *kaynak++;
Aygıtın bu sürümü Bjarne Stroustrup'un C++ Programlama Dili adlı kitabının "Bu Kod Ne Yapıyor?" bölümünde, dille yeni tanışan programcılara çıktı yazmaçlarının işlevleri hakkında bilgi vermek amacıyla gösterilmiştir. Ne var ki, C kütüphanesinde bulunan işlevi tam olarak bu işi yapmaktadır. Farklı sistemler için başarım artırıcı teknikler içeren bu işlev yukarıda gösterilen betikten daha hızlı çalışmaktadır.
Kaynakça
- ^ FOLDOC'un yorumuyla Duff aygıtı[]
Bibliyografya
- Stroustrup, Bjarne, C++ Programlama Dili, Üçüncü Baskı. Addison-Wesley,
- Kernighan, Brian ve Dennis Ritchie, .
Dış bağlantılar
- Duff'ın özgün mektubu 22 Ocak 2009 tarihinde Wayback Machine sitesinde .
- Jargon File'da konuyla ilintili bir yazı 21 Ekim 2008 tarihinde Wayback Machine sitesinde .
- Özgün USENET gönderisinin Google kopyası 22 Mart 2009 tarihinde Wayback Machine sitesinde .
- Simon Tatham'ın C'deki eşyordamları9 Kasım 2019 tarihinde Wayback Machine sitesinde . aynı switch/case hilesini kullanmaktadır
- Adam Dunkels'ın işleçleri13 Ekim 2005 tarihinde Wayback Machine sitesinde . de aynı switch/case ifadelerini kullanmaktadır
- C'deki Hafif ve Yığıtsız İşleçler13 Ekim 2005 tarihinde Wayback Machine sitesinde . (ayrıca bkz. En hafif işleçler25 Temmuz 2010 tarihinde Wayback Machine sitesinde .)
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Berimsel bilimlerde Duff aygiti Assembly Dilinde yuksek basarima izin veren teknigini kullanan seri kopyalama yordamina ait bir uygulamadir Tom Duff in Lucasfilm de gorev yaptigi Kasim 1983 te bulguladigi yontem C programlama dilindeki yapisinin en ilginc kullanimlarindan birini olusturmaktadir Duff yalnizca bu yontemi bulguladigini savunmakta ve genel dongu cozme yontemi uzerinde herhangi bir hak iddia etmemektedir Ozgun surumSeri kopyalama isleminin olagan uygulamasi asagidaki gibidir do count gt 0 kosulunun saglandigi varsayiliyor hedef kaynak hedef imleci artirilMAmaktadir while toplam gt 0 hedef imlecinin artirilmamasinin nedeni Duff in kopyalama icin tek yazmac kullaniyor olmasidir Bu islem hedef imlecinin ifadesiyle tanimlanmasiyla da yerine getirilebilir Duff bu betigin basarimini artirmaya calisirken bunun switch ve dongu yapilarini ic ice gecirmekle de saglanabilecegini gormustur dsend hedef kaynak toplam char hedef kaynak int toplam int n toplam 7 8 switch toplam 8 case 0 do hedef kaynak case 7 hedef kaynak case 6 hedef kaynak case 5 hedef kaynak case 4 hedef kaynak case 3 hedef kaynak case 2 hedef kaynak case 1 hedef kaynak while n gt 0 Bir kopyalama islemi sirasinda gerekli karsilastirma sayisini en aza indirgemeye yarayan assembly yordamini temel alan Duff aygiti C de uygulandiginda acik bir fark yaratmistir Switch ifadesinin dildeki esnek tanimi bu yontemin C nin tum kurallariyla uyusmasina yardimci olmustur Aygitin bulgulanmasi nin ilk baskisindan hemen sonraya rastlamakta ve aygitin sozdizimi kitapta ongorulen switch kullanimiyla ortusmektedir Break ifadesinin bulunmadigi switch betiklerinde akisin kesintisiz bicimde surdugu goz onune alindiginda Duff aygitinin sirali kaynaklardan cikti yazmaclarina toplam kopyalari aktardigi gorulur Burada toplam degiskeninin 0 dan buyuk olmasi zorunludur Cogu derleyici switch i bir cevirecektir C nin case ifadesindeki ontanimli akis yordami dilin en cok tartisilan ozelliklerindendir Duff bu konuda sunlari soylemistir Bu betik tartismaya bir yerden giriyor ancak bunun olumlu mu olumsuz mu oldugu konusunda emin degilim Hizi artiran ana etken bir dongu icinde yapilan karsilastirmalarin sayisini azaltan yontemidir Switch case ifadesi toplam verinin cozulen islem sayisina bolumunden kalan kismini islemektedir 8 li dongu cozmenin uygulandigi ornekte switch case ifadesi kalan 1 7 baytlik bolumu hedef almaktadir Kalan bolumun bu bicimde islenmesi tum sistem ya da derleyicilerde ayni basarimi gostermeyebilir Kimi durumlarda iki ayri dongu ilk dongu ana kopyalamayi yaparken ikinci dongu kalan veriyi isler kullanmak daha iyi sonuc verebilir Sorun derleyicinin aygiti dogru bir bicimde hizlandirmasina indirgenebilir ancak bu kullanimin kimi sistemlerde ardisiklama ve sicrama tahminini olumsuz etkileyebilecegi dusunulmektedir Bu nedenle bu aygitin birlikte kullanilacagi sistem hizlandirma degiskenleri ve derleyicinin iyi secilmesi gerekmektedir Stroustrup uyarlamasiBir konumdan digerine kopyalama yapabilmek icin hedef imlecinin asagida gosterildigi gibi surekli artirilmasi gerekmektedir hedef kaynak Aygitin bu surumu Bjarne Stroustrup un C Programlama Dili adli kitabinin Bu Kod Ne Yapiyor bolumunde dille yeni tanisan programcilara cikti yazmaclarinin islevleri hakkinda bilgi vermek amaciyla gosterilmistir Ne var ki C kutuphanesinde bulunan islevi tam olarak bu isi yapmaktadir Farkli sistemler icin basarim artirici teknikler iceren bu islev yukarida gosterilen betikten daha hizli calismaktadir Kaynakca FOLDOC un yorumuyla Duff aygiti olu kirik baglanti BibliyografyaStroustrup Bjarne C Programlama Dili Ucuncu Baski Addison Wesley ISBN 0 201 88954 4 Kernighan Brian ve Dennis Ritchie Dis baglantilarDuff in ozgun mektubu 22 Ocak 2009 tarihinde Wayback Machine sitesinde Jargon File da konuyla ilintili bir yazi 21 Ekim 2008 tarihinde Wayback Machine sitesinde Ozgun USENET gonderisinin Google kopyasi 22 Mart 2009 tarihinde Wayback Machine sitesinde Simon Tatham in C deki esyordamlari9 Kasim 2019 tarihinde Wayback Machine sitesinde ayni switch case hilesini kullanmaktadir Adam Dunkels in islecleri13 Ekim 2005 tarihinde Wayback Machine sitesinde de ayni switch case ifadelerini kullanmaktadir C deki Hafif ve Yigitsiz Islecler13 Ekim 2005 tarihinde Wayback Machine sitesinde ayrica bkz En hafif islecler25 Temmuz 2010 tarihinde Wayback Machine sitesinde