Opened 9 years ago

Closed 9 years ago

Last modified 8 years ago

#3335 closed defect (fixed)

ParModelica: parfor with for inside creates broken OpenCL code

Reported by: gustaf Owned by: mahge930
Priority: high Milestone: 1.9.4
Component: ParModelica Version: trunk
Keywords: Cc:

Description

Given the following test functions:

package ParArray
  constant Integer globalSizes = 10;
  constant Integer localSizes = 2;
  constant Integer nx = 10;
  constant Integer ny = 10;

  function OneDim
    input Real a;
    output Real result[nx];
  protected
    parglobal Real pa;
    parglobal Real presult[nx];
  algorithm
    pa := a;
    parfor i in 1:nx loop
      presult[i] := i*pa;
    end parfor;
    result := presult;
  end OneDim;
  
  function TwoDim1
    input Real a;
    output Real result[nx,ny];
  protected
    parglobal Real pa;
    parglobal Real presult[nx,ny];
  algorithm
    pa := a;
    parfor i in 1:nx loop
      presult[i,1] := i*1*pa;
    end parfor;
    result := presult;
  end TwoDim1;

  function TwoDim2
    input Real a;
    output Real result[nx,ny];
  protected
    parglobal Real pa;
    parglobal Real presult[nx,ny];
  algorithm
    pa := a;
    parfor i in 1:nx loop
      for j in 1:ny loop
        presult[i,j] := i*j*pa;
      end for;
    end parfor;
    result := presult;
  end TwoDim2;
end ParArray;

And a little script:

setCommandLineOptions("+d=noevalfunc +g=ParModelica -v=1");
getErrorString();

setDefaultOpenCLDevice(1);
getErrorString();

loadFile("ParArray.mo");
getErrorString();

// x:=ParArray.OneDim(5);
getErrorString();

// y:=ParArray.TwoDim1(5);
getErrorString();

z:=ParArray.TwoDim2(5);
getErrorString();

The following error is produced:

$ omc ParArray.mos 
true
""
true
""
true
""
""
""
   :Using flags -I"/home/gusth/src/OpenModelica/build/include/omc/c/"
Error building program:
CL_BUILD_PROGRAM_FAILURE 
Build failed: Errors detected in compilation of OpenCL code:
CL_PROGRAM_BUILD_LOG:  
/tmp/OCLdHvhO6.cl(45): error: function "omc_assert_withEquationIndexes"
          declared implicitly
        omc_assert_withEquationIndexes(threadData, info, equationIndexes, "assertion range step != 0 failed");
        ^

/tmp/OCLdHvhO6.cl(45): error: identifier "threadData" is undefined
        omc_assert_withEquationIndexes(threadData, info, equationIndexes, "assertion range step != 0 failed");
                                       ^

/tmp/OCLdHvhO6.cl(45): error: identifier "equationIndexes" is undefined
        omc_assert_withEquationIndexes(threadData, info, equationIndexes, "assertion range step != 0 failed");
                                                         ^

3 errors detected in the compilation of "/tmp/OCLdHvhO6.cl".

Internal error: clc compiler invocation failed.

OneDim and TwoDim1 works as expected, but are disabled in the above test.

Test performed on fermi with Intel driver.

Change History (4)

comment:1 Changed 9 years ago by mahge930

  • Resolution set to fixed
  • Status changed from new to closed

comment:2 Changed 9 years ago by dietmarw

  • Milestone changed from Future to 1.9.4

Sorting these closed tickets away from "Future". Since they were closed after the last 1.9.3 release, it's very likely that they should have been part of the 1.9.4 release.

comment:3 Changed 8 years ago by sjoelund.se

  • Milestone changed from 1.9.4 to 1.9.4-1.9.x

Milestone renamed

comment:4 Changed 8 years ago by sjoelund.se

  • Milestone changed from 1.9.4-1.9.x to 1.9.4

Milestone renamed

Note: See TracTickets for help on using tickets.