SORU
11 HAZİRAN 2012, PAZARTESİ


Berbat Filmler İmageSampling performans vs OpenGL TextureSampling

Son zamanlarda 90 oranında raycaster performansı azalmış olan Filmler için OpenGL, benim volumeraycaster taşıdık ettik. İlgili OpenGL daha yavaş olan Filmler var imagesampling fonksiyonları, performans azalması fonksiyonları texturesampling sürdüm. İmagesampling fonksiyonları ve doku örnekleme fonksiyonları kaldırarak, hem raycaster uygulamaları hakkında da aynı hızla oldu. Sipariş için kolayca tezgah işlevleri farklı donanım ve dışarıda bazı aptalca hatalar kalanı benim RTs kod yazdım küçük bir kriter olan karşılaştırır Filmler için örnekleme hızı için OpenGL örnekleme hızı ve test farklı makineler ama Diğerleri hala sadece yaklaşık  OpenGL performansı.

Kriter bu Filmler HostCode (en azından en önemli kısmı) :

void OGLWidget::OCLImageSampleTest()
{
    try
    {
    int size=8;
    float Values[4*size*size*size];
    cl::Kernel kernel=cl::Kernel(program,"ImageSampleTest",NULL);
    cl::ImageFormat FormatA(CL_RGBA,CL_FLOAT);
    cl::Image3D CLImage(CLcontext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR ,FormatA,size,size,size,0,0,Values,NULL);


    cl::ImageFormat FormatB(CL_RGBA,CL_UNSIGNED_INT8);
    cl::Image2D TempImage(CLcontext, CL_MEM_WRITE_ONLY,FormatB,1024,1024,0,NULL,NULL );


    kernel.setArg(0, CLImage);
    kernel.setArg(1, TempImage);



    cl::Sampler Samp;
    Samp() = clCreateSampler( CLcontext(), CL_TRUE, CL_ADDRESS_REPEAT, CL_FILTER_LINEAR, NULL);
    kernel.setArg(2, Samp);

    QTime BenchmarkTimer=QTime();
    BenchmarkTimer.start();

    cl::KernelFunctor func = kernel.bind(queue, cl::NDRange(1024,1024), cl::NDRange(32,32));
    func().wait();

    int Duration =  BenchmarkTimer.elapsed();
    printf("OCLImageSampleTest: %d ms \n", Duration);
    }
    catch (cl::Error& err)
      {
        std::cerr << "An OpenCL error occured, " << err.what()
                  << "\nError num of " << err.err() << "\n";
        return;
      }

}

Çekirdek Filmler İçin:

void kernel ImageSampleTest( read_only image3d_t CoordTexture, write_only image2d_t FrameBuffer, sampler_t smp)
{
int Screenx = get_global_id(0);
int Screeny = get_global_id(1);

int2 PositionOnScreen=(int2)(Screenx,Screeny) ;

float4 Testvec=(float4)(1,1,1,1);
for(int i=0; i< 2000; i  )
{
Testvec = read_imagef(CoordTexture,smp, (float4)(0 0.00000001*i,0,0,0)); // i makes sure that the compiler doesn't unroll the loop
}

uint4 ToInt=(uint4)( (uint) (Testvec.x), (uint) (Testvec.y) ,(uint)(Testvec.z),1);
write_imageui (     FrameBuffer,  PositionOnScreen, ToInt ); 

}

Diğerleri çekirdek parçaları olarak aynı miktarda olan tam bir dörtlü için OpenGL FragmentShader çalışma öğeleri vardır:

#version 150
uniform sampler3D Tex;
out vec4 FragColor;

void main()
{
FragColor=vec4(0,0,0,0);
for(int i=0; i<2000; i  )
{
FragColor = texture(Tex,vec3(0 0.00000001*i,0,0),0);
}
}

Ayrıca zaten performansını artırmak için aşağıdaki denedim:

-değişen çalışma grubu boyutu: herhangi bir performans artışı

-Farklı Donanım: 280 GTX 580, bazı Fermi Tessla kartı , hepsi Filmler vs OpenGL aynı berbat performansı GTX vardı

-Farklı doku biçimleri (bayt yerine yüzer), farklı erişim modelleri ve farklı doku boyutları: hiçbir artış

-Kullanarak verileri için bir resim ve CL Çekirdek örnekleme için kendini yazılı üç çizgili aradeğerleme bir işlevi yerine: bir tampon 100 % ile ilgili Filmler için performansı Arttı

-Kullanarak 2D bir resim//doku yerine 3 boyutlu görüntüler//: Bu OpenGL performansını hiç değişiklik yoktu, ancak 100 % Filmler için performansı artırılmış doku.

-Kullanma"," yerine "değiştirmek herhangi bir performans." ilişkilendirme: doğrusal yakın

Bu beni daha da bir merak: Diğerleri performansını düşürür çok aptalca bir hata mı yaptım? Neden Filmler için OpenGL ile aynı doku donanım kullanmanız gerekir, ancak performans çok düşük örnekleme? Neden karmaşık üç çizgili benim ilişkilendirme uygulama daha hızlı donanım uygulaması daha işlevidir? Nasıl OpenGL olarak aynı hızda olması Filmler için örnek alma performansını arttırabilir miyim?

CEVAP
2 EKİM 2012, Salı


Eğer varsa birden fazla bölüm (belki Aslan yedek tutuldu) böyle büyük mükafat gerçekten Dağ Aslanı bölüm geliyor emin olun.

Böyle büyük mükafat için App Store Uygulama güncelleme ilk böyle büyük mükafat almak gibi görünüyor.uygulamayı bulur ve bu sürüm için herhangi bir güncelleme uygulanacaktır. ML bölümünden başlattım bile benim durumumda (pasif) Aslan bölümü güncellendi. xcode-select ML sürümünü değiştirmeye çalıştığım zaman şikayet etmedi.

Kadar büyük temizlik yaparken buldum kendimi:

  • chmod 000 /Volume/<old Lion partition>/Applications/Xcode.app
  • böyle büyük mükafat taze bir kopyasını yüklü./Applications içine app
  • dock simgesini (ML göstermelidir " Güncellemelerinden.hedef doğrulayın.uygulama)

Benim böyle büyük mükafat ve hızlı kalır daha önce olduğu gibi şimdi de hızlı. Böyle büyük mükafat dmg ve komut satırı araçları https://developer.apple.com/downloads/index.action dan alabilirsiniz. İkili bir fark olduğunu sanmıyorum, ama DMG ile yapabilirimbakınbu böyle büyük mükafat bıraktığım yer.app.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Xbox

    Xbox

    1 Kasım 2005