Sayfa:  1  2  3 ... 7  8  9  sonraki 

Mesajlarını aradığınız kullanıcı: kerdemdemir (122)

konu: C++ binary dosya yaratma yazma ve okuma  ; forum:: Diğer Konular
kerdemdemir #1
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
@cos00kun visual studio 2015'in ucretsiz surumunu(community surumu) indirip bir visual studio eklentisi olan visualD(http://rainers.github.io/visuald/visuald/StartPage.html) kurabilirsin eger windows da isen. Ben oyle yapiyorum D projelerimde windows'da.  Tamamlama, renklendirme ve debug destegi var. Setuplar(bildigin next, next , next) sonrasi bende sorunsuz calismisti.
konu: Bir proje geliştirilirken algoritma geliştirme aşaması  ; forum:: Diğer Konular
kerdemdemir #2
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12946
Ibrahim merhaba,

Ben Ali Abinin dedigini soyle anladim;

struct ZamanFormati
{
    int saat;
    int dakika;
    int saniye;
    bool sabahMi;
};

char* timeConversion(char* s) {
    ZamanFormati zaman;
    zaman.sabahMi = s[strlen(s) - 2] == 'A';
    sscanf(s, "%2d : %2d : %2d", &zaman.saat, &zaman.dakika, &zaman.saniye);
    sprintf( s, "%02d:%02d:%02d", zaman.sabahMi ? zaman.saat % 12 : ((zaman.saat %12) + 12), zaman.dakika, zaman.saniye);
    return s;
}


Burda C yerine C++ kullansaydim is daha uzardi. Her nekadar C++ kullanirken scanf ve sprintf gibi fonksiyonlardan kacinmak dogrusada eger boost,qt gibi yardimci kutuphaneler yoksa std'nin string gibi siniflari cok zayif kaliyorlar. Yani bunu C++ cok seven biri olarak soyluyorum aslinda ama bir split fonksiyonu yok bir endswith fonksiyonu yok. 

Yukardaki kod D de yazilsaydi tek satirda biterdi is herhalde, split fonksiyonu filan kullanilirdi hem guvenilir hem guzel olurdu.

Saygilar
Erdemdem
Bu mesaj 2 defa değişti; son değiştiren: kerdemdemir; zaman: 2017-10-18, 05:18.
konu: C++ değişken tür ve uzunlukları hakkında  ; forum:: Diğer Konular
kerdemdemir #3
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12935
Anladığım kadarıyla data binary, Bunları memcpy ile kendi veri yapına alabilirsin.

struct Erdem
{
     uint16 id;
     int8    classInfo;
     float   collisionRadius;
     int     hitpoints;
}

int8* data;//Datayı networkden veya dosyadan okuduğunu varsayıyorum.
Erdem e;
memcpy( &e, data, sizeof(Erdem));

Bu networking'de çok yapılan bir şeydir. Örneğin Ethernet protokolünün header'ı sabit uzunlukda ve içerdiği türler sabittir. "memcpy" ile network'den alınan data direk hafızada kullanıcının veri yapılarına kopyalanır.


Eğer bir değişken iki tane altçizgiye sahipse bu derleyicinin tanımladığı bir değişkendir çok derinlere indiysen kodu incelerken o zaman görmüşsündür. Tabi "__" isimli değişkenleride kullanıcıda verebilir ama hem okunulmaz hemde derleyicinin isimleri ile karışabilieceğinden tavsiye edilmez.

Diğer INT16,INT32, uint32 gibi değişkenler derleyiciler veya bazen kütüphaneler(veya kullandığın projede kullanıcı tarafından) tarafından tanımlanmış tür tanımlarıdır. Bunların sebebi int,double gibi değişkenlerin boyutunun sistemden sisteme değişme olasılığıdır. Fakat bir değişken INT16 olarak tanımlanmışsa onun boyutunun 16 bit olması bekleriz. Böylece bir ara katman eklenip değişken boyutları genellenmiş olur.

Saygılar
Erdem
konu: DMD Nedir?  ; forum:: Diğer Konular
kerdemdemir #4
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12908
Derleyici-yorumlayıcı olmayan programla dili olabilir diye düşünüyorum. Kağıt üstünde kalmıştır ama teorik olarak programlama dili sayılır hala http://esolangs.org/wiki/Main_Page. Bir dilinde birden çok derleyicisi olabilir tabi C++'da en populer derleyiciler GCC, CLang, MSVC örneğin .

Derleyici-yorumlacı arasındaki farka bakmak istiyorsan https://tr.wikipedia.org/wiki/Yorumlay%C4%B1c%C4%B1 güzel bir bağlantı sanki.

Saygılar
Erdem
konu: C++ dilinde referance mi pointer mı tercih edilmeli?  ; forum:: Diğer Konular
kerdemdemir #5
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12904
Çok dar bir çercevede fonksiyon dönüş değerleri üzerinden bir kaç örnek vereyim dedim umarım faydalı olur.

 
struct D 
{
    int m_val  = 5 ; //C++14 lazım değer atıyabilimek için 
    bool m_hata = true; 
    
    int& RefDon()
    { 
        if ( m_hata )
            return -1; // Ya -1 kullanılıyorsa referans ile burda hata durumlarını belirtemiyorum. 
        return m_val;
    } 
    
    int* PointerDon()
    {
        if ( m_hata )
            return nullptr; // İşaretçilerin null olma durumunu böyle durumlarda kullanabiliyorum. 
        return &m_val;       
    }
    
    std::optional<int> opsiyonelDon( )  // C++17 lazım 
    {
        if (m_hata)
            return {};
        return m_val;
    }
}
 
Şimdi bunları çok az kullanalım. 
 
    D d; 
    //Ornek1 
    auto refVal = d.RefDon();
    std::cout << refVal; ,
    
    //Ornek2
    auto pointerVal = d.PointerDon();
    std::cout << *pointerVal; // İşte bahsettiğim durumlardan biri hata durumunda nullptr'nin değerini almaya çalışıyoruz ve güm!! 
    
    //Ornek3 
    auto pointerVal2 = d.PointerDon();
    if ( pointerVal2 ) // null durumunu kontrol ediyoruz 
        std::cout << *(pointerVal2 + 1) ; //Yine gümledik bize verilen işaretçiyi işaret ettiği yeri değiştirebiliyoruz
                                         // Tabi bu çok basit gözükse ve yapmıyacağımız birşey olsa bile daha karmaşık senaryolarda karşımıza sık sık çıkıyor      
    
    //Ornek4
    auto optVal = d.opsiyonelDon(); // Ek bir katman ile(std::optional) daha az tehlikeli bir değer dönebiliyoruz.  
    if ( optVal ) {
        std::cout << optVal .value();
    }

Erdemdem
konu: C++ dilinde referance mi pointer mı tercih edilmeli?  ; forum:: Diğer Konular
kerdemdemir #6
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12901
Ben referans tutmanizi tavsiye ederim. Isaretciler ve isaretci aritmetigi biraz tehlikeli seyler bence boyle hafizanin olmadik yerlerinde bulabiliyor insan kendini. Veya hayata geitrme islemi filan unutulabiliyor.

Referanslara null atanamiyor. Bu nedenle referanslari kontrol edemiyoruz pointerlar gibi. Eger boyle bir ihtiyaciniz varsa da C++14 'de dile eklenen std::optional"i tavsiye ederim.

Erdemdem
konu: Cuda gunlukleri  ; forum:: D Programlama Dili
kerdemdemir #7
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12869
D tarafında CPU ile beamform işine başladım.

https://github.com/kerdemdemir/DSharpEar/blob/master/DShar…

Beamformun ne olduğunu anladan uzun bir yazı hazırlamıştım fakat browser penceresini yanlışlıkla kapatınca hepsi uçtu. Artık yarın yazarım bir daha.

Şimdi DCompute kullanarak GPU işlerine geldi sıra. DCompute .lib 'ini projeme nasıl alıcam onun derdindeyim.
DCompute'u sadece dcompute kaynak kodundaki testlerde derleyebiliyorum.

Eğer projede güzelleştirceğim yerler varsa yorumlarınızı bekliyorum.

Bu GPU işi bittikten sonra bunun arayüzünü yazıcam vibe.d kullanıcam three.js ile opengl ile browser'dan çalışacak umarım.

Bakalım bakalım.
Erdemdem
konu: Çeviri sistemi için veritabanı  ; forum:: Diğer Konular
kerdemdemir #8
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12878
Aynen bu eki anlama isi cok cetrefilli bir is.

Bu konu basli basina bir arastirma konusu. Benim 5 sene once aldigim NLP dersimden aklimda kaldigi kadariyla Parse Tree diye veri yapilari vardi once kelimenin ozne mi fiil mi nesne mi oldugunu anliyorduk. Bu noktadan sonradan baska veri yapilari ile ekleri anlamlandiriyorduk.

Benim hocam baya bir ugrasmisti bunlarla. Makaleler hep ingilizce turkcelerini bulamadim uzgunum.

https://link.springer.com/chapter/10.1007/978-3-319-22635-…
http://www.aclweb.org/anthology/J08-3003

Saygilar
konu: Heap Bölgesinde Tutulan Nesneler İçin Operatörleri Aşırı Yükleme Olmamalı Mı?  ; forum:: Diğer Konular
kerdemdemir #9
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12871
Selam İbrahim,

Bu operatörleri aşırı yükleme bazen sıkıntı yaratabiliyor gerçekten.

Örneğin + operatörünün bir çok defa eleman ekleme için kullandığını gördüm. Yani bir vektörümüz var diyelimki ErdemVec ben + operatörünü push_back gibi düşünüyorum. Fakat başkası bunu beklemiyor ve kodlama hatalarına sebep acabiliyor.

101 Rules Guidelines and Best Practices kitabının 25-30 arasındaki maddelerine bakmanı tavsiye ederim.

Ben C++'da allocate edilen memory eğer destructor'da silinirse leak sorunu olmamazı gerektiğini düşünüyorum(tabi gereksiz yaratılmış objeler ve performans hariç).

Saygılar
Erdemdem
konu: Yazılım Hatalarını Bulmak İçin Yazılım  ; forum:: Diğer Konular
kerdemdemir #10
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12870
Merhaba İbrahim,

Bu Valgrind aracının masif diye bu uzantısı var. Bu uzantının çok güzel bir arayüzede var adı valkyrie'dı galiba. Şu bağlantıda olduğu gibi gösteriyor memory kullanımını http://loicpefferkorn.net/images/massif_visualizer.png.

Bu valgrind'i memory leak'leri için  kullanıyordum ben. Bu masif 'ide memory'i hangi fonksiyon çok kullanıyor(leak olmasa bile) diye kullanmıştım. Gömülü geliştirme yaptığımız bir platformda 1gb ram'ı geçmemiz gerekiyordu. Fakat çok uzun olan bir fonksiyon içindeki stack kullanımı geçiçi olarak çok fazla memory kullanıyordu. Bu program aracılığı ile bulmuştum. Şirket içi sunumlar içinde çok havalı oluyor böyle renkli menkli.

Saygılar
Erdemdem
konu: Cuda gunlukleri  ; forum:: D Programlama Dili
kerdemdemir #11
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12854
C++ ile GPU beamforming işini tamamladım. Sonuçlar gerçekten çok iyi

CPU ~ 1.1 saniye GPU ~ 0.018 saniye. Daha L1 cache'ini kullanmadım GPU'nun yinede sonuçlar şimdiden çok iyi. Biraz heyecan yarattı iyi sonuçlar L1 adımını geçip direk D 'ye geçirme işine başlıyacağım.

GPU kerneli:
 
struct MicParamsGpu
{
    float *outputData;
    float *rawData;
    int    packetSize;
    float *leapData;
    int    leapStride;
    int    *delays;
    int    arraySize;
    int    stride;
};
 
__device__ float GetElement(MicParamsGpu params, int curMic, int index ) {    
    if (params.packetSize > index)
    {
        return params.rawData[curMic*params.packetSize + index];
    }
    else
    {
        int leapIndex = (index - params.packetSize) + curMic*params.leapStride;
        return params.leapData[leapIndex];
    }
}
 
__global__ void beamformKernel2(MicParamsGpu params)
{
    int xIndex = threadIdx.x;
    int currentStartIndex = xIndex * params.stride;
 
    for (int k = 0; k < params.stride; k++)
    {
        float curVal = 0;
        for (int i = 0; i < params.arraySize; i++)
        {
            curVal = GetElement(params, i, currentStartIndex + k + params.delays[i]);
        }
        params.outputData[currentStartIndex + k] = curVal;
    }
}

Cuda Memory Allocation:

 
// Helper function for using CUDA to add vectors in parallel.
cudaError_t beamformWithCudaHelper(MicrophoneArray& array, SharpVector& outputData)
{    
    cudaError_t cudaStatus;
    MicParamsGpu params;
    params.arraySize = array.micropshoneList.size();
    params.packetSize = Config::getInstance().packetSize;
    params.leapStride = Config::getInstance().getMicMaxDelay()*2;
    cudaMalloc(&params.rawData, array.micropshoneList.size() * sizeof(float) * params.packetSize);
    cudaMalloc(&params.leapData, array.micropshoneList.size() * sizeof(float) * params.leapStride);
    cudaMalloc(&params.delays, array.micropshoneList.size() * sizeof(int));
 
    
    cudaMalloc(&params.outputData, Config::getInstance().packetSize * sizeof(float) );
    std::vector<int> delayVec;
    params.stride = params.packetSize / 1000;
    cudaStatus = cudaGetLastError();
    for (int i = 0; i < params.arraySize; i++)
    {
        cudaMemcpy( params.rawData + i * params.packetSize, array.micropshoneList[i].getData().data(),
                        params.packetSize* sizeof(float), cudaMemcpyHostToDevice);
        cudaStatus = cudaGetLastError();
        cudaMemcpy(params.leapData + i * params.leapStride, array.micropshoneList[i].getLeapData().data(),
                        params.leapStride* sizeof(float), cudaMemcpyHostToDevice);
        cudaStatus = cudaGetLastError();
        delayVec.push_back(array.micropshoneList[i].getDelay(1000, 45) + Config::getInstance().getMicMaxDelay());
 
    }
    cudaStatus = cudaGetLastError();
    cudaMemcpy(params.delays, delayVec.data(), delayVec.size() * sizeof(int), cudaMemcpyHostToDevice);
 
    float startTime = get_time();
    // Launch a kernel on the GPU with one thread for each element.
    beamformKernel2 << <1, 1000 >> >(params);
 
    // Check for any errors launching the kernel
    cudaStatus = cudaGetLastError();
    if (cudaStatus != cudaSuccess) {
        fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
    }
 
    // cudaDeviceSynchronize waits for the kernel to finish, and returns
    // any errors encountered during the launch.
 
 
    cudaMemcpy(outputData.data(), params.outputData, Config::getInstance().packetSize * sizeof(float), cudaMemcpyDeviceToHost);
    float endTime = get_time();
    std::cout << "GPU Time spent: " << endTime - startTime;
     return cudaStatus;
}
konu: vibe.d ile form doğrulama  ; forum:: D Programlama Dili
kerdemdemir #12
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12853
Erdem hocam html cok guzel gozuyor. Acaba template .dt dosyasini paylasma durumlari olabilirmi?

Haddim olmadan soruyorum saygisizlik olduysa kusuruma bakma lutfen.

Saygilar
Erdem
konu: Cuda gunlukleri  ; forum:: D Programlama Dili
kerdemdemir #13
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Cuda gunlukleri
Merhabalar,

Yuksek lisans tezimde  CPU ve C++ ile yaptigim mikrofon dizisi projesini GPU ve D gecirerek gelistirmeye baslicagimizi konusmustuk Ali Abi ile.

Ben DCompute'u derledim. LDC 1.4 u indirip bir kac degisiklik yapmak yetti. Eger LDC 1.4 cikmis olmasa idi LDC yi belirli LLVM opsiyonlari ile derlemem gerekiyordu fakat gerek kalmadi.

DCompute'u derledim fakat CPU ve C++ dan direk GPU ve D gecmektense bir ara adim olarak GPU ve C++ ile basladim. Cunku ben GPU cok kodlamadim. Benim deneyimsizligim ile DCompute'un deneyimsizligi ayni anda yasamaktansa olgunlasmis C++ kullanmak ilk adim icin daha iyi oldugu dusunuyorum.

Proje surda gorulebilir : https://github.com/kerdemdemir/CUDABeamformer/blob/master/…

C++ kismini hizli gecmeye calistigimdan cok ozenmedim oldukca hizli yapmaya calisiyorum.

CUDA kernel kodu su ornege biraz benziyor:
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index…  

Su anki durumum kernel derleniyor fakat calisirken hata veriyor bende GPU tarafinda calisan kodu nasil debug edicegimi bilmedigimden bulamadim simdilik. DCompute veya Stackoverflow forumlarinda soracagim.

Bunu calistirdiktan sonra GPU icinde L1 cache var shared memory diyorlar onu kullanip bir daha benchmark yapacagim. Sonra D ye gecis baslayacak. CPU -GPU - GPU L1 cache zamanlama karsilastirmalarini yapcagim. Suan da bu is CPU ile 88100 ornekden olusan bir ses dosyasi icin 900ms suruyor.

Durumlar bunlar calismaya devam.
Saygilar
Erdem
konu: D'yi LLVM aracılığı ile Web Assembly'e derlemek Mümkün mü?  ; forum:: D Programlama Dili
kerdemdemir #14
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12835
Hüseyin Selam,

Bende zamanında web assembly ile ilgili şöyle birşey izlemiştim çok etkilenmiştim,

https://www.youtube.com/watch?v=jXMtQ2fTl4c

Ne yazıkki konunun zorluğu ile ilgili hiçbir fikrim yok. Fakat zorluğu etkileyecek olan unsur web assembly desteğinin ne kadar LLVM üstünden sağlandığı ile ilgili olsa gerek. Eğer clang bu desteği llvm'den bağımsız sağlıyor iş çok zor demektir fakat GPU örneğinde olduğu gibi sorumluluğun büyük kısmı llvm'de ise göreceli olarak daha kolay olabilir .

Zorluğundan bağımsız olarak fikir bence geleceğe dönük ve çok güzel.

Saygılar
Erdemdem
konu: İngilizce'yi Öğrenmek (Sadece İngilizce Gramer Değil, Kalıplar ve Daha Fazlası İçin...)  ; forum:: Diğer Konular
kerdemdemir #15
Üye Eyl 2013 tarihinden beri · 122 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12818
Valla yurtdışında yaşıyorum ve iletişimimi İngilizce ile sağlıyorum fakat "facelift"  kelimesini ilk defa duyuyorum.
Bazen anlamadığın yerleri gözardı etmek hız kazandırabilir. Aynı kelime birden fazla karşına çıkıyorsa veya çok kritik bir yer ise ve anlamanı engelliyorsa bakman faydalı olabilir belki de.

Öğrenme ve geliştirme için bana faydalı olduğunu düşündüğüm şeyler:
  * Work and Travel diye bir organizasyon vardı 10 sene önce üniversite 1'de ona gitmiştim 4 ay çok faydalı olmuştu ingilizcem için. Ekonomik olarakda para kazanıp dönmüştüm.
  * Filmleri ingilizce altyazı ile seyretmeye çalışıyorum.
  * Zamanında ingilizce hikaye kitapları okurdum(Harry Potter'ları bitirmiştim)
  * Bilgisayar oyunları !!!! Civ4, Aoe2, Warcraft3 hastasıyım  :)
 
Saygılar
Erdemdem
Bu mesaj kerdemdemir tarafından değiştirildi; zaman: 2017-09-17, 01:54.
Özel Karakterler:
Sayfa:  1  2  3 ... 7  8  9  sonraki 
Özel sorgulamalar

Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-10-21, 03:21:57 (UTC -07:00)