Çaydanlıktan gelen sorular - sayfa 127

 
Renat :

Sevgili, bağlamı takip et.

1) Kontrollü ve güvenli bir ortamdan tamamen kontrolsüz bir ham arabelleğe atladığınızda, o ikili ortamla uyumluluktan siz sorumlusunuz.

2) Kod yazdığınızda, bu kodun mimarisinden siz sorumlusunuz. Ve farklı yapılar kullanırken "bir atı ve titreyen bir geyiği tek bir arabaya dizmek zordur" diye ağlamayın.

3) CLBufferRead ve CLBufferWrite açıklamalarını okumanızı tavsiye ederim - evrensel void* referansı nedeniyle, herhangi bir referans türünü OpenCL'ye aktarmak mümkündür. Ve yer değiştirmeler ve boyutlar var.

1. Bu sorumluluğa hazırım. // hayali bir kravat ayarlamak ve kahkahaları zar zor tutmak.

2. Ağlamıyorum. Dilde zaten var gibi görünen kendi iki-üç boyutlu dizilerinizi yazmak aptalca. Ve zorunda.

3. Kontrol edeceğim. Eski sürümde, iki boyutlu bir diziyi geçmek ÇALIŞMAZ. Eski günlerin hatırına yenisinde denemedim.

// Ve ArrayCopy() içinde, boşluğunuz da orada görünüyor, ancak peluş ve yalnızca dizinin türü için geçerli, boyut için geçerli değil.

Üçüncü noktayı kontrol etmeye gittim.

 

Ağlıyorsunuz, aynı zamanda eksikliklerimiz için bizi suçluyorsunuz. Yani palyaçoya gerek yok.

Çok boyutlu diziler hakkında:

  • çok boyutlu diziler çalışır
  • OOP kullan, dizileri sınıfların içinde tut/gizle
  • çok boyutlu dizileri parametre olarak daha az akılsızca geçirme
  • yapıları aktif olarak kullanın - hayatı ve kontrolü birçok kez kolaylaştırır, karmaşıklığı azaltır
Hemen daha kolay ve daha doğru hale gelecektir.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Renat :

Ağlıyorsunuz, aynı zamanda eksikliklerimiz için bizi suçluyorsunuz. Yani palyaçoya gerek yok.

Çok boyutlu diziler hakkında:

  • çok boyutlu diziler çalışır
  • OOP kullan, dizileri sınıfların içinde tut/gizle
  • çok boyutlu dizileri parametre olarak daha az akılsızca geçirme
  • yapıları aktif olarak kullanın - hayatı ve kontrolü birçok kez kolaylaştırır, karmaşıklığı azaltır
Hemen daha kolay ve daha doğru hale gelecektir.

Yukarıdakilerin hepsini yapıyorum. Ve memnuniyetsizlik haklıydı, çünkü (örneğin) bu kod önceki sürümde çalışmadı:

 void gpuCalculate()
  {
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {nets[i*CountInd+j]=NETs[i][j];}}
//   CLBufferWrite(cl_Mem_NET,nets);
   CLBufferWrite(cl_Mem_NET,NETs);
   CLExecute(cl_Krn, 1 ,Offs,Works);
   CLBufferRead(cl_Mem_Result,Result);
//   CLBufferRead(cl_Mem_NET,nets);
   CLBufferRead(cl_Mem_NET,NETs);
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {NETs[i][j]=nets[i*CountInd+j];}}
  }

Ve her işlem döngüsünde fazladan diziyi iki kez yeniden yazmak zorunda kaldım (yorumlanmış koda bakın)

Başka bir versiyonda, kendi sanal nesne dizimi yaptım (tıpkı Nikolai'ninki gibi), ama aynı zamanda (özellikle genetik reçete yazarken) kullanımı hantal - işlevsel sözdizimi bazı yerlerde yorucu.

Şimdi kod çalışıyor, iki boyutlu dizi aslında ara belleğe yazılmış. Bu bir ilerlemedir. :)

Tamam, Barış, Dostluk, Sakız... :) Operatör yüklemesi yaparsan, sözdizimini kendim düzeltirim.

 
Operatör aşırı yüklemesi zaten yapıldı, bir sonraki derlemede mevcut olacak.
 
Renat :
Operatör aşırı yüklemesi zaten yapıldı, bir sonraki derlemede mevcut olacak.

Vay !! Bu beni mutlu etti.

Bunun için tüm geliştirme ekibine çok teşekkürler!

Artık gerçekten güzel kodlar yazmak mümkün olacak.

 
Renat :
Operatör aşırı yüklemesi zaten yapıldı, bir sonraki derlemede mevcut olacak.

Neden bu kadar küçük harfler? retorik soru

böyle daha iyi:



Перегрузку операторов уже сделали, будет доступно в следующем билде.



 

Operatör aşırı yüklenmesi benim için yeni. Burada ayrıntılı bir açıklama buldum: http://programmersclub.ru/24/

Budur?

Уроки по С++, Урок 24. Перегрузка операторов
  • www.programmersclub.ru
Как вы уже знаете, тип переменной определяет набор значений, которые она может хранить, а также набор операций, которые можно выполнять над этой переменной. Например, над значением переменной типа int ваша программа может выполнять сложение, вычитание, умножение и деление. С другой стороны, использование оператора плюс для сложения двух строк...
 
tol64 :

Operatör aşırı yüklenmesi benim için yeni. Burada ayrıntılı bir açıklama buldum: http://programmersclub.ru/24/

Budur?

Evet öyle.
 
Urain :

Neden bu kadar küçük harfler? retorik soru. böyle daha iyi:



Перегрузку операторов уже сделали, будет доступно в следующем билде.




Evet, çok ciddi bir yapı olacak.

:)

 
Renat :

Korkarım ki açıklamanın tesadüfünü fark etmek istemediniz:

typedef Int8 = int [ 8 ];
struct    Int8 { int arr[ 8 ]; };

İkinci seçenek çok daha temiz, daha güçlü ve daha kontrol edilebilir. Mevcut yöntemle daha zayıf başka bir varlık icat etmek için hiçbir neden yoktur.

Açıklamanın ikinci versiyonu sorun değil. Sorun, sözdizimini kullanırken , daha iyisi için değişmemesidir.

Güçlü ve kesinlikle güvenli bir uzlaşma öneriyorum: "varsayılan" alanlar. Varsayılan anahtar sözcük, sözdizimsel anlaşmazlıkları tamamen çözer. :)

Bu durumda.

 struct    Int8 
  { 
    int arr[ 8 ]; default ;
  };

(C++'da var, C#'ta var, Delphi'de var, vb.)

Onlar. böyle bir alana erişirken Int8Var.arr[i] yerine Int8Var[i] yazmanız yeterlidir - derleyici doğru anlayacaktır.

// Ve en önemlisi bunu sadece sınıflar için değil yapılar için de yapmayı unutmayın. :)