Форум программистов, компьютерный форум CyberForum.ru

CUDA: сложение массивов большого размера - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество точек с целыми координатами, которые принадлежат данному отрезку http://www.cyberforum.ru/cpp-beginners/thread689613.html
Задача 5. Точки Недавно Петрик научился рисовать отрезки. Теперь его заинтересовала количество точек с целыми координатами, которые принадлежат данному отрезку. Формат входных данных: входной поток содержит 4 целых числа х1, у1 и х2, у2 - координаты концов отрезка. Координаты задаются в пределах от -1 000 000 000 до 1 000 000 000 Формат выходных данных:выходной поток имеет содержит одно число...
C++ Метод Хука Дживса нужна программа для решения f(x) = 2(X1 + 5)^2 +(X2 - 1)^2 http://www.cyberforum.ru/cpp-beginners/thread689587.html
Компьютерный тренажер C++
Может у кого завалялась курсовая или диплом по созданию компьютерного тренажера на С++, киньте пожалуста. Очень буду благодарен.
C++ Решение транспортной задачи методом потенциалов
Написать программу для транспортной задачи: Имеется m пунктов возможного производства и n пунктов потребления с объемами потребления Bj. Для каждого i-го пункта производства можно использовать Pi проектных вариантов предприятия, которым отвечают объемы производства Aik (k=1, pi). Стоимость перевозки из i-го пункта производства в j-тый пункт потребления равна Cij. Требуется определить оптимальный...
C++ Вычисление числа Пи методом Монте-Карло http://www.cyberforum.ru/cpp-beginners/thread688997.html
Всем доброго время суток. Написать программу для вычисления значения \pi с помощью метода Монте-Карло. Для этого рассмотреть квадрат с центром в начале координат и длиной ребра 2, в которой вписана окружность радиуса 1 с центром в начале координат. Вероятность того, что выбранная наугад точка внутри квадрата попадет внутрь окружности равна отношению площадей окружности и квадрата, то есть...
C++ Новичок программировании GUI приложений Здравствуйте. Посоветуйте, что лучше для начинающего в программировании GUI приложений, изучать библиотеки (WinAPI или т.п) или программирование в RAD системе? подробнее

Показать сообщение отдельно
Cdvig
 Аватар для Cdvig
9 / 9 / 0
Регистрация: 08.10.2009
Сообщений: 173
06.11.2012, 12:32     CUDA: сложение массивов большого размера
Доброго времени, есть необходимость написать программу с использованием CUDA для сложения массивов размером около 450000000 элементов.
написал тест
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
__global__ void addKernel(int *c, int *a, int *b)
{
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    c[i] = a[i] + b[i];
}
 
int main()
{
    const int arraySize = 4;
    int a[arraySize];
    int b[arraySize];
    int c[arraySize];
    int *dev_a = NULL;
    int *dev_b = NULL;
    int *dev_c = NULL;
    for (int i = 0, j = arraySize; i < arraySize, j > 0; i++, j--)
    {
        a[i] = i;
        b[j] = j;
    }
    printf("%d, %d, %d\n", a[0], a[1], a[2]);
    printf("%d, %d, %d\n", b[0], b[1], b[2]);
    cudaMalloc((void**)&dev_c, arraySize * sizeof(int));
    cudaMalloc((void**)&dev_a, arraySize * sizeof(int));
    cudaMalloc((void**)&dev_b, arraySize * sizeof(int));
    cudaMemcpy(dev_a, a, arraySize * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(dev_b, b, arraySize * sizeof(int), cudaMemcpyHostToDevice);
    addKernel<<<1, arraySize>>>(dev_c, dev_a, dev_b);
    cudaMemcpy(c, dev_c, arraySize * sizeof(int), cudaMemcpyDeviceToHost);
    printf("%d, %d, %d\n", c[0], c[1], c[2]);
    cudaFree(dev_c);
    cudaFree(dev_a);
    cudaFree(dev_b);
    system("pause");
    return 0;
}
но почему то не высчитывает правильно. И есть ли советы или реальные примеры по складыванию массивов большого объема.

Добавлено через 11 минут
C++
1
2
a[i] = i;
b[i] = j;
так правильнее

Добавлено через 5 минут
причем максимальный размер массива 1024, а мне надо гораздо побольше.

Добавлено через 3 часа 47 минут
Изменил код, уже лучше, но все равно мало помещается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    const int arraySize = 11721 * 11721;// = 137381841
                                           //450000000  
    int *a = (int *)malloc(sizeof(int)*arraySize);
    int *b = (int *)malloc(sizeof(int)*arraySize);
    int *c = (int *)malloc(sizeof(int)*arraySize);
    
    int *dev_a = NULL;
    int *dev_b = NULL;
    int *dev_c = NULL;
    for (int i = 0, j = arraySize; i < arraySize, j > 0; i++, j--)
    {
            a[i] = i;
            b[i] = j;
    }
    
    printf("%d, %d, %d\n", a[0], a[arraySize / 2], a[arraySize - 1]);
    printf("%d, %d, %d\n", b[0], b[1], b[2]);
    cudaMalloc((void**)&dev_c, arraySize * sizeof(int));
    cudaMalloc((void**)&dev_a, arraySize * sizeof(int));
    cudaMalloc((void**)&dev_b, arraySize * sizeof(int));
    cudaMemcpy(dev_a, a, arraySize * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(dev_b, b, arraySize * sizeof(int), cudaMemcpyHostToDevice);
    addKernel<<<128, 128>>>(dev_c, dev_a, dev_b, arraySize);
    cudaMemcpy(c, dev_c, arraySize * sizeof(int), cudaMemcpyDeviceToHost);
    printf("%d, %d, %d\n", c[0], c[1], c[2]);
    cudaFree(dev_c);
    cudaFree(dev_a);
    cudaFree(dev_b);
    system("pause");
    return 0;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru