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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Cdvig
9 / 9 / 0
Регистрация: 08.10.2009
Сообщений: 173
#1

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

06.11.2012, 12:32. Просмотров 1628. Ответов 0
Метки нет (Все метки)

Доброго времени, есть необходимость написать программу с использованием 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;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос CUDA: сложение массивов большого размера (C++):

CUDA: сложение двумерных массивов - C++
Я новичок, как в CUDA, так и в С++. Задача - сложить два одинаковых массива, число строк и столбцов задается с клавиатуры. Я чувствую,...

CUDA C/C++ сложение векторов - C++
вроде все так делаю, но не запускается не могу понять ошибку делаю с шаблона там просто надо заполнить недастоющие строчки вот шаблон ...

Статический массив большого размера - C++
Здраствуйте, скорее всего данная проблема у многих есть, этот код вызывает ошибку на этапе исполнения #include &lt;windows.h&gt; int...

Работа с текстовым файлом большого размера - C++
День добрый! Подскажите пожалуйста, как реализовать следующую задачу. Грубо говоря - есть файл размером порядка 2-3GB. Необходимо после...

Произвольный доступ к файлу большого размера 4+гб - C++
Предыстория. Поверхностно изучил файлы и пошел дальше, потом решил вернуться и изучить все глубоко. Все в голове поломалось, когда я понял,...

Вычисление суммы в массивах большого размера - C++
Написать функцию для подсчета суммы значений в массиве. Массив может быть очень большим. int N = 1001; int arr; Обход...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 12:32
Привет! Вот еще темы с ответами:

Безуспешное освобождение памяти большого размера - C++
Добрый день! При попытках удаления указателя на память большого размера (грубо, свыше 50 МБ), программа вылетает. Т.е. при...

Как создать массив большого размера - C++
В программе будет использоваться массив большого размера. Оперативная память - 512 МБ Создаю массив: char lol; Выдает ошибку :...

CodeBlocks создает файл сильно большого размера - C++
Создаю простейшую программу, а размер exe-файла 457 килобайт. Как нужно настроить компилятор? #include &lt;iostream&gt; using namespace...

Ошибка при создании массива большого размера - C++
Массив int m; выдает ошибку Винды в чем дела? с 5 9-ми все нормально Добавлено через 19 минут точнее выше 519999 выдает ошибку при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru