2013-03-03 24 views
12

MingCL ve Nvidia SDK kullanarak OpenCL derlemek mümkün mü?Mingw Nvidia SDK üzerinde Derleme OpenCL SDK

Resmi olarak desteklenmediğinin farkındayım, ancak bu sadece mantıklı değil. Statik olarak bağlantılı bir kütüphane olarak sağlanan kütüphaneler değil midir? Demek istediğim, bir derleyici ile derlenebilir ve başarıyla bağlanabilir, sorun ne olmalı?

Kodumu Nvidia'nın SDK'siyle sağlanan OpenCL kitaplıklarına derlemeyi ve başarıyla bağlamayı başardım, ancak yürütülebilir kod, kodumdaki ilk OpenCL çağrısı olan clGetPlatformIDs adresinde Segmentation Fault'u atar.

İşte bu kütüphaneleri örnek OpenCL kodunun .Sln dosyadan alındığını

x86_64-w64-mingw32-g++ -std=c++11 File.cpp \ 
-L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64" \ 
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" \ 
-gcoff -lOpenCL -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 \ 
-lshell32 -lole32 -loleaut32 \ 
-luuid -lodbc32 -lodbccp32 -luser32 -lgdi32 -lmingwex -m64 \ 
-DWIN32 -D_DEBUG -D_CONSOLE 

Not benim derleme komuttur.

Bu kitaplıkların çeşitli kombinasyonlarını denedim ve hiçbir şey işe yaramıyor gibi görünüyor.

Ayrıca Mingw kullanarak derlemenin ve başka bir şey kullanarak bağlanmanın bir yolu var mı? Başka bir şeyin ne olduğundan emin değilim.

+0

Neden ana makine kodunu oluşturmak için VC++ Express'i kullanmıyorsunuz? Ayrıca 32 bit veya 64bit libs kullanıyor musunuz? CUDA \ v5.0 \ lib \ x64 ve -luse32 -lcomdlg32 -ladvai32 ... -m64'ün kafa karıştırıcı bir karışımı var mı? Komut satırınızı basitleştirin. –

+1

64-bit, C++ kodum C++ 11 özelliklerini kullanır, böylece VC++ artık olmaz. Lib'leri ve çıkmazları çıkarmayı ve eklemeyi denedim. – omarzouk

cevap

12

Bunu "OpenCL.dll" DLL dosyası için "libOpenCL.a" bir alma kitaplığı oluşturmak için MinGW reimp ve dlltool yardımcı programlarını kullanarak bunu yapabildik. Burada izlenen adımlar şunlardır:

  • adım 1: (reimp ve Dlltool için) yüklü mingw-utils'i olduğundan emin olun. Bunu yaparsanız değil, bir MinGW istemi yazınız:

    yüklemek mingw-get mingw-utils

  • adım 2:

    reimp OpenCL.lib

  • : Sonra, aşağıdaki komutu yazın

Bu, bir OpenCL.def ve libOpenCL.a dosyası vermelidir. Sonuç, "geçersiz veya bozuk içe aktarma kitaplığı" satırları boyunca bir şeyse, alternatif adım 2 çalışmalıdır.

  • alternatif adım 2: http://pastebin.com/f2ac38b2f: burada bulabileceğiniz bir .def dosyası ile birlikte dlltoolu kullanın. Komut olur:

    Dlltool -l libOpenCL.a -d OpenCL.def -A -k

Artık yeni oluşturulan libOpenCL.a karşı bağlayabilirsiniz. Hala eksik sembolleri görüyorsanız, bunları .def dosyasına ekleyin ve dlltool komutunu tekrarlayın.

  • http://oscarbg.blogspot.com/2009/12/opencl-with-mingw.html
  • http://www.mingw.org/wiki/CreateImportLibraries

      (sadece 2 link yapıştırabilirsiniz)
  • +0

    Bu, en azından GPU Computing SDK 5.5 ile bağlantı kurmanıza izin verdiğini doğruladı. – imallett

    2

    OpenCL:

    Biz başvuru için aşağıdaki görevlerde bulunan bilgilere bu her çalışma sayesinde elde edebilir kütüphaneler, OpenCL.dll için sadece birer taslaktır. Bu nedenle dinamik bir yükleme tekniği kullanıyorum.Tüm problemlerinizi çözecektir. Veya gerçekten OpenCL'nin nVIDIA tweaks'lerine ihtiyacınız var mı?

    Sadece çalışma zamanında daha güvenli değil, aynı zamanda hiçbir bağlayıcı veya tanımlamaya ihtiyaç duymadığınız için derleme daha kolay. Proyektinize sadece basit bir cpp/hpp dosyaları eklendi.

    Kullanılacak çok iyi bir ürün CLEW. Ancak, bu kitaplıkla tamamen uyuşmuyor, çünkü C++ sarmalayıcıları bozuk. Yani belki biraz ayarlamaya ihtiyacın olacak. Ayrıca, problemli olabileceğinden, genellikle "atexit" kodunu devre dışı bırakırım.

    +0

    clew ölü görünüyor? – rogerdpack