А ну и OpenCLABCBase
надо указать в uses
.
А ошибку точно ту же выдаёт?
А ну и OpenCLABCBase
надо указать в uses
.
А ошибку точно ту же выдаёт?
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCL.pas:строка 5319
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2057
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2123
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2906
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2909
в OpenCLABCBase.SimpleSyncQueueArray`1.InvokeImpl(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 3099
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2905
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2909
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4570
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4675
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4678
в 2D.Program.$Main() в C:\Users\Миша\Downloads\Симуляция тепла\2D.pas:строка 73
в 2D.Program.Main()
Вроде та же
По моему вы запускаете не тот же код что дали тут.
SimpleSyncQueueArray
это тип очереди, который получается при сложении нескольких очередей (в том числе с помощью CombineSyncQueue
).
И вместо CLTaskResLess
был бы CLTask`1
, если бы вы передавали в SyncInvoke
результат .AddExec2
.
Это был изначальный код. Вот ошибка тестовой версии:
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCL.pas:строка 5319
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2057
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2123
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2906
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2909
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4570
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4675
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4678
в 2DTest.Program.$Main() в C:\Users\Миша\Downloads\Симуляция тепла\2DTest.pas:строка 27
в 2DTest.Program.Main()
Только в минимальном коде и тестируйте, весь смысл этого кода - ограничить ошибку которую вы получаете от всего остального кода, чтоб легче было понять что именно к ней приводит.
Давайте попробуем ядерный вариант… Залезьте в CommandQueue<T>.Invoke
и влепите следующее:
Writeln(self.GetType);
EventDebug.ReportRefCounterInfo;
Readln;
Прямо перед последней строчкой, то есть перед AttachCallback
.
Затем запустите и медленно (раз в секунду) тыкайте Enter, пока ошибка не выпадет снова. И посылайте всё что попадёт в вывод.
OpenCLABCBase.ConstQueue`1[System.Double[,]]
========================================
OpenCLABCBase.BufferCommandQueue
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0553328 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:03.1681703 | Released when: last ev of CLTask, together with evs: cl_event[479826992]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0553328 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:03.1681703 | Released when: last ev of CLTask, together with evs: cl_event[479826992]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0553328 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:03.1681703 | Released when: last ev of CLTask, together with evs: cl_event[479826992]
------------------------------
Logging state change of cl_event[479838432]
1 | 00:00:07.9125960 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:07.9136295 | Retained when: Tracking state change
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0553328 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:03.1681703 | Released when: last ev of CLTask, together with evs: cl_event[479826992]
------------------------------
Logging state change of cl_event[479838432]
1 | 00:00:07.9125960 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:07.9136295 | Retained when: Tracking state change
2 | 00:00:07.9172604 | State changed when: Set to COMPLETE
1 | 00:00:07.9173986 | Released when: Finished tracking state change
------------------------------
========================================
OpenCLABCBase.KernelCommandQueue
Logging state change of cl_event[479826992]
1 | 00:00:00.0008398 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0553328 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:03.1681703 | Released when: last ev of CLTask, together with evs: cl_event[479826992]
------------------------------
Logging state change of cl_event[479838432]
1 | 00:00:07.9125960 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:07.9136295 | Retained when: Tracking state change
2 | 00:00:07.9172604 | State changed when: Set to COMPLETE
1 | 00:00:07.9173986 | Released when: Finished tracking state change
------------------------------
Logging state change of cl_event[479838800]
1 | 00:00:11.2890673 | Retained when: Created for abortability of EventList.Combine of: cl_event[479838432]
1 | 00:00:11.2893235 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
Logging state change of cl_event[479839168]
1 | 00:00:11.2916428 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on [cl_event[479838432] cl_event[479838800]]
2 | 00:00:11.2916576 | Retained when: Tracking state change
------------------------------
========================================
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event)
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err)
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err)
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev)
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev)
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c)
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q)
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q)
в 2DTest.Program.$Main()
в 2DTest.Program.Main()
Кхм, ок, задержка немного не там… Тогда замените те 3 строчки на это:
Writeln(self.GetType);
Sleep(1000);
EventDebug.ReportRefCounterInfo;
И, конечно, опять скиньте всё что выведет.
OpenCLABCBase.ConstQueue`1[System.Double[,]]
========================================
OpenCLABCBase.BufferCommandQueue
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245728 | Released when: last ev of CLTask, together with evs: cl_event[481072176]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245728 | Released when: last ev of CLTask, together with evs: cl_event[481072176]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245728 | Released when: last ev of CLTask, together with evs: cl_event[481072176]
------------------------------
Logging state change of cl_event[481081600]
1 | 00:00:03.1195387 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.1205947 | Retained when: Tracking state change
2 | 00:00:03.1250737 | State changed when: Set to COMPLETE
1 | 00:00:03.1252816 | Released when: Finished tracking state change
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245728 | Released when: last ev of CLTask, together with evs: cl_event[481072176]
------------------------------
Logging state change of cl_event[481081600]
1 | 00:00:03.1195387 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.1205947 | Retained when: Tracking state change
2 | 00:00:03.1250737 | State changed when: Set to COMPLETE
1 | 00:00:03.1252816 | Released when: Finished tracking state change
------------------------------
========================================
OpenCLABCBase.KernelCommandQueue
Logging state change of cl_event[481072176]
1 | 00:00:00.0005260 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0272097 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245728 | Released when: last ev of CLTask, together with evs: cl_event[481072176]
------------------------------
Logging state change of cl_event[481081600]
1 | 00:00:03.1195387 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.1205947 | Retained when: Tracking state change
2 | 00:00:03.1250737 | State changed when: Set to COMPLETE
1 | 00:00:03.1252816 | Released when: Finished tracking state change
------------------------------
Logging state change of cl_event[481084032]
1 | 00:00:05.1982150 | Retained when: Created for abortability of EventList.Combine of: cl_event[481081600]
1 | 00:00:05.1986451 | StateНеобработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCL.pas:строка 5319
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2072
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_comm changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
Logging state change of cl_event[481084304]
1 | 00:00:05.2051949 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on [cl_event[481081600] cl_event[481084032]]
2 | 00:00:05.2052125 | Retained when: Tracking state change
2 | 00:00:05.2980747 | State changed when: Set to COMPLETE
1 | 00:00:05.2980796 | Released when: Finished tracking state change
------------------------------
========================================
and_queue& cq, String reason, Boolean save_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2137
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2930
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2934
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4608
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4714
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4718
в 2DTest.Program.$Main() в C:\Users\Миша\Downloads\Симуляция тепла\2DTest.pas:строка 27
в 2DTest.Program.Main()
А и, на всяк, скиньте .cl файл как он у вас сейчас расписан. Вроде я его не менял после того как кинул (кроме #pragma
сегодня), ну мало ли…
Так а второй AddExec2
вы всё ещё не убрали, получается? Он мешается, потому что в логах выглядит очень похоже на первый. Уберите его и киньте вывод ещё раз. И ту вставку ещё немного поправьте:
Writeln(self.GetType);
Sleep(500);
EventDebug.ReportRefCounterInfo;
Sleep(500);
Так текст ошибки не должно накладывать поверх вывода…
#pragma OPENCL EXTENSION cl_khr_fp64: enable
#define ValAt(B,X,Y) (B)[(X) + (Y)*W]
__kernel void CalcTick(__global double* B, __global double* BRes, int W)
{
int X = get_global_id(0);
int Y = get_global_id(1);
int c = 1;
double sum = ValAt(B, X,Y);
if (X != 0) { c++; sum += ValAt(B, X-1,Y-0); }
if (Y != 0) { c++; sum += ValAt(B, X-0,Y-1); }
if (X != W-1) { c++; sum += ValAt(B, X+1,Y+0); }
if (Y != W-1) { c++; sum += ValAt(B, X+0,Y+1); }
ValAt(BRes, X,Y) = sum / c;
}
OpenCLABCBase.ConstQueue`1[System.Double[,]]
========================================
OpenCLABCBase.BufferCommandQueue
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0739697 | Released when: last ev of CLTask, together with evs: cl_event[482579504]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0739697 | Released when: last ev of CLTask, together with evs: cl_event[482579504]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0739697 | Released when: last ev of CLTask, together with evs: cl_event[482579504]
------------------------------
Logging state change of cl_event[482591072]
1 | 00:00:03.2240561 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.2251483 | Retained when: Tracking state change
2 | 00:00:03.2291303 | State changed when: Set to COMPLETE
1 | 00:00:03.2293602 | Released when: Finished tracking state change
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0739697 | Released when: last ev of CLTask, together with evs: cl_event[482579504]
------------------------------
Logging state change of cl_event[482591072]
1 | 00:00:03.2240561 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.2251483 | Retained when: Tracking state change
2 | 00:00:03.2291303 | State changed when: Set to COMPLETE
1 | 00:00:03.2293602 | Released when: Finished tracking state change
------------------------------
========================================
OpenCLABCBase.KernelCommandQueue
Logging state change of cl_event[482579504]
1 | 00:00:00.0005743 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0508939 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0739697 | Released when: last ev of CLTask, together with evs: cl_event[482579504]
------------------------------
Logging state change of cl_event[482591072]
1 | 00:00:03.2240561 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.2251483 | Retained when: Tracking state change
2 | 00:00:03.2291303 | State changed when: Set to COMPLETE
1 | 00:00:03.2293602 | Released when: Finished tracking state change
------------------------------
Logging state change of cl_event[482591344]
1 | 00:00:05.3136505 | Retained when: Created for abortability of EventList.Combine of: cl_event[482591072]
1 | 00:00:05.3140855 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
Logging state change of cl_event[482591712]
1 | 00:00:05.3167510 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on [cl_event[482591072] cl_event[482591344]]
2 | 00:00:05.3167625 | Retained when: Tracking state change
2 | 00:00:05.3175886 | State changed when: Set to COMPLETE
1 | 00:00:05.3175941 | Released when: Finished tracking state change
------------------------------
========================================
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCL.pas:строка 5319
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2072
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2137
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2931
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2935
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4609
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4715
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4719
в 2DTest.Program.$Main() в C:\Users\Миша\Downloads\Симуляция тепла\2DTest.pas:строка 27
в 2DTest.Program.Main()
AddExec2
-ов в логах всё ещё 2 шт. Вы точно второй убрали?
Да, забыл
OpenCLABCBase.ConstQueue`1[System.Double[,]]
========================================
OpenCLABCBase.BufferCommandQueue
Logging state change of cl_event[481531072]
1 | 00:00:00.0004613 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0269925 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481531072]
1 | 00:00:00.0004613 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0269925 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245634 | Released when: last ev of CLTask, together with evs: cl_event[481531072]
------------------------------
========================================
OpenCLABCBase.ConstQueue`1[System.Int32]
Logging state change of cl_event[481531072]
1 | 00:00:00.0004613 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0269925 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245634 | Released when: last ev of CLTask, together with evs: cl_event[481531072]
------------------------------
========================================
OpenCLABCBase.KernelCommandQueue
Logging state change of cl_event[481531072]
1 | 00:00:00.0004613 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0269925 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:01.0245634 | Released when: last ev of CLTask, together with evs: cl_event[481531072]
------------------------------
Logging state change of cl_event[481542496]
1 | 00:00:03.0798821 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:03.0810280 | Retained when: Tracking state change
2 | 00:00:03.0848762 | State changed when: Set to COMPLETE
1 | 00:00:03.0850599 | Released when: Finished tracking state change
------------------------------
Logging state change of cl_event[481543488]
1 | 00:00:03.0827066 | Retained when: Created for abortability of QueueRes with .ev: cl_event[481542496]
1 | 00:00:03.1009452 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
========================================
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCL.pas:строка 5319
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2072
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2137
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2931
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 2935
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4609
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4715
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q) в C:\Users\Миша\Downloads\Симуляция тепла\OpenCLABCBase.pas:строка 4719
в 2DTest.Program.$Main() в C:\Users\Миша\Downloads\Симуляция тепла\2DTest.pas:строка 27
в 2DTest.Program.Main()
Мда, я всё ещё ничего не понимаю. Вроде всё правильно, так же как у меня. Но потом AccessViolationException
на ровном месте. Давайте пробовать по-другому:
Всё кроме Writeln(self.GetType);
вырежьте и перенесите в EventList.ToMarker
, прямо перед строчкой с cl.EnqueueMarkerWithWaitList
.
Добавьте после этих строчек и перед cl.EnqueueMarkerWithWaitList
следующее:
var ref_c: cardinal := -1;
Writeln('cq:');
cl.GetCommandQueueInfo(cq, CommandQueueInfo.QUEUE_REFERENCE_COUNT, new UIntPtr(sizeof(cardinal)), ref_c, IntPtr.Zero);
Writeln(ref_c);
self.evs.Take(self.count).Println;
for var i := 0 to self.count-1 do
begin
ref_c := -1;
Writeln($'{self.evs[i]}:');
cl.GetEventInfo(self.evs[i], EventInfo.EVENT_REFERENCE_COUNT, new UIntPtr(sizeof(cardinal)), ref_c, IntPtr.Zero);
Writeln(ref_c);
end;
OpenCLABCBase.ConstQueue`1[System.Double[,]]
OpenCLABCBase.BufferCommandQueue
OpenCLABCBase.ConstQueue`1[System.Int32]
OpenCLABCBase.ConstQueue`1[System.Int32]
OpenCLABCBase.KernelCommandQueue
Logging state change of cl_event[480089136]
1 | 00:00:00.0004147 | Retained when: Created for BackgroundWork, executing blocking enq of OpenCLABCBase_implementation______.BufferCommandWriteArray2AutoSize`1[System.Double], ev_l2 = [], after waiting on:
1 | 00:00:00.0351831 | State changed when: Status of user ev set[it's True] to COMPLETE
0 | 00:00:00.0427587 | Released when: last ev of CLTask, together with evs: cl_event[480089136]
------------------------------
Logging state change of cl_event[480103840]
1 | 00:00:00.0999594 | Retained when: Enq by OpenCLABCBase_implementation______.KernelCommandExec2, waiting on []
2 | 00:00:00.1008015 | Retained when: Tracking state change
2 | 00:00:00.1042887 | State changed when: Set to COMPLETE
1 | 00:00:00.1044368 | Released when: Finished tracking state change
------------------------------
Logging state change of cl_event[480104832]
1 | 00:00:00.1036540 | Retained when: Created for abortability of QueueRes with .ev: cl_event[480103840]
1 | 00:00:00.1204817 | State changed when: Status of user ev set[it's True] to COMPLETE
------------------------------
========================================
cq:
1
cl_event[480103840] cl_event[480104832]
cl_event[480103840]:
11
cl_event[480104832]:
11
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в OpenCL.cl.z_EnqueueMarkerWithWaitList_ovr_0(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event& event_wait_list, cl_event& event)
в OpenCL.cl.EnqueueMarkerWithWaitList(cl_command_queue command_queue, UInt32 num_events_in_wait_list, cl_event[] event_wait_list, cl_event& event)
в OpenCLABCBase.EventList.ToMarker(cl_context c, cl_device_id dvc, cl_command_queue& cq, Boolean expect_smart_status_err)
в OpenCLABCBase.EventList.AttachCallback(Action work, CLTaskBase tsk, cl_context c, cl_device_id dvc, cl_command_queue& cq, String reason, Boolean save_err)
в OpenCLABCBase.CommandQueue`1.Invoke(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev)
в OpenCLABCBase.CommandQueue`1.InvokeBase(CLTaskBase tsk, Context c, cl_device_id main_dvc, Boolean need_ptr_qr, cl_command_queue& cq, EventList prev_ev)
в OpenCLABCBase_implementation______.CLTaskResLess..ctor(CommandQueueBase q, Context c)
в OpenCLABCBase.Context.BeginInvoke(CommandQueueBase q)
в OpenCLABCBase.Context.SyncInvoke(CommandQueueBase q)
в 2DTest.Program.$Main()
в 2DTest.Program.Main()
Проблема вообще не в текущих объектах, а чём то пока что за гранью человеческого (по крайней мере моего) понимания…
Какая у вас видеокарта? (то есть кто производитель, NVidia, AMD, INTEL и т.п.)
И вы уверены что у вас последняя версия драйверов видеокарты (они так же много где называются графическими драйверами)?
Да и ещё, будет очень тупо если сработает, но попробуйте в любом месте основной программы воткнуть {$platformtarget x86}
.
С директивой ошибка всё равно появляется
Ого, ещё с 2012 года… Вот эта страница может подобрать вам нужный драйвер для вашей видеокарты.
Альтернативно - можно поставить GeForce Experience, он вам автоматом будет драйвера обновлять (и даст ещё пару плюшек нвидии, как Alt+Z). Я у себя поставил на скачивать автоматом и затем спрашивать когда применить обновление.
Стоит, да и дрова недавно ручками скачивал
Самое молодое из имеющегося