Более серьезные не попадались - последнее время использую MQL только лишь как коннектор к современному языку более высокого уровня. К слову сказать компилятор, который я использую - университетский проект - студенты на коленке собрали и за 3 года активного освоения - ни одной ошибки там не встретилось
У нас нет цели копировать C++ Например, препроцессоры clang и MSVC различаются, т.е. можно написать код, который выдавать ошибки в одном компиляторе и успешно компилироваться в другом
Верно, пока не реализовано, работает над этим, но не специально, а врамках другого обновления языка.
По тому что это 2 разных языка. Кто-то из админов уже явно говорил, что нет цели компилировать C++.
Если вы хотите компилировать С++ код, используйте С++ компилятор.
Поэтому я и сказал, что он ерундой занимается. Он не тестирует компилятор. Он пихает С++ код в MQL компилятор и репортит сюда каждый warning.
Человек тупо не может смириться с тем, что для того, что бы использовать C++ наработки на MQL, нужно включать голову, а не бездумно компилировать.
1. Наработки на C++ я подключаю исключительно через .dll
2. Если вам ошибки не попадаются, то это означает лишь то, что вы не используете все возможности MQL - проще говоря: пишете в примитивном стиле
3. То, что пример работает в C++ означает, что оппоненту необходимо критически отнестись к своим аргументам - лишний раз прочесть документацию по MQL. Судя по всему вы тоже ее не читали
4. То что Разработчики не копируют С++ не означает, что уже скопированные конструкции должны работать как то по-другому
5. Модераторам рекомендую банить таких деятелей, которые пишут в этой теме не по сути вопроса, иначе из-за них растеряете всех вменяемых
Я правильно понимаю, что сейчас есть ограничение на размер одного буфера для кода на OpenCL в районе 2 гигабайт?
Вот такой скрипт для теста
//--- COpenCL class#include <OpenCL/OpenCL.mqh>
COpenCL m_OpenCL;
//--- исходные коды кернелов//#resource "Calc_Summ_Stolb_Matrix.cl" as string cl_testerconststring clSrc=
"__kernel void CalcSumm_Stolb_2d(\r\n"" __global uchar *arr_Data,\r\n"" __global int *arr_Tabl_Rez,\r\n"" int Stolb_Total_Data,\r\n"" int Strok_Total_Data\r\n"")\r\n""{\r\n"" int summ_sovpalo=0;\r\n"" int index_i_L=0;\r\n"" int index_i_G=0;\r\n"" int index_L_G=0;\r\n"" int index_G_L=0;\r\n"" size_t L=get_global_id(0);\r\n"" size_t G=get_global_id(1);\r\n""}\r\n";
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---Кернелы OpenCLint index_kernel_CalcSumm_Stolb=0;
//---Инициализация файла с кернеламиPrint("Initialize=",m_OpenCL.Initialize(clSrc,true));
//--- установка количества кернеловPrint("SetKernelsCount=",m_OpenCL.SetKernelsCount(1));
//--- создание кернелов// Print("0 KernelCreate=",m_OpenCL.KernelCreate(index_kernel_CalcSumm_Stolb,"CalcSumm_Stolb_2d"));//--- создание буферов - указать количество буферовPrint("SetBuffersCount=",m_OpenCL.SetBuffersCount(1));
//--- очистим все буферы
m_OpenCL.BufferFree(0);
int arr_Data[];
int Size_arr_Data=268435456/4;
bool Rez_Copy=false;
for(int i=0; i<150; i++)
{
ArrayResize(arr_Data,Size_arr_Data*(i+1));
Rez_Copy=m_OpenCL.BufferFromArray(0,arr_Data,0,Size_arr_Data*(i+1),CL_MEM_READ_WRITE);
Print("Копируем в буфер на GPU, массив размером ",IntegerToString((i+1)*250,0,'0')," MB=",Rez_Copy);
if(Rez_Copy==false)
{
PrintFormat("Error in BufferFromArray. Error code=%d",GetLastError());
return;
}
//--- очистим все буферы
m_OpenCL.BufferFree(0);
}
//--- remove OpenCL objects
m_OpenCL.Shutdown();
}
//+------------------------------------------------------------------+
Такой результат:
2023.12.2318:19:36.255 Test_GPU_mem (USDJPY,M1) OpenCL: GPU device 'NVIDIA GeForce GTX 1660 SUPER' selected
2023.12.2318:19:36.257 Test_GPU_mem (USDJPY,M1) Initialize=true2023.12.2318:19:36.257 Test_GPU_mem (USDJPY,M1) SetKernelsCount=true2023.12.2318:19:36.257 Test_GPU_mem (USDJPY,M1) SetBuffersCount=true2023.12.2318:19:36.438 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 250 MB=true2023.12.2318:19:36.924 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 500 MB=true2023.12.2318:19:37.717 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 750 MB=true2023.12.2318:19:38.819 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 1000 MB=true2023.12.2318:19:40.226 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 1250 MB=true2023.12.2318:19:41.940 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 1500 MB=true2023.12.2318:19:44.043 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 1750 MB=true2023.12.2318:19:45.467 Test_GPU_mem (USDJPY,M1) Копируем в буфер на GPU, массив размером 2000 MB=false2023.12.2318:19:45.467 Test_GPU_mem (USDJPY,M1) Error in BufferFromArray. Error code=5112
Планируется ли снятие этого ограничения? Очень нужно мне для машинного обучения.
Помните в MQL-4 была путаница с приоритетом дизъюнкции и конъюнкции? Ее потом устранили а для совместимости добавили директиву Проперти стрикт ?
Не помню - MQL4 не застал
В языке MQL-5 есть более серьезные ошибки...
Более серьезные не попадались - последнее время использую MQL только лишь как коннектор к современному языку более высокого уровня. К слову сказать компилятор, который я использую - университетский проект - студенты на коленке собрали и за 3 года активного освоения - ни одной ошибки там не встретилось
Ошибка при компиляции:
Правильно. Вы пытаетесь обратиться к ch как к статическому элементу без объекта. Отсюда и ошибка. В вашем случае:
Но тогда ch будет общий на все объекты S.
Правильно. Вы пытаетесь обратиться к ch как к статическому элементу без объекта. Отсюда и ошибка. В вашем случае:
Но тогда ch будет общий на все объекты S.
А в С++ почему все работает!? Разберитесь в примере для начала
А в С++ почему все работает!? Разберитесь в примере для начала
По тому что это 2 разных языка. Кто-то из админов уже явно говорил, что нет цели компилировать C++.
Если вы хотите компилировать С++ код, используйте С++ компилятор.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Sergey Gridnev, 2023.12.12 15:49
Он тестированием компилятора занимается.Поэтому я и сказал, что он ерундой занимается. Он не тестирует компилятор. Он пихает С++ код в MQL компилятор и репортит сюда каждый warning.
Человек тупо не может смириться с тем, что для того, что бы использовать C++ наработки на MQL, нужно включать голову, а не бездумно компилировать.
Кто-то из админов уже явно говорил, что нет цели компилировать C++.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления
Ilyas, 2023.11.23 12:02
У нас нет цели копировать C++
Например, препроцессоры clang и MSVC различаются, т.е. можно написать код, который выдавать ошибки в одном компиляторе и успешно компилироваться в другом
Верно, пока не реализовано, работает над этим, но не специально, а врамках другого обновления языка.
По тому что это 2 разных языка. Кто-то из админов уже явно говорил, что нет цели компилировать C++.
Если вы хотите компилировать С++ код, используйте С++ компилятор.
Поэтому я и сказал, что он ерундой занимается. Он не тестирует компилятор. Он пихает С++ код в MQL компилятор и репортит сюда каждый warning.
Человек тупо не может смириться с тем, что для того, что бы использовать C++ наработки на MQL, нужно включать голову, а не бездумно компилировать.
1. Наработки на C++ я подключаю исключительно через .dll
2. Если вам ошибки не попадаются, то это означает лишь то, что вы не используете все возможности MQL - проще говоря: пишете в примитивном стиле
3. То, что пример работает в C++ означает, что оппоненту необходимо критически отнестись к своим аргументам - лишний раз прочесть документацию по MQL. Судя по всему вы тоже ее не читали
4. То что Разработчики не копируют С++ не означает, что уже скопированные конструкции должны работать как то по-другому
5. Модераторам рекомендую банить таких деятелей, которые пишут в этой теме не по сути вопроса, иначе из-за них растеряете всех вменяемых
Если offsetof работает, значит и sizeof должен работать в этом же контексте.
Это помимо того что написано про sizeof в Документации
Уважаемые разработчики MT5!
Я правильно понимаю, что сейчас есть ограничение на размер одного буфера для кода на OpenCL в районе 2 гигабайт?
Вот такой скрипт для теста
Такой результат:
Планируется ли снятие этого ограничения? Очень нужно мне для машинного обучения.