From The Morning
No Replies Log in to reply. General Comment a insomniac he was It rises, and like the sun we rise and cover the earth. He tells everyone to "see the sights, the endless summer nights" and enjoy the nightly escape from our working life. But in the end we have to return to "the game". General Comment Have fun, 'cause you're not gonna be here long.
That pretty much sums up Nick Drake for me. He deals with the big, eternal themes of life, death, and love. Every feeling, whether it's joy or sorrow, is transient. But it's almost like he's resigned to all of it. This song reminds me of staying up all night every night during a summer years ago, falling in love every night He has a way of capturing that kind of thing.
Visited his grave in Tanworth, and that inscription is there on his headstone. He's everywhere now, isn't he? General Comment i love this song Memory It makes me remember all my friends who died, especially the summer when I mourned them. It was the happiest summer of my life I was awake every night and went to the mountains with a bunch of people and everything was so in tune, we didn't do anything unpleasant that whole season.
And it felt that in doing so we were honoring those who died so young, burned out fast but could still make us smile. We all thought though none of us said it that we should make a promise to mourn like this when each of us dies, that we're all remembered as we were. I had my own girl and boy to mourn besides the friend we'd all lost, both of mine junkies, so I kept asking someone to play this song on their guitar because the girl had loved it and shown it to me, and the boy had loved it too, and he might've given up at 14, but those were 14 years lived with a thirst for everything.
I knew that if there was a day of reckoning I'd be right there next to him. General Comment Long weeks of careless joy, all day long. This is a feel good song in a way. General Comment "and now we rise from the ground" hmmmm Beautiful.
ShieldSquare Captcha
Liv, but don't forget the ones who have died. They're pretty much everywhere. The girls fly but that's life. Go play the game. Log in now to add this track to your mixtape! We do not have any tags for From The Morning lyrics. Why not add your own? As stated earlier in this write-up, beyond these results we also have the fact that Log3C is used in production settings at Microsoft to assist in the maintenance of online service systems. Log3C is available at https: Applied machine learning at Facebook: The modern user-experience is increasingly powered by machine learning models, and the quality of those models depends directly on the volume and quality of the data powering them: As we looked at last month with Continuum , the latency of incorporating the latest data into the models is also really important.
Here training iterations take on the order of days. Even more dependent on the incorporation of recent data into models is the news feed ranking. In other words, using a one-day-old model is measurably worse than using a one-hour old model. Looking at a few examples of machine learning in use at Facebook really helps to demonstrate the pervasive impact. In addition to the major products mentioned above, many more long-tail services also leverage machine learning in various forms. The count of the long tail of products and services is in the hundreds. The major ML algorithms in use at Facebook include logistic regression, support vector machines, gradient boosted decision trees, and DNNs.
Predictor uses the models trained in Flow to serve real-time predictions. Training the models is done much less frequently than inference— the time scale varies, but it is generally on the order of days. Training also takes a relatively long time to complete — typically hours or days. Meanwhile, depending on the product, the online inference phase may be run tens of trillions of times per day, and generally needs to be performed in real time.
- .
- Sri Lanka News | Latest Breaking News Updates - Top Stories From - The Morning!
- Dead of Night (Inspector Ikmen Mystery 14) (Inspector Ikmen Series).
- CUHK Series:Chinese-American Rapprochement and the Taiwan Issue Selected Documents of the Nixon Administration (Vol.1) (Chinese Edition)?
- .
- ?
- Stop Preaching and Start Communicating: Communication Principles Preachers Can Learn from Television?
In some cases, particularly for recommendation systems, additional training is also performed online in a continuous manner. For research and exploration Facebook use PyTorch: Instead of simply rewriting the model, Facebook have been active in building the ONNX toolchain Open Neural Network Exchange for standard interchange of deep learning models across different frameworks and libraries.
For training, locality of the data sources is important as the amount of data used by the models continues to grow. For sophisticated ML applications such as Ads and Feed Ranking, the amount of data to ingest for each training task is more than hundreds of terabytes. The data volumes also mean that distributed training becomes increasingly important. This places a very high resource requirement on storage, network, and CPUs. The data preparation workload and training workload are kept separated on different machines.
These two workloads have very different characteristics. The data workload is very complex, ad-hoc, business dependent, and changing fast. The demands of ML workloads impact hardware choices. For example compute bound ML workloads benefit from wider SIMD units, specialized convolution or matrix multiplication engines, and specialized co-processors. Addressing these and other emerging challenges continues to require diverse efforts that span machine learning algorithms, software, and hardware design. Darwinian data structure selection Basios et al. What I would have called an ADT e.
ArrayList , LinkedList for your specific use case. In brief, Artemis finds the places in your code where you are using an ADT, and explores the possible concrete instantiation space for those ADTs using your test suite as a guide to performance. Then it outputs the transformed source. You might be wondering whether e. LinkedList vs ArrayList makes that big a difference in most real world projects:. Artemis achieves substantial performance improvements for every project in 5 Java projects from DaCapo benchmark, 8 popular projects, and 30 uniformly sampled projects from GitHub.
The median improvement across the best solutions is 4. For example, consider this code from google-http-java-client , which currently uses ArrayList:. We are interested not just in searching the space of Darwinian data structures, but also tuning them via their constructor parameters. Then given the source code and test suite of a project Artemis explores the AST to find uses of DDSs, outputting a templated version of the source code with replacement points for each usage. A search algorithm is then used to find the best choice in each location, with the test suite being used to judge performance.
List , but in the code bases under study the authors also found many cases where programmers had over-specified, using a concrete type for variable and parameter type declarations, e. Artemis will apply further transformations to replace these with the abstract type instead, thus permitting DDS exploration. Many programs make extensive use of collection types, resulting in a very large overall search space. Artemis profiles the input program while running the test suite to identify the highest value points in the program to explore and thus prunes the search space.
Profiling is done using the JConsole profiler.
The overall search space for a given DDS consists of all the possible concrete implementation types, together with the parameter spaces for their respective constructor arguments. For each generation, NSGA-II applies tournament selection, followed by a uniform crossover and a uniform mutation operation. In our experiments, we designed fitness functions to capture execution time, memory consumption, and CPU usage. After fitness evaluation, Artemis applies standard non-dominated selection to form the next generation. Artemis repeats this process until the solutions in a generation converge.
At this point, Artemis returns all non-dominated solutions in the final population. In the evaluation, the initial population size is set to 30, with a limit of function evaluations. To assess fitness Artemis relies on running the test suite. Therefore the results will only apply to production use cases to the extent that your test suite mirrors production usage. Even though performance test suites are a more appropriate and logical choice for evaluating the non-functional properties of the program, most real world programs in GitHub do not provide a performance suite.
For this reason, we use the regression test suites to evaluate the non-functional properties of the GitHub projects of this study whenever a performance test suite is not available. Test suite execution time is measured using the Maven Surefire plugin, with profiling done by JConsole.
Artemis is evaluated on three different groups of projects. The first group comprises 8 popular GitHub projects selected for their good test suites and diversity: The second corpus is based on the DaCapo benchmarks , which were built from the ground up to be representative of usage in real world projects.
DaCapo is a little dated now though , and Java 1. For this reason, a third corpus of 30 projects uniformly sampled from GitHub such that they have a defined build system etc. The selected projects include static analysers, testing frameworks, web clients, and graph processing applications. Their sizes vary from to 94k lines of code with a median of 14, Their popularity varies from 0 to stars with a median of 52 stars per project.
Appropriately packaged and with the right level of polish, Artemis could make a very nice cloud service: The problem with finding the optimal algorithm and data structures for a given problem is that so often it depends.
This is especially true when it comes to graph algorithms. It is difficult to implement high-performance graph algorithms. The performance bottlenecks of these algorithms depend not only on the algorithm and the underlying hardware, but also on the size and structure of the graph. As a result, different algorithms running on the same machine, or even the same algorithm running with different types of graph on the same machine, can exhibit different performance bottlenecks.
23 Comments
For bonus points, we could then automate the search within the optimisation space to find the best performing combination for the circumstances at hand. This is exactly what GraphIt does. GraphIt combines a DSL for specifying graph algorithms with a separate scheduling language that determines implementation policy. You can specify a schedule yourself, or use autotuning to discover optimal schedules for you. Compared to six state-of-the-art in-memory graph processing frameworks, GraphIt outperforms all of them by up to 4.
At the same time, the algorithms expressed using GraphIt require up to an order of magnitude less code to express. We can think about the various possible implementation choices for graph algorithms as making trade-offs in three main dimensions:. The following table shows their impact compared to a baseline sparse push implementation:. The sparse push baseline as implemented for the PageRankDelta algorithm looks like Fig 2 below. On each iteration each vertex on the frontier sends its delta change in rank value to its out -neighbours.
The set of vertices in the frontier are maintained in a sparse data structure. For each of the above traversal modes we have different choices for parallelisation. Alternatively we could go all in and use an edge-parallel approach. We can potentially employ cache partitioning , trying to keep random accesses within the last level cache LLC. This improves locality but harms work efficiency due to vertex data replication from graph partitioning and merging of partial results. Vertex data layout arrays of structs or structs of arrays can also affect locality of memory accesses. Consider a random lookup in an array and then accessing two fields from that vertex arrays of structs versus two random lookups structs of arrays.
However, the former approach expands the working set size for no benefit if fields are not typically accessed together. Finally, when two graph kernels have the same traversal pattern we can fuse their traversals kernel fusion. GraphIt offers a high level DSL for expression algorithms at a level above these concerns. The heart of the matter is expressed in lines 31 through On line 32, the from operator ensures that only edges with a source vertex in the frontier are traversed, and the apply operator acts on the selected edges. This separation enables the compiler to generate complex code for different traversal modes and parallelization optimizations, while inserting appropriate data access and synchronization instructions for the updateEdge function.
As a comparison, the three core lines of the GraphIt expression require 16 lines of code of Ligra:. These labels are used to identify statements on which optimisations can apply, and a scheduling language maps these labels to points in the optimisation space. The scheduling functions allow choices to be made in each of the optimisation areas we looked at earlier:.
These are just some of the easier examples, throw in NUMA and cache optimisation as well and it can get really hairy!. The total optimisation space is as follows:. Under the covers, a graph is represented by an adjacency matrix, and the graph iteration space is represented in four dimensions based: Each of the four dimensions in the graph iteration space is annotated with tags to indicate the traversal direction and optimisation strategies from the schedule.
GraphIt can have up to valid schedules with each run taking more than 30 seconds for our set of applications and input graphs. Exhaustive searches would require weeks of time. As a result, we use OpenTuner to build an autotuner on top of GraphIt that leverages stochastic search techniques to find high-performance schedules within a reasonable amount of time. GraphIt is compared against six different state-of-the-art in-memory graph processing frameworks on a dual socket system with 12 cores each and GB of memory.
Add your thoughts
The input datasets used for the evaluation are shown in the following table. Here are the execution times for GraphIt versus the other systems across a variety of algorithms over these datasets:. MadMax won a distinguished paper award, and makes a nice bridge from the CCS blockchain papers we were looking at last week. Analysis and verification of smart contracts is a high-value task, possibly more so than in any other programming setting. The combination of monetary value and public availability makes the early detection of vulnerabilities a task of paramount importance. Detection may occur after contract deployment.
Despite the code immutability, which prevents bug fixes, discovering a vulnerability before an attacker may exploit it could enable a trusted third party to move vulnerable funds to safety. In this instance, MadMax focuses on detecting vulnerabilities caused by out-of-gas conditions.
The paper touches on some nice reusable building blocks e. MadMax is available on GitHub at https: As I write this the 7. Gas fuels computation in Ethereum, and is a embedded as part of the platform to avoid wasting the resources of miners. If a contract runs out of gas the EVM will raise an exception and abort the transaction. A contract that does not correctly handle the possible abortion of a transaction, is at risk for a gas-focused vulnerability. Typically, a vulnerable smart contract will be blocked forever due to the incorrect handling of out-of-gas conditions: Thus, a contract is susceptible to, effectively, denial-of-service attacks, locking its balance away.
For example, the following line of code lead to an out-of-gas vulnerability in the GovernMental smart contract:. Behind the scenes it results in an iteration over all locations in the array, setting them to zero. With enough creditors the contract will run out of gas and be unable to make progress beyond this statement. The Ethereum programming safety recommendations warn against performing operations for an unbounded number of clients, but outside of the payments case this advice does not seem to have been taken to heart in practice.
The NaiveBank below will no longer be able to apply interest if it succeeds in attracting enough accounts:. When loops are required the recommendation is to check the amount of gas at every iteration, and keep track of progress through the loop so that the contract can resume from that point if it does run out of gas. We could re-write the apply interest routine using these guidelines as follows:. A related issue is wallet griefing. Thus sending Ether can end up invoking untrusted code.
Ethereum best practice is to check the result of the send and abort the transaction by throwing an exception if a transfer fails. But when the exception is thrown in the middle of a loop, just aborting the transaction may no longer be enough. Consider the following code:. The following code will also run out of gas if or more payees are added, due to integer overflow on the inferred type of var i as uint8. This means analysis can run on any contract regardless of the source language and regardless of whether the source code is available or not only 0.
This design decision is a bold one though, because the EVM instruction set is low-level much lower level than e. In the bytecode form of a smart contract, symbolic information has been replaced by numeric constants, functions have been fused together, and control flow is hard to reconstruct.
MadMax builds on top of the Vandal decompiler which accepts EVM bytecode as input and produces output in a structured intermediate representation comprising a control-flow graph, three-address code for all operations, and likely recognised function boundaries. The MadMax analysis consists of several analysis layers that progressively infer higher-level concepts about the analyzed smart contract. Starting from the 3-address-code representation, concepts such as loops, induction variables, and data flow are first recognized. Then an analysis of memory and dynamic data structures is performed, inferring concepts such as dynamic data structures, contracts whose storage increases upon re-entry, nested arrays, etc….
Finally, concepts at the level of analysis for gas-focused vulnerabilities e. Each layer asserts facts that can be used by higher layers. To give a feel, here are the rules for basic loop and data flow inference:.
from the morning to afternoon
And at the very top of the tree, the Datalog rules for identifying possible out-of-gas vulnerabilities:. The dataflow analysis is neither sound nor complete i. However, MadMax is soundy , making an effort to achieve soundness within the limits of scalability. This approach is certainly plenty good enough to make MadMax highly useful. One of the interesting findings from an early analysis in the paper is that relatively complex contracts as measured by the number of basic blocks are holding most of the Ether.
In other words, the most valuable targets are also those most in need of verification assistance. Using MadMax the team analyse all contracts on the Ethereum blockchain as of April 9, Contracts that take longer than this to decompile are considered to have timed out. It takes 10 hours to analyse all these contracts, with each contract taking on average 5. In total these contracts contained 7. Although checking and budgeting loops by gas at run-time is recommended as a way to avoid gas-focused vulnerabilities, the analysis also shows that programmers have not yet taken this advice to heart:.
Our approach is validated using all 6. The threat to some of these smart contracts presented by our tools is overwhelming in financial terms, especially considering the high precision of warnings in a manually-inspected sample. RapidChain is a sharding-based public blockchain protocol along the lines of OmniLedger that we looked at earlier in the year. Those are pretty interesting numbers! RapidChain partitions the set of nodes into multiple smaller groups of nodes called committees that operate in parallel on disjoint blocks of transactions and maintain disjoint ledgers.
With nodes, each committee is of size where is a security parameter typically set around The initial set of participants start RapidChain by running a committee election protocol which elects a group of nodes as the root group. This group generates and distributes a sequence of random bits that are in turn used to establish a reference committee of size. The reference committee then creates committees each of size at random.
Each of those committees will be responsible for one shard of the blockchain. The initial set of participants are known and all have the same hard-coded seed and knowledge of the network size. A node is elected from the group if. Actually, we can chain this process such that we run the above protocol again starting with the root group, to further narrow the set of nodes. After a set of such rounds we have our final root group. Partitioning the nodes into committees for scalability introduces a new challenge when dealing with churn.
Corrupt nodes could strategically leave and rejoin the network, so that eventually they can take over one of the committees and break the security guarantees of the protocol. In each epoch, every node that wants to join or stay in the protocol must solve a PoW puzzle. A fresh puzzle is randomly generated every epoch using a verifiable secret sharing distributed random generation protocol , and the reference committee checks the PoW solutions of all nodes. The result is a reference block created at the start of an epoch with the list of all active nodes and their assigned committees.
This reference block is sent to all the other committees. The second defence makes it hard for an adversary to target an given committee using selective random shuffling based on the Cuckoo rule.
- We apologize for the inconvenience...!
- Examining Trust in Healthcare: A Multidisciplinary Perspective;
- .
When nodes are mapped into committees, each is first assigned a random position in [0, 1 using a hash function. The range [0, 1 is then partitioned into k regions of size. The Cuckoo rule, as proposed by Awerbuch and Scheideler, says that when a node wants to join the network it is placed at a random position , and all nodes in a consant-sized interval around are moved to new random positions. When a node joins a committee it needs to download only the set of unspent transactions UTXOs from a sufficient number of committee numbers, in order to be able to verify future transactions.
As compared to needing to download the full chain. Committee consensus is built on a gossiping protocol to propagate messages among committee members, and a synchronous consensus protocol to agree on the header of the block. The gossip protocol is inspired by information dispersal algorithms. A large message M is cut into n equal size chunks and an erasure coding scheme is used to obtain an additional parity chunk. Make a Merkle tree using these chunks as leaves, and then send a unique subset of the chunks to each neighbour together with their Merkle proofs.
These neighbours gossip chunks received to their neighbours, and so-on. Once a node has received n valid chunks it reconstructs the message. Our IDA-Gossip protocol is not a reliable broadcast protocol as it cannot prevent equivocation by the sender. Nevertheless, IDA-Gossip requires much less communication and is faster than reliable broadcast protocols to propagate large blocks of transactions about 2MB in RapidChain.
To achieve consistency, we will later run a consensus protocol only on the root of the Merkle tree after gossiping the block. RapidChain uses a variant of Abraham et al. The protocol commits messages at a fixed rate, around ms in practice. The message rate is calibrated once a week. In each epoch a committee leader is randomly chosen using the epoch randomness. The leader gathers all the transactions it has received in a block and gossips it. Then it starts the consensus protocol by gossiping a message containing the block header iteration number and Merkle root with a propose tag.
The other committee members echo this header upon receipt by gossiping it with an echo tag. Thus all honest nodes see all versions of the header received by all other honest nodes.