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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Cdvig
 Аватар для Cdvig
9 / 9 / 0
Регистрация: 08.10.2009
Сообщений: 173
06.11.2012, 12:32     CUDA: сложение массивов большого размера #1
Доброго времени, есть необходимость написать программу с использованием 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++
CodeBlocks создает файл сильно большого размера C++
Visual C++ Массивы данных большого размера
C++ CUDA C/C++ сложение векторов
Как создать массив большого размера C++
Безуспешное освобождение памяти большого размера C++
Работа с текстовым файлом большого размера C++
Вычисление суммы в массивах большого размера C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 04:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru