Форум программистов, компьютерный форум, киберфорум
OpenCL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
1

OpenCL безразмерный буфер видеокарты RADEON HD6870

08.05.2016, 00:27. Показов 2448. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имею проблему при загрузке массивов в буфер видеокарты под OpenCL (не путать с OpenGL).
На борту видео всего 1 Гиг, но умудряюсь записать туда 2,5 Гига прежде чем на очередных 0,5 Гиг выдает ошибку переполнения.
Куда она может это все заливать? Не понятно.
Проверяю размер программы в памяти - размер меняется только на величину выделенных мной динамических массивов. Даже ни на полгига лишних не добавиться. Значит размещение буферов OpenCL в памяти хоста исключается.
Тестирую записанные данные после освобождения динамического массива из которого копировал данные - все 5 блоков по 0,5 Гиг целые.
Кусок кода которым это делаю:
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
37
38
39
40
41
42
43
44
45
46
    int l = 67108864;
    int i;
    unsigned long long *bu = new unsigned long long[l];
    unsigned long long *bu1 = new unsigned long long[l];
    for (int i = 0 ; i < l; i++)
        bu[i]=0xffffffff00000000 |i;
    /* create cl_buffer objects */
    cl_int err;
    cl_mem clsrc=clCreateBuffer(context,CL_MEM_READ_WRITE,l *sizeof(unsigned long long),0,&err);        //primes
    clog << "Alloc OK 1: " << err << "      " << l *sizeof(unsigned long long) <<endl;
    err = clEnqueueWriteBuffer(queue0, clsrc,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu, 0, NULL, NULL);
    clog << "Alloc OK 1: " << err << endl;
    for (int i = 0 ; i < l; i++)
        bu[i]=0xfffffffe00000000 |i;
    cl_mem clout=clCreateBuffer(context,CL_MEM_READ_WRITE,l *sizeof(unsigned long long),0,&err);    //buff
    clog << "Alloc OK 2: " << err << endl;
    err = clEnqueueWriteBuffer(queue0, clout,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu, 0, NULL, NULL);
    clog << "Alloc OK 2: " << err << endl;
    for (int i = 0 ; i < l; i++)
        bu[i]=0xfffffffd00000000 |i;
    cl_mem clout2=clCreateBuffer(context,CL_MEM_READ_WRITE,l *sizeof(unsigned long long),0,&err);   //buff
    clog << "Alloc OK 3: " << err << endl;
    err = clEnqueueWriteBuffer(queue0, clout2,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu, 0, NULL, NULL);
    clog << "Alloc OK 3: " << err << endl;
    for (int i = 0 ; i < l; i++)
        bu[i]=0xfffffffc00000000 |i;
    cl_mem clout3=clCreateBuffer(context,CL_MEM_READ_WRITE,l *sizeof(unsigned long long),0,&err);   //buff
    clog << "Alloc OK 4: " << err << endl;
    err = clEnqueueWriteBuffer(queue0, clout3,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu, 0, NULL, NULL);
    clog << "Alloc OK 4: " << err << endl;
    for (int i = 0 ; i < l; i++)
        bu[i]=0xfffffffb00000000 |i;
    cl_mem clout4=clCreateBuffer(context,CL_MEM_READ_WRITE,l *sizeof(unsigned long long),0,&err);   //buff
    clog << "Alloc OK 5: " << err << endl;
    err = clEnqueueWriteBuffer(queue0, clout4,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu, 0, NULL, NULL);
    clog << "Alloc OK 5: " << err << endl;
    delete [] bu;
 
    err = clEnqueueReadBuffer(queue0, clsrc,CL_TRUE,0, l*sizeof(unsigned long long),(void*)bu1, 0, NULL, NULL);
    clog << "Read OK 1: " << err << endl;
    bool ba = true;
 
    for (i = 0; (i < l ) && ba ; i++)
        if ( (0xfffffffe00000000 |i) != bu1[i])
            ba = false;
    clog << "Read OK 1: " << ba << " - " << i << endl;
Кто-нибудь может объяснить куда сохраняются данные?
Утечек памяти не наблюдал (сложно не заметить утекшие 1,5 Гига)
Инфо о карте памяти:
Кликните здесь для просмотра всего текста
Device Type: CL_DEVICE_TYPE_GPU
Device ID: 4098
Max compute units: 14
Max work items dimensions: 3
Max work items[0]: 256
Max work items[1]: 256
Max work items[2]: 256
Max work group size: 256
Preferred vector width char: 16
Preferred vector width short: 8
Preferred vector width int: 4
Preferred vector width long: 2
Preferred vector width float: 4
Preferred vector width double: 0
Max clock frequency: 900Mhz
Address bits: 32
Max memory allocation: 536870912
Image support: Yes
Max number of images read arguments: 128
Max number of images write arguments: 8
Max image 2D width: 16384
Max image 2D height: 16384
Max image 3D width: 2048
Max image 3D height: 2048
Max image 3D depth: 2048
Max samplers within kernel: 16
Max size of kernel argument: 1024
Alignment (bits) of base address: 2048
Minimum alignment (bytes) for any datatype: 128
Single precision floating point capability
Denorms: No
Quiet NaNs: Yes
Round to nearest even: Yes
Round to zero: Yes
Round to +ve and infinity: Yes
IEEE754-2008 fused multiply-add: Yes
Cache type: None
Cache line size: 0
Cache size: 0
Global memory size: 1073741824
Constant buffer size: 65536
Max number of constant args: 8
Local memory type: Scratchpad
Local memory size: 32768
Error correction support: 0
Profiling timer resolution: 1
Device endianess: Little
Available: Yes
Compiler available: Yes
Execution capabilities:
Execute OpenCL kernels: Yes
Execute native function: No
Queue properties:
Out-of-Order: No
Profiling : Yes
Platform ID: 01ED1864
Name: Barts
Vendor: Advanced Micro Devices, Inc.
Driver version: 1084.4 (VM)
Profile: FULL_PROFILE
Version: OpenCL 1.2 AMD-APP (1084.4)
Extensions: cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_ext_atomic_counters_32 cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing

С одной стороны мне бы побольше памяти для использования, но с другой - опасаюсь за ее целостность.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2016, 00:27
Ответы с готовыми решениями:

Radeon HD6870 (Накрылась)
При включении компьютера появляются прерывистые горизонтальные желтые полосы После идет загрузка...

Radeon HD6870 vs GeForce GTX 560
Имеются обе карты, объём 1Гб у обеих, не могу определиться, какую лучше поставить. Сравнил на сайте...

OpenCL: clEnqueueReadBuffer не правильно считывает в буфер
В рамках знакомства с OpenCL написал тестовый пример, но на выходе в буфер всегда получаю не верные...

Отсутствие OpenCL на RADEON HD 6870 - но раньше был
Доброго времени суток форумчане! Переустановил винду и установил последний ATI APP SDK 3.0. Исчез...

2
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
08.05.2016, 00:57 2
запихнут невпихуемое не получится,выше головы не прыгнуть, ось не используемую память скидывает в своп, также есть есть очереди и прочие дела, на диск, разные ос делают по разному но смысл не меняется.
0
24 / 24 / 8
Регистрация: 02.02.2016
Сообщений: 135
08.05.2016, 11:24  [ТС] 3
ssXXss, теоретически, закон сохранения должен работать.
У меня 16 Гиг оперативы в компе. Своп вообще выключаю. Поэтому освобождение памяти в своп исключается.
Если распределяю память под OpenCL в хосте, то вижу как растет объем занимаемой программой памяти. А тут нет.
Могу попробовать сожрать всю доступную память в хосте, а потом опять залить данные в видеокарту. На случай если система не регистрирует эту утечку, то перекрытие в памяти сам обнаружу.
Система Windows 7 pro 64.

Добавлено через 2 часа 4 минуты
нашел утечку добавив всего:
C++
1
2
GlobalMemoryStatusEx (&statex);
cout << "Total memory: " << statex.ullTotalPhys << "  Free memory: " << statex.ullAvailPhys << endl;
до и после копирования в буфер.
Разница как раз на все 2,5 Гига. Но эта память никому не принадлежит (так по крайней мере считают надстройки по мониторингу памяти Windows)
Тогда получается, что в видеокарту вообще ничего не попадает?
В документации по OpenCL на эту тему вообще ничего не нашел.
Есть знатоки этого вопроса?
0
08.05.2016, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2016, 11:24
Помогаю со студенческими работами здесь

Поддержка OpenCL AMD на видеокарте ATI Radeon HD 6370M
Здравствуйте! Многие наверное слышали о технологии OpenCL. Заинтересовался этим вопросом. Полазил...

Замена видеокарты ATI Radeon HD 4600 Series (1024 МБ) на PCI-E Asus AMD Radeon HD7870 2048MB 256bit GDDR5?
Здравствуйте. Моя конфигурация (взято из Everest): процессор - QuadCore Intel Core 2 Quad Q8300,...

Что лучше? PowerColor PCI-Ex Radeon HD6870 2048MB GDDR5 (256bit) или Gainward PCI-Ex GeForce GTX 570 Golden Sample GLH 1280MB GDDR5 (320bit) ?
Какая из видеокарт лучше и чем??? 1. Видеокарта PowerColor PCI-Ex Radeon HD6870 2048MB GDDR5...

Название видеокарты изменилось с ATI Radeon HD 4720 на ATI Radeon HD 4600 Series
здравствуйте,подскажите после периустановки Windows 7,название видеокарты изменилось с ATI Radeon...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru