Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-10-07 22:14:15 Jako że dopiero się uczę programować, zostawiam ten temat dla was jako bardziej obeznanych w programowaniu ode mnie. :F |
Nadal zostaję w tym stanie, mam nadzieję, że kiedyś w przyszłości wrócę do tego tematu i z niego skorzystam. :F Jeśli coś ktoś wie coś więcej na ten temat lub znalazł kurs związany z tym tematem niech napisze co wie lub znalazł... Z góry dziękuję! Bez odbioru! |
|
DejaVu |
» 2014-10-07 22:33:32 Ponoć warto się zainteresować biblioteką OpenCL bardziej aniżeli CUDA, ponieważ OpenCL umożliwia wykorzystanie każdego sprzętu, wspierającego obliczenia na GPU, natomiast CUDA jest tylko i wyłącznie dla kart z chipsetem/procesorem firmy NVidia. |
|
DejaVu |
» 2014-10-09 02:56:56 Przekazywanie klasy do GPU (nie sprawdzałem jeszcze czy działa): class MyClass { public: int value; float rate; __device__ __host__ MyClass() { value = 0; rate = 0; } __device__ __host__ MyClass( int v, float r ) { value = v; rate = r; } __device__ __host__ ~MyClass() { }; } You then need to correctly allocate the device memory.If you want an array of MyClass with 10 members on the device, allocate and copy it to the device like this:
MyClass arr[ 10 ]; MyClass * darr; const size_t sz = size_t( 10 ) * sizeof( MyClass ); cudaMalloc(( void ** ) & darr, sz ); cudaMemcpy( darr, & arr[ 0 ], sz, cudaMemcpyHostToDevice );
http://stackoverflow.com/questions/14119088/passing-a-class-object-to-a-kernel |
|
DejaVu |
» 2014-10-10 22:58:22 No to mogę stwierdzić teraz, że da radę używać klas na GPU :) Nie można jednak używać override ani metod wirtualnych. class MyTask : public gpu::Task < MyTask > { public: __host__ __device__ MyTask( gpu::KernelCPU & _kernel ) : Task( _kernel, this ) { } __host__ void onInitAtCPU() override { for( int i = 0; i < 5; ++i ) { a[ i ] = i + 1; b[ i ] = a[ i ] * 10; c[ i ] = 0; } } __device__ void onExecuteGPU() { int i = threadIdx.x; c[ i ] = a[ i ] + b[ i ]; } __host__ void onFinishAtCPU() override { for( int i = 0; i < 5; ++i ) printf( "a[%d] = %3d; b[%d] = %3d; b[%d] = %3d;\n", i, a[ i ], i, b[ i ], i, c[ i ] ); } private: int a[ 5 ]; int b[ 5 ]; int c[ 5 ]; };
void UsageExample() { gpu::KernelCPU kernel; MyTask mytask( kernel ); kernel.run( mytask, 5, 1 ); }
A ponoć nie warto zabierać się za programowanie obiektowe przy GPU :P |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-10-11 19:50:18 |
|
DejaVu |
» 2014-10-11 19:59:39 Obliczenia na GPU przydają się tylko wtedy, gdy istnieje poważne uzasadnienie wykonania obliczeń, które zbyt dużo czasu zajmują na CPU. Teoretycznie masz stałą ilość danych wejściowych i stałą ilość danych wejściowych, jednak... takie obliczenia to niepotrzebne kompilacje i raczej zachowałbym moc obliczeniową GPU na shadery do efektów graficznych, aniżeli do fizyki gry. Utrzymywanie i rozwijanie kodu wykonującego się na GPU jest trudne, żmudne i męczące. Samo pisanie dużej gry jest samym w sobie trudnym przedsięwzięciem więc nie polecam Ci łączyć miliona różnych technologii, których nie znasz bo taki projekt po prostu upadnie zanim nabierze interesujących kształtów. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-10-12 19:00:45 GPU jest dobre do obliczeń rozproszonych (nie liniowych) wtedy jest najlepszym rozwiązaniem, nawet najlepsze procesory nie dorównują wtedy kartom graficznym |
Obliczenia na GPU przydają się tylko wtedy, gdy istnieje poważne uzasadnienie wykonania obliczeń, które zbyt dużo czasu zajmują na CPU. |
raczej zachowałbym moc obliczeniową GPU na shadery do efektów graficznych |
...Wykorzystanie obliczeń na GPU specjalnie dla parunasto slotowego serwera, byłoby uciążliwe, wręcz nie opłacalne i starczyłby tylko zwykły CPU, tak jak ty to mówisz...
Jednak przy wykorzystaniu GPU można by z serwera wycisnąć więcej slotów bez jakichkolwiek "ścinek i cofek" po stronie serwera.
W przypadku Minecrafta nie było by problemu z nadmiarem bytów (np. spadającego piasku czy wybuchającego TNT), co znacznie obciąża procesor.
To są tylko moje spekulacje...Co więcej sam chciałem w pewnym momencie wykorzystać CUDA do zwiększenia wydajności aplikacji, |
:C Mam nadzieję, że nie zmierzam w złym kierunku. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-10-20 17:27:46 Na serio to moje zdanie w tym temacie nie powinno być brane pod uwagę, bo po prostu ja się jeszcze na tym nie znam. Możliwe, że sam w przyszłości będę się śmiać z tego co powiedziałem. Jak widać technologia się rozwija więc może za te 2/3 lata będzie dostępna biblioteka oraz kontenery umożliwiające dynamiczne zarządzanie pamięcią na GPU. |
Na pewno powstanie kiedyś biblioteka wykorzystująca możliwości karty graficznej, tak jak dla innych komponentów komputera. Jakiś człowiek na pewno się poświęci dla programistów. |
|
1 « 2 » 3 |