OpenCL

thysol

BIOS-Overclocker(in)
Hallo,
Ich habe mir den Source Code von diesem Link heruntergeladen:

First OpenCL program

Ich habe ihn dann mit Microsoft Visual C# Express Edition 2010 geoeffnet. Der Compiler zeigte keine Fehler an und unter den References wahr auch OpenCL.NET und OpenCL.Template. Wenn ich dass Programm dann ausfuehre ploppen dann ein paar Konsolen Windows auf. Wenn ich dass Programm in Visual C# ausfuehre (Start Debugging) steht irgendwas auf den aufploppenden Konsolen Windows drauf. Wenn ich die .exe ausfuehre die beim heruntergeladenen Source Code dabei wahr Ploppen nur ein paar Konsolen Fenster auf aber es steht gar nichts drauf.:what: Die anzahl der aufploppenden Fenster duerfe aber gleich sein. Dass ist eine Schaetzung weil die ploppen so schnell auf.

Hier ist der Soucre Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FirstOpenCLProgram
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void btnOpenCL_Click(object sender, EventArgs e)
{
string vecSum = @"
__kernel void
floatVectorSum(__global float * v1,
__global float * v2)
{
// Vector element index
int i = get_global_id(0);
v1 = v1 + v2;
}";

//Initializes OpenCL Platforms and Devices and sets everything up
OpenCLTemplate.CLCalc.InitCL();

//Compiles the source codes. The source is a string array because the user may want
//to split the source into many strings.
OpenCLTemplate.CLCalc.Program.Compile(new string[] { vecSum });

//Gets host access to the OpenCL floatVectorSum kernel
OpenCLTemplate.CLCalc.Program.Kernel VectorSum = new OpenCLTemplate.CLCalc.Program.Kernel("floatVectorSum");

//We want to sum 2000 numbers
int n = 2000;

//Create vectors with 2000 numbers
float[] v1 = new float[n], v2=new float[n];

//Creates population for v1 and v2
for (int i = 0; i < n; i++)
{
v1 = (float)i / 10;
v2 = -(float)i / 9;
}


//Creates vectors v1 and v2 in the device memory
OpenCLTemplate.CLCalc.Program.Variable varV1 = new OpenCLTemplate.CLCalc.Program.Variable(v1);
OpenCLTemplate.CLCalc.Program.Variable varV2 = new OpenCLTemplate.CLCalc.Program.Variable(v2);

//Arguments of VectorSum kernel
OpenCLTemplate.CLCalc.Program.Variable[] args = new OpenCLTemplate.CLCalc.Program.Variable[] { varV1, varV2 };

//How many workers will there be? We need "n", one for each element
int[] workers = new int[1] { n };

//Execute the kernel
VectorSum.Execute(args, workers);

//Read device memory varV1 to host memory v1
varV1.ReadFromDeviceTo(v1);

}
}
}


Woran liegt dass oder was mache ich falsch?

Ich bedanke mich schon mal im Voraus fuer die Antworten.
 
Das Programm läuft vermutlich in VS so schnell durch, dass es direkt wieder geschlossen wird. Versuche mal mit Strg + F5 (Ausführen) zu starten, das hält die Konsole offen.
 
Das Programm läuft vermutlich in VS so schnell durch, dass es direkt wieder geschlossen wird. Versuche mal mit Strg + F5 (Ausführen) zu starten, das hält die Konsole offen.

Habe ich versucht, gleiches Ergebnis. Es ist bestimmt so dass dass so sein soll. Ich habe nur Angst dass aus irgend einem Grund OpenCL nicht richtig funktioniert auf meinem Rechner.

Ich habe es geschafft ein Screenshot von einem der aufploppenden Konsolen Windows zu machen. Da steht, "The handle could not be opened during redirection of handle 1". Soll dass so sein?
 
Ich habe mir jetzt den Source Code fuer dass Programm hier heruntergeladen. Dass Programm funktioniert tadellos.

Case study: geometric fitting of pipes

Wenn ich dass Programm allerdings starte und den Knopf "Generate Ellipses" druecke kommen wieder ganz viele aufploppende Konsolen Windows allerdings hat er dann tatsaechlich die Ellipsen gezeichnet und der Rest des Programms funktioniert problemlos. Ich mache jetzt einfach dass Tutorial weiter und hoffe dass ich nicht auf weitere Probleme stossen werde.

Danke fuer die Hilfe.:daumen:
 
Fehlt da
Code:
//Creates population for v1 and v2
            for (int i = 0; i < n; i++)[U][B];[/B][/U]


Nicht das von mir eingetragene Semikolon :what:?
 
Da dass Pipe Fitting Programm ohne Probleme funktioniert bin ich vorerst zuversichtlich dass hoffentlich auch mal meine eigenen OpenCL Programme funktionieren.

Ich wollte mal versuchen dass Zaehl Programm in OpenCL zu schreiben. Ich weiss dass mann dass nicht parallelisieren kann aber es soll ja nur ein Test sein. Ausserdem will ich sehen wie die IPC der 850MHz 5870 sich gegen den Intel i5-750 schlaegt.

Link zum Zaehl-Programm:
http://extreme.pcgameshardware.de/programmierung-und-webdesign/109702-microsoft-visual-c.html

Wie soll ich jetzt die Funktionen die bingo88 mir geschrieben hat in OpenCL umschreiben? Ich muss ja erst mal den Kernel als "String" schreiben und hinterher den Kompilier Befehl benutzen wie in dem ersten OpenCL Programm wo ich den Source Code runtergeladen habe. Dann muss ich den Standard Code schreiben zur initialisierung der OpenCL devices. Dann muss ich die Anzahl der Workers (Threads) festlegen, fuer dass Zaehl Programm ja nur einen.

In dem Source Code des ersten OpenCL codes dass im Startpost zu sehen ist ist aber noch Code fuer die Matheaufgabe ausserhalb des OpenCL Kernels. Wie genau muesste ich dann dass Zaehl Programm aufteilen in C# code und in den OpenCL Kernel?
 
Zurück