[ExM Users] Passing two dimensional numerical arrays to leaf functions

Tim Armstrong tim.g.armstrong at gmail.com
Wed Sep 24 15:40:18 CDT 2014


Thanks, I missed that usage of it.

On Wed, Sep 24, 2014 at 3:28 PM, Ozik, Jonathan <jozik at anl.gov> wrote:

>  It looks like line 542 in files.tcl calls blobutils_cast_to_int so I
> replaced that with blobutils_cast_to_long and it seems to work.
>
>  Jonathan
>
>  On Sep 24, 2014, at 3:07 PM, Ozik, Jonathan <jozik at anl.gov> wrote:
>
>  I believe I’ve applied the patches but it appears that the
> blobutils_cast_to_int is still being called with the same error resulting:
> $ turbine test-b-simple.tcl
>    0.000 MODE: SERVER
>    0.000 MODE: WORKER
>    0.000 MODE: WORKER
>    0.000 WORKERS: 2 RANKS: 0 - 1
>    0.000 SERVERS: 1 RANKS: 2 - 2
>    0.001 function:swift:constants
>    0.001 function:swift:constants
>    0.001 enter function: main
>    0.001 allocated u:b=<1> u:v=<2>
>    0.001 allocated file: u:data=<3>
>    0.001 store: <3>=path input.data
>    0.010 blob_read: input.data
> valgrind_assert(): failed: src/tcl/blob/blob.c:142
> valgrind_assert(): pointer is too long for int!
>
>
> ===================================================================================
> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
> =   PID 69379 RUNNING AT nsit-dhcp-250-217.uchicago.edu
> =   EXIT CODE: 6
> =   CLEANING UP REMAINING PROCESSES
> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>
> ===================================================================================
>
> FYI, this is by running the blob example (test-b-swift.tcl).
>
>  Jonathan
>
>  On Sep 24, 2014, at 2:41 PM, Tim Armstrong <tim.g.armstrong at gmail.com>
> wrote:
>
>  Sorry, I should've checked that it applied cleanly. The change in the
> patch is ok, it just didn't have the right context to apply.  These are the
> lines that needed to be added to blob.h
>
>
> +/** DOCD(blobutils_cast_long_to_int_ptr i, +long+ to +int*+.) */
> +      int*    blobutils_cast_long_to_int_ptr      (long l);
> +/** DOCD(blobutils_cast_long_to_const_int_ptr i, +long+ to +const int*+.)
> */
> +const int*    blobutils_cast_long_to_const_int_ptr(long l);
> +/** DOCD(blobutils_cast_long_to_dbl_ptr i, +long+ to +double*+.) */
> +      double* blobutils_cast_long_to_dbl_ptr      (long l);
> +/** DOCD(blobutils_cast_long_to_const_dbl_ptr i, +long+ to +const
> double*+.) */
> +const double* blobutils_cast_long_to_const_dbl_ptr(long l);
>
> You shouldn't need any additional patches.  An updated patch that includes
> all the fixes is attached.
>
>  - Tim
>
> On Wed, Sep 24, 2014 at 2:00 PM, Ozik, Jonathan <jozik at anl.gov> wrote:
>
>> Thanks Tim.
>> It looks like my blob.h file is a little shorter than yours. So I got a
>> patching failure:
>> $ patch -p 5 < ~/Downloads/turbine-0.5.1-pointer-fix.patch
>> patching file lib/blob.tcl
>> patching file src/tcl/blob/blob.c
>> patching file src/tcl/blob/blob.h
>> Hunk #1 FAILED at 184.
>> 1 out of 1 hunk FAILED -- saving rejects to file src/tcl/blob/blob.h.rej
>>
>>  I haven’t modified blob.h from the 0.6.1 version, so maybe there are
>> more patches that I should apply?
>>
>>  Jonathan
>>
>>   On Sep 24, 2014, at 1:49 PM, Tim Armstrong <tim.g.armstrong at gmail.com>
>> wrote:
>>
>>    Hi Jonathan,
>>    This looks like another bug that hadn't manifested in our tests.
>> I've got a fix for it and am in the process of putting together a new
>> release.  In the meantime, you can patch the source if needed with the
>> attached patch.
>>
>>  cd turbine
>> patch -p 5 < turbine-0.5.1-pointer-fix.patch
>>
>>  - Tim
>>
>> On Tue, Sep 23, 2014 at 3:54 PM, Ozik, Jonathan <jozik at anl.gov> wrote:
>>
>>> I’m now seeing this error regarding pointer length:
>>>
>>>  $ turbine test-b-simple.tcl
>>>    0.000 MODE: WORKER
>>>    0.000 MODE: WORKER
>>>    0.000 MODE: SERVER
>>>    0.000 WORKERS: 2 RANKS: 0 - 1
>>>    0.000 SERVERS: 1 RANKS: 2 - 2
>>>    0.001 function:swift:constants
>>>    0.001 function:swift:constants
>>>    0.001 enter function: main
>>>    0.002 allocated u:b=<1> u:v=<2>
>>>    0.002 allocated file: u:data=<3>
>>>    0.003 store: <3>=path input.data
>>>    0.003 blob_read: input.data
>>> valgrind_assert(): failed: src/tcl/blob/blob.c:142
>>> valgrind_assert(): pointer is too long for int!
>>>
>>>  Jonathan
>>>
>>>  On Sep 23, 2014, at 11:18 AM, Tim Armstrong <tim.g.armstrong at gmail.com>
>>> wrote:
>>>
>>>  Oops, one additional fix was needed:
>>>
>>> -     proc blob_read_body { result input } {
>>> +     proc blob_read_body { result src } {
>>>         set val [ retrieve_decr_file $src ]
>>> -       set input_name [ dict get $val path ]
>>> +       set input_name [ local_file_path $val ]
>>>
>>>
>>> On Tue, Sep 23, 2014 at 11:08 AM, Ozik, Jonathan <jozik at anl.gov> wrote:
>>>
>>>>  Thanks Tim!
>>>>
>>>>
>>>> On Sep 23, 2014, at 10:51 AM, Tim Armstrong <tim.g.armstrong at gmail.com>
>>>> wrote:
>>>>
>>>>   There's a bug in one of our library functions.  Thanks for
>>>> reporting.  I've fixed it in the repository so it'll get into the next
>>>> point release. If you want to quickly patch your version as a workaround,
>>>> you can edit line 535 of turbine/lib/files.tcl in the Swift/T source as
>>>> below, then run "make install" to install the fixed version of the file.
>>>>
>>>> -    proc blob_read_body { result input } {
>>>> +   proc blob_read_body { result src } {
>>>>
>>>>  - Tim
>>>>
>>>> On Tue, Sep 23, 2014 at 9:47 AM, Ozik, Jonathan <jozik at anl.gov> wrote:
>>>>
>>>>> I’m attempting the blob example (
>>>>> http://swift-lang.org/Swift-T/leaf.html#_complete_example_3_c_function_with_binary_data)
>>>>> and am seeing this error:
>>>>>
>>>>> >> turbine test-b-simple.tcl
>>>>>    0.000 MODE: SERVER
>>>>>    0.000 MODE: WORKER
>>>>>    0.000 WORKERS: 2 RANKS: 0 - 1
>>>>>    0.000 SERVERS: 1 RANKS: 2 - 2
>>>>>    0.000 MODE: WORKER
>>>>>    0.001 function:swift:constants
>>>>>    0.001 function:swift:constants
>>>>>    0.001 enter function: main
>>>>>    0.002 allocated u:b=<1> u:v=<2>
>>>>>    0.002 allocated file: u:data=<3>
>>>>>    0.002 store: <3>=path input.data
>>>>> CAUGHT ERROR:
>>>>> can't read "src": no such variable
>>>>>     while executing
>>>>> "retrieve_decr_file $src "
>>>>>     (procedure "blob_read_body" line 2)
>>>>>     invoked from within
>>>>> "blob_read_body 1 {file 3 is_mapped 0}"
>>>>> Turbine worker task error in: blob_read_body 1 {file 3 is_mapped 0}
>>>>>     invoked from within
>>>>> "c::worker_loop $WORK_TYPE(WORK)"
>>>>>     (procedure "worker" line 28)
>>>>>     invoked from within
>>>>> "worker $rules $startup_cmd"
>>>>>     (procedure "enter_mode_unchecked" line 5)
>>>>>     invoked from within
>>>>> "enter_mode_unchecked $rules $startup_cmd"
>>>>>     (procedure "enter_mode" line 5)
>>>>>     invoked from within
>>>>> "enter_mode $rules $startup_cmd "
>>>>> CALLING adlb::abort
>>>>> ADLB_Abort(1)
>>>>> MPI_Abort(1)
>>>>> application called MPI_Abort(MPI_COMM_WORLD, 1) - process 0
>>>>>
>>>>> It appears that this is being triggered by the line:
>>>>> printf("size(v) = %i", size(v));
>>>>>
>>>>> Any thoughts on what might be going on?
>>>>>
>>>>> I’m testing this on a Mac OS X setup.
>>>>>
>>>>> Jonathan
>>>>>
>>>>> On Sep 22, 2014, at 10:20 PM, Ozik, Jonathan <jozik at anl.gov> wrote:
>>>>>
>>>>> > Thank you Justin. That should work great.
>>>>> >
>>>>> > Jonathan
>>>>> >
>>>>> > On Sep 22, 2014, at 8:05 PM, Justin M Wozniak <wozniak at mcs.anl.gov>
>>>>> wrote:
>>>>> >
>>>>> >> Hi
>>>>> >>   You can do this based on the instructions for C binary data:
>>>>> >>
>>>>> >>
>>>>> http://swift-lang.org/Swift-T/leaf.html#_complete_example_3_c_function_with_binary_data
>>>>> >>
>>>>> >> The Swift blob is a void* - you can cast to whatever you want.  You
>>>>> can cast it to a double* that is actually a 2D array (following BLAS
>>>>> conventions).
>>>>> >>
>>>>> >>   Justin
>>>>> >>
>>>>> >> On 9/22/2014 6:32 PM, Ozik, Jonathan wrote:
>>>>> >>> Hello all,
>>>>> >>>
>>>>> >>> I’m curious about how people generally go about passing (and
>>>>> returning) two (or n-) dimensional arrays to leaf functions. Are there
>>>>> simple examples using SWIG and Tcl? Or are file based approaches used via
>>>>> app fuctions?
>>>>> >>>
>>>>> >>> Any thoughts would be appreciated,
>>>>> >>>
>>>>> >>> Jonathan
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>> _______________________________________________
>>>>> >>> ExM-user mailing list
>>>>> >>> ExM-user at lists.mcs.anl.gov
>>>>> >>> https://lists.mcs.anl.gov/mailman/listinfo/exm-user
>>>>> >>
>>>>> >> --
>>>>> >> Justin M Wozniak
>>>>> >>
>>>>> >
>>>>> > _______________________________________________
>>>>> > ExM-user mailing list
>>>>> > ExM-user at lists.mcs.anl.gov
>>>>> > https://lists.mcs.anl.gov/mailman/listinfo/exm-user
>>>>>
>>>>> _______________________________________________
>>>>> ExM-user mailing list
>>>>> ExM-user at lists.mcs.anl.gov
>>>>> https://lists.mcs.anl.gov/mailman/listinfo/exm-user
>>>>>
>>>>
>>>>
>>>  _______________________________________________
>>> ExM-user mailing list
>>> ExM-user at lists.mcs.anl.gov
>>> https://lists.mcs.anl.gov/mailman/listinfo/exm-user
>>>
>>>
>>>
>>   <turbine-0.5.1-pointer-fix.patch>
>>
>>
>>
>  <turbine-0.5.1-pointer-fix-v2.patch>
>
>
>  _______________________________________________
> ExM-user mailing list
> ExM-user at lists.mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/exm-user
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/exm-user/attachments/20140924/b284be49/attachment.html>


More information about the ExM-user mailing list