I am not categorically opposed to the idea of having self-optimizing
data structures. I am a bit skeptical about being able to find right
heuristics for such optimizations, and making them portable is another
big issue.
At this point, it looks like it can be a future step of a GSoC project.
Remember, at the end students should produce something that is
contributed upstream. And I have a feeling that such an automatic
optimization idea would take a lot of time to perfect, which makes it a
bit adventurous idea to me.
Engin
On 03/13/2017 05:23 PM, Raghav Arora wrote:
> Dear Engin,
>
> I understand the network overhead and we can make that into an explicit
> command, and not the default functionality of the structure. Also we can
> call it something other than lists, for example OpList (short for
> Optimizable List). However, the user will not have any power to control
> which data structure the OpList gets converted to, i.e. It depends on the
> usage characteristics of that specific function. My aim here is to minimize
> complexity during normal usage with a little storage overhead, storing
> usage trends as metadata in the form of instance variables.
>
> The developer or user can also call a status function which suggests wether
> running the optimization function is advisable or not.
>
> So what I am saying can be understood like this (using code representation
> not actual code)
>
> class OpList
> {
> int w1, w2, w3, x1, x2, y, z1, z2 // variables which store usage
> trends (ultimately forming parameters for a deterministic equation)
>
> void optimize()
> {
> // some computation based on w1, w2, w3, x1, x2, y, z1, z2
> }
> void status()
> {
> if ( some condition )
> print ( " Optimization necessary " )
> else if (some condition )
> print ( " Optimization suggested but not necessary ")
> else
> print ( " Optimization not required " )
> }
> }
>
>
> Please do let me know if I am thinking in the right direction or even if
> it's an unnecessary addition.
>
> Thanks and Regards,
> Raghav Arora
>
> On Mon, Mar 13, 2017 at 9:48 PM, Engin Kayraklioglu <[email protected]>
> wrote:
>
>> Hello,
>>
>> First of all we have a rather simple, non-distributed, non-parallel-safe
>> list structure in Chapel:
>>
>> http://chapel.cray.com/docs/latest/modules/standard/List.html
>>
>> Structures you suggested seems a good list for common structures.
>>
>> As for optimizations: I like the general idea. I can imagine
>> asynchronous tasks coming to help create some redundancy/variation in
>> the way the data is stored. But at the same time, I'd be very careful
>> since such reorganizations could create a lot of communication over the
>> network. Especially if we are thinking about doing such operations
>> without any instructions from the programmer, it can create unexpected
>> performance overheads.
>>
>> Engin
>>
>> On 03/13/2017 04:29 PM, Raghav Arora wrote:
>>> Hello Engin and Param,
>>>
>>> As Engin already knows, I have shown interest in developing distributed
>>> data structures.
>>>
>>> I think we should start with basic data structures like:
>>>
>>> 1. Stack
>>> 2. Queue
>>> a. Basic Queue
>>> b. Priority Queue
>>> c. Dequeue
>>> d. Circular Queue
>>> 4. Sets
>>>
>>>
>>> Then we should implement linked lists - both single and double linked
>>>
>>> Then we can use these structures further to implement Trees and Graphs.
>>>
>>> What are your thoughts? Also, in case an implementation for any of these
>>> already exists, please forgive me as I am new to Chapel.
>>>
>>> And I tried to think over what Engin said about different
>>> implementations for different workloads, and I think we can have a
>>> generic data type called List (or maybe anything else), which implements
>>> functionality from different data structures depending on the conditions
>>> during their initialization. Furthermore, we can also have an optimize
>>> function which interchanges implementation between data structures by
>>> converting the way the data is stored. For example, Let's say I am doing
>>> a lot of search operations on an array. A better data structure to carry
>>> out search operations is a binary search tree. We can easily detect
>>> operations we do on these lists and increment / decrement certain
>>> parameters in a function whose output decides which data structure to
>>> continue with. Again, what are your thoughts?
>>>
>>>
>>> Best,
>>> Raghav
>>>
>>> On Mon, Mar 13, 2017 at 7:18 PM, Engin Kayraklioglu <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> Hey Param,
>>>
>>> I think the basic ones you listed are the most important ones.
>>>
>>> (If you want to consider hashtables, you should be aware of
>> associative
>>> domains/arrays in Chapel:
>>> http://chapel.cray.com/docs/master/primers/primers/associative.html
>>> <http://chapel.cray.com/docs/master/primers/primers/associative.html
>>> )
>>>
>>> >From then on, if you want to expand, you can do it by adding more
>> depth
>>> or breadth to it. ie, you can propose to have small set of
>>> performant/scalable distributed data structures (maybe by
>>> proposing/investigating different queue implementations that can
>> perform
>>> differently under different workloads), or a bigger set of structures
>>> that covers wider variety of functionality that you think would be
>>> useful for Chapel.
>>>
>>> It depends on what you are able/want to do in the given time frame.
>>>
>>> Engin
>>>
>>> On 03/11/2017 11:35 AM, Param Hanji wrote:
>>> > Hi Engin,
>>> >
>>> > I tried looking for existing distributed data structure libraries,
>> and
>>> > came across Hazelcast
>>> >
>>> <http://docs.hazelcast.org/docs/3.5/manual/html/
>> distributed-data-structures.html
>>> <http://docs.hazelcast.org/docs/3.5/manual/html/
>> distributed-data-structures.html>>,
>>> Multipol
>>> >
>>> <http://digitalassets.lib.berkeley.edu/techreports/ucb/
>> text/CSD-95-879.pdf
>>> <http://digitalassets.lib.berkeley.edu/techreports/ucb/
>> text/CSD-95-879.pdf>>
>>> and Ignite
>>> > <https://ignite.apache.org/features/datastructures.html
>>> <https://ignite.apache.org/features/datastructures.html>>, among
>> others.
>>> > I noticed that these libraries have implementations for different
>> data
>>> > structures and need insights about which data structures will be
>> useful
>>> > for Chapel users. I believe you or someone else who has used Chapel
>>> > extensively, will be in a better position to identify data
>> structures
>>> > that are used often.
>>> >
>>> > Once we have figured out which structures are required, I can
>> perhaps
>>> > think about and propose implementations for them. I'm sure some
>> basic
>>> > ones like stack, queue, hashmap, set, etc. will be useful for most
>>> > users. What others am I expected to include in the library?
>>> >
>>> > On Mon, Mar 6, 2017 at 10:57 PM Engin Kayraklioglu <
>> [email protected] <mailto:[email protected]>
>>> > <mailto:[email protected] <mailto:[email protected]>>> wrote:
>>> >
>>> > Hey Param,
>>> >
>>> > As far as distributed data structures, there is nothing
>>> special that I
>>> > can refer you to. I suggest searching what kind of distributed
>>> data
>>> > structure libraries out there (in other languages), and what is
>>> > suitable/useful for Chapel.
>>> >
>>> > On a slightly related note:
>>> >
>>> > http://chapel.cray.com/docs/latest/modules/layoutdist.html
>>> <http://chapel.cray.com/docs/latest/modules/layoutdist.html>
>>> >
>>> > Standard Distributions in this link discusses how Chapel
>>> distributes
>>> > arrays over multiple nodes in a system.
>>> >
>>> > Engin
>>> >
>>> > On 03/04/2017 07:59 AM, Param Hanji wrote:
>>> > > Hi,
>>> > >
>>> > > I am Param Hanji, an undergrad student from India, studying
>>> at the
>>> > > National Institute of Technology, Karnataka. I came across
>>> Chapel
>>> > on the
>>> > > GSoC '17 Organisations page and decided to give it a shot.
>>> > >
>>> > > I've downloaded Chapel on my laptop using Homebrew and
>>> played around a
>>> > > little to get used to the new language and am really liking
>> the
>>> > > experience. I followed some the tutorials mentioned on the
>>> website.
>>> > > After working with frameworks like OpenCL, CUDA, OpenMP
>>> etc., using
>>> > > Chapel for parallelising code seems so simplistic!
>>> > >
>>> > > I'd love to contribute to the existing codebase and am
>>> interested
>>> > in the
>>> > > Distributed Data Structures project. This will require
>>> creating an
>>> > > entirely new module right? Are there any resources on
>>> distributed data
>>> > > structures that I can refer to?
>>> > >
>>> > > Cheers,
>>> > > Param Hanji
>>> > >
>>> > >
>>> > >
>>> > >
>>> > >
>>> >
>>> ------------------------------------------------------------
>> ------------------
>>> > > Check out the vibrant tech community on one of the world's
>> most
>>> > > engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>>> > >
>>> > >
>>> > >
>>> > > _______________________________________________
>>> > > Chapel-developers mailing list
>>> > > [email protected]
>>> <mailto:[email protected]>
>>> > <mailto:[email protected]
>>> <mailto:[email protected]>>
>>> > > https://lists.sourceforge.net/lists/listinfo/chapel-
>> developers
>>> <https://lists.sourceforge.net/lists/listinfo/chapel-developers>
>>> > >
>>> >
>>> > ------------------------------------------------------------
>> ------------------
>>> > Announcing the Oxford Dictionaries API! The API offers
>> world-renowned
>>> > dictionary content that is easy and intuitive to access. Sign
>> up for an
>>> > account today to start using our lexical data to power your
>> apps and
>>> > projects. Get started today and enter our developer
>> competition.
>>> > http://sdm.link/oxford
>>> > _______________________________________________
>>> > Chapel-developers mailing list
>>> > [email protected]
>>> <mailto:[email protected]>
>>> > <mailto:[email protected]
>>> <mailto:[email protected]>>
>>> > https://lists.sourceforge.net/lists/listinfo/chapel-developers
>>> <https://lists.sourceforge.net/lists/listinfo/chapel-developers>
>>> >
>>>
>>> ------------------------------------------------------------
>> ------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> Chapel-developers mailing list
>>> [email protected]
>>> <mailto:[email protected]>
>>> https://lists.sourceforge.net/lists/listinfo/chapel-developers
>>> <https://lists.sourceforge.net/lists/listinfo/chapel-developers>
>>>
>>>
>>
>
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>
>
>
> _______________________________________________
> Chapel-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/chapel-developers
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Chapel-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-developers