<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Handhabung sehr großer Datenmengen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>da ich im Moment für die Uni ein OpenCL Programm zur Datenanalyse schreiben muss, muss ich mich tiefer in C++ einarbeiten und hab auch immer wieder mit nicht Standartsachen zu tun.</p>
<p>SDK: VS 2010 Prof (mit leerem Projekt angefangen);</p>
<p>Im Moment dreht sichs um folgendes Problem. Ich muss recht große Datenmengen (ca. 200-600 MB) einlesen und dann an OpenCL weitergeben (daher wenn möglich nur 1D Arrays) zur weiteren Verarbeitung.</p>
<p>Die Daten sollen für weitere Zugriffe und Vergleiche immer im RAM bleiben!</p>
<p>Nun hab ich das Problem, das ich von VS folgende Fehlermeldung bekomm, wenn ich die Arrays initialisiere:</p>
<p>&quot;Unbehandelte Ausnahme bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..&quot;</p>
<p>Eine Ausnahme (erste Chance) bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..<br />
Unbehandelte Ausnahme bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..</p>
<p>Hier der Code-Ausschnitt der relevant ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;vector&gt;
#include &lt;utility&gt;

#define alloca _alloca
#define __NO_STD_VECTOR //Use cl::vektor instead of STL version

#include &lt;functional&gt;
//#include &lt;cstdlib&gt; für rand() eventuell nötig

#include &lt;CL\cl.hpp&gt;
#include &lt;stdio.h&gt;

using namespace std;

.
.
.
const unsigned int xblockSize=64;
const unsigned int xblocks	=5;

const unsigned int yblockSize=64;
const unsigned int yblocks	=5;

const unsigned int xdimension=xblockSize*xblocks;
const unsigned int ydimension=yblockSize*yblocks;

const unsigned int dimension=ydimension*xdimension;

const unsigned int anzahlBilder=1000;

.
.
.
                int * A=new int [ydimension*xdimension*anzahlBilder];
		int * B=new int [ydimension*xdimension*anzahlBilder];
		int * C=new int [ydimension*xdimension*anzahlBilder];
		int * D=new int [ydimension*xdimension*anzahlBilder];
.
.
.
</code></pre>
<p>Die Fehlermeldung taucht auf, sobald C initialisiert wird. Vorher geht noch alles klar.</p>
<p>Ist sicher nur ne Kleinigkeit, aber ich komm wirklich nicht drauf, wie ich vernünftig mit solch großen Arrays umgehen soll.</p>
<p>Fürs erste langen 500MB an Daten aus, also das was oben initialisiert werden soll. Wenn ihr ne Lösung für Arrays mit Daten &gt;1GB habt, bin ich auch sehr aufgeschlossen. Wichtig ist halt nur, das wirklich alles im RAM hab und die Datenpackete nicht kleiner als 100k Einträge haben sollen.</p>
<p>Ich brauch diese Menge, da ich auf mindestens 300*300 Pixel Bildern rumrödeln muss mit verschiedensten Algorithmen, die parallel auf der GPU ausgeführt werden.</p>
<p>EDIT: hab mal noch mit anzahlBilder rumgespielt, unter 800 klappts. Kanns sein das ich Probleme bekomm, weils nur ne 32 bit Anwenung ist, und ich mit dem befüllten RAM dann über 3,2GB komme beim ausführen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274631/handhabung-sehr-großer-datenmengen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 10:27:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274631.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Sep 2010 17:28:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 17:36:26 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>da ich im Moment für die Uni ein OpenCL Programm zur Datenanalyse schreiben muss, muss ich mich tiefer in C++ einarbeiten und hab auch immer wieder mit nicht Standartsachen zu tun.</p>
<p>SDK: VS 2010 Prof (mit leerem Projekt angefangen);</p>
<p>Im Moment dreht sichs um folgendes Problem. Ich muss recht große Datenmengen (ca. 200-600 MB) einlesen und dann an OpenCL weitergeben (daher wenn möglich nur 1D Arrays) zur weiteren Verarbeitung.</p>
<p>Die Daten sollen für weitere Zugriffe und Vergleiche immer im RAM bleiben!</p>
<p>Nun hab ich das Problem, das ich von VS folgende Fehlermeldung bekomm, wenn ich die Arrays initialisiere:</p>
<p>&quot;Unbehandelte Ausnahme bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..&quot;</p>
<p>Eine Ausnahme (erste Chance) bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..<br />
Unbehandelte Ausnahme bei 0x76e5b727 in Differenzbild.exe: Microsoft C++-Ausnahme: std::bad_alloc an Speicherposition 0x0054ef30..</p>
<p>Hier der Code-Ausschnitt der relevant ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;vector&gt;
#include &lt;utility&gt;

#define alloca _alloca
#define __NO_STD_VECTOR //Use cl::vektor instead of STL version

#include &lt;functional&gt;
//#include &lt;cstdlib&gt; für rand() eventuell nötig

#include &lt;CL\cl.hpp&gt;
#include &lt;stdio.h&gt;

using namespace std;

.
.
.
const unsigned int xblockSize=64;
const unsigned int xblocks	=5;

const unsigned int yblockSize=64;
const unsigned int yblocks	=5;

const unsigned int xdimension=xblockSize*xblocks;
const unsigned int ydimension=yblockSize*yblocks;

const unsigned int dimension=ydimension*xdimension;

const unsigned int anzahlBilder=1000;

.
.
.
                int * A=new int [ydimension*xdimension*anzahlBilder];
		int * B=new int [ydimension*xdimension*anzahlBilder];
		int * C=new int [ydimension*xdimension*anzahlBilder];
		int * D=new int [ydimension*xdimension*anzahlBilder];
.
.
.
</code></pre>
<p>Die Fehlermeldung taucht auf, sobald C initialisiert wird. Vorher geht noch alles klar.</p>
<p>Ist sicher nur ne Kleinigkeit, aber ich komm wirklich nicht drauf, wie ich vernünftig mit solch großen Arrays umgehen soll.</p>
<p>Fürs erste langen 500MB an Daten aus, also das was oben initialisiert werden soll. Wenn ihr ne Lösung für Arrays mit Daten &gt;1GB habt, bin ich auch sehr aufgeschlossen. Wichtig ist halt nur, das wirklich alles im RAM hab und die Datenpackete nicht kleiner als 100k Einträge haben sollen.</p>
<p>Ich brauch diese Menge, da ich auf mindestens 300*300 Pixel Bildern rumrödeln muss mit verschiedensten Algorithmen, die parallel auf der GPU ausgeführt werden.</p>
<p>EDIT: hab mal noch mit anzahlBilder rumgespielt, unter 800 klappts. Kanns sein das ich Probleme bekomm, weils nur ne 32 bit Anwenung ist, und ich mit dem befüllten RAM dann über 3,2GB komme beim ausführen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959149</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 17:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 17:40:13 GMT]]></title><description><![CDATA[<p>Das Problem ist, dass du insgesamt<br />
64*5*64*5*1000*4*4 Bytes anforderst. Dies sind ungefähr 1562 MB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959155</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 17:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 17:46:52 GMT]]></title><description><![CDATA[<p>ja?</p>
<p>Ich brauch die größe aber um die Daten zu laden/puffern. Je nachdem ob halt direkt aus ner CCD ausgelesen wird oder aber aus ner Datei.</p>
<p>Gut ist jetzt bischen mehr als ich überschlagen habe, aber eigentlich isses noch klein, weil ich wahrschienlich für C und D 32 bit brauch.</p>
<p>PS: war int nicht 16 bit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959160</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 17:46:52 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 17:55:24 GMT]]></title><description><![CDATA[<p>Das musst du einmal selber überprüfen mit sizeof(int). Auf 32 Bit Systemen ist, soweit ich weiß, ein int auch immer 4 Byte groß.<br />
Grundsätzlich sollten solch große Datenmengen aber immer in einem try / catch - Block angefordert werden. Wie du ja gesehen hast, wirft new die std::bad_alloc exception. Wenn du diese exception fängst, hast du zumindest die Chance, darauf zu reagieren.<br />
Du solltest dir überlegen, ob die wirklich 4 Arrays dieser Größe, zumal jedes 1000 Bilder aufnehmen können soll, brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959167</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 17:55:24 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:00:05 GMT]]></title><description><![CDATA[<p>nein, int ist auf gängigen pcs 32bit.</p>
<p>die lösung wäre std::deque - eine vector lösung wird bei diesen datenmengen sehr schwer.<br />
und selbst mit ner deque ist ein bad_alloc nicht ausgeschlossen...</p>
<p>wenn du zwischenzeitlich eine c-schnittstelle nutzt, die eben keine iteratoren kennt, wirst du nicht umhin kommen, die deques ständig in vektoren umzukopieren.<br />
aber wenn das nicht gerade x-mal pro sekunde aufgerufen wird, sollte es so gar gar nicht mal so extrem ausbremsen.<br />
und allemal noch schneller sein, als die festplatte als ram zu missbrauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959173</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:02:49 GMT]]></title><description><![CDATA[<p>P.S. Schau dir mal die Klasse vector der Standardbibiothek an. Mit einem vector kannst du dann neuen Speicher anfordern, wenn er auch wirklich gebraucht wird.<br />
Ich sehe gerade, du verwendest Windows (32 Bit ?). Ein int ist auf diesem System immer 4 Byte groß.<br />
Außerdem, wenn du bis zu 600 MB einlesen mußt, heißt das ja nicht automatisch, dass du den selben Speicher zur Aufbereitung der Daten haben mußt. Du kannst diese Datenmenge in kleine Stückchen aufteilen, aufbereiten unn in kleinen Häppchen weiterschicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959178</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:02:53 GMT]]></title><description><![CDATA[<p>Warum new? Nimm doch einen Container der mit zerstückeltem Speicher zurecht kommt, wenn dies die Problemstelle ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959179</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:02:53 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:18:10 GMT]]></title><description><![CDATA[<p>Ach halt vergiss es, passt doch, du hast ja BYTES geschrieben und ich hab Bits gelesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Mir würden für A und B aber auch 16 BIT ausreichen, nur für C und D brüchte ich später wohl float. Auch gut, dann halbiert sich eventuell auch die Speichergröße.</p>
<p>EDIT:</p>
<blockquote>
<p>P.S. Schau dir mal die Klasse vector der Standardbibiothek an. Mit einem vector kannst du dann neuen Speicher anfordern, wenn er auch wirklich gebraucht wird.<br />
Ich sehe gerade, du verwendest Windows (32 Bit ?). Ein int ist auf diesem System immer 4 Byte groß.<br />
Außerdem, wenn du bis zu 600 MB einlesen mußt, heißt das ja nicht automatisch, dass du den selben Speicher zur Aufbereitung der Daten haben mußt. Du kannst diese Datenmenge in kleine Stückchen aufteilen, aufbereiten unn in kleinen Häppchen weiterschicken.</p>
</blockquote>
<p>hab ich mal reingeschaut, kann ich aber nicht wirklich viel mit anfangen. Ich initialisier die Arrays ja gleich beim Start des Programms.</p>
<p>Nein nutze win7 64 bit, hab aber erstmal mit ner 32 bit Anwendung angefangen, da ich für 64 keine Notwendigkeit sah.</p>
<p>Ich brauch mindestens nochmal so viel Speicher für die Berechnungen an sich, da ich die Differenz für jedes Pixel zweier aufeinander folgender Bilder ziehen muss, und dann für jedes Differenzbild die Summe als auch den Durchschnitt über das Bild, feststellen muss welche Pixel über nem gewissen Grenzwert liegen um dann aus ner gewissen Umgebung der hellsten Punkte jeweils noch mehrere Parameter für den Bildpunkt auszurechnen.</p>
<p>Im Optimalfall sollten alle Daten die bei den Berechnungen entstehen vorgehalten werden. Die Orginaldaten müssen aber auf jedenfall im RAM bleiben, da wiederholt auf sie zugegriffen werden muss, und eventuell auch nen Abgleich erfolgen muss zum Ram der GPU.</p>
<p>Was die Sache mit irgendwelchen Containern etc nageht, so bin ich da etwas skeptisch, da ich jederzeit wissen muss, wie ich jeden einzelnen Pixel ansprechen kann. Ich hab auf der GPU halt nur 1D arrays. Und dort kann ich halt nicht auf ne wirre Verteilung der Daten zugreifen. Da muss auf jedenfall mindestens 6 Bilder gleichzeitig in den Ram geladen werden pro Kernel, da sonst der overhead sich ziemlich aufsummiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959183</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:09:44 GMT]]></title><description><![CDATA[<p>Skysnake schrieb:</p>
<blockquote>
<p>Hier der Code-Ausschnitt der relevant ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;vector&gt;
#include &lt;utility&gt;

#define alloca _alloca
#define __NO_STD_VECTOR //Use cl::vektor instead of STL version

#include &lt;functional&gt;
//#include &lt;cstdlib&gt; für rand() eventuell nötig

#include &lt;CL\cl.hpp&gt;
#include &lt;stdio.h&gt;

using namespace std;

.
.
.
const unsigned int xblockSize=64;
const unsigned int xblocks	=5;

const unsigned int yblockSize=64;
const unsigned int yblocks	=5;

const unsigned int xdimension=xblockSize*xblocks;
const unsigned int ydimension=yblockSize*yblocks;

const unsigned int dimension=ydimension*xdimension;

const unsigned int anzahlBilder=1000;

.
.
// nein lieber nicht so machen
                int * A=new int [ydimension*xdimension*anzahlBilder];
		int * B=new int [ydimension*xdimension*anzahlBilder];
		int * C=new int [ydimension*xdimension*anzahlBilder];
		int * D=new int [ydimension*xdimension*anzahlBilder];

//

std::vector&lt;int&gt; A(ydimension*xdimension*anzahlBilder);
std::vector&lt;int&gt; B(ydimension*xdimension*anzahlBilder);
std::vector&lt;int&gt; C(ydimension*xdimension*anzahlBilder);
std::vector&lt;int&gt; D(ydimension*xdimension*anzahlBilder);
.
.
.
</code></pre>
<p>Fürs erste langen 500MB an Daten aus, also das was oben initialisiert werden soll. Wenn ihr ne Lösung für Arrays mit Daten &gt;1GB habt, bin ich auch sehr aufgeschlossen. Wichtig ist halt nur, das wirklich alles im RAM hab und die Datenpackete nicht kleiner als 100k Einträge haben sollen.</p>
</blockquote>
<p>Du solltest statt der einfachen C Felder lieber std::vector nehmen, da so auch sauber der Speicher verwaltet wird. Es gibt keine Nachteile und man kann einen std::vector immer als Ersatz für ein C Feld verwenden.</p>
<p>Zur Problematik der Feldgröße: als 64Bit Applikationen übersetzen und passenden Rechner nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959186</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:16:41 GMT]]></title><description><![CDATA[<p>Du mußt mal schreiben, ob du ein 32 Bit oder 64 Bit system nutzt. Auf 64 Bit Systemen wäre es, wie ~John gerade bemerkte, kein Problem mit passendem Rechner, da dir insgesamt auf aktueller Hardware/aktuellem OS 8192 GB virtueller Speicher zur Verfügung stehen. Auf 32 Bit Systemen kannst du im PE-Header ein Flag setzen, so dass dir zumindest 3 GB virtueller Speicher gewährt wird. Das OS nimmt dann nur noch 1GB für sich in Anspruch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959194</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:24:17 GMT]]></title><description><![CDATA[<p>is 64 bit, mit 4GB realem Ram. Ich schreibs hier nochmal rein, der edit geht sicher utner.</p>
<p>ich schau mir das mit dem &lt;vector&gt; nochmal an.</p>
<p>EDIT: habs mir nochmal unter <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/</a> angeschaut. Jetzt ist mir auch wieder klar, warum ichs nicht vorher eingesetzt hab. Ich steig da nicht so 100% durch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959200</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:33:57 GMT]]></title><description><![CDATA[<p>Ernst gemeinter Ratschlag: Geh morgen mal in die Uni-Bibiothek und leih' dir ein richtig gutes Buch über C++ aus.<br />
Das kann bspw. &quot;Die C++ Programmiersprache&quot; (original &quot;The C++ Programming Language&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> ) von Bjarne Stroustrup sein. Dieses Buch kann ich wirklich empfehlen.<br />
Alternativ soll auch der C++ Primer sehr gut sein (nicht gelesen).<br />
In die STL solltest du dich wirklich einarbeiten, sie hilft dir bei sehr vielen Dingen ungemein!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959208</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:34:33 GMT]]></title><description><![CDATA[<p>Nur so interessehalber ... wie groß ist denn dein GPU Speicher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959209</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:34:33 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:58:09 GMT]]></title><description><![CDATA[<p>machts aber nicht unbedingt einfacher wie ich bisher die Erfahrung gemacht hab.</p>
<p>mit &lt;vector&gt; kann ich jetzt z.B. toll den Speicher initialisieren und füllen, aber meine Übergabe an die OpenCL Funktion geht nicht mehr, und wird wie ich befürchte auch nicht so einfach werden, da ich nicht den entsprechenden Pointer so einfach übergeben kann</p>
<p>Ist folgender Funktionsaufruf:</p>
<pre><code>cl_mem clCreateBuffer  (      cl_context context,
      cl_mem_flags flags,
      size_t size,
      void *host_ptr,
      cl_int *errcode_ret)
</code></pre>
<p>Ich schau mal ob ich den entsprechenden Pointer find.</p>
<p>Was das Buch angeht, so hab ich hier son Welzer liegen, hilft mir aber für die Sachen die ich such im Allgemeinen auch nicht weiter. Mit Speziallösungen etc. kann ich nicht soo viel anfangen, denn ich nutz C++ nur als Zwischenmedium für OpenCL. Daher würd ich gern die Gleichen Funktionen sowohl im C++ Teil als auch im OpenCL kernel verwenden. Falls es aber wirklich nicht anders geht, muss ich halt alles in RAM laden und dann kleinere Anteile halt an meinen OpenCL Kernel übergeben, was ja auch ohne Probleme für (5*64)*(5*65)*5 Bilder geklappt hat.</p>
<p>EDIT: 1Gb ist der Ram groß von dem atm nur 512 ohne Tricks genutzt werden können. Mit tricks 800MB rum. Was mir grad aufzeigt, das ich atm zu groß bin -.- Hatte noch die 16 bit die ich erstmal nur brauch noch im Kopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Damit wirds etwas zu groß. Willte eigentlich den Stack von 2k Bildern auf A und B aufteilen, so das es zu keinen Speicherüberschneidungen kommt, aber muss ich dann wohl jetzt nochmal schauen, ob ichs nicht vielleicht in Blöcke a 250 Bilder aufteile oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959214</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 18:50:47 GMT]]></title><description><![CDATA[<p>Jetzt habe ich aber selber mal eine Frage. Warum crasht das Porgramm unter win64?<br />
Der Memory-Manager von Windows kann doch die angeforderten ~1.6 GB bei dem System direkt in den physischen Speicher mappen (4 GB sind ja vorhanden), ohne überhaupt dran denken zu müssen, irgend etwas zurück auf Disk zu pagen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959215</guid><dc:creator><![CDATA[bad_alloc]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Wed, 29 Sep 2010 19:17:21 GMT]]></title><description><![CDATA[<p>Ok, hab mal noch nen bischen rumprobiert.</p>
<p>(5*64)*(5*64)*250 geht, das von der größe dann auch absolut ok, dann kann ich genug Bilder laden um damit lang genug arbeiten zu können vorm nächsten Speicherzugriff und hab eventuell auch noch genug Zeit um zwischen drin mit den Daten auch was auf der CPU arbeiten zu lassen, bevor die anderen Teile fertig sind.</p>
<p>Und insgesamt kann ich alle Daten wenn ich will dann ja mit dem &lt;vector&gt; speichern.</p>
<p>Sauber Leute, mein Problem scheint erstmal gelöst zu sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Zumindest so lange, Bilder von zwei Kameras gleichzeitig ankommen und das dann wohl auch noch in höherer Auflösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>EDIT: Ich schau dann aber wohl wenns zeitlich langt, das ich gleich auf ne 64 bit Anwendung umsattel, damits für die Zukunft nicht doch noch zu Engpässen kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959224</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Wed, 29 Sep 2010 19:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Thu, 30 Sep 2010 01:01:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich weiss jetzt nicht, ob das Problem noch fuer dich von Relevanz ist, aber eigentlich garantiert vector, dass die Daten im Speicher linear abgelegt werden:<br />
[quote=&quot;C++ Referenz von dieser Seite hier&quot;]Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements.[/cpp]<br />
Also sollte &amp;A.front() als Zeiger doch eigentlich funktionieren fuer deine Grafikbibliotheksfunktion und damit kannst Du alles in vectoren speichern, sowohl temporaer als auch auf laengere Sicht. Aber ohne Gewaehr, ob ich irgendwas uebersehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959281</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 30 Sep 2010 01:01:35 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Thu, 30 Sep 2010 05:37:05 GMT]]></title><description><![CDATA[<p>Skysnake schrieb:</p>
<blockquote>
<p>machts aber nicht unbedingt einfacher wie ich bisher die Erfahrung gemacht hab.</p>
<p>mit &lt;vector&gt; kann ich jetzt z.B. toll den Speicher initialisieren und füllen, aber meine Übergabe an die OpenCL Funktion geht nicht mehr, und wird wie ich befürchte auch nicht so einfach werden, da ich nicht den entsprechenden Pointer so einfach übergeben kann</p>
</blockquote>
<p>Ein std::vector erlaubt es, daß man die Adresse des ersten Elements übergibt.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; A(5000);

int* p = &amp;A[0]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1959296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959296</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Thu, 30 Sep 2010 05:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Thu, 30 Sep 2010 07:53:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22559">@Eisflamme</a>:<br />
Ja, da hast du vollkommen recht. Diese Klausel im Standard sorgt dafür, dass vector und dynamisches Array vollkommen äquivalent ist und die Adresse des ersten Vectorelementes so benutzt werden kann wie die Adresse eines dynamischen Arrays. Außer bei dem berüchtigten vector&lt;bool&gt; bei dem sich das Standardkomitee bis heute ärgert diesen überhaupt eingeführt zu haben.</p>
<p>(Rein theoretisch erlaubt es der Standard auch, dass die Vectorelemente rückwärts im Speicher angeordnet sind. Dies macht aber keine einzige Implementierung so und wird sicherlich auch niemals eine machen. Darauf sollte man keine Rücksicht nehmen. Im neuen Standard wird (soweit ich weiß) auch dies ausgeschlossen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959334</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 30 Sep 2010 07:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to Handhabung sehr großer Datenmengen on Thu, 30 Sep 2010 09:47:26 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>Ein std::vector erlaubt es, daß man die Adresse des ersten Elements übergibt.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; A(5000);

int* p = &amp;A[0]
</code></pre>
</blockquote>
<p>Hey vielen Dank, das sieht ziemlich genau nach der Lösung für mein Problem mit der Übergabe an die OpenCL-Funktion aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959420</guid><dc:creator><![CDATA[Skysnake]]></dc:creator><pubDate>Thu, 30 Sep 2010 09:47:26 GMT</pubDate></item></channel></rss>