Aynı cipe sahip bazı ekran kartları nedense 200$ ye kadar çıkıyor.
geforce3 64mb 20$ ye bile var . En iyisi ati9200 ve geforce 3 alıp shader kasmak . byes
Şimdi kartlarımız aldık eve gittik hiçbir farklılık göremedik ,
yanlız şu shader konusunda ufak bi sorum olacaktı
HLSL veya GLSL den asm shaderin ne farkı var bazı sourceleri incelediğimde direk asm kodu yazılmış bazılarında da bildiğimiz c kodu gibi yazılmış ve asm de yazılanlara GPU programming adı verilmiş aynı şey değilmi yani c gibi yazılanlar asm koduna çevrilmiyormu ?
bir de sevindirici haber, Ati ve nvidia da ortak registerler var zaten bunları kullanmak lazım tabi birinin diğerinden farklı olarak +register ve komutları var bunları kullanmamak lazım tıpkı AMD, Pentium arasında fark gibi
Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
Tarih: Thu Dec 01, 2005 12:54 pm Mesaj konusu:
devreci demiş ki:
HLSL veya GLSL den asm shaderin ne farkı var bazı sourceleri incelediğimde direk asm kodu yazılmış bazılarında da bildiğimiz c kodu gibi yazılmış ve asm de yazılanlara GPU programming adı verilmiş aynı şey değilmi yani c gibi yazılanlar asm koduna çevrilmiyormu ?
Hepsinde yazdığın programlar GPU üzerinde işletiliyor. Yani hepsi GPU programming. HSLSL, GLSL, Cg gibi diller ise o gördüğün ASM çıktısını yaratmak için geliştirilmiş üst seviye diller. Tabii ekran kartı anlamaz bunların hiçbirini, program gönderilmeden önce derleniyor.
Üst seviye dilleri kullanmanın bazı avantajları var. Tek parametre ile (yeterlilik gösterebilen) tüm shader sürümlerinde derletme yapabiliyorsun. Bunu ASM ile yapabilmek için elle her şeyi güncellemelisin. Okunabilirlik, yeniden kullanılabilirlik, vs.. vs.. bilinen şeyler zaten.
Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
Tarih: Thu Dec 01, 2005 1:03 pm Mesaj konusu:
devreci demiş ki:
peki hocam Asm de yazdığım kodu hem dx gemde gl de çalıştırabilirmiyim
eğer öyleyse asm shaderin eksileri çekilmeye değer
APIlerin görevi sadece shader kodunu ve ek bileşenleri (stateler, textureler) ekran kartına göndermek. Kodunu GPU çalıştırıyor. Ona APInin yapacak bir şeyi olmaz. Yani, evet.
@levent:
Tebrik ederim delphi portu icin.Kodda biraz yapisal degisiklikle bayaga iyi dusurulur gibi geliyor.Ayrica Delphi4ten sonra denemelerden uzaklastim ama Delphi2 ufak exe cikarma konusunda cok iyi diye hatirliyorum.Install uygulamalarimi Delphi2 de ozellikle derliyordum.Bu durum tabi biraz yaygin unitelerin eskiden daha sade olmasindan kaynaklaniyor olabilir.Fazla zamanim yoktu ama delphideki fonksiyon cagrimlarindaki performans dususlerine ve sonuclarin genellikle extended modda yapilip sonra single a dusuruldugunu hatirladigim icin soyle nacizane "BELKİ" bir iki bayt tasarruf ettirecek bi kod degisikligi gondereyim:
Alıntı:
procedure Normal(var x, y, z: Single);
asm
FLD x
FMUL ST, ST
FLD Y
FMUL ST, ST
FADD
FLD Z
FMUL ST, ST
FADD
FSQRT
FLD1
FDIVR
FLD ST
FMUL X
FSTP X
FLD ST
FMUL Y
FSTP Y
FMUL Z
FSTP Z
end;
P.S.: Inline-Assembly konusunda biraz compiler bagimliyim ve bu mesaji yazarken uygun bi yerde degildim.Kodda pointer hatalari yoksa dogru calisir.
<biraz konu disi>
EXE dosyalarin header larinda kaynaklanan bi bildirim yuzunden exeler 512baytin katlari halinde kaydediliyor diye hatirliyorum.O yuzden kodda bayaga oynama yaptiktan sonra boyutta degisiklik gozle gorulur hale geliyordu.Yanlis mi hatirliyorum?
</biraz konu disi>
Kayıt: Mar 13, 2003 Mesajlar: 188 Nereden: İstanbul
Tarih: Thu Dec 01, 2005 5:41 pm Mesaj konusu:
hoşgeldin osman,
açıkçası konu opengl+delphi olup da seni göremeyince biraz endişelenmeye başlamıştım.
normal'i dediğin gibi derledim, iki sorun var 1. derlendi ama çalışmıyor, 2.si boyut azalmadı.
1.sorunu biraz didikledim ancak zaman problemim olduğundan bir çözüm bulamadım belki haftasonu.
2.sorun da sanırım senin dediğin gibi bir fixed 512 durumu var. binary her zaman 512 byte'ın katları halinde oluşuyor. birazcık daha kısmamız lazım ama nerden? delphi zaten o kadar optimize ki,const yerine sayı yazarak veya apileri tek dosyaya toplayarak pek bir kazanç sağlamak mümkün görünmüyor. ancak ortada bir 9k sözü var uğraşacağız...
eski delphiler gerçekten de daha ufak çıktılar üretiyor. ben de installer'ımı (dynamic array desteklememesine rağmen) delphi 3'le yazmıştım. Jordan Russell sağolsun bu konuda dikkatimi ilk Inno Setup SDK'nın readme'si çekmişti.
bir de bazı pointer işlemlerinde ciddi sıkıntılarım var, mesela c'de
*float x;
şeklinde tanımlanan bir pointer'ın dizi gibi düşünülüp her elemanına
x[1] vs vs diye erişilebilirken ben delphide pSingle olarak tanımladığım bir pointer'da aynısını yapamıyorum. oysa bildiğim kadarıyla pascal'da bu destek vardı. Dynamic array tanımlayıp da işin içine New(),FreeMem() falan sokunca da çıktıda 4-5 kb'lık büyümeler oluyor. Bu konuda bir fikrin var mı?
ben şimdilik (15klık kodda) şöyle bir çözüm buldum
Kod:
type singlearray=array[0..0] of single;
type pSingleArray=^SingleArray;
Son gelen Delphi compilerlarinda fazla deneyimim yok ama (C'ye benzetme yaparak), C'nin standart librarysindeki memory allocationin islemine denk windows apileri var. Bunlar icin api yerine standart fonklari kullandiginizda, otomatikman iki lib'te projeye ilave ediliyor. Orjinal C kodunda boyle sorunlar var. Bunlarin hepsinin ayni library icinde es fonksiyonlar cinsinden yazilmasi gerek ki bu C exesini bayagi bir asagi ceker. Delphi'den daha da asagi cekebilmesi lazim.
Benim esas amacim kodu azaltmak degil. Amacim C compilerinin manuel olark yazilmis ASM koduna denk kod olusturabilecegini gostermek. Bunu yaptiginizda exe size'i otomatik olarak azalacaktir. Eger icine asm kodu ekmeye baslarsaniz, bu isin espirisi kalmiyor. Oturur tamamini asm'de yazarsiniz;)
Bunun icin lucifer'in onerdigi protel bu noktada isime yaramiyor. Kaldi ki C++ ta butun operatorlere overload yapip (misal) 0-63 arasindaki sayilari 6 bitle temsil eden bir array tanimlayip, + - / * gibi temel operatorleri bu array uzerinden isletebilisiniz. Bunun icin ozel bir compilera gerek yok. Su da akilda tutulmalidir ki boyut ile hiz arasinda da direkt bir iliski yok.
Orjinal C kodunun fazla tutmasinin sebebi librarylerin dallanip budaklanmasi. Oturup hepsini bir araya toplamak gerek.
C kodu uzerinde calisanlara tavsiyem, WinMaini ortadan kaldirin. Direkt bir entry pointten programi execute edin
Bu aralar odukca yogunum onun icin bu koda ayiracak fazla zamanim yok. Ama bir ara oturup, asm'ye port etmeyi dusunuyorum. O zaman gercek sizei ortaya cikar. Boylece compilerlar ne halt ediyor daha iyi anlariz.
Koddaki 512 olayi, allignmenttan kaynaklaniyor. Onu degistirebilirsiniz.
procedure Normal(var x, y, z: Single);
asm
FLD x
FMUL ST, ST
FLD Y
FMUL ST, ST
FADD
FLD Z
FMUL ST, ST
FADD
FSQRT
FLD1
FDIVR
FLD ST
FMUL X
FSTP X
FLD ST
FMUL Y
FSTP Y
FMUL Z
FSTP Z
end;
hocam oralarda FADDP kullanmak gerekmezmi. bi de fasm derleyicilerinde 256 bayt lık artışlar görünüyor. c++ da ben izledim 5klık artış oluyor vc60 de .
osman hocam exe boyutunda değil de, şu shader meselesinde bişeyler söylesen? asm nin kötülüğünden, aslında o kodların da ekran kartında derlendiğinden, direkt asm nin farklı hardware ler için yapılmış optimizasyonların dışında kalıp performansı düşüreceğinden, 50 komutluk asm nin hlsl de 35 komuta indiğinden(asm ye çevrilmiş halde, gdc de göstermişlerdi sanırım, rakamlara -+3), debug işinin zorluğundan, hlsl nin ciciliğinden, cg ye üstünlüğünden , cg nin ati kartlarda sorun yaşattığından, glsl nin daha kolay olduğundan, ekran kartı özellikleri için delphi3d.net den.... bahsetsen de yine biraz ders alsak?
shader işlerinde gördüğüm en büyük sıkıntı çok iyi bir matematik tabanı gerektirmesi. ancak anlaşılan devrecinin bu açıdan pek bir sıkıntısı yok. programla bağlantısı, dilden dile çevirme.vs işleri çok zor değil.
bir de glsl programlarından asm çıktı alınmıyor sanırım. arb ye çevirsen de pek anlam ifade etmez. bence api tabanlı dil şeklinde motorda kullanmak en iyisi. ben gl için glsl, dx için hlsl kullanıyorum. cg ye kanım kaynamadı hala.. veya özel bir dil oluşturulup aynı kod ile glsl/hlsl..vs çıktı alınabilse (ati nin sushi engine de yaptığına benzer) tek dil üzerinden de yapılabilir. ama ben tavsiye etmem, performansı ister istemez düşürecektir.
Bu forumda yeni konular açamazsınız Bu forumdaki mesajlara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız