|
|
|
Канал Игры Мечты: «Ищу программеров, сидящих на космосе.» |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Вообще там ссылка на сложную структуру геометрии для последующей проверки.
+ это все будет 1 раз посчитано и лежать в константной памяти.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
где посчитано? по-моему GPU умеет тока читать из __constant__
наскока я в курсе общая схема работы примерно такая, загружаем много входной инфы, обратно получаем мало выходной, т.е. подходит лишь под определённый класс задач
возвращаясь к тем же квадратам их дешевле ещё раз тупо посчитать когда надо, хранить и извлекать дорого
_________________ This is what you get ...
(c) Radiohead |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Быстродействие? Не, не слышал (кликните здесь для просмотра)
code (кликните здесь для просмотра)
Код: |
#include <stdio.h>
#include <stdlib.h>
#define CUDA_CALL(value) { \
cudaError_t _m_cudaStat = value; \
if (_m_cudaStat != cudaSuccess) { \
fprintf(stderr, "Error %s at line %d in file %s\n", \
cudaGetErrorString(_m_cudaStat), __LINE__, __FILE__); \
exit(1); \
} }
struct SpaceObject {
float x;
float y;
float z;
};
__global__ void ck_work(SpaceObject *objs, int count){
int idx = threadIdx.x + blockIdx.x * blockDim.x;
if(idx < count){
SpaceObject cObj = objs[idx];
for(int i = 0; i < count; i++){
SpaceObject obj = objs[i];
}
}
}
int main(void) {
static int count = 100000;
SpaceObject *h_obj = new SpaceObject[count];
for(int i = 0; i < count; i++){
h_obj[i].x = rand() / (float)(RAND_MAX) * 10.0;
h_obj[i].y = rand() / (float)(RAND_MAX) * 10.0;
h_obj[i].z = rand() / (float)(RAND_MAX) * 10.0;
}
SpaceObject *d_obj;
CUDA_CALL(cudaMalloc((void **)&d_obj, sizeof(SpaceObject) * count));
CUDA_CALL(cudaMemcpy(d_obj, h_obj, sizeof(SpaceObject) * count, cudaMemcpyHostToDevice));
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
int blocks = count / 1024;
ck_work<<<blocks, 1024>>>(d_obj, count);
cudaEventRecord(stop, 0);
CUDA_CALL(cudaThreadSynchronize());
CUDA_CALL(cudaGetLastError());
float elapsedTime;
CUDA_CALL(cudaEventElapsedTime(&elapsedTime, start, stop));
printf("CUDA time: %3.1f ms\n", elapsedTime);
CUDA_CALL(cudaFree((void*) d_obj));
CUDA_CALL(cudaDeviceReset());
return 0;
}
|
|
CUDA time: 954.3 ms
|
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Так далеко не все задачи решаются лучше на GPU чем на CPU. Ну собственно ты уже увидел
_________________ MOV topka, C++ |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
Ну вообще-то если это запустить на компе то будут минуты, но это детали.
добавлено спустя 4 минуты:
Мне вот нравятся такие люди... Вот они сказал свое ВАЖНОЕ МНЕНИЕ (С) (R) (TM). А посмотреть насколько они ошибаются - они не удосужились... Для того, чтобы понятно было: Тут идет перебор и "фетч" для 100К потоков 100К областей памяти. Итого: 10ККК фетчей. Даже если у вас 2,5ГГц проц и доступ к памяти происходит мгновенно, то это будет 4 секунды. Не считая накладные расходы на счетчики и т.д.
Просто это все-равно медленней, чем хотелось-бы. И надо менять алгоритм.
Если решать проблему в тупую, то надо ограничивать 1К народу на ноду и 10-20К объектов и тогда все будет, но хотелось-то больше...
_________________ WARNING: By reading this post you accept that this post is genius.
Последний раз редактировалось: Варсик (14:57 13-01-2014), всего редактировалось 1 раз |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
Спокойней будь, если тебе не нужно другое мнение - вообще не ясно чего ты сюда пишешь.
Я очень хочу посмотреть как быстро у тебя будет работать gpgpu, когда ты начнешь модифицировать данные по которым ты бегаешь. Тем более когда у тебя полный перебор.
_________________ MOV topka, C++ |
|
|
Варсик
545 EGP
    Рейтинг канала: 4(81) Репутация: 117 Сообщения: 4041 Откуда: Москва Зарегистрирован: 22.12.2002
 |
|
А есть у кого-нибудь знакомые, которые с кудой общались? А то у меня затык в интересном месте... Где его не может быть.
_________________ WARNING: By reading this post you accept that this post is genius. |
|
|
DIMOSUS.X
997 EGP
        Рейтинг канала: 4(67) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008
 |
|
Насколько сильно DirectCompute отличается от CUDA? Говорят Что DirectCompute является унифицированной прослойкой над nVidia CUDA и AMD FireStream
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом. |
|
|
|
|
|
Канал Игры Мечты: «Ищу программеров, сидящих на космосе.» |
|