Changes between Initial Version and Version 1 of Ticket #3336


Ignore:
Timestamp:
2015-05-26T11:07:44Z (10 years ago)
Author:
Gustaf Thorslund
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #3336 – Description

    initial v1  
    44{{{#!mo
    55package ParArg
    6   constant Integer nx = 10;
    7 
     6 constant Integer nx = 10;
     7 
    88  function mult
    99    input Real a;
     
    2525  function multParArg
    2626    input Real a;
    27     parglobal input Real m[nx];
    28     parglobal output Real result[nx];
     27    parglobal input Real mpm[nx];
     28    parglobal output Real mpresult[nx];
    2929  protected
    3030    parglobal Real pa;
     
    3232    pa := a;
    3333    parfor i in 1:nx loop
    34       result[i] := m[i]*pa;
     34      mpresult[i] := mpm[i]*pa;
    3535    end parfor;
    3636  end multParArg;
     
    4343    Real pm[nx];
    4444  algorithm
    45     result := mult(10,m);
     45    result := mult(a,m);
    4646  end Test;
    4747
     
    5151  protected
    5252    Real m[nx] = {i for i in 1:nx};
     53    parglobal Real pa;
    5354    parglobal Real pm[nx];
    5455    parglobal Real presult[nx];
    5556  algorithm
     57    pa := a;
    5658    pm := m;
    57     presult := multParArg(10,m);
     59    presult := multParArg(pa,pm);
    5860    result := presult;
    5961  end TestParArg;
     
    8183Here is the result, showing how the second test using parallel variables as argument fails (probably due to wrong code generated):
    8284{{{#!bash
    83 $ omc ParArg.mos
    84 true
    85 ""
    86 true
    87 ""
    88 true
    89 ""
    90          :Using flags -I"/home/gusth/src/OpenModelica/build/include/omc/c/"
    91         OpenCL initialization :        2262.165000 ms
    92         Kernel Execution      :        0.937000 ms
    93 {10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0}
    94 ""
    9585Error processing file: ParArg.mos
    96 Error: Error building simulator. Build log: g++ -I"/home/gusth/src/OpenModelica/build/include/omc/c"   -fPIC -O0 -falign-functions -march=native   -c -o ParArg_TestParArg.o ParArg_TestParArg.c
     86Error: Error building simulator. Build log: g++ -I"/home/gustaf/src/OpenModelica/build/include/omc/c"   -fPIC -O0 -march=native   -c -o ParArg_TestParArg.o ParArg_TestParArg.c
     87ParArg_TestParArg.c: In function ‘real_array omc_ParArg_TestParArg(threadData_t*, modelica_real)’:
     88ParArg_TestParArg.c:41:66: error: could not convert ‘_pm’ from ‘device_real_array {aka dev_arr}’ to ‘real_array {aka base_array_s}’
     89   copy_real_array_data(omc_ParArg_multParArg(threadData, _pa, _pm), &_presult);
     90                                                                  ^
    9791ParArg_TestParArg.c: In function ‘device_real_array omc_ParArg_multParArg(threadData_t*, modelica_real, real_array)’:
    98 ParArg_TestParArg.c:139:52: error: call of overloaded ‘ocl_set_kernel_arg(_cl_kernel*&, int&, void*&)’ is ambiguous
    99    ocl_set_kernel_arg(tmp4, parfor_1_arg_nr, _m.data); ++parfor_1_arg_nr;
    100                                                     ^
    101 ParArg_TestParArg.c:139:52: note: candidates are:
     92ParArg_TestParArg.c:142:54: error: call of overloaded ‘ocl_set_kernel_arg(_cl_kernel*&, int&, void*&)’ is ambiguous
     93   ocl_set_kernel_arg(tmp4, parfor_1_arg_nr, _mpm.data); ++parfor_1_arg_nr;
     94                                                      ^
     95ParArg_TestParArg.c:142:54: note: candidates are:
    10296In file included from ParArg_TestParArg.h:8:0,
    10397                 from ParArg_TestParArg.c:1:
    104 /home/gusth/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:84:6: note: void ocl_set_kernel_arg(cl_kernel, int, cl_mem) <near match>
     98/home/gustaf/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:84:6: note: void ocl_set_kernel_arg(cl_kernel, int, cl_mem) <near match>
    10599 void ocl_set_kernel_arg(cl_kernel kernel, int arg_nr, cl_mem in_arg);
    106100      ^
    107 /home/gusth/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:84:6: note:   no known conversion for argument 3 from ‘void*’ to ‘cl_mem {aka _cl_mem*}’
    108 /home/gusth/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:88:6: note: void ocl_set_kernel_arg(cl_kernel, int, modelica_integer) <near match>
     101/home/gustaf/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:84:6: note:   no known conversion for argument 3 from ‘void*’ to ‘cl_mem {aka _cl_mem*}’
     102/home/gustaf/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:88:6: note: void ocl_set_kernel_arg(cl_kernel, int, modelica_integer) <near match>
    109103 void ocl_set_kernel_arg(cl_kernel kernel, int arg_nr, modelica_integer in_arg);
    110104      ^
    111 /home/gusth/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:88:6: note:   no known conversion for argument 3 from ‘void*’ to ‘modelica_integer {aka long int}’
    112 ParArg_TestParArg.c:140:48: error: ‘real_array’ has no member named ‘info_dev’
    113    ocl_set_kernel_arg(tmp4, parfor_1_arg_nr, _m.info_dev); ++parfor_1_arg_nr;
    114                                                 ^
     105/home/gustaf/src/OpenModelica/build/include/omc/c/ParModelica/explicit/openclrt/omc_ocl_interface.h:88:6: note:   no known conversion for argument 3 from ‘void*’ to ‘modelica_integer {aka long int}’
     106ParArg_TestParArg.c:143:50: error: ‘real_array’ has no member named ‘info_dev’
     107   ocl_set_kernel_arg(tmp4, parfor_1_arg_nr, _mpm.info_dev); ++parfor_1_arg_nr;
     108                                                  ^
    115109ParArg_TestParArg.c: In function ‘void* boxptr_ParArg_multParArg(threadData_t*, modelica_metatype, modelica_metatype)’:
    116 ParArg_TestParArg.c:160:45: error: could not convert ‘_result’ from ‘device_real_array {aka dev_arr}’ to ‘base_array_t {aka base_array_s}’
    117    out_result = mmc_mk_modelica_array(_result);
    118                                              ^
     110ParArg_TestParArg.c:163:49: error: could not convert ‘_mpresult’ from ‘device_real_array {aka dev_arr}’ to ‘base_array_t {aka base_array_s}’
     111   out_mpresult = mmc_mk_modelica_array(_mpresult);
     112                                                 ^
     113ParArg_TestParArg.makefile:18: recipe for target 'ParArg_TestParArg' failed
    119114make: *** [ParArg_TestParArg] Error 1
    120115