Langsam bin ich verwirrt ob ich dass richtig mache. Hier zeig dir mal den gesamten Code und sage dir genau was er machen soll:
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;
using System.IO;
using System.Diagnostics;
using Cloo;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using System.Math;
namespace OpenCL___OpenGL_Orbit_Simulation
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random RandomClass = new Random();
string vecSum = @"
__kernel void
floatVectorSum(__global float * v1,
__global float * v2,
__global float * v3,
__global float * v4,
__global float * v5,
__global float * v6,
__global float * v7,
__global float * v8)
{
int i = get_global_id(0);
v4
= v3 / (2 * 398600500000000 / (v3 * (v1 * v1)) - 1);
v5 = v3 * (v1 * v1) / 398600500000000 - 1;
v6 = v4 / (1 + v5);
v7 = v5 * v6;
v8 = v6 - v7;
v8 = sqrt( v8 );
}";
OpenCLTemplate.CLCalc.InitCL();
OpenCLTemplate.CLCalc.Program.Compile(new string[] { vecSum });
OpenCLTemplate.CLCalc.Program.Kernel VectorSum = new OpenCLTemplate.CLCalc.Program.Kernel("floatVectorSum");
int n = 10000;
float[] v1 = new float[n], v2 = new float[n], v3 = new float[n], v4 = new float[n], v5 = new float[n], v6 = new float[n], v7 = new float[n], v8 = new float[n];
for (int i = 0; i < n; i++)
{
v1 = RandomClass.Next(1000, 100000);
v2 = RandomClass.Next(200000, 10000000);
v3 = 6378140 + v2;
}
OpenCLTemplate.CLCalc.Program.Variable varV1 = new OpenCLTemplate.CLCalc.Program.Variable(v1);
OpenCLTemplate.CLCalc.Program.Variable varV2 = new OpenCLTemplate.CLCalc.Program.Variable(v2);
OpenCLTemplate.CLCalc.Program.Variable varV3 = new OpenCLTemplate.CLCalc.Program.Variable(v3);
OpenCLTemplate.CLCalc.Program.Variable varV4 = new OpenCLTemplate.CLCalc.Program.Variable(v4);
OpenCLTemplate.CLCalc.Program.Variable varV5 = new OpenCLTemplate.CLCalc.Program.Variable(v5);
OpenCLTemplate.CLCalc.Program.Variable varV6 = new OpenCLTemplate.CLCalc.Program.Variable(v6);
OpenCLTemplate.CLCalc.Program.Variable varV7 = new OpenCLTemplate.CLCalc.Program.Variable(v7);
OpenCLTemplate.CLCalc.Program.Variable varV8 = new OpenCLTemplate.CLCalc.Program.Variable(v8);
OpenCLTemplate.CLCalc.Program.Variable[] args = new OpenCLTemplate.CLCalc.Program.Variable[] { varV1, varV2, varV3, varV4, varV5, varV6, varV7, varV8 };
int[] workers = new int[1] { n };
VectorSum.Execute(args, workers);
varV4.ReadFromDeviceTo(v4);
varV5.ReadFromDeviceTo(v5);
varV6.ReadFromDeviceTo(v6);
varV7.ReadFromDeviceTo(v7);
varV8.ReadFromDeviceTo(v8);
label1.Text = v8[5689].ToString();
label2.Text = v6[5689].ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
v8 und v6 enthalten die teile einer elliptischen Formel. Also:
(x^2 / v6^2) + (y^2 / v8^2) = 1.
Wenn also x = 1, 2, 3 usw. ist kann ich die dazugehoerige y Koordinate finden. v9 soll diese y Koordinaten enthalten pro v8.
Wenn v6 10000 Zahlen enthaelt soll es 10000 weitere arrays geben. Ausserdem soll wenn v6[345] = 567 dass 345te array genau 567 Zahlen enthalten. Wie kann ich das machen?
Ich bedanke mich schon mal im Vorraus fuer eure Hilfe.