Спасибо, тогда не хватает функции проверки хендла на валидность.
Мы же принимаем от CL функций лишь значение указателя, а не сам указатель, поэтому при хранении указателя в разных местах будет возникать ситуация попытки удалить невалидный процесс (будь то контекст, буффер, программу или ядро).
И ещё нужно программно получать размер памяти девайса, а то ведь у видях памяти поменьше чем оперативы у проца, а все одновременно существующие контексты пользуют одну память.
Urain: И ещё нужно программно получать размер памяти девайса, а то ведь у видях памяти поменьше чем оперативы у проца, а все одновременно существующие контексты пользуют одну память.
Хорошо бы штатными средствами mql получать температуру карты (да и CPU тоже), чтоб нагрузку дозировать.
Нет в OpenCL функционала получить температуру и загрузку GPU. Получение свойств OpenCL объектов будет в ближайшее время. Проверку хендлов тоже организуем.
mql5: 1. Нет в OpenCL функционала получить температуру и загрузку GPU. 2. Получение свойств OpenCL объектов будет в ближайшее время. 3. Проверку хендлов тоже организуем.
1. Я знаю. Это не надо через OpenCL, это надо через систему. Идея всего лишь в том, чтоб функционал был нативным (без вызовов DLL из mql5-программ).
с возможностью получения необходимой информации о системном окружении: кол-во ядер, имя и разрядность операционки, количество памяти (всего), количество доступной (свободной) памяти (ОЗУ и дисковой) и т.д. и т.п.
Всё-таки терминал не в пустом бесконечном пространстве вечности работает. А то как-то уж совсем по песочному получается.
2, 3. Ура.
4. Обязательно сделайте уже нормальное обращение к буферам (cl_Read/WriteBuffer) с указанием обоих стартовых смещений (и смещение mql-массива и смещение в cl-буфере). Иначе приходится дважды копировать почти все массивы. Оно нам надо? Мы ж на OpenCL пишем не для того чтоб терять время на переписывание из пустого в порожнее. Так не честно. :)
4. Обязательно сделайте уже нормальное обращение к буферам (cl_Read/WriteBuffer) с указанием обоих стартовых смещений (и смещение mql-массива и смещение в cl-буфере). Иначе приходится дважды копировать почти все массивы. Оно нам надо? Мы ж на OpenCL пишем не для того чтоб терять время на переписывание из пустого в порожнее. Так не честно. :)
Уточни что ты имеешь в виду.
Для чего это нужно, я пока не столкнулся с ситуациями которые ты описуешь.
Для чего это нужно, я пока не столкнулся с ситуациями которые ты описуешь.
Не вопрос. Вот недавний пример. Построение семейства Ema
...........
while(limit/(cl_BufLength-1)>0)
{
for(int i=0;i<CountLine;i++)
{
dOut[i]=EmaBuffer[i].B[limit]; // переписываем начальные значения Ema
// в промежуточный массив, поскольку напрямую с указанного смещения
// загрузить в буфер невозможно.
}
CLBufferWrite(cl_Mem_Out,dOut,0,CountLine*sizeof(double)); // загружаем в gpufor(int i=1;i<cl_BufLength;i++)
{
dIn[i]=price[limit-i]; // переписываем цены
// То же самое с ценами.
}
CLBufferWrite(cl_Mem_In,dIn); // загружаем в gpu
CLExecute(cl_Krn,1,kOfs,kWork);
.........
..........
Ничего экзотического не требуется. Просто хочу, чтоб как здесь было:
int ArrayCopy( voiddst_array[], // куда копируем voidsrc_array[], // откуда копируем intdst_start=0, // с какого индекса пишем в приемник intsrc_start=0, // с какого индекса копируем из источника intcnt=WHOLE_ARRAY// сколько элементов );
Не вопрос. Вот недавний пример. Построение семейства Ema
Ничего экзотического не требуется. Просто хочу, чтоб как здесь было:
int ArrayCopy( voiddst_array[], // куда копируем voidsrc_array[], // откуда копируем intdst_start=0, // с какого индекса пишем в приемник intsrc_start=0, // с какого индекса копируем из источника intcnt=WHOLE_ARRAY// сколько элементов );
Ага, я кажется понял, тебя не устраивает усложнение алгоритмов и перерасход памяти от применения
//Выполняет OpenCL программу.bool CLExecute(int kernel, // хендл на кернел OpenCLuint work_dim, // размерность пространства задач constuint& global_work_offset[], // начальное смещение индексовconstuint& global_work_size[] // общее количество индексов
);
и ты хочешь иметь возможность смещения ещё на этапе копирования.
ЗЫ Чтоб не нужно было копировать 100000 элементов а потом делать 998000 смещение. Но вариант со смещением что есть сейчас нужно оставить тк он позволяет не копировать много раз одни и те же данные, а брать их для новой задачи из уже готового CL буффера с новым смещением.
ЗЫ а ещё хорошо бы иметь возможность дописывать переразбивая размер либо писать поверх часть данных в CL буффер, тогда вновь поступившие данные от тика можно добавить не купирую все данные. В реалтайме это врядли пригодится, а вот в тестере волне.
Коды будут добавлены:
Коды будут добавлены:
Спасибо, тогда не хватает функции проверки хендла на валидность.
Мы же принимаем от CL функций лишь значение указателя, а не сам указатель, поэтому при хранении указателя в разных местах будет возникать ситуация попытки удалить невалидный процесс (будь то контекст, буффер, программу или ядро).
требуется функция:
И ещё нужно программно получать размер памяти девайса, а то ведь у видях памяти поменьше чем оперативы у проца, а все одновременно существующие контексты пользуют одну память.
Хорошо бы штатными средствами mql получать температуру карты (да и CPU тоже), чтоб нагрузку дозировать.
// А то я тут не на шутку разошёлся.. :)
Получение свойств OpenCL объектов будет в ближайшее время.
Проверку хендлов тоже организуем.
1. Нет в OpenCL функционала получить температуру и загрузку GPU.
2. Получение свойств OpenCL объектов будет в ближайшее время.
3. Проверку хендлов тоже организуем.
1. Я знаю. Это не надо через OpenCL, это надо через систему. Идея всего лишь в том, чтоб функционал был нативным (без вызовов DLL из mql5-программ).
Вот есть прекрасные функции:
TerminalInfoInteger
Возвращает значение целого типа соответствующего свойства окружения mql5-программы
TerminalInfoString
Возвращает значение типа string соответствующего свойства окружения mql5-программы
MQL5InfoInteger
Возвращает значение целого типа соответствующего свойства запущенной mql5-программы
MQL5InfoString
Возвращает значение типа string соответствующего свойства запущенной mql5-программы
Замечательно и логично было бы к ним добавить:
SystemInfoInteger и, соответственно
SystemInfoString
с возможностью получения необходимой информации о системном окружении: кол-во ядер, имя и разрядность операционки, количество памяти (всего), количество доступной (свободной) памяти (ОЗУ и дисковой) и т.д. и т.п.
Всё-таки терминал не в пустом бесконечном пространстве вечности работает. А то как-то уж совсем по песочному получается.
2, 3. Ура.
4. Обязательно сделайте уже нормальное обращение к буферам (cl_Read/WriteBuffer) с указанием обоих стартовых смещений (и смещение mql-массива и смещение в cl-буфере). Иначе приходится дважды копировать почти все массивы. Оно нам надо? Мы ж на OpenCL пишем не для того чтоб терять время на переписывание из пустого в порожнее. Так не честно. :)
...
4. Обязательно сделайте уже нормальное обращение к буферам (cl_Read/WriteBuffer) с указанием обоих стартовых смещений (и смещение mql-массива и смещение в cl-буфере). Иначе приходится дважды копировать почти все массивы. Оно нам надо? Мы ж на OpenCL пишем не для того чтоб терять время на переписывание из пустого в порожнее. Так не честно. :)
Уточни что ты имеешь в виду.
Для чего это нужно, я пока не столкнулся с ситуациями которые ты описуешь.
Уточни что ты имеешь в виду.
Для чего это нужно, я пока не столкнулся с ситуациями которые ты описуешь.
Не вопрос. Вот недавний пример. Построение семейства Ema
Ничего экзотического не требуется. Просто хочу, чтоб как здесь было:
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
Не вопрос. Вот недавний пример. Построение семейства Ema
Ничего экзотического не требуется. Просто хочу, чтоб как здесь было:
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
Ага, я кажется понял, тебя не устраивает усложнение алгоритмов и перерасход памяти от применения
и ты хочешь иметь возможность смещения ещё на этапе копирования.
ЗЫ Чтоб не нужно было копировать 100000 элементов а потом делать 998000 смещение. Но вариант со смещением что есть сейчас нужно оставить тк он позволяет не копировать много раз одни и те же данные, а брать их для новой задачи из уже готового CL буффера с новым смещением.
ЗЫ а ещё хорошо бы иметь возможность дописывать переразбивая размер либо писать поверх часть данных в CL буффер, тогда вновь поступившие данные от тика можно добавить не купирую все данные. В реалтайме это врядли пригодится, а вот в тестере волне.