Ancora una volta, riguardo al multithreading - pagina 3

 
Renat:

Ti consiglio di rileggere il tuo post originale, fai attenzione a tutti i tuoi epiteti, poi vai sotto alle risposte.

Le risposte sono state date con calma, con alcune domande soft come "Per parallelizzare i calcoli di qualcosa bisogna prima realizzare", poi sono state date le risposte e si è spiegato lo stato attuale delle cose "cosa si dovrebbe veramente parallelizzare".

Ma invece di una rapida curva di apprendimento, hai vomitato altre sciocchezze e ci hai messo i cani addosso. Il risultato fu una risposta dura.

Ok, sono d'accordo con gli epiteti, ho esagerato un po' e me ne scuso. Non ho detto nulla di scortese però, solo una critica troppo emotiva, ma è totalmente inadeguata alla durezza con cui reagisci. Da nessuna parte ho detto che gli sviluppatori sono inutili e non capiscono nulla, quindi non esagerate.

Dal momento che ho tirato fuori questo argomento, sono ben consapevole di ciò per cui è necessario e c'è molto da parallelizzare. Non tutti gli algoritmi si limitano a "hello world!", ce ne sono di molto più complessi e che richiedono risorse. Ecco perché è molto strano sentire tali insegnamenti morali su cosa è necessario parallelizzare e cosa no mentre non si è nemmeno visto l'algoritmo.

Per quanto riguarda l'implementazione del codice nella DLL e l'utilizzo di OpenCL, non ha alcuna rilevanza per MQL. E la domanda riguardava la programmazione in MQL.

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 

OpenCL funziona all'interno del codice MQL5.

Ecco un codice di esempio.

 
meat:

Per quanto riguarda l'implementazione del codice nella DLL, così come l'utilizzo di OpenCL, questo non è più rilevante per MQL. E stavamo parlando di programmazione in MQL.

Ci sono script per il multithreading. E non ne hai bisogno nel tester
 
meat:

E qual è stata la sua risposta? Hai iniziato a dirmi che grande terminale e tester hai, lavorando in più flussi. E non ho detto una parola sul tuo terminale. Intendevo un'altra cosa: il multi-threading nel codice MQL. Quando un algoritmo può essere diviso in più parti, e ogni parte viene eseguita in parallelo. E tu, non avendo nemmeno capito l'argomento, cominci ad essere scortese. Bene, come vedo, con questo approccio non c'è nessun approccio costruttivo, quindi non ha senso continuare la discussione.

Ci sono alcune soluzioni costruttive anche con lo stato attuale delle cose. Diversi programmi mql (Expert Advisors e/o indicatori) possono scambiarsi messaggi, e di conseguenza, compiti e risultati dell'esecuzione dei compiti - naturalmente, se si crea e si organizza un protocollo di scambio appropriato. Tutti gli Expert Advisors lavorano in diversi thread (ognuno nei propri thread), quindi, questo schema di calcoli congiunti è ovviamente multi-threaded e li caricherà abbastanza uniformemente con diversi core.

Uno scambio di messaggi (utilizzando strumenti mql5) è possibile attraverso

1. eventi terminali

2. canali nominati

3. DLL

4. file

5. ecc.

Da questo insieme di strumenti, potete scegliere quello più adatto o usarne più di uno (tutti insieme). Ogni metodo ha i suoi vantaggi e svantaggi, per esempio le pipe denominate permettono di trasferire informazioni sulla rete locale, quindi c'è la possibilità di parallelizzare il compito per più di un processore multi-core.

Buona fortuna.

 
Renat:

OpenCL funziona all'interno del codice MQL5.

Ecco un codice di esempio.

Beh, il fatto che funzioni è metà della battaglia. Ma come modificarlo e debuggarlo dopo? Se è contenuto in una costante di stringa, come cerchereste un errore? Significa che deve essere sviluppato in un programma esterno e poi inserito in MQL. Ma se hai costantemente a che fare con questo tipo di porting, diventerai pazzo, come ho sottolineato nel primo post. Dato che lo sviluppo del codice è comunque fatto altrove, che senso ha mettere tutto in MQL? È più facile compilare come DLL e importarla.

Naturalmente, capisco che lo scopo è quello di creare un codice open source, senza usare nessuna dll auto-scritta. Ma questo è un caso speciale. Di solito il programma è scritto per te stesso e non per gli altri. E poche persone vorrebbero essere costantemente impegnate in manipolazioni senza senso nel trascinare il codice da un programma all'altro.

Ma se si fa un compilatore integrato per tutto questo, è un'altra storia. E a proposito, perché no? Voglio dire, è come una sintassi C lì dentro. Cioè potreste usare tutto questo come parte di un normale codice mql, semplicemente aggiungendo funzioni aggiuntive al vostro MetaEditor. E poi il compilatore formatterebbe il frammento di codice corrispondente in modo appropriato, aggiungendo \r\n, ecc.

 
meat:

Beh, il fatto che funzioni è metà della battaglia. Come si fa a modificarlo e debuggarlo dopo? Se è nella costante di stringa, come possiamo trovare l'errore? Significa che deve essere sviluppato in un programma esterno e poi inserito in MQL. Ma se hai costantemente a che fare con questo tipo di porting, diventerai pazzo, come ho sottolineato nel primo post. Dato che lo sviluppo del codice è comunque fatto altrove, che senso ha mettere tutto in MQL? È più facile compilare come DLL e importarla.

Naturalmente, capisco che lo scopo è quello di creare un codice open source, senza usare nessuna dll auto-scritta. Ma questo è un caso speciale. Di solito il programma è scritto per te stesso e non per gli altri. E poche persone vorrebbero essere costantemente impegnate in manipolazioni senza senso nel trascinare il codice da un programma all'altro.

Ma se si fa un compilatore integrato per tutto questo, è un'altra storia. E a proposito, perché no? Voglio dire, è come una sintassi C lì dentro. Cioè potreste usare tutto questo come parte di un normale codice mql, semplicemente aggiungendo funzioni aggiuntive al vostro MetaEditor. E poi il compilatore formatterebbe il frammento di codice corrispondente in modo appropriato, aggiungendo \r\n, ecc.

Chi vuole, cerca le opportunità. Chi non vuole, ragioni © Proverbio

 
MetaDriver:

Ci sono soluzioni costruttive anche con lo status quo. Diversi programmi mql (esperti e/o indicatori) possono scambiarsi messaggi, e di conseguenza, compiti e risultati dei compiti - naturalmente, se si crea e si organizza un protocollo di scambio appropriato. Tutti gli Expert Advisors lavorano in diversi thread (ognuno nei propri thread), quindi, questo schema di calcoli congiunti è ovviamente multi-threaded e li caricherà abbastanza uniformemente con diversi core.

Uno scambio di messaggi(utilizzando strumenti mql5) è possibile attraverso

1. eventi terminali

2. canali nominati

3. DLL.

4. file

5. ecc.

Da questo insieme di strumenti, potete scegliere quello più adatto o usarne più di uno (tutti insieme). Ogni metodo ha i suoi vantaggi e svantaggi, per esempio le named pipe permettono di trasferire informazioni sulla LAN, quindi c'è la possibilità di parallelizzare il compito per più di un processore multi-core.

Buona fortuna.

Beh, diciamo che non tutti sono strumenti mql5 :) E non si trattava di come risolvere (aggirare) questo problema. Si può sempre trovare un modo per aggirarlo, non c'è dubbio. La domanda è perché non possiamo aggiungere la funzionalità corrispondente a mql5, in modo da non doverla eliminare.

Devi ammettere che non è razionale e affidabile lanciare molti Expert Advisors con grafici appropriati solo per organizzare la loro elaborazione in diversi thread.

 
Poche persone hanno bisogno del multithreading negli indicatori o negli Expert Advisor. E di solito queste persone sono in grado di implementare questo multi-threading da sole, attraverso dll e altre cose.
 
Reshetov:

Chi vuole, cerca delle possibilità. Chi non vuole, le ragioni © Proverbio

Prima di tutto dobbiamo capire la fattibilità :) Intendo la ragionevolezza di usare MQL5 in generale, e MT5, rispettivamente, se vale la pena passare a questa piattaforma. Se, come in MT4, per funzionare correttamente è necessario usare qualche magia, per eseguire diversi EA o per trasferire il codice in DLL, allora non ha senso cambiare un pezzo di merda per un pezzo di merda. Se il codice deve essere scritto in DLL, allora è più facile e sicuro usare una piattaforma con un'API aperta, piuttosto che avere un'imbottitura aggiuntiva sotto forma di un Expert Advisor (e un terminale in esecuzione nel suo complesso).

 
meat:

Prima di tutto dobbiamo capire la fattibilità :) Intendo la ragionevolezza di usare MQL5 in generale, e MT5, rispettivamente, se vale la pena passare a questa piattaforma. Se, come in MT4, per funzionare correttamente è necessario usare qualche magia, per eseguire diversi EA o per trasferire il codice in DLL, allora non ha senso cambiare un pezzo di culo per un pezzo di culo. Se il codice deve essere scritto in DLL, allora è più facile e sicuro usare immediatamente una piattaforma con un'API aperta, piuttosto che avere un'imbottitura aggiuntiva sotto forma di un Expert Advisor (e un terminale in esecuzione nel suo complesso).

Nessuno sta obbligando nessuno a passare a MQL5. Per esempio, mi mancava la funzionalità di MQL4, quindi sono dovuto passare a MQL5.

Per esempio, tutte le funzionalità possono essere implementate in С++ e MQL5 dovrebbe contenere solo la parte esecutiva e il tutto dovrebbe essere legato con un protocollo usando canali denominati. Ci sono molte varianti. Tutto ciò che serve è una forte volontà.

Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • 2012.10.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.
Motivazione: