![]() |
DLL optimieren - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: DLL optimieren (/Thread-DLL-optimieren) Seiten: 1 2 |
DLL optimieren - rolfk - 03.05.2009 11:48 ' schrieb:Ok, danke dafür. Nein, LabVIEW hat ganz spezifische Anforderungen an Speicherbereiche und da kommt man nicht umhin. Die einzige sinnvolle Möglichkeit ist wie schon gesagt das Allozieren eines LabVIEW Handles und dann die Übergabe des C Speicherpointers darin an Deine andere Library. Die muss dazu natürlich die Übergabe eines Heapspeichers zulassen. Wenn sie darauf besteht diesen selber anzulegen (ob onboard oder wie auch immer) dann ist's das Ende der Geschichte. Da ist nichts zu machen. Da muss schon die Treiberbibliothek die Flexibilität mitbringen. Mit Visual Basic uns so ziemlich jeder anderen höheren Entwickelumgebung ausser C (wobei viele C als alles ausser höhere Programmiersprache einstufen) wäre das grundsätzlich nicht anders. Rolf Kalbermatter DLL optimieren - abrissbirne - 04.05.2009 14:07 ' schrieb:Nein, LabVIEW hat ganz spezifische Anforderungen an Speicherbereiche und da kommt man nicht umhin. Die einzige sinnvolle Möglichkeit ist wie schon gesagt das Allozieren eines LabVIEW Handles und dann die Übergabe des C Speicherpointers darin an Deine andere Library. Die muss dazu natürlich die Übergabe eines Heapspeichers zulassen. Wenn sie darauf besteht diesen selber anzulegen (ob onboard oder wie auch immer) dann ist's das Ende der Geschichte.Ich habe gerade mal mit dem Support telefoniert. Ich kann wohl der Bibliothek einen Pointer Speicherbereich übergeben in den geschrieben werden soll. Allerdings muss dieser Speicher physicalisch linear sein und nicht fragmentiert. Das heißt doch das ich einen DMA Speicher reservieren müsste, oder? Das wird wohl mit dem LV Memory Manager nicht möglich sein? Ich habe dahingehend mal nichts in dem Handbuch entdeckt. Wäre das so eine Übergabe eines Heapspeichers? Kann ich sowas mit LV realisieren? Danke DLL optimieren - rolfk - 04.05.2009 19:17 ' schrieb:Ich habe gerade mal mit dem Support telefoniert. Ich kann wohl der Bibliothek einen Pointer Speicherbereich übergeben in den geschrieben werden soll. Allerdings muss dieser Speicher physicalisch linear sein und nicht fragmentiert. Das heißt doch das ich einen DMA Speicher reservieren müsste, oder? Das wird wohl mit dem LV Memory Manager nicht möglich sein? Ich habe dahingehend mal nichts in dem Handbuch entdeckt. Wäre das so eine Übergabe eines Heapspeichers? Kann ich sowas mit LV realisieren? Ein Speicherblock auf dem Heap ist linear aber eben nur im virtuellen Speichermodell. Und ich denke mal dass die hier wohl einen linearen physikalischen Speicherbereich meinen, weil sie den wohl direkt als DMA Buffer verwenden wollen. Solche Speicherbereich lassen sich nur aus dem Kernel mit Kernelfunktionen anlegen und veränderen, also unmöglich für LabVIEW. Ohne komplizierte Unterstützung von ScatterGather DMA Logic ist die direkte Verwendung von Applikationsspeicher in einem Treiber für DMA Zwecke unmöglich und das Umgekehrte, die Verwendung von DMA Speicherbereichen direkt in einer modernen Multithreading Umgebung auf Applikationsebene noch viel mehr. Ohne Kopieren geht da eigentlich nichts. Rolf Kalbermatter DLL optimieren - abrissbirne - 05.05.2009 16:18 ' schrieb:Ein Speicherblock auf dem Heap ist linear aber eben nur im virtuellen Speichermodell. Und ich denke mal dass die hier wohl einen linearen physikalischen Speicherbereich meinen, weil sie den wohl direkt als DMA Buffer verwenden wollen. Solche Speicherbereich lassen sich nur aus dem Kernel mit Kernelfunktionen anlegen und veränderen, also unmöglich für LabVIEW. Ohne komplizierte Unterstützung von ScatterGather DMA Logic ist die direkte Verwendung von Applikationsspeicher in einem Treiber für DMA Zwecke unmöglich und das Umgekehrte, die Verwendung von DMA Speicherbereichen direkt in einer modernen Multithreading Umgebung auf Applikationsebene noch viel mehr. Ohne Kopieren geht da eigentlich nichts.Danke. Ich hab es bereits befürchtet. Muss mal sehen wie weit ich mein Code noch optimieren kann um evt. doch auf die volle Datenrate zu kommen. Gruß, Andreas |