#3334 closed defect (fixed)
ParModelica: failure using parallel function
| Reported by: | Gustaf Thorslund | Owned by: | Mahder Alemseged Gebremedhin |
|---|---|---|---|
| Priority: | blocker | Milestone: | 1.9.4 |
| Component: | ParModelica | Version: | trunk |
| Keywords: | Cc: | Mahder Alemseged Gebremedhin |
Description
Suppose we had a small testcase where a parallel function was called from within a parfor-loop. Suppose the testcase looked something like the following:
package ParFuncTest constant Integer globalSizes = 10; constant Integer localSizes = 2; constant Integer elements = 10; parallel function f parglobal input Integer i; parglobal output Integer o; algorithm o := 10*i; annotation(Inline=true); end f; function test input Integer a; output Integer result[elements]; protected Integer v[elements] = {i for i in 1:elements}; parglobal Integer pv[elements]; parglobal Integer pr[elements]; parglobal Integer pa; parglobal Integer pi; algorithm oclSetNumThreadsGlobalLocal1D({globalSizes}, {localSizes}); pa := a; pv := v; parfor i in 1 : elements loop pi := i; pr[i] := pa * pv[i] * f(pi); end parfor; result := pr; end test; end ParFuncTest;
Now suppose we call the function 'test' from a script, maybe something like:
setCommandLineOptions("+d=noevalfunc +g=ParModelica -v=1"); getErrorString(); loadFile("ParFuncTest.mo"); getErrorString(); x:=ParFuncTest.test(5); getErrorString();
Suppose we try this on host, suppose the host is named 'fermi'...
$ omc ParFuncTest.mos
true
""
true
""
- 3 OpenCL devices available.
1 CL_DEVICE_NAME : Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
1 CL_DRIVER_VERSION : 2.0
1 CL_DEVICE_MAX_COMPUTE_UNITS : 16
1 CL_DEVICE_MAX_CLOCK_FREQUENCY : 1600
1 CL_DEVICE_LOCAL_MEM_SIZE : 32 KB
1 CL_DEVICE_GLOBAL_MEM_SIZE: 24107 MB
1 CL_DEVICE_MAX_MEM_ALLOC_SIZE: 6026 MB
1 CL_DEVICE_MAX_PARAMETER_SIZE: 4096 MB
1 CL_DEVICE_MAX_WORK_GROUP_SIZE: 1024
1 CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE : 0
.
.
.
- Select your device: 1
: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/OCLuMvo6t.cl(55): error: expression must have arithmetic type
(*integer_array_element_addr_c99_1(&_pr, 1, /* modelica_integer */ (modelica_integer)_i)) = ((modelica_integer)_pa * ((*integer_array_element_addr_c99_1(&_pv, 1, /* modelica_integer */ (modelica_integer)_i)) * omc_ParFuncTest_f((modelica_integer)_pi)));
^
/tmp/OCLuMvo6t.cl(62): error: function "ocl_device_alloc" declared implicitly
tmp1.c1 = ocl_device_alloc(sizeof(modelica_integer));
^
/tmp/OCLuMvo6t.cl(67): error: function "copy_assignment_helper_integer"
declared implicitly
copy_assignment_helper_integer(&tmp1.c1, &_o);
^
3 errors detected in the compilation of "/tmp/OCLuMvo6t.cl".
Internal error: clc compiler invocation failed.
Then suppose we suddenly wake up and realise this was just a dream. Maybe a nightmare, but still a dream too good to be true... Somewhere in the dream there was a horrifying part with failure on other devices too, but that's already part of dream #3326, even if the failures where earlier now...
Change History (5)
comment:1 by , 10 years ago
| Status: | new → accepted |
|---|
comment:2 by , 10 years ago
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
comment:3 by , 10 years ago
| Milestone: | Future → 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.

Fixed in 010b68623314733c334b5da02ecbf3cbbbc1954c/OMCompiler.
Test added in a243f9eb9b3638c7b233edbe1ad27a479af3db58/OpenModelica-testsuite