Excellent Dana, very clear. Thanks!

Elvis

2016-09-22 23:11 GMT+02:00 Dana Robinson <derob...@hdfgroup.org>:
> The FAQ has been updated. Thanks!
>
> https://support.hdfgroup.org/hdf5-quest.html#tsafe
>
>
> Dana
>
> -----Original Message-----
> From: Hdf-forum [mailto:hdf-forum-boun...@lists.hdfgroup.org] On Behalf Of 
> Elvis Stansvik
> Sent: Thursday, September 22, 2016 2:35 PM
> To: HDF Users Discussion List <hdf-forum@lists.hdfgroup.org>
> Subject: Re: [Hdf-forum] Simply using the library from separate threads (C++ 
> API)
>
> 2016-09-22 20:25 GMT+02:00 Werner Benger <wer...@cct.lsu.edu>:
>> There was some recent discussion that only the C API of HDF5 is
>> threadsafe, but not the C++ layer on top of it. To be safe you should
>> probably keep at the C API.
>
> Aha. Thanks for the heads up Werner.
>
> The FAQ has this to say:
>
>     "By default, you cannot build either Parallel HDF5 with C++ or Parallel 
> HDF5 with the thread-safe feature. You will receive a configure error if you 
> try either of these combinations."
>
> But it does not say that C++ with the thread-safe is unsupported (when using 
> serial HDF5). Maybe the FAQ should be updated?
>
> This is quite unfortunate since our app is C++ and the C++ API is so much 
> more convenient, but I guess I'll port our code to the C API (it's not that 
> much code).
>
> So far we haven't had any problems under Ubuntu (where the package is built 
> with --enable-threadsafe --enable-unsupported), but I guess we've just been 
> lucky.
>
> Elvis
>
>>
>> Cheers,
>>
>>            Werner
>>
>>
>>
>> On 22.09.2016 20:15, Elvis Stansvik wrote:
>>>
>>> 2016-09-22 19:58 GMT+02:00 Scot Breitenfeld <brtn...@hdfgroup.org>:
>>>>
>>>> Yes it is still the case that you cannot enable C++ or Fortran (or
>>>> the High Level APIs) when threadsafe is enabled. —enable-unsupported
>>>> can override this behavior.
>>>
>>> Aha, so that's why I had to enable that option :)
>>>
>>> I see now that this is what the Ubuntu package does. I'll ask the
>>> Arch package maintainer if he's willing to do the same.
>>>
>>> I've confirmed now that I don't have any problems with my program if
>>> I re-built the Arch package with --enable-threadsafe
>>> --enable-unsupported.
>>>
>>> Thanks for the info!
>>>
>>> Elvis
>>>
>>>> Scot
>>>>
>>>>
>>>>> On Sep 22, 2016, at 12:36 PM, Elvis Stansvik
>>>>> <elvis.stans...@orexplore.com> wrote:
>>>>>
>>>>> 2016-09-22 19:23 GMT+02:00 Elvis Stansvik
>>>>> <elvis.stans...@orexplore.com>:
>>>>>>
>>>>>> 2016-09-22 19:17 GMT+02:00 Dana Robinson <derob...@hdfgroup.org>:
>>>>>>>
>>>>>>> Hi Elvis,
>>>>>>>
>>>>>>> Did you build your HDF5 library with thread-safety enabled
>>>>>>> (--enable-threadsafe w/ configure)?
>>>>>>
>>>>>> Hi Dana, and thanks for the quick reply. I think we just e-mailed
>>>>>> past each other (see my previous mail).
>>>>>>
>>>>>> I wrongly called it --thread-safe in that mail, but it was
>>>>>> --enable-threadsafe I was referring to. But yes, I'm pretty sure
>>>>>> this is the problem.
>>>>>>
>>>>>> I'm rebuilding the Arch package now with --enable-threadsafe.
>>>>>
>>>>> I spoke a little too soon. I now found this bug filed against the
>>>>> Arch
>>>>> package:
>>>>>
>>>>>     https://bugs.archlinux.org/task/33805
>>>>>
>>>>> The reporter asked the package maintainer to add
>>>>> --enable-threadsafe, but the package maintainer closed the bug
>>>>> saying that --enable-threadsafe is not compatible with the Fortran
>>>>> build (in Arch, the C++ and Fortran APIs are bundled into one
>>>>> package hdf5-cpp-fortran).
>>>>>
>>>>> Anyone know if that is still the case? If so I can't open a bug
>>>>> against the package again asking for --enable-threadsafe to be added.
>>>>> But I could open a bug asking the package to be split I guess.
>>>>>
>>>>> Elvis
>>>>>
>>>>>> Elvis
>>>>>>
>>>>>>> Dana Robinson
>>>>>>> Software Engineer
>>>>>>> The HDF Group
>>>>>>>
>>>>>>> Get Outlook for Android
>>>>>>>
>>>>>>> From: Elvis Stansvik
>>>>>>> Sent: Thursday, September 22, 12:43
>>>>>>> Subject: [Hdf-forum] Simply using the library from separate
>>>>>>> threads (C++
>>>>>>> API)
>>>>>>> To: HDF Users Discussion List
>>>>>>>
>>>>>>> Hi all, I'm using the C++ API to read HDF5 files from separate
>>>>>>> threads (no writing). None of my threads read the same file, but
>>>>>>> they do execute simultaneously. The reason I'm using threading is
>>>>>>> not to speed things up or get better throughput, but simply to
>>>>>>> not block the UI (it's Qt
>>>>>>> application)
>>>>>>> while reading. So this is not about "Parallel HDF5" or anything,
>>>>>>> just simply using the serial library "from scratch" from multiple
>>>>>>> threads. This has been working fine when testing on Ubuntu 16.04
>>>>>>> (our target OS), which has
>>>>>>> HDF5
>>>>>>> 1.8.16. I recently tested on my personal Arch Linux machine
>>>>>>> though, which has HDF5 1.10.0, and got this segmentation fault:
>>>>>>> (gdb) bt #0
>>>>>>> 0x00007ffff67c57d9 in H5SL_search () from /usr/lib/libhdf5.so.100
>>>>>>> #1
>>>>>>> 0x00007ffff678dd19 in H5P_copy_plist () from
>>>>>>> /usr/lib/libhdf5.so.100
>>>>>>> #2
>>>>>>> 0x00007ffff66a7fc0 in H5F_new () from /usr/lib/libhdf5.so.100 #3
>>>>>>> 0x00007ffff66a8f55 in H5F_open () from /usr/lib/libhdf5.so.100 #4
>>>>>>> 0x00007ffff66a155d in H5Fopen () from /usr/lib/libhdf5.so.100 #5
>>>>>>> 0x00007ffff6b79546 in H5::H5File::p_get_file(char const*,
>>>>>>> unsigned int, H5::FileCreatPropList const&, H5::FileAccPropList
>>>>>>> const&) () from
>>>>>>> /usr/lib/libhdf5_cpp.so.100 #6 0x00007ffff6b79750 in
>>>>>>> H5::H5File::H5File(char const*, unsigned int,
>>>>>>> H5::FileCreatPropList const&, H5::FileAccPropList
>>>>>>> const&) () from /usr/lib/libhdf5_cpp.so.100 #7 0x000000000041f00e
>>>>>>> in HDF5ImageReader::RequestInformation (this=0x7fffbc002de0,
>>>>>>> request=0x7fffbc010da0, inputVector=0x0,
>>>>>>> outputVector=0x7fffbc0039d0) at
>>>>>>>
>>>>>>> /home/estan/Projekt/orexplore/dev/src/insight/src/model/HDF5Image
>>>>>>> Reader.cpp:91
>>>>>>> #8 0x00007fffee8200d0 in
>>>>>>> vtkExecutive::CallAlgorithm(vtkInformation*,
>>>>>>> int,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #9 0x00007fffee837fa9 in
>>>>>>> vtkStreamingDemandDrivenPipeline::ExecuteInformation(vtkInformati
>>>>>>> on*, vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #10 0x00007fffee81ce05
>>>>>>> in vtkDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #11 0x00007fffee835c55
>>>>>>> in
>>>>>>> vtkStreamingDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #12 0x00007fffee816e1a
>>>>>>> in
>>>>>>> vtkCompositeDataPipeline::ForwardUpstream(vtkInformation*) ()
>>>>>>> from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #13 0x00007fffee81ccb5
>>>>>>> in vtkDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #14 0x00007fffee835c55
>>>>>>> in
>>>>>>> vtkStreamingDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #15 0x00007fffee816e1a
>>>>>>> in
>>>>>>> vtkCompositeDataPipeline::ForwardUpstream(vtkInformation*) ()
>>>>>>> from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #16 0x00007fffee81ccb5
>>>>>>> in vtkDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #17 0x00007fffee835c55
>>>>>>> in
>>>>>>> vtkStreamingDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #18 0x00007fffee816e1a
>>>>>>> in
>>>>>>> vtkCompositeDataPipeline::ForwardUpstream(vtkInformation*) ()
>>>>>>> from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #19 0x00007fffee81ccb5
>>>>>>> in vtkDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #20 0x00007fffee835c55
>>>>>>> in
>>>>>>> vtkStreamingDemandDrivenPipeline::ProcessRequest(vtkInformation*,
>>>>>>> vtkInformationVector**, vtkInformationVector*) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #21 0x00007fffee836482
>>>>>>> in
>>>>>>> vtkStreamingDemandDrivenPipeline::Update(int) () from
>>>>>>> /usr/lib/libvtkCommonExecutionModel.so.1 #22 0x00007ffff1289a76
>>>>>>> in
>>>>>>> vtkAbstractVolumeMapper::GetBounds() () from
>>>>>>> /usr/lib/libvtkRenderingCore.so.1 #23 0x00007ffff13459f9 in
>>>>>>> vtkVolume::GetBounds() () from /usr/lib/libvtkRenderingCore.so.1
>>>>>>> #24
>>>>>>> 0x000000000043f235 in createVolume (image=..., from=0,
>>>>>>> to=2.7803999378532183, opacityFunction=..., colorFunction=...) at
>>>>>>>
>>>>>>> /home/estan/Projekt/orexplore/dev/src/insight/src/view/Pipeline.c
>>>>>>> pp:123 #25
>>>>>>> 0x00000000004295c4 in CreateVolume::operator() (this=0x829248,
>>>>>>> image=...) at
>>>>>>> /home/estan/Projekt/orexplore/dev/src/insight/src/view/Pipeline.h
>>>>>>> :45
>>>>>>> #26
>>>>>>> 0x000000000042bc7a in
>>>>>>> QtConcurrent::MappedEachKernel::const_iterator,
>>>>>>> CreateVolume>::runIteration (this=0x829210, it=...,
>>>>>>> result=0x7fffbc002da8)
>>>>>>> at /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:176 #27
>>>>>>> 0x000000000042bd5d in
>>>>>>> QtConcurrent::MappedEachKernel::const_iterator,
>>>>>>> CreateVolume>::runIterations (this=0x829210,
>>>>>>> sequenceBeginIterator=...,
>>>>>>> begin=1, end=2, results=0x7fffbc002da8) at
>>>>>>> /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:186 #28
>>>>>>> 0x000000000042c4e1 in
>>>>>>> QtConcurrent::IterateKernel::const_iterator,
>>>>>>> vtkSmartPointer >::forThreadFunction (this=0x829210) at
>>>>>>> /usr/include/qt/QtConcurrent/qtconcurrentiteratekernel.h:256 #29
>>>>>>> 0x000000000042bedc in
>>>>>>> QtConcurrent::IterateKernel::const_iterator,
>>>>>>> vtkSmartPointer >::threadFunction (this=0x829210) at
>>>>>>> /usr/include/qt/QtConcurrent/qtconcurrentiteratekernel.h:218 #30
>>>>>>> 0x00007ffff7bd5cfd in QtConcurrent::ThreadEngineBase::run() ()
>>>>>>> from
>>>>>>> /usr/lib/libQt5Concurrent.so.5 #31 0x00007ffff489a01f in ?? ()
>>>>>>> from
>>>>>>> /usr/lib/libQt5Core.so.5 #32 0x00007ffff489dd78 in ?? () from
>>>>>>> /usr/lib/libQt5Core.so.5 #33 0x00007fffeb3f5454 in start_thread
>>>>>>> () from
>>>>>>> /usr/lib/libpthread.so.0 #34 0x00007fffec5f07df in clone () from
>>>>>>> /usr/lib/libc.so.6 (gdb) Before I start digging into what is
>>>>>>> happening here I'd just like to ask: Do I have to do something
>>>>>>> special when using the
>>>>>>> HDF5
>>>>>>> library from two different threads? I'm not reading the same
>>>>>>> files or anything, it's simply two completely separate usages of
>>>>>>> the library in threads that run in parallel. Does the library
>>>>>>> have any global structures or something that must be initialized
>>>>>>> before spawning any threads that use it?
>>>>>>> The reason I'm a little worried is that perhaps I've just been
>>>>>>> lucky when running under Ubuntu / HDF5 1.8.16. My usage in each
>>>>>>> thread basically looks
>>>>>>> like: 1) Create a H5::H5File 2) Open a dataset using
>>>>>>> file.openDataset
>>>>>>> 3) Get
>>>>>>> the dataspace for the dataset and select a hyperslab 4) Create a
>>>>>>> memory dataspace 5) Perform a single read(..) operation from the
>>>>>>> dataset dataspace to the memory dataspace And it's always
>>>>>>> different files that the threads work with. Is there some step 0
>>>>>>> I'm missing? Thanks in advance for any advice. Elvis
>>>>>>> _______________________________________________
>>>>>>> Hdf-forum is
>>>>>>> for HDF software users discussion. Hdf-forum@lists.hdfgroup.org
>>>>>>>
>>>>>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgro
>>>>>>> up.org
>>>>>>> Twitter: https://twitter.com/hdf5
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Hdf-forum is for HDF software users discussion.
>>>>>>> Hdf-forum@lists.hdfgroup.org
>>>>>>>
>>>>>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgro
>>>>>>> up.org
>>>>>>> Twitter: https://twitter.com/hdf5
>>>>>
>>>>> _______________________________________________
>>>>> Hdf-forum is for HDF software users discussion.
>>>>> Hdf-forum@lists.hdfgroup.org
>>>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup
>>>>> .org
>>>>> Twitter: https://twitter.com/hdf5
>>>>
>>>> _______________________________________________
>>>> Hdf-forum is for HDF software users discussion.
>>>> Hdf-forum@lists.hdfgroup.org
>>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.
>>>> org
>>>> Twitter: https://twitter.com/hdf5
>>>
>>> _______________________________________________
>>> Hdf-forum is for HDF software users discussion.
>>> Hdf-forum@lists.hdfgroup.org
>>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.o
>>> rg
>>> Twitter: https://twitter.com/hdf5
>>
>>
>> --
>> ___________________________________________________________________________
>> Dr. Werner Benger                Visualization Research
>> Center for Computation & Technology at Louisiana State University
>> (CCT/LSU)
>> 2019  Digital Media Center, Baton Rouge, Louisiana 70803
>> Tel.: +1 225 578 4809                        Fax.: +1 225 578-5362
>>
>>
>>
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> Hdf-forum@lists.hdfgroup.org
>> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.or
>> g
>> Twitter: https://twitter.com/hdf5
>
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> Hdf-forum@lists.hdfgroup.org
> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
> Twitter: https://twitter.com/hdf5
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> Hdf-forum@lists.hdfgroup.org
> http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
> Twitter: https://twitter.com/hdf5

_______________________________________________
Hdf-forum is for HDF software users discussion.
Hdf-forum@lists.hdfgroup.org
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to