Beiträge von Vernunftmensch im Thema „Eine Funktion einer bestimmten Klasse möglichst einfach in großer Zahl auf mehreren Kernen gleichzeitig laufen lassen.“
-
-
Code
Alles anzeigenmin_gew.x=min_gew.y=min_gew.z=0; max_gew.x=10; max_gew.y=10; max_gew.z=10; x=(int)min_gew.x; while (x<max_gew.x) { y=(int)min_gew.y; while (y<max_gew.y) { z=(int)min_gew.z; while (z<max_gew.z) { //Calculate point c.x=(x); c.y=(y); c.z=(z); //std::cout << c; //Calculating realpoint=ref+c*grid_delta; t=(dotproduct(realpoint,pointc)-fest_oben)/fest_unten; quermittelpunkt=pointa+t*pointc; if (t>=0) if (t<=1) if (vectorlength(realpoint-quermittelpunkt)<=r) { resultcloud [x+y*nx+z*nx*ny]=1; }; z++; }; y++; }; x++; };Warum funktioniert hier 10*10*10, aber mehr nicht? Oder baue ich hier zu OpenCl unbemerkt ein Feld auf oder sowas?
-
Die Prozedure umgehe ich jetzt.
Der Fehler bleibt.
Unter bestimmten Voraussetzungen (die ich noch nicht kenne) wird schon resultcloud[100]=1; nicht mehr von OpenCl akzeptiert.
Ich hoffe, daß nicht die Größe des Codeblocks bzw. die Größe der interngenutzten Variablen überschritten wird.Gibt ja leider keine Fehlermeldung

-
Code
Alles anzeigen// to mark a point void mark (float3 p, float3 ref, int nx, int ny, int nz, float grid_delta, __global char* resultcloud) { //Postpone in reference point. float3 c=p-ref; int xxx; int yyy; int zzz; //Strech according to grid_delta. c=c/grid_delta; xxx=(int) c.x; yyy=(int) c.y; zzz=(int) c.z; //Calculate position in array to be marked. if (xxx<nx) if (yyy<ny) if (zzz<nz) if (xxx>=0) if (yyy>=0) if (zzz>=0) ;;; //resultcloud [ (xxx+yyy*nx+zzz*nx*ny)]=1; }Wo könnte mein Fehler liegen? Ich möchte falsche Punkte rausfiltern, damit mein
OpenCl nicht abbricht. Obiger Code ist in der selben OpenCl *.cl Datei. -
Wie ist das C++ - Gegenstück zu bzero?
Edit:
Vielleicht ein bißchen effizienter als mein:
// to make all null
void makenull (void* buffer, double iNumElements)
{
double counter=0;
while (counter<iNumElements*sizeof(char))
{
*((char*) ((char*)buffer)+((int)counter))=0;
counter++;
}
};
Könnte mir da bei (int) ein Überlauf passieren, wenn ich GBs nullen möchte? -
-
Code
Alles anzeigenvoid Dummy() { int i=0; while (i<1000) { i++; }; } // OpenCL Kernel Function for element by element vector addition __kernel void VectorAdd(__global const float* a, __global const float* b, __global float* c, int iNumElements) { // get index into global data array int iGID = get_global_id(0); // bound check (equivalent to the limit on a 'for' loop for standard/serial C code if (iGID >= iNumElements) { return; } dummy (); // add the vector elements c[iGID] = a[iGID] + b[iGID]; }Das klappt nicht. Wie muß man das abändern?
-
-
-
Extra Ubuntu installiert, den neusten NVIDIA-Treiber, danach CUDA-Toolkit und GPUprogramming-Paket.
Einige Pakete per Hand nachinstalliert über diverse PPAs und alles sollte funktionierren.Fehlermeldung:
Code
Alles anzeigenvernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL/bin/linux/release$ sudo optirun ./oclDotProduct [oclDotProduct] starting... Error -1001 in clGetPlatformIDs Call !!! !!! Error # -1000 (Unspecified Error) at line 81 , in file oclDotProduct.cpp !!! Exiting... vernunftmensch@ubuntu:~/NVIDIA_GPU_Computing_SDK/OpenCL/bin/linux/release$Hatte hier nicht jemand Ahnung von OpenCL?
-
-
-
-
-
-
openmp gefällt mir besser, als das, das ich in der Uni gelernt habe.
Aber selbes Problem: Microsoft Visual C++ 2010 Express findet die *.h nicht. Außerdem muß man noch Compilier-Variablen setzen.
Gibt es da ein einfaches Paket, das ich downloade, das mir alles nett einrichtet?
Habe ich es vielleicht vor meinen Augen?
Bitte melde dich an, um diesen Link zu sehen. -
Puh, ist das ein Thema, lang zu schreiben.
Ja, folgendes Problem. Ich habe eine Klasse, die eine Punktwolke verwaltet, welche auch eine Funktion hat, Schnittpunkte mit einer Kugel zu markieren. Jetzt möchte ich, daß alle meiner CORE i7-Kerne mithelfen beim Markieren. Beim Markieren brauche ich keinen kritischen Bereich, markiert ist markiert.
Ein Link auf ein gutes Beispiel wäre nicht schlecht?