Форум программистов, компьютерный форум, киберфорум
OpenCL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 17.06.2011
Сообщений: 32

Работа с OpenCL

18.06.2011, 12:41. Показов 6885. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер уважаемые форумчане, не мог бы кто нибудь помочь вводным курсом в opencl? Есть задача: сравнить скорость выпонения программы в одном потоке и в параллельных потоках, вот код для выполнения этого на CPU:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;
using OpenCLNet;
using System.IO;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            long MaxPr = 1000000, MaxNum = 20000000;
            long primesFound = 0;
            Console.WriteLine("1 potok");
            Stopwatch watch = new Stopwatch();
            watch.Start();
            for (long i = 0; i < MaxNum; ++i)
            {
                if (IsPrime(i))
                {
                    Interlocked.Increment(ref primesFound);
                    if (primesFound > MaxPr)
                    {
                        Console.WriteLine("Last Found: {0:N0}",i);
                        break;
                    }
                }
            }
            watch.Stop();
            Console.WriteLine("Found: {0:N0} primes in {1}", primesFound, watch.Elapsed);
 
            watch.Reset();
            primesFound = 0;
 
            Console.WriteLine("\n Parallel");
 
            watch.Start();
            Parallel.For(0,MaxNum,(i, loopState) =>
            {
                if (IsPrime(i))
                {
                    Interlocked.Increment(ref primesFound);
                    if (primesFound > MaxPr)
                    {
                        Console.WriteLine("Last Found: {0:N0}", i);
                        loopState.Stop();
                    }
                }
            });
            watch.Stop();
            Console.WriteLine("Found: {0:N0} primes in {1}", primesFound, watch.Elapsed);
            
 
            watch.Reset();
            Console.ReadKey();
        }
 
 
 
 
        public static bool IsPrime(long Num)
        {
            if (Num % 2 == 0)
            {
                if (Num == 2)
                    return true;
                return false;        
            }
            long max = (long)Math.Sqrt(Num);
            for (long i = 3; i <= max; i += 2)
            {
                if ((Num % i) == 0)
                    return false;
            }
            return true;
        }
    }
}
Кто-нибудь может помочь реализовать это на OpenCL?

Добавлено через 15 часов 6 минут
хммм тогда может хоть кто-то дать простой пример на C# OpenCL?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.06.2011, 12:41
Ответы с готовыми решениями:

OpenCL - работа с памятью GPU
Кто знает OpenCL? Откликнитесь! У меня тут необъяснимые проблемы при обращении к динамическим данным по указателю в ядре (__kernel)....

OpenCL на OS X
Ребят, помогите разобраться как начать работать с OpenCL на OS X? Не понимаю что и где надо скачать и поставить что бы начать работу.

OpenCL на С++
Здравствуйте, уважаемые форумчани. Стоит задача написать знаменитую GameOfLife на С++ с использованием аппаратных средств видеокарты...

4
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.06.2011, 13:19
посмотри у NVIDIA, вроде у них есть примеры кода OpenCL из SDK http://www.nvidia.ru/object/cu... ew_ru.html
0
2 / 2 / 0
Регистрация: 17.06.2011
Сообщений: 32
18.06.2011, 14:41  [ТС]
Это уже скачал, но для начала это сложно как то, к тому же комментарии на английском, я не все понимаю((
0
61 / 61 / 9
Регистрация: 17.02.2010
Сообщений: 101
18.06.2011, 16:02
Скачивате библиотеку CLOO для C#.
Вот вам простой пример работы с ней:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using Cloo;
 
namespace SimpleOpenCL
{
    internal class Program
    {
        private const string Source = @"
__kernel void Test(__global int* result, __global int* a, __global int* b)          
  {
       //Получаем текущий номер потока
       int glX = get_global_id(0);
       
       result[glX] = a[glX] + b[glX];
    
  }
";
 
 
        private static void Main(string[] args)
        {
            OpenCl(100);
            Console.ReadLine();
        }
 
 
        public static void OpenCl(int count)
        {
 
            //Инициализация OpenCl я поставил платформу 0 и device 0 у вас могут быть другие
            var properties = new ComputeContextPropertyList(ComputePlatform.Platforms[0]);
            var context = new ComputeContext(ComputeDeviceTypes.All, properties, null, IntPtr.Zero);
            var quene = new ComputeCommandQueue(context, ComputePlatform.Platforms[0].Devices[0], ComputeCommandQueueFlags.None);
 
            //Компиляция программы
            var prog = new ComputeProgram(context, Source);
            prog.Build(context.Devices, "", null, IntPtr.Zero);
            //Создание ядра
            var kernel = prog.CreateKernel("Test");
 
           
            var result = new int[count];
            var a = new int[count];
            for (int i = 0; i < count; i++)
            {
                a[i] = i;
            }
 
            //Выделяем память на device(OpenCl) под переменные
            var resultDev = new ComputeBuffer<int>(context,
                                                     ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer,
                                                     result);
            
            var aDev = new ComputeBuffer<int>(context,
                                                    ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer,
                                                    a);
 
            
            var bDev = new ComputeBuffer<int>(context,
                                                    ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer,
                                                    a);
            //Задаем их для нашего ядра
            kernel.SetMemoryArgument(0, resultDev);
            kernel.SetMemoryArgument(1, aDev);
            kernel.SetMemoryArgument(2, bDev);
 
            //Вызываем ядро количество потоков равно count
            quene.Execute(kernel, null, new long[] {(long) count}, null, null);
 
            //Читаем результат из переменной
            quene.ReadFromBuffer(resultDev, ref result, true, null);
 
            //Выводим результат
            foreach (var i in result)
            {
                Console.WriteLine(i);
            }
        }
    }
}
А вообще учите английский, если вы хотите разобраться в OpenCl без этого никак.
1
2 / 2 / 0
Регистрация: 17.06.2011
Сообщений: 32
21.06.2011, 19:13  [ТС]
C#
1
quene.ReadFromBuffer(resultDev, ref result, true, null);
выдает ошибку

Добавлено через 6 минут
все проблема решена, в cloo 0.90.0 ошибки нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2011, 19:13
Помогаю со студенческими работами здесь

Производительность OpenCL
Доброго времени! Написал тест для будущих расчётов с использованием OpenCL и проверил на разных системах: ( дрова для AMD 14.4; для...

Программа в OpenCL
Братцы, сроки поджимают и нужно закончить программульку одну. В общем, делал-делал и пришёл я к тупику на данном этапе... не знаю,...

Границы поверхностей OpenCL
Необходимо определить границы поверхностей по изображению, как это можно сделать в OpenCV?

OpenCL - ошибка 0xc0000005
Есть прога и использованием OpenCL - модель солнечной системы Проблема одна - чем больше частиц, тем быстрее вылетает в разных частях...

OpenCL в Builder и не только
Все добрый день! На данный момент встала проблема анализа огромного массива данных, времени неделя, а скорость обработки очень мала......


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru