wenn Du so viel Geld übrig hast, dann kannst Du Dir auch gleich eine gültige PB-Lizenz kaufen.pyromane hat geschrieben:Denen Leuten, denen das nicht aufgefallen ist schenke ich eine Brille
Mit PureBasic GPU nutzen
Re: Mit PureBasic GPU nutzen
a²+b²=mc²
Re: Mit PureBasic GPU nutzen
Eine weitere Möglichkeit, sich mit CUDA zu beschäftigen, besteht in der Nutzung von Mathematica 8. Da viele Hochschulen eine Mathematica-Lizenz-Campus-Lizenz besitzen, besteht für die CUDA-Interessierten Studierenden unter euch evtl. die Möglichkeit, günstig an Mathematica zu kommen. Ich selber benutze Mathematica 8 mit der CUDA-Schnittstelle um Merkmalsbilder aus dem Kinect-Tiefenbild zu erzeugen. Zugreifen auf Mathematica tue ich aus PureBasic heraus über einen MathLink-Wrapper.
Viele Grüße
Stevie63
Viele Grüße
Stevie63
Re: Mit PureBasic GPU nutzen
@Kiffi: Das Thema muss ich noch einmal auskramen oder?
@Stevie63: Mir scheint es als ob kaum ein Weg an CUDA vorbeiführt... Schade eigentlich.
@Stevie63: Mir scheint es als ob kaum ein Weg an CUDA vorbeiführt... Schade eigentlich.
PureBasic 5.21 LTS auf Windows 7 x64 (Intel i5 2500K, 8GB Ram, Nvidia GTX 780)
- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Re: Mit PureBasic GPU nutzen
Meine Meinung dazu ist, dass der Nvidia CUDA "Standard" schneller raus war als die OpenCL spezifikation die ja nur die ganzen Grafikkarten spezifischen Dinge wrapped. Daher wird es auch dümmlicher Art und weise überall favorisiert eingesetzt und alle mit einer ATI Karte schauen dumm aus der wäsche.
Wäre es anders würd ich nicht unbedingt überall eine Nvidia verbaut haben, denn mir kam es bei der Kaufentscheidung auf ebend diese Funktionalität an, die auch entsprechend von Programmen genutzt wird. Was nützt mir die Ati Stream - oder wie sie sich schimpft - Methode, wenn keiner außer 1-2 kleinen Programmen die nutzt?
Würde ich jemals was mit GPU Computing machen, dann auf OpenCL Basis, weil ich dann die anderen Nutzer, neben Nvida, nicht von meinem Programm ausschließen muss.
Dass CUDA direkt programmiert wahrscheinlich sogar eine höhere Performance aufweisen kann, als wenn man die katen mit OpenCL programmiert, das könnte man sich dabei schon fast denken, hierbei sollte man jedoch erstmal auf Benchmarks verweisen, welche ich bisher weder gesehen noch davon gehört habe. Weil es scheinbar keinen Furz interessiert.
Das sind auch nur alles meine Beobachtungen der gesamten Thematik, wenn ich mich Irre freue ich mich darauf eines besseren belehrt zu werden
So far...
Blackskyliner
Wäre es anders würd ich nicht unbedingt überall eine Nvidia verbaut haben, denn mir kam es bei der Kaufentscheidung auf ebend diese Funktionalität an, die auch entsprechend von Programmen genutzt wird. Was nützt mir die Ati Stream - oder wie sie sich schimpft - Methode, wenn keiner außer 1-2 kleinen Programmen die nutzt?
Würde ich jemals was mit GPU Computing machen, dann auf OpenCL Basis, weil ich dann die anderen Nutzer, neben Nvida, nicht von meinem Programm ausschließen muss.
Dass CUDA direkt programmiert wahrscheinlich sogar eine höhere Performance aufweisen kann, als wenn man die katen mit OpenCL programmiert, das könnte man sich dabei schon fast denken, hierbei sollte man jedoch erstmal auf Benchmarks verweisen, welche ich bisher weder gesehen noch davon gehört habe. Weil es scheinbar keinen Furz interessiert.
Das sind auch nur alles meine Beobachtungen der gesamten Thematik, wenn ich mich Irre freue ich mich darauf eines besseren belehrt zu werden

So far...
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Re: Mit PureBasic GPU nutzen
ja, mach mal.pyromane hat geschrieben:@Kiffi: Das Thema muss ich noch einmal auskramen oder?
a²+b²=mc²
Re: Mit PureBasic GPU nutzen
@Stevie63: Du hast hier so nebenbei erwähnt das Du mit dem XBox Kinect Sensor arbeitest.
Hast Du es schon geschafft direkt mit PB auf den Sensor zuzugreifen? Leider gibt es das
Microsoft Kinect SDK noch nicht und auch keinen VB/PB Wrapper für das OpenNI Framework.
Und was genau machst Du mit dem Teil? Ich will es für Gestensteuerung nutzen...
Hast Du es schon geschafft direkt mit PB auf den Sensor zuzugreifen? Leider gibt es das
Microsoft Kinect SDK noch nicht und auch keinen VB/PB Wrapper für das OpenNI Framework.
Und was genau machst Du mit dem Teil? Ich will es für Gestensteuerung nutzen...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Mit PureBasic GPU nutzen
dige hat geschrieben:@Stevie63: Du hast hier so nebenbei erwähnt das Du mit dem XBox Kinect Sensor arbeitest.
Hast Du es schon geschafft direkt mit PB auf den Sensor zuzugreifen? Leider gibt es das
Microsoft Kinect SDK noch nicht und auch keinen VB/PB Wrapper für das OpenNI Framework.
Und was genau machst Du mit dem Teil? Ich will es für Gestensteuerung nutzen...
Hi,
um auf die Kinect zugreifen zu können, gibt es verschiedene Schnittstellen. Zwei der bekanntesten sind die API von OpenNI (wie du oben schon genannt hast) und einmal die API von codelaboratories. Die OpenNI ist eine sehr umfangreiche C/C++ - Bibliothek, die auch schon das Tracking enthält. Die lib von codelaboratories ist dagegen schon minimalistisch. Über einen wrap lässt sich sehr bequem auf die Kinect zugreifen, dh. man kann a) das normale Kamerabild und b) die Tiefenbilder "abgreifen".
Ich benutze die Kinect zuallererst für "Laborzwecke", d.h. ich bereite Aufgaben und Übungen für unser neues Medienlabor vor, welches sich zur Zeit im Aufbau befindet. Mein erstes "konkretes" Übungsbeispiel ist die Gestensteuerung für Armagetron, welche auch schon ganz gut funktioniert. Zur Zeit arbeit ich daran, Kinect-Bilder übers web zu übertragen. Funktioniert auch schon, aber noch ohne Kompression (Kompression muß aber sein, denn bei 25 frames pro Sekunde mit ca 300k für ein 8bit-Graustufenbild braucht man entweder eine gute Bandbreite oder eine gute Kompression). Weitere Übungen (hauptsächlich in Form von einfachen Spielen mit Gestensteuerung befindet sich in Planung).
Als Code lege ich den wrapper der codelaboratories bei. Achtung: die dll von codelaboratories ist in 32bit, also mit pb32 arbeiten.
Vielleicht schaffe ich es, im Laufe des Jahres eine Kinect-Lib (inkl. Tracking und ImageProcessing) in PB fertigzustellen. Wer Interesse hat, kann sich ja bei mir melden (aber zur Zeit noch alles ohne Gewähr).
Ach, ich vergaß: ohne die Autowin-Lib und das lib2pb-Tool von ts-soft hätte ich das Ganze nicht geschafft! Vielen Dank an ts-soft

cu, stevie63
Code: Alles auswählen
; Import-File created by Lib2PBImport
; Libname: CLNUIDevice.lib
; include <stdint.h>
;
; typedef uint8_t BYTE;
; typedef uint16_t WORD;
; typedef uint32_t DWORD;
; typedef uint64_t QWORD;
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; //
; // This library is part of CL NUI SDK
; // It allows the use of Microsoft Kinect cameras in your own applications
; //
; // For updates And file downloads go To: http://codelaboratories.com/get/kinect
; //
; // Copyright 2010 (c) Code Laboratories, Inc. All rights reserved.
; //
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; #pragma once
; #include <windows.h>
;
; #define Import(type) extern "C" __declspec(dllimport)## type __cdecl
;
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; // NUIDevice API
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; Import(int) GetNUIDeviceCount();
; Import(PCHAR) GetNUIDeviceSerial(int index);
;
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; // CLNUIMotor API
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; // Motor instance type
; typedef void *CLNUIMotor;
;
; // Library initialization
; Import(CLNUIMotor) CreateNUIMotor(PCHAR serial);
; Import(bool) DestroyNUIMotor(CLNUIMotor mot);
;
; // Motor control
; Import(bool) SetNUIMotorPosition(CLNUIMotor mot, SHORT position);
;
; // Get accelerometer Data
; Import(bool) GetNUIMotorAccelerometer(CLNUIMotor mot, SHORT &x, SHORT &y, SHORT &z);
;
; Import(bool) SetNUIMotorLED(CLNUIMotor mot, BYTE value);
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; // CLNUICamera API
; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; // Camera instance type
; typedef void *CLNUICamera;
;
; // Library initialization
; Import(CLNUICamera) CreateNUICamera(PCHAR serial);
; Import(bool) DestroyNUICamera(CLNUICamera cam);
;
; // Camera capture control
; Import(bool) StartNUICamera(CLNUICamera cam);
; Import(bool) StopNUICamera(CLNUICamera cam);
;
; // Camera video frame image Data retrieval
; Import(bool) GetNUICameraColorFrameRAW(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
; Import(bool) GetNUICameraColorFrameRGB24(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
; Import(bool) GetNUICameraColorFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000);
;
; // Camera depth frame image Data retrieval
; Import(bool) GetNUICameraDepthFrameRAW(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000);
; Import(bool) GetNUICameraDepthFrameCorrected12(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000);
; Import(bool) GetNUICameraDepthFrameCorrected8(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
; Import(bool) GetNUICameraDepthFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000);
; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
EnableExplicit
ImportC "CLNUIDevice.lib"
; ================================================================
; *Data: .a (1 Byte, 0-255), *camera: void *
; Import(bool) GetNUICameraDepthFrameCorrected8(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
GetNUICameraDepthFrameCorrected8.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraDepthFrameCorrected8"
; ================================================================
; *pData: .u (2 Byte, 0-65535)
; Import(bool) GetNUICameraDepthFrameCorrected12(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000);
GetNUICameraDepthFrameCorrected12.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraDepthFrameCorrected12"
; ================================================================
; *pData: .l (32 Bit unsigned)
; Import(bool) GetNUICameraDepthFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000);
GetNUICameraDepthFrameRGB32.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraDepthFrameRGB32"
; ================================================================
; *pData: .u (2 Byte, 0-65535)
; Import(bool) GetNUICameraDepthFrameRAW(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000);
GetNUICameraDepthFrameRAW.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraDepthFrameRAW"
; ================================================================
; *pData: .l (32 Bit unsigned)
; Import(bool) GetNUICameraColorFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000);
GetNUICameraColorFrameRGB32.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraColorFrameRGB32"
; ================================================================
; *Data: .a (1 Byte, 0-255), *camera: void *
; Import(bool) GetNUICameraColorFrameRGB24(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
GetNUICameraColorFrameRGB24.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraColorFrameRGB24"
; ================================================================
; Import(bool) GetNUICameraColorFrameRAW(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000);
GetNUICameraColorFrameRAW.l(*camera, *pData, waitTimeout.l) As "_GetNUICameraColorFrameRAW"
; ================================================================
; Import(bool) StopNUICamera(CLNUICamera cam);
StopNUICamera.l(*camera) As "_StopNUICamera"
; ================================================================
; Import(bool) StartNUICamera(CLNUICamera cam);
StartNUICamera.l(*camera) As "_StartNUICamera"
; ================================================================
; Import(bool) DestroyNUICamera(CLNUICamera cam);
DestroyNUICamera.l(*camera) As "_DestroyNUICamera"
; ================================================================
; Import(CLNUICamera) CreateNUICamera(PCHAR serial);
CreateNUICamera.l(*serial) As "_CreateNUICamera"
; ================================================================
; Import(bool) SetNUIMotorLED(CLNUIMotor mot, BYTE value);
SetNUIMotorLED.l(*motor,value.a ) As "_SetNUIMotorLED"
; ================================================================
; Import(bool) SetNUIMotorPosition(CLNUIMotor mot, SHORT position);
SetNUIMotorPosition.l(*motor,position.w) As "_SetNUIMotorPosition"
; ================================================================
; Import(bool) GetNUIMotorAccelerometer(CLNUIMotor mot, SHORT &x, SHORT &y, SHORT &z);
GetNUIMotorAccelerometer.l(*motor,*x,*y,*z) As "_GetNUIMotorAccelerometer"
; ================================================================
; Import(bool) DestroyNUIMotor(CLNUIMotor mot);
DestroyNUIMotor.l(*motor) As "_DestroyNUIMotor"
; ================================================================
; Import(CLNUIMotor) CreateNUIMotor(PCHAR serial);
CreateNUIMotor.i(*serial) As "_CreateNUIMotor"
; ================================================================
; Import(PCHAR) GetNUIDeviceSerial(int index);
GetNUIDeviceSerial.i(index.l) As "_GetNUIDeviceSerial"
; ================================================================
; Import(int) GetNUIDeviceCount();
GetNUIDeviceCount.l() As "_GetNUIDeviceCount"
; ================================================================
EndImport
Re: Mit PureBasic GPU nutzen
@Stevie63: Danke. Leider funktioniert bei den aktuellen CL-Treibern (12/10/2010)
unter WinXP nur die Motor- und LED-Steuerung, die Kamera jedoch nicht.
Mit einer älteren Version vom November funktionieren die SDK Tools und mit geänderten
Imports auch das aktivieren der Kamera via PB. Allerdings konnte ich keinen Snapshot
der RGB bzw. Tiefendaten ziehen. Ich bekomme nur #NULL Bytes...
Mit welcher Treiber-Version und welchem Windows arbeitest Du? Die CL Treiber sind zwar
schön schlank und wohl auch schneller, leider funktionieren damit die Tools wie Brekel, KinEmote
usw. nicht. Auch die Gestenerkennung müsste man damit selbst machen, oder?
Ich melde hiermit schon mal mein _großes_ Interesse an Deinem Kinect-PB-Framework an!
unter WinXP nur die Motor- und LED-Steuerung, die Kamera jedoch nicht.
Mit einer älteren Version vom November funktionieren die SDK Tools und mit geänderten
Imports auch das aktivieren der Kamera via PB. Allerdings konnte ich keinen Snapshot
der RGB bzw. Tiefendaten ziehen. Ich bekomme nur #NULL Bytes...
Code: Alles auswählen
Define *serial, *camera, *motor, *rawData
; Code für CL Version 11/21/2010
; http://codelaboratories.com/nui/
*camera = CreateNUICamera(0)
If *camera
If StartNUICamera(*camera)
*rawData = AllocateMemory(640*480*4)
;GetNUICameraDepthFrameRAW (*camera, *rawData, 2000)
GetNUICameraColorFrameRAW (*camera, *rawData, 2000)
CreateFile(#Null, "C:\Temp\RawScan.bin")
WriteData(#Null, *rawData, 640*480*4)
CloseFile(#Null)
FreeMemory(*rawData)
StopNUICamera(*camera)
DestroyNUICamera(*camera)
EndIf
EndIf
schön schlank und wohl auch schneller, leider funktionieren damit die Tools wie Brekel, KinEmote
usw. nicht. Auch die Gestenerkennung müsste man damit selbst machen, oder?
Ich melde hiermit schon mal mein _großes_ Interesse an Deinem Kinect-PB-Framework an!

"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Mit PureBasic GPU nutzen
dige hat geschrieben:@Stevie63: Danke. Leider funktioniert bei den aktuellen CL-Treibern (12/10/2010)
unter WinXP nur die Motor- und LED-Steuerung, die Kamera jedoch nicht.
Mit einer älteren Version vom November funktionieren die SDK Tools und mit geänderten
Imports auch das aktivieren der Kamera via PB. Allerdings konnte ich keinen Snapshot
der RGB bzw. Tiefendaten ziehen. Ich bekomme nur #NULL Bytes...
Mit welcher Treiber-Version und welchem Windows arbeitest Du? Die CL Treiber sind zwar
schön schlank und wohl auch schneller, leider funktionieren damit die Tools wie Brekel, KinEmote
usw. nicht. Auch die Gestenerkennung müsste man damit selbst machen, oder?
Ich melde hiermit schon mal mein _großes_ Interesse an Deinem Kinect-PB-Framework an!
Hi dige,
ich stelle die Tage ein funktionierendes code-Beispiel rein.
Das Kinemote-Paket funktioniert nicht zusammen mit dem cl-Paket und umgekehrt, Auch OpenNI darf nicht installiert sein, allein cl.
Ich habe win 7 prof. 64bit und dasselbe cl-Paket wie du.
cu
Stevie
Re: Mit PureBasic GPU nutzen
Insgesamt habe ich 3 verschiedene Treiber für den Kinect Seonsor gefunden:
- OpenKinect
- PrimeSense
- Codelaboratories
Mit jeden geht was und ne Menge nicht ... es ist eine krux :-\
Hoffentlich kommt wirklich bald das offizielle SDK.
Bin schon auf Dein Bsp. gespannt!
- OpenKinect
- PrimeSense
- Codelaboratories
Mit jeden geht was und ne Menge nicht ... es ist eine krux :-\
Hoffentlich kommt wirklich bald das offizielle SDK.
Bin schon auf Dein Bsp. gespannt!
"Papa, ich laufe schneller - dann ist es nicht so weit."