Initialisiert OpenCL immer den Gerätespeicher?

8

Ich habe festgestellt, dass oft global und constant Gerätespeicher auf 0 initialisiert wird. Ist das eine universelle Regel? Ich konnte im Standard nichts finden.

    
1'' 29.08.2013, 02:13
quelle

2 Antworten

9

Nein, tut es nicht. Zum Beispiel hatte ich diesen kleinen Kernel, um atomare hinzuzufügen:

%Vor%

Aufruf mit diesem Hostcode (pyopencl + unittest):

%Vor%

gab immer den korrekten Wert zurück, wenn meine CPU verwendet wurde. Bei einer ATI HD 5450 war der zurückgegebene Wert jedoch immer Junk.

Und wenn ich mich recht erinnere, gab der erste Lauf bei einer NVIDIA den richtigen Wert zurück, also 16, aber für den folgenden Lauf waren die Werte 32, 48 usw. Er verwendete den gleichen Ort immer noch mit dem alten Wert dort gespeichert.

Wenn ich meinen Host-Code mit dieser Zeile korrigiert habe (den Wert 0 in den Puffer kopieren):

%Vor%

Auf allen Geräten hat alles funktioniert.

    
CaptainObvious 29.08.2013, 08:57
quelle
1

Soweit ich weiß, gibt es im Standard keinen Satz, der dies sagt. Vielleicht machen einige Treiber-Implementierungen das automatisch, aber Sie sollten sich nicht darauf verlassen.

Ich erinnere mich, dass ich einmal einen Fall hatte, in dem ein Puffer nicht auf 0 initialisiert wurde, aber ich kann mich nicht an die Einstellungen von "OS + Treiber" erinnern.

Wahrscheinlich passiert, dass das typische Betriebssystem nicht einmal 1% des Speicherbedarfs für Geräte von heute verwendet. Wenn Sie also eine OpenCL starten, besteht eine große Wahrscheinlichkeit, dass Sie in eine leere Zone fallen.

    
DarkZeros 29.08.2013 08:28
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ASP.NET MVC, Schichten, Modelle, Repositories etc ___ qstntxt ___

Ich habe einige Fragen nach dem Lesen eines Artikels namens %code% ( Ссылка ).

Zum Beispiel habe ich eine ASP.NET MVC-Anwendung. In meiner Anwendung habe ich einige Entitäten (Modelle), Repositories, UnitOfWork und DbContext. Und einige Ansichten und Controller.

Wie teilt man sie gemäß einem Artikel oben in Schichten auf?

Soweit ich weiß, befinden sich Views und (möglicherweise) Controller in einer Präsentationsschicht. Entitäten (Modelle) in Business Layer und Repositories, UnitOfWork und DbContext in Data Layer.

Bin ich richtig oder falsch? Ich bin mir sehr, sehr unsicher.

Vielen Dank im Voraus!

    
___ tag123aspnetmvc ___ Das ASP.NET MVC Framework ist ein Open-Source-Webanwendungs-Framework und -Tooling, das eine auf Web-Anwendungen zugeschnittene Version des Model-View-Controller (MVC) -Musters implementiert und auf einer ASP.NET-Technologiegrundlage aufbaut. ___ answer18599976 ___

Wie die Ebenen getrennt werden, hängt vom Umfang Ihrer Anwendung ab. Für einen kleinen Bereich können Bereiche ausreichen. Für ein größeres Projekt oder ein Projekt, das möglicherweise groß wird, sollten Sie separate Lösungen für jede Ebene erstellen. Dies wird als n-Tier-Ansatz bezeichnet und ist zu sehen, wenn man sich das ausgezeichnete Beispiel in Ссылка ansieht.

    
___ tag123entityframework ___ Bei Fragen zum ADO.NET Entity Framework die Object-Relational-Mapping (ORM) -Tools für das .NET Framework. Fügen Sie gegebenenfalls auch ein versionsspezifisches Tag hinzu. ___ answer18600365 ___
  • Anzeigen von Modellen / Ansichten / Controllern - Präsentationsebene
  • Entitäten - Geschäftsschicht

Das Repository vermittelt zwischen der Datenquellenebene und den Business-Schichten der Anwendung

Der DbContext Stellt eine Kombination der Unit-Of-Work- und Repository-Patterns . Wenn Sie also ein Repository und eine Arbeitseinheit darüber implementieren, können Sie Folgendes in Erwägung ziehen: Begrenzen Sie Ihre Abstraktionen . (Dieser letzte Punkt trifft möglicherweise nicht in Ihrem Fall zu, könnte ich nicht sagen, ohne mehr über Ihr Design zu wissen).

    
___ answer18599925 ___

Ansichten und Controller sollten sich in der Präsentationsebene befinden. Ihre Modelle sollten sich auch in der Präsentationsebene befinden. Modelle spiegeln ein Ansichtsmodell wider, das nur für die Präsentation verwendet wird. Entitäten sollten Daten darstellen und nicht an die View gesendet werden. In der späteren Präsentation sollten die Modelle von den Entitäten ausgefüllt werden. Sie haben Recht, dass Ihr DbContext und UnitOfWork in der Datenschicht sein sollte.

    
___ answer18600048 ___

Entity Framework-Entitäten (zusammen mit dem Framework) sind Ihre Datenschicht. In vielen Anwendungen werden sie auch Teil Ihrer Business-Schicht - und es ist fraglich, ob das gut ist oder nicht (ich persönlich mag das nicht, aber wenn Sie es mit dem Repository-Modell abstrahieren, gibt es ein gutes Argument, dass Sie verlieren einige der Vorteile von EF).

Abhängig davon, wie Sie Ihren Code trennen (und es klingt, als würden Sie das Repository-Muster verwenden), verfügen Sie möglicherweise über Repositories mit Geschäftslogik oder über eine Services-Schicht (meine bevorzugte Einstellung für 3-Tier-Anwendungen) Logik (meistens) passiert.

Ich würde argumentieren, dass Sie sowohl View Models als auch einen Teil Ihres Präsentationsmodells betrachten sollten. Wenn Sie jedoch MVC und Datenanmerkungen (die für diesen Job hervorragend sind) verwenden, um Ihr Modell zu validieren, haben Sie gerade eine Menge angehäuft der Geschäftslogik in ihnen.

Der wichtigste Ort, an dem sich Business-Logik nicht einschleichen kann, ist Ihre Präsentationsebene und vor allem Ihre Ansichten und Controller. Der Ansatz, wie Sie den Rest Ihrer Anwendung strukturieren, hängt stark von dem von Ihnen gewählten Framework, der Größe Ihrer Anwendung und der Bereitstellungsstruktur der Anwendung ab.

Um so klar wie möglich zu sein, ist dies das, was ich mache *:

Ansichten & lt; - Nur Präsentationsschicht

Controller & lt; - Nur Präsentationsschicht (kann in einigen Fällen zu leicht "fettem" Controller führen, z. B. Anmeldung bei .NET-Mitgliedschaft)

Modelle anzeigen & lt; - Präsentationsebene, aber wenn hier Prüfungen durchgeführt werden, werden häufig auch Geschäftsregeln getestet.

Serviceebene & lt; - Geschäftslayer, falls verwendet

Repositories & lt; - Kann nur die Datenebene oder eine Mischung aus Business-Ebene sein. Wenn Sie das Repository-Muster verwenden, versuchen Sie, Ihre DbSets nicht direkt verfügbar zu machen, da dies die Abstraktion, die Sie versuchen zu verhindern, sofort zunichtemacht (mögliche Ausnahmen dafür, z. B. - .Net-Mitgliedschaft)

Entitäten & lt; - Datenschicht, möglicherweise auch mit Geschäftslogik, abhängig davon, wie Sie Ihre Anwendung strukturieren.

* Nicht als autoritativ gelten

    
___