<?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[cude:cublas Ergebnis wird nan?!?]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielleicht hat ja schon einmal jemand von euch mit cublas gearbeitet, und weiß, welchen Anfängerfehler ich mache.</p>
<p>Ich sitze momentan an dem Problem, dass ich mit ziemlich großen Matrizen (1000*1000 Elementen) komplexe Berechnungen durchführen muss. Momentan ist meine Ausführungsgeschwindigkeit bei ca 70h pro Experiment, weswegen ich mich entschlossen habe, es einmal mit cublas zu probieren und meinen alten Code darauf umzustellen.</p>
<p>Leider scheint das alles nicht so einfach zu sein, wie ich es mir vorstelle. Folgender vereinfachter Code:</p>
<pre><code class="language-cpp">void updateStatistics(const Array&lt;double&gt;&amp; s)
{
//allokation der Vektoren
//m_dimensions=1000=dimension der Eingabedaten  
cublasAlloc(m_dimensions,sizeof(double),(void**)&amp;m_theta);
cublasAlloc(m_dimensions,sizeof(double),(void**)&amp;m_state);
//auf 0 setzen
cublasDscal(m_dimensions,0,m_theta,1);

//...

//Kopieren der Eingabe in die Grafikkarte
//elemvec liefert das interne Array...
cublasSetVector(m_dimensions,sizeof(double),s.elemvec(),1,m_state,1);

//skalarprodukt für double Precision
double delta=cublasDdot(m_dimensions,m_theta,1,m_nextState,1);
std::cout&lt;&lt;cublasGetError()&lt;&lt;&quot; &quot;&lt;&lt;delta&lt;&lt;&quot; &quot;;//kein Fehler, delta=NaN
}
</code></pre>
<p>Wie schon in den Kommentaren steht, wird delta=nan. Die Allokation scheint zu klappen, zumindest haben die Pointer am Ende Werte und es wird auch kein Fehler ausgegeben. Ich bin grad ziemlich ratlos, weil ich glaube alles richtig gemacht zu haben. Und an der Eingabe habe ich seit meinem letzten (korrekten) Experiment nichts verändert.</p>
<p>Weiß jemand, wa sich da falsch gemacht habe? In der Doku steht leider auch nicht, wann NaN auftritt. dass 0 raus kommt ist zu dem zeitpunkt okay. Und die Eingabe besteht nur aus 0 und 1 Werten. Von daher kann ich auch dort NaN ausschließen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253639/cude-cublas-ergebnis-wird-nan</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 19:05:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253639.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Nov 2009 21:05:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to cude:cublas Ergebnis wird nan?!? on Wed, 04 Nov 2009 21:06:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielleicht hat ja schon einmal jemand von euch mit cublas gearbeitet, und weiß, welchen Anfängerfehler ich mache.</p>
<p>Ich sitze momentan an dem Problem, dass ich mit ziemlich großen Matrizen (1000*1000 Elementen) komplexe Berechnungen durchführen muss. Momentan ist meine Ausführungsgeschwindigkeit bei ca 70h pro Experiment, weswegen ich mich entschlossen habe, es einmal mit cublas zu probieren und meinen alten Code darauf umzustellen.</p>
<p>Leider scheint das alles nicht so einfach zu sein, wie ich es mir vorstelle. Folgender vereinfachter Code:</p>
<pre><code class="language-cpp">void updateStatistics(const Array&lt;double&gt;&amp; s)
{
//allokation der Vektoren
//m_dimensions=1000=dimension der Eingabedaten  
cublasAlloc(m_dimensions,sizeof(double),(void**)&amp;m_theta);
cublasAlloc(m_dimensions,sizeof(double),(void**)&amp;m_state);
//auf 0 setzen
cublasDscal(m_dimensions,0,m_theta,1);

//...

//Kopieren der Eingabe in die Grafikkarte
//elemvec liefert das interne Array...
cublasSetVector(m_dimensions,sizeof(double),s.elemvec(),1,m_state,1);

//skalarprodukt für double Precision
double delta=cublasDdot(m_dimensions,m_theta,1,m_nextState,1);
std::cout&lt;&lt;cublasGetError()&lt;&lt;&quot; &quot;&lt;&lt;delta&lt;&lt;&quot; &quot;;//kein Fehler, delta=NaN
}
</code></pre>
<p>Wie schon in den Kommentaren steht, wird delta=nan. Die Allokation scheint zu klappen, zumindest haben die Pointer am Ende Werte und es wird auch kein Fehler ausgegeben. Ich bin grad ziemlich ratlos, weil ich glaube alles richtig gemacht zu haben. Und an der Eingabe habe ich seit meinem letzten (korrekten) Experiment nichts verändert.</p>
<p>Weiß jemand, wa sich da falsch gemacht habe? In der Doku steht leider auch nicht, wann NaN auftritt. dass 0 raus kommt ist zu dem zeitpunkt okay. Und die Eingabe besteht nur aus 0 und 1 Werten. Von daher kann ich auch dort NaN ausschließen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803484</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 04 Nov 2009 21:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to cude:cublas Ergebnis wird nan?!? on Wed, 04 Nov 2009 23:53:20 GMT]]></title><description><![CDATA[<p>Ha. habs rausgefunden.</p>
<pre><code>cublasDscal(m_dimensions,0,m_theta,1);
</code></pre>
<p>Ist zwar toll in der Theorie, aber wenn die Werte da drin nach allokation des Speichers NaN sind, dann kann ich die mit 0 multiplizieren soviel ich will, die bleiben NaN.</p>
<p>Lass ich mal stehen für alle, die mit cublas mal arbeiten wollen(man ist das Schnell!!!!)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1803545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1803545</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 04 Nov 2009 23:53:20 GMT</pubDate></item></channel></rss>