[OpenCL|C]Code werkt niet meer na automatisch update van lib

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
Dag allen!

Voor een project dat deel uitmaakt van mijn opleiding moet ik enkele eenvoudige OpenCL programma's schrijven, en dat verliep tot nu toe allemaal vrij vlot.
Enkele test programma's, zoals het berekenen van Pi, het genereren van een mandelbrot en een n-bodies programma werkten allemaal perfect tot gisteren.
Echter vandaag kreeg ik een automatische melding van Ubuntu dat er updates voor een hele hoop paketten waren. Zonder veel nadenken heb ik ze gewoon allemaal geïnstalleerd, en daar heb ik nu wel wat spijt van...

Geen enkel van mijn OpenCL programma's doet het nog. Ik krijg altijd deze error:
"LLVM ERROR: Pointer address space out of range"

Google bood helaas geen oplossing.

Ik heb geprobeerd om de wijzigingen van deze update te roll-backen, maar dat blijkt ook minder evident te zijn op Linux dan op Windows.

Ik ben een totale leek op vlak van OpenCL, en ook nog wel een rookie te noemen als het op Linux aankomt, dus ik zit momenteel wel met mijn handen in het haar =/

Heeft iemand enig idee hoe ik dit kan oplossen?

Alvast bedankt!

EDIT: Het belangrijkste vergeet ik nog te vermelden...
Ik heb een ATI kaart, en gebruik dus het Mesa pakket om deze voor OpenCL te gebruiken.

[ Voor 6% gewijzigd door Opifex op 26-03-2017 19:50 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08-10 20:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je zult toch echt met wat source code moeten komen voor wij je kunnen helpen. Probeer dit probleem te isoleren in een zo'n klein mogelijk projectje, en post dat dan hier.

Wordt er verder geen regelnummer oid bij genoemd?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
.oisyn schreef op zondag 26 maart 2017 @ 20:22:
Je zult toch echt met wat source code moeten komen voor wij je kunnen helpen. Probeer dit probleem te isoleren in een zo'n klein mogelijk projectje, en post dat dan hier.

Wordt er verder geen regelnummer oid bij genoemd?
Mijn excuses. Ik had er geen code bijgevoegd omdat ik er vanuit ging dat het geen code probleem was, maar een driver/library probleem.
Ook omdat er inderdaad geen regelnummer bij wordt vermeld. Enkel bovenstaande melding.

Hier is de hostcode van een voorbeeld-programma dat we bij aanvang van de lessenreeks kregen:
https://pastebin.com/hCHFxmib

Het is een eenvoudig programma dat 2 reeksen van getallen optelt.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08-10 20:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik mis nog de code van je compute kernel volgens mij?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
Klopt, dit is de kernel code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
__kernel void add_numbers(__global float *vector_a,
                          __global float *vector_b,
                          int size,
                          __global float *result)
{
    const int gid = get_global_id(0);

    if (gid >= size)
        return;

    result[gid] = vector_a[gid] + vector_b[gid];
}

0

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08-10 20:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Maar op welk punt in je code krijg je precies die error?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
Blijkbaar wordt alles uitgevoerd tot aan de create_program regel in main. Dan komt de LLVM error tevoorschijn.
Mijn code op andere pc's werkt echter nog perfect, en geeft geen errors. In die PC's zit wel een NVidea kaart, en dus ook geen Mesa (want als ik het goed voor heb is Mesa voor ATI/AMD kaarten).

Misschien ook niet onbelangrijk om te vermelden, ik gebruik deze Mesa: https://laanwj.github.io/2016/05/06/opencl-ubuntu1604.html
Want fglrx-updates (wat als ik het goed begrijp een AMD-driver, waar Mesa standaard al inzit, zou moeten zijn) krijg ik niet geïnstalleerd. Vermoedelijk door een verouderde kaart. (Ookal is verouderd een heel relatief woord vind ik. Hij trekt zware grafische toepassingen nog met gemak...)

Acties:
  • 0 Henk 'm!

  • LEDfan
  • Registratie: Juni 2012
  • Laatst online: 04:27
Het is misschien een beetje een belachelijk antwoord maar heb je de code (inclusief alle zelf gecompileerde libraries) al opnieuw gecompileerd? Misschien ook handig om te kijken welke paketten juist geüpdatet zijn. Ik weet niet exact hoe dit op Ubuntu moet, maar ik denk dat je hier http://askubuntu.com/a/116067/373736 en hier http://askubuntu.com/a/14331/373736 al iets aan hebt. Dan kan je (relevante) changelogs bekijken, want misschien ben je wel van van Ubuntu versie veranderd (geen idee hoe dat gaat met Ubuntu)

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 08-10 18:52
Mesa (clover) is een opensource stack die met de opensource radeon linux kernel driver kan werken en enige ondersteuning voor OpenCL biedt. Het is dus niet specifiek voor AMD.
Tevens werkt het echter nog lang niet feilloos (heb er zelf ook issues mee met de OpenCV library).
Je zou je bug wel netjes gedocumenteerd kunnen melden op de bugzilla bij freedesktop.org, wat ze niet weten dat faalt kunnen ze immers ook niet fixen, maar verwacht geen snelle fix, OpenCL (clover) lijkt niet echt een onderdeel te zijn waar veel ontwikkelaars zich actief mee bezig houden helaas.

De fglrx driver, of de nieuwere amdgpu variant werken wel prima maar zijn inderdaad lastiger te installeren (out-of-band kernel module moeten compileren en dan issues tegen komen als je dat tegen een andere nieuwere kernel probeert te doen.( losse patches daarvan zijn wel te vinden, makkelijkste is bij de arch-distributie).

Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
LEDfan schreef op zaterdag 1 april 2017 @ 11:14:
Het is misschien een beetje een belachelijk antwoord maar heb je de code (inclusief alle zelf gecompileerde libraries) al opnieuw gecompileerd? Misschien ook handig om te kijken welke paketten juist geüpdatet zijn. Ik weet niet exact hoe dit op Ubuntu moet, maar ik denk dat je hier http://askubuntu.com/a/116067/373736 en hier http://askubuntu.com/a/14331/373736 al iets aan hebt. Dan kan je (relevante) changelogs bekijken, want misschien ben je wel van van Ubuntu versie veranderd (geen idee hoe dat gaat met Ubuntu)
Is zeker geen belachelijk antwoord. Hercompileren was het eerste dat ik deed, hielp niet helaas. Rollbacken naar vorige versie is me ook nog niet gelukt. Heb zelfs de indruk dat het pakket dat ik geïnstalleerd heb, zijn oude versies uit de repository verwijdert, elkes keer er een nieuwe versie uitkomt.
gekkie schreef op zaterdag 1 april 2017 @ 11:29:
Mesa (clover) is een opensource stack die met de opensource radeon linux kernel driver kan werken en enige ondersteuning voor OpenCL biedt. Het is dus niet specifiek voor AMD.
Tevens werkt het echter nog lang niet feilloos (heb er zelf ook issues mee met de OpenCV library).
Je zou je bug wel netjes gedocumenteerd kunnen melden op de bugzilla bij freedesktop.org, wat ze niet weten dat faalt kunnen ze immers ook niet fixen, maar verwacht geen snelle fix, OpenCL (clover) lijkt niet echt een onderdeel te zijn waar veel ontwikkelaars zich actief mee bezig houden helaas.

De fglrx driver, of de nieuwere amdgpu variant werken wel prima maar zijn inderdaad lastiger te installeren (out-of-band kernel module moeten compileren en dan issues tegen komen als je dat tegen een andere nieuwere kernel probeert te doen.( losse patches daarvan zijn wel te vinden, makkelijkste is bij de arch-distributie).
Een bug-report submitten kan ik eventueel wel doen, want aangezien het op andere pc's wél werkt (en dan heb ik het zelfs al over 10+ pc's, want mijn studiegenoten gebruiken hetzelfde voorbeeldprogramma dat ik hierboven gepasted heb), vermoed ik dat er toch iets niet juist is tussen die update en mijn hardware.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 08-10 18:52
azziplekkus schreef op zondag 2 april 2017 @ 17:18:
[...]
Een bug-report submitten kan ik eventueel wel doen, want aangezien het op andere pc's wél werkt (en dan heb ik het zelfs al over 10+ pc's, want mijn studiegenoten gebruiken hetzelfde voorbeeldprogramma dat ik hierboven gepasted heb), vermoed ik dat er toch iets niet juist is tussen die update en mijn hardware.
Lastige is hooguit of het nou eigenlijk een issue is in Mesa (clover), libclc of LLVM.

Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
Wel, nu begin ik weer te twijfelen... Ik zit nu weer op een andere pc, en nu blijkt het hier ook niet te werken.
Heb wel alles pas vandaag geïnstalleerd (dus ook de nieuwste versie van mesa e.d.), en het is ook een 4 jaar oude ATI kaart. Dus dat zijn dan weer gelijkenissen met het andere toestel.

Op aanraden van een docent heb ik geprobeerd de AMD tools voor OpenCL op CPU te draaien, te installeren, maar dat is helaas ook niet gelukt... Ik ga één van de dagen eens een computer proberen te voorzien van Fedora, en kijken of het daar op lukt.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 08-10 18:52
Met de AMD SDK kun je inderdaad ook opencl op de cpu draaien.
Mjah echt plug en play is het helaas niet, wat dat betreft heeft nvidia het met cuda vooralsnog beter voor elkaar.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Aangezien het AMD OpenCL is, zit je waarschijnlijk tegen een compiler bug aan (trust me: story of my life). Ik zou eerst even kijken of je je driver kunt updaten naar de laatste versie.

De LLVM error betekend dat er een verkeerde address space aan een van je pointers zit (out of range, want die dingen gaan maar tot en met 3). Address spaces van pointers worden met __attribute__((address_space(x)) aangegeven in clang, de __global/__local etc keywords zijn daar gewoon shortcuts voor.

Ik heb je code locaal even proberen te compilen maar met de laatste driver versie lijkt het gewoon te compilen.

Je zou even kunnen kijken of je "-x spir" aan clBuildProgram kunt mee geven, en dan de LLVM IR (spir is bijna letterlijk een oude versie van LLVM IR) kunt opvragen van opencl:

code:
1
2
3
4
5
6
7
result = clBuildProgram(program, 1, &device, "-x spir -spir-std=1.2", NULL, NULL);

size_t size;
clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &size, nullptr);

void *elf = malloc(size);
clGetProgramInfo(program, CL_PROGRAM_BINARIES, sizeof(size_t), &elf, nullptr);


Dat levert een binary .elf file op die je met wat tools uit elkaar kunt halen. Je zult de ".llvmir" sectie moeten hebben. Die inhoud kun je vervolgens door llvm-dis.exe halen (voor LLVM versie 3.2 specifiek) om de textuele versie van je LLVM te kunnen inspecteren. Daar uit zou moeten blijken dat je een pointer hebt met een address space dat groter is dan 3.

Sterker nog, er zou moeten blijken dat je alleen maar pointers hebt naar address space 1 (__global).

Maar goed, omdat 't bij mij wel compiled op de laatste Win10 driver zul je wss alleen ff je driver (niet de APP SDK, maar de driver) moeten updaten.

Acties:
  • 0 Henk 'm!

  • Opifex
  • Registratie: September 2013
  • Laatst online: 07-10 20:07
Driver updaten kan ik nog eens proberen, maar de vorige pogingen mislukten, omdat er geen up-to-date Ubuntu driver meer bestaat voor deze kaart. Maar het klinkt inderdaad wel logisch dat dit het probleem is.

Het andere dat je voorstelt kan ik ook eens proberen, maar kan het geen grote slaagkans geven, aangezien ik een volledige OpenCL-Rookie ben :)
Pagina: 1