No to super !!! :respect: :respect: :respect: :respect: :respect: :respect: :respect: :respect: :respect: :respect:
Co do optymalizacji, to na podstawie moich wyobrażeń o GPU, przypuszczam, że największym problemem nie będzie optymalizacja samych obliczeń, ale organizacji wątków.
Na CPU program idzie z grubsza tak:
wchodzi w sito, najczęściej dosyć szybko zmienna sito staje się zerem, i przechodzi do następnej pętli. Bardzo rzadko przechodzi przez sito i testuje pierwszość.
Przy jednym wątku nie ma znaczenia, że za każdym razem wchodzimy w sito na inną głębokość, a przez całe sito przechodzimy tylko sporadycznie. Kiedy projektowałem algorytm, nie śniło mi się o obliczeniach na GPU.
Jeśli teraz bezpośrednio przeniesiemy ten algorytm na GPU, to jawi mi się taki scenariusz:
Wątki są wykonywane w paczkach po, bodajże, 16 wątków. Jeśli teraz te 16 wątków wejdzie w sito, to często zdarzy się, że 15 wątków się zakończy (zmienna sito się wyzeruje), ale 16-ty wątek będzie szedł głębiej w sito i może nawet dojdzie do testowania pierwszości. No i jeśli ja dobrze rozumiem działanie GPU, to te 15 wątków będzie czekało bezczynnie aż ten 16-ty skończy swoją robotę.
Prawdopodobnie to będzie wymagało jakiejś reorganizacji. Chociaż oczywiście powyższy czarny scenariusz nie oznacza, że program będzie chodził z 1/16 prędkości - w praktyce często wątki nie będą miały dramatycznej różnicy czasu spędzonego w sicie, ale prognozowanie na ile jest to problemem, to trochę wróżenie z fusów.
Ponadto nie wiem, jak wygląda sprawa operacji 64-bitowych, bo zdaje się, że w GPU większość jednostek wykonuje tylko operacje 32-bitowe, a tych 64-bitowych jest niewiele.
Jaką masz platformę testową? Czy zainstalowanie wszystkiego sprawiało dużo bólu, czy poszło raczej bezproblemowo?
Co do optymalizacji, to na podstawie moich wyobrażeń o GPU, przypuszczam, że największym problemem nie będzie optymalizacja samych obliczeń, ale organizacji wątków.
Na CPU program idzie z grubsza tak:
wchodzi w sito, najczęściej dosyć szybko zmienna sito staje się zerem, i przechodzi do następnej pętli. Bardzo rzadko przechodzi przez sito i testuje pierwszość.
Przy jednym wątku nie ma znaczenia, że za każdym razem wchodzimy w sito na inną głębokość, a przez całe sito przechodzimy tylko sporadycznie. Kiedy projektowałem algorytm, nie śniło mi się o obliczeniach na GPU.
Jeśli teraz bezpośrednio przeniesiemy ten algorytm na GPU, to jawi mi się taki scenariusz:
Wątki są wykonywane w paczkach po, bodajże, 16 wątków. Jeśli teraz te 16 wątków wejdzie w sito, to często zdarzy się, że 15 wątków się zakończy (zmienna sito się wyzeruje), ale 16-ty wątek będzie szedł głębiej w sito i może nawet dojdzie do testowania pierwszości. No i jeśli ja dobrze rozumiem działanie GPU, to te 15 wątków będzie czekało bezczynnie aż ten 16-ty skończy swoją robotę.
Prawdopodobnie to będzie wymagało jakiejś reorganizacji. Chociaż oczywiście powyższy czarny scenariusz nie oznacza, że program będzie chodził z 1/16 prędkości - w praktyce często wątki nie będą miały dramatycznej różnicy czasu spędzonego w sicie, ale prognozowanie na ile jest to problemem, to trochę wróżenie z fusów.
Ponadto nie wiem, jak wygląda sprawa operacji 64-bitowych, bo zdaje się, że w GPU większość jednostek wykonuje tylko operacje 32-bitowe, a tych 64-bitowych jest niewiele.
Jaką masz platformę testową? Czy zainstalowanie wszystkiego sprawiało dużo bólu, czy poszło raczej bezproblemowo?