2026-08-01 11:27:28 -04:00 | | | //+------------------------------------------------------------------+
|
| | | //| Layer.mqh |
|
| | | //| |
|
| | | //| CLayer - neuron container: element construction from a topology |
|
| | | //| descriptor or a .nnw stream. |
|
| | | //| |
|
| | | //| Included from AI\Network.mqh AFTER every class declaration - |
|
| | | //| bodies only, no declarations. Relocation is behaviour-neutral by |
|
| | | //| construction: nothing here is reachable until Network.mqh ends. |
|
| | | //+------------------------------------------------------------------+
|
| | | #ifndef WARRIOR_AI_IMPL_LAYER_MQH
|
| | | #define WARRIOR_AI_IMPL_LAYER_MQH
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | bool CLayer::CreateElementScaled(int index, double weighScale)
|
| | | {
|
| | | if(index >= m_data_max)
|
| | | return false;
|
| | | //---
|
| | | bool result = false;
|
| | | CNeuronBase *temp = NULL;
|
| | | CNeuronPool *temp_p = NULL;
|
| | | CNeuronBaseOCL *temp_ocl = NULL;
|
| | | if(iFileHandle <= 0)
|
| | | {
|
| | | temp = new CNeuron();
|
| | | if(CheckPointer(temp) == POINTER_INVALID || !temp.Init(iOutputs, index, SGD, weighScale))
|
| | | return false;
|
| | | result = true;
|
| | | }
|
| | | else
|
| | | {
|
| | | int type = FileReadInteger(iFileHandle);
|
| | | switch(type)
|
| | | {
|
| | | case defNeuron:
|
| | | temp = new CNeuron();
|
| | | if(CheckPointer(temp) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | result = temp.Init(iOutputs, index, ADAM);
|
| | | break;
|
| | | case defNeuronPool:
|
| | | temp_p = new CNeuronPool();
|
| | | if(CheckPointer(temp_p) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | if(temp_p.Init(iOutputs, index, 1, 1, 1, ADAM))
|
| | | {
|
| | | temp = temp_p;
|
| | | result = true;
|
| | | }
|
| | | break;
|
| | | case defNeuronConv:
|
| | | temp_p = new CNeuronConv();
|
| | | if(CheckPointer(temp_p) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | if(temp_p.Init(iOutputs, index, 1, 1, 1, ADAM))
|
| | | {
|
| | | temp = temp_p;
|
| | | result = true;
|
| | | }
|
| | | break;
|
| | | case defNeuronLSTM:
|
| | | temp_p = new CNeuronLSTM();
|
| | | if(CheckPointer(temp_p) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | if(temp_p.Init(iOutputs, index, 1, 1, 1, ADAM))
|
| | | {
|
| | | temp = temp_p;
|
| | | result = true;
|
| | | }
|
| | | break;
|
| | | case defNeuronBaseOCL:
|
| | | temp_ocl = new CNeuronBaseOCL();
|
| | | if(CheckPointer(temp_ocl) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | //--- Pure-MQL5 inference (no backend): construct host-only. Load() restores the weights into
|
| | | //--- the host buffers and CNeuronBaseOCL::feedForwardCPU() computes on them. The device Init()
|
| | | //--- below REQUIRES a backend, so it only runs when one exists (training/optimization/GPU run).
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | if(CheckPointer(OpenCL) == POINTER_INVALID && CheckPointer(ComputeDll) == POINTER_INVALID)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_ocl;
|
| | | return true;
|
| | | }
|
| | | if(CheckPointer(OpenCL) != POINTER_INVALID
|
| | | ? temp_ocl.Init(iOutputs, index, OpenCL, 1, ADAM)
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | : temp_ocl.Init(iOutputs, index, ComputeDll, 1, ADAM))
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_ocl;
|
| | | return true;
|
| | | }
|
| | | break;
|
| | | case defNeuronConvOCL:
|
| | | {
|
| | | //--- placeholder dims; the real window/step/units are restored by Load() right after
|
| | | CNeuronConvOCL *temp_conv = new CNeuronConvOCL();
|
| | | if(CheckPointer(temp_conv) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | //--- Pure-MQL5 inference (no backend): construct host-only, Load() fills the host buffers,
|
| | | //--- CNeuronConvOCL::feedForwardCPU() computes on them (device Init below needs a backend).
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | if(CheckPointer(OpenCL) == POINTER_INVALID && CheckPointer(ComputeDll) == POINTER_INVALID)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_conv;
|
| | | return true;
|
| | | }
|
| | | if(CheckPointer(OpenCL) != POINTER_INVALID
|
| | | ? temp_conv.Init(iOutputs, index, OpenCL, 1, 1, 1, 1, ADAM)
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | : temp_conv.Init(iOutputs, index, ComputeDll, 1, 1, 1, 1, ADAM))
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_conv;
|
| | | return true;
|
| | | }
|
| | | break;
|
| | | }
|
| | | case defNeuronBatchNormOCL:
|
| | | {
|
| | | //--- Placeholder width of 1; CNeuronBatchNormOCL::Load() replaces both the buffers and the
|
| | | //--- whole gamma/beta/statistics block with the real ones, then verifies they agree.
|
| | | CNeuronBatchNormOCL *temp_bn = new CNeuronBatchNormOCL();
|
| | | if(CheckPointer(temp_bn) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | //--- Pure-MQL5 inference (no backend): construct host-only (see the defNeuronConvOCL note).
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | if(CheckPointer(OpenCL) == POINTER_INVALID && CheckPointer(ComputeDll) == POINTER_INVALID)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_bn;
|
| | | return true;
|
| | | }
|
| | | if(CheckPointer(OpenCL) != POINTER_INVALID
|
| | | ? temp_bn.Init(iOutputs, index, OpenCL, 1, 1, ADAM)
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | : temp_bn.Init(iOutputs, index, ComputeDll, 1, 1, ADAM))
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_bn;
|
| | | return true;
|
| | | }
|
| | | break;
|
| | | }
|
| | | case defNeuronPoolOCL:
|
| | | {
|
| | | CNeuronPoolOCL *temp_pool = new CNeuronPoolOCL();
|
| | | if(CheckPointer(temp_pool) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | //--- Pure-MQL5 inference (no backend): construct host-only (see the defNeuronConvOCL note).
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | if(CheckPointer(OpenCL) == POINTER_INVALID && CheckPointer(ComputeDll) == POINTER_INVALID)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_pool;
|
| | | return true;
|
| | | }
|
| | | if(CheckPointer(OpenCL) != POINTER_INVALID
|
| | | ? temp_pool.Init(iOutputs, index, OpenCL, 1, 1, 1, ADAM)
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | : temp_pool.Init(iOutputs, index, ComputeDll, 1, 1, 1, ADAM))
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_pool;
|
| | | return true;
|
| | | }
|
| | | break;
|
| | | }
|
| | | case defNeuronLSTMOCL:
|
| | | {
|
| | | CNeuronLSTMOCL *temp_lstm = new CNeuronLSTMOCL();
|
| | | if(CheckPointer(temp_lstm) == POINTER_INVALID)
|
| | | {
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | //--- Pure-MQL5 inference (no backend): construct host-only (see the defNeuronConvOCL note).
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | if(CheckPointer(OpenCL) == POINTER_INVALID && CheckPointer(ComputeDll) == POINTER_INVALID)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_lstm;
|
| | | return true;
|
| | | }
|
| | | if(CheckPointer(OpenCL) != POINTER_INVALID
|
| | | ? temp_lstm.Init(iOutputs, index, OpenCL, 1, ADAM)
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | : temp_lstm.Init(iOutputs, index, ComputeDll, 1, ADAM))
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | m_data[index] = temp_lstm;
|
| | | return true;
|
| | | }
|
| | | break;
|
| | | }
|
| | | default:
|
| | | result = false;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if(result)
|
| | | m_data[index] = temp;
|
| | | //---
|
| | | return (result);
|
| | | }
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | CLayer::CLayer(uint outputs = 0, int handle = -1, COpenCLMy *opencl = NULL, CComputeDll *computeDll = NULL)
|
2026-08-01 11:27:28 -04:00 | | | {
|
| | | iOutputs = outputs;
|
| | | iFileHandle = handle;
|
| | | OpenCL = opencl;
|
 refactor(ai): remove the DirectML/D3D12 GPU compute tier (S1.5)
Three backends left, as the operator specified: OpenCL, the CPU DLL,
and pure MQL5. CDirectMLMy was a two-tier wrapper (GPU via
WarriorDML.dll, CPU via WarriorCPU.dll) whose name only ever named the
tier being removed here; the CPU DLL tier - the one actually used on
the training machine (no OpenCL, no DirectML) - is untouched.
AI/NeuronDirectML.mqh -> AI/ComputeDll.mqh: dropped the DML_* #import
block and COMPUTE_TIER_GPU (checked first that nothing persists the
enum value and only one external site reads .Tier() - safe), collapsed
every tier==CPU?CPU_x():DML_x() ternary to a straight CPU_x() call.
Renamed CDirectMLMy->CComputeDll, InitDirectML()->InitComputeDll(),
member directml/DirectML->computeDll/ComputeDll across every AI/ file
that touched a neuron/net backend plus Topology.mqh/OnlineLearning.mqh.
NetBuild.mqh's InitComputeDll also lost the dead D3D12 error-code
switch and the now-impossible GPU-tier log branch.
Verified via per-file brace-balance diff against HEAD and a whole-repo
grep for every removed symbol (CDirectMLMy/InitDirectML/
COMPUTE_TIER_GPU/DML_*) - the only surviving hit is an intentional
historical-note comment in the new file's header.
DirectML\WarriorDML.cpp/.h and its build scripts are now orphaned C++
source, left in place pending an operator decision. Architecture docs
(AI_NETWORK.md, Warrior_EA_System_Overview.md, etc.) still describe the
4-backend/GPU-tier shape and are not updated in this pass.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 19:32:09 -04:00 | | | ComputeDll = computeDll;
|
2026-08-01 11:27:28 -04:00 | | | }
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | bool CLayer::Load(const int file_handle)
|
| | | {
|
| | | iFileHandle = file_handle;
|
| | | if(!CArrayObj::Load(file_handle))
|
| | | return false;
|
| | | // A corrupt/truncated save can produce a 0-element layer here - CArrayObj::Load itself would
|
| | | // still return true for it, so m_data[0] must be guarded before indexing or MQL5 raises an
|
| | | // "array out of range" runtime error that aborts the whole CNet::Load call.
|
| | | if(Total() <= 0 || CheckPointer(m_data[0]) == POINTER_INVALID)
|
| | | {
|
| | | Print(__FUNCTION__ + ": layer loaded with no elements (corrupt or truncated save file)");
|
| | | return false;
|
| | | }
|
| | | //---
|
| | | switch(m_data[0].Type())
|
| | | {
|
| | | case defNeuronBaseOCL:
|
| | | case defNeuronConvOCL:
|
| | | case defNeuronPoolOCL:
|
| | | case defNeuronLSTMOCL:
|
| | | case defNeuronBatchNormOCL:
|
| | | {
|
| | | CNeuronBaseOCL *temp = m_data[0];
|
| | | iOutputs = temp.getConnections();
|
| | | break;
|
| | | }
|
| | | default:
|
| | | {
|
| | | CNeuronBase *temp = m_data[0];
|
| | | iOutputs = temp.getConnections().Total();
|
| | | break;
|
| | | }
|
| | | }
|
| | | //---
|
| | | return true;
|
| | | }
|
| | | #endif
|