On November 17, 2019, Dimension was invited to participate Chengdu Web Full Stack Conference 2019. JackWorks delivered a speech entitled “Enhanced Privacy with Decentralized Identity“ at the conference. He explained the technical principles of Maskbook from a technical perspective.
JackWorks
Highlights of the Conference
Maskbook introduction
Maskbook is a browser plug-in that allows users to protect their privacy when they use social networks such as Facebook and Twitter. To this end, Maskbook uses cryptographic principles (symmetric encryption and asymmetric encryption) to help users of Maskbook encrypt their data and prevent large platforms from abusing users’ data privacy to achieve profitability. At the same time, many front-end technologies are used to ensure decentralization and privacy security, including GunDB (a decentralized graph database), @ holoflows / kit (a browser extension development kit made by himself), and ShadowRoot (web standard).
Maskbook is an open-source browser plug-in developed by Dimension. It is not controlled by the government or organization. The reason I wanted to develop Maskbook was that Facebook stole user data and sold it for profit, and even use this data to influence politics and manipulate elections. So Maskbook wants to add a layer on Facebook to use technology to organize head internet companies to abuse user privacy and return control of data to users themselves. Of course, users of Maskbook don’t need to worry about the developers’ use of user data privacy behind the scenes, and the entire development process is transparent and open.
For details, please click the following link to review the code:
https://github.com/DimensionDev/Maskbook
List of Maskbook pages
Maskbook Principle
Maskbook uses a combination of symmetric and asymmetric encryption. As can be seen in the picture, for example, Alice created a post on Facebook. During the use of Maskbook, each post was encrypted by an AES key, and the last page displayed on the Facebook homepage was an encrypted text. Each AES key is encrypted by ECDH to a specified recipient and is finally synchronized in GunDB.
Note: ECDH (Elliptic Curve Diffie Hellman) is a method that allows two parties who have their own elliptic curve private keys and know each other’s public keys to calculate the same ciphertext in an insecure channel.
Maskbook Design Principles
Maskbook has three major design principles, namely:
As mentioned earlier, the reason for Maskbook is because it wants to resist the behavior of Internet giants abusing user data to achieve profitability, so the purpose of Maskbook is to protect user data privacy. Therefore, three design principles were firmly established at the beginning of the design to achieve the purpose of real data protection.
At the Chengdu Web Full Stack Conference, Jack also demonstrated the operation and principle of the front-end technology to the audience. We also posted his shared content for everyone to watch.
PPT Content Screenshot
Dimension
Official website
Dimension.im
Its products
maskbook.com
tessercube.com
Social platform
Githubhttps://github.com/DimensionDev
Twitter https://twitter.com/realmaskbook
Facebookhttps://www.facebook.com/realmaskbook/
Telegram.me/maskbook_group
Scan the following QR code to join our Telegram group ~
活动链接：https://web-conf.dev/#2019/
Github https://github.com/DimensionDev
Twitter https://twitter.com/realMaskNetwork
Facebook https://www.facebook.com/masknetwork
Discord https://discord.com/invite/cKGW45g
Telegram (English) https://t.me/maskbook_group
Telegram （中文） https://t.me/masknetwork_cn


--- layout: base title: Monty Hall Problem css: [montyhall.css] js: [montyhall.js] ---
Choose a dooragain
By 向日葵@HKGolden Forum


{% with author.get_profile.esd_data as esd %}
{{ esd.title }}
{{ esd.department_name }}
{{ esd.division_name }}
Your directory information is not visible on your profile because you have asked Emory HR to suppress it from the public directory. Click the box below to make your information visible on OpenEmory. This will not affect your HR settings.


Todo List Commands
"add" - Add a Todo
"delete" - Delete a Todo
"list" - View All Todos
"quit" - Quit the App


Kogi: Former two-term Reps member dumps PDP - The Nation Newspaper
James Azania, Lokoja
A former member of the National Assembly that represented the Yagba Federal Constituency at the lower chamber, Hon. Karimi Sunday Steve, has withdrawn his membership from the Peoples Democratic Party (PDP).
Karimi, a member of the House of Representatives between 2011 and 2019, has however not indicated what party he will be pitching tent with, though speculation is rife that he may seek membership of the ruling All Progressives Congress (APC).
Karimi, who once served as the (Kogi) State Deputy Chairman of the party, in a statement signed by him, said that the withdrawal of his membership of the PDP is with immediate effect.
Read Also: Top politician dumps PDP for APC
The former lawmaker defected from the PDP to the defunct Action Congress of Nigeria (ACN), under which platform he won the House of Representatives seat in 2011, but later returned to the PDP, from where he won a return to the National Assembly, in 2015.
He aspired for election into the Senate in 2019, but was disqualified alongside others from contesting the primary by the PDP.
Karin, in a statement, said that he will hand over his membership card to his Ward exco after which he will make public his decision on his political future.
There are however strong indication that he may be joining the APC, which was formed by a coalition of the ACN and three other legacy parties.


Many second language learners want to speak fluently to native speakers. However, formal language education and existing tools are insufficient for learning language for use in daily life. We propose Xpress, a mobile Q&A-based system that crowdsources native speakers to help second language learners acquire diverse colloquial expressions through composing “context-embedded” questions with the help of multimedia. We employed an iterative user-centered design process including contextual inquiry, affinity diagram, personas & scenarios, storyboards, sketches, wireframes, lo-fi prototype, heuristic evaluation, mid-fi prototype, and user testing. We are one of the eleven student teams invited for a poster presentation in the CHI 2013 conference.
Many people learn a second language for study, work or their own interests. Speaking, especially facilitating what they have learnt into daily use is one of the biggest challenges for second language learners. Taking international students as an example, though they do well in the academic study, some of them may have troubles in or want to improve their daily communications with natives, which makes them difficult to further get familiar with the local culture and get involved in the community life.
To better understand second language learning and identify the challenges, we interviewed 8 second language learners, 5 language instructors, and conducted 6 field observations of a Chinese learning Meetup group by attending their weekly meetings. After collecting notes, we created an affinity wall to observe a conspicuous gap between existing language learning tools and the pragmatic needs for learning native colloquial expressions. We found current leanring methods and tools do not well satisfy second language learners’ needs of learning diverse colloquial expressions. To learn colloquial expressions, feedback from native speakers is valuable, but it may not be always convenient to find a native speaker.
Based on the findings from Contextual Inquiry, we continued brainstorming and did some research on the current language learning products. Since every second language learner is the expert of his or her first language and it takes little effort to provide one’s native expressions, we believe it is possible and beneficial to build a platform, where second language learners learning different languages can help each other. We decided to crowdsource native speakers and take advantage of mobile computing devices to help users better capture and describe contexts with the help of multimedia. With the initial solution in minds, we created storyboards to illustrate scenarios and discussed lots of sketches to explore possible features.
Based on the sketch, we first created paper prototyping, which focuses more on layout and basic features. We showed the paper prototype to several second language learners for informal evaluation. Later, we started to standardize user interface and work on the interaction flow in our Lo-Fi prototype using Balsamiq. We designed a few simple tasks and tested the Lo-Fi with 6 second language learners, which verified our design concept but revealed major concern of intuitiveness. Then we had several whiteboard discussions and redesigned the prototype by prioritizing and simplifying features. We built our Mid-Fi prototype in Android phone using Adobe Flex. In the user testing, we observed 5 Chinese learners and 5 English learners interacting with the prototype and using it in the field.
Users’ participation plays an important role in such a crowdsourcing system. To encourage users’ participation, we have the following incentive designs. We designed Coins to prevent the free-rider issue and reinforce a user’s motivation to answer questions. Coins are required for users to ask an expression question and they can be earned through answering questions. We also designed Karma, which represents the reputation score for encouraging users to provide high-quality expressions. At last, we encourage users to provide their own expressions attached to a question they ask. This allows users learning the questioner’s native language to hear what the questioner would have said in the same situation.


--- layout: post title: 'India03: Quick Update' date: 2009-07-24 17:38:31.000000000 -05:00 type: post parent_id: '0' published: true password: '' status: publish categories: - English - Fleeing tags: [] meta: _edit_last: '1412221' author: login: dreamessenceonthemove email<EMAIL_ADDRESS>display_name: darribas first_name: Daniel last_name: Arribas-Bel permalink: "/2009/07/24/quick-update/" ---
So, after a couple of really hectic days learning why India is becoming one of the main countries in the world (and also teaching a workshop to realize it...), we've taken off Bangalore this after-noon and landed in Mumbai at 5 pm. After 2 hours in a cab to make the less than 10 Km to the hotel we've found out the place we had booked turns out to be a little bit different from what we expected (it's actually a pretty western place with most of what I don't like of it but anyway...). Tomorrow we'll try to see a bit of this huge monster called Mumbai and at the end of the day, we'll head to the airport to take the flight back to Europe. Then connection to Madrid, bus and finally home.
So many amazing stuff that's changed many views and strength some others, but getting into the details is something for later on when I'm back, I make some sense out of this whole thing and I can meet you for a coffee or a beer and tell you. By now, it's time to try to find a local place to have a bite of real India...


-
free will texas form
Tracy Morgan Tickets - Tracy Tour Dates - Vivid Seats
View all Tracy Morgan tour dates, ticket prices and seating availability. . Home > Theater > Comedy > Tracy Morgan Tickets . Whether it's on Saturday Night Live, 30 Rock, or on Hollywood's silver screen, this hilarious comic is always .
http://www.vividseats.com/theatre/tracy-morgan-tickets.html
-
honda xl250r lean jetting
A Silver Screen Special Edition: Ladies and Gentlemen - Blu-ray.com
Sep 12, 2012. this historic film in our home theaters is certainly a major event for classic film fans of all ages. . Thanks to Flicker Alley of West Hollywood, you'll be able to . His first venture into pictures was the purchase of a 600-seat .
http://www.blu-ray.com/news/?id=9433
-
microsoft student software facts
Get an exclusive entertainment zone at home : Home - India Today
Mar 26, 2012 . The concept of a home theatre made its way into the minds of . to provide for multiple rows of seating," says Aditya Gupta, CEO of The . Amitabh Bachchan, who is making his Hollywood debut with the . Deepika will be seen in varied looks in the movies that are expected to hit the silver screen this year.
http://indiatoday.intoday.in/story/entertainment-room-home-theatre-entertainment-zone/1/177751.html
-
theories on thinking styles
The Tyee Goodbye Granville Cinema, Your Death Is Telling
Oct 12, 2012 . Blame Hollywood's withering heart. . sitting in the twilight, entirely alone amidst row upon row of purple seats. . coming together to see themselves reflected back on the silver screen is simply a beautiful thing. . Yes it looks like home theatre and the internet will be the rule and the Hollywood moguls will .
http://thetyee.ca/ArtsAndCulture/2012/10/12/Granville-Cinema/
-
adam kuper and jenny kuper
CONCESSION - Home Theatre Interiors
. (home theatre decor) items such as: theater seating, home theater lighting, movie posters, art deco lighting, home cinema style sconces, exit signs, Hollywood decor . Image of SILVER SCREEN 8 OUNCE POPPER
AND BASE WITH .
http://www.hometheatreinteriors.com/qs3/products.php?category=CONCESSION&view_all=true&view_all_hits=0
-
new bungalows in kitchener waterloo
Home Theater Watch The Coolest Home Theater Gadgets And ...
Jun 19, 2012 . Seating No Home Theater Should Be Without . worldwide for a household product that could so closely emulate the latest Hollywood trend.
http://www.hometheaterwatch.com/
-
jacksonville fl unemployment rate
Popcorn Carts - Home Theater
Order Popcorn Carts and Popcorn Stands from the leading Home Theater website. HTmarket.com. Big Selection, Bigger Savings.
http://www.htmarket.com/popcorncarts.html
-
endodontist in abingdon virginia
10 TV Technologies Making Movie Theaters Obsolete - People
As home theaters get more advanced, cinemas may have difficulty filling seats. . As ticket prices gouge our wallets for larger helpings of cash, home theater . produce -- a budget comparable to a full-scale Hollywood picture [source: BBC News]. . the theatrical experience of watching a projected image on a silver screen.
http://people.howstuffworks.com/culture-traditions/tv-and-culture/10-tv-technologies-making-movie-theaters-obsolete.htm
-
chemistry labs easy experiment
Making the Third Dimension a Reality: 3D Video and Home Theater ...
entered the home theater universe are still being felt today; the introduction and adoption of . Synchronized film viewers attached to the arm-rests of the seats in the . white screens commonly in use at that time, and only a silver screen or . In June 2005, The Grauman's Chinese Theatre in Hollywood became the first .
http://www.digitalsignagefederation.org/Resources/Documents/Articles%20and%20Whitepapers/3D%20Video%20and%20Home%20Theater%20Design_JBrawn.pdf
-
vacuum cleaners salt lake city
POPCORN POPPERS - Home Theatre Interiors
. (home theatre decor) items such as: theater seating, home theater lighting, movie posters, art deco lighting, home cinema style sconces, exit signs, Hollywood decor . Image of SILVER SCREEN 8 OUNCE POPPER
AND BASE WITH .
http://www.hometheatreinteriors.com/qs3/products.php?catid=20&category=POPCORN%20POPPERS
-
weeds how to kill
Silver Screen | Stealing Pesos Out of My Brain
Aug 27, 2012 . Posts about Silver Screen written by jeremylukens. . Finally inside the theater for your showing, you look around for empty seats. . Then my DVD player went to that great home theater in the sky and it was clear that it was time . Hollywood, as far as I'm concerned, you lose your privilege to adapt things.
http://stealingpesosoutofmybrain.com/category/silver-screen/
-
bukit kiara equestrian club
How to Paint a Projector Screen | eHow.com
I will take you through the basic steps of planning, layout, preparing the surface for and painting a white projection screen for a home-theater projector.
http://www.ehow.com/how_5113671_paint-projector-screen.html
-
star wars risk online
Movie theater - Wikipedia, the free encyclopedia
This 72-seat plush theater was designed from scratch solely to show motion pictures. . to adopt digital cinema and provide a way to compete with home theaters. . A silver screen is used to reflect this light back at the audience and reduce loss of . and so movie theatres could not show popular Hollywood and Asian films.
http://en.wikipedia.org/wiki/Movie_theater
-
free public wifi in newark nj
Odeon Entertainment - DVD distributor - Home Theater Forum
Jun 30, 2012 . The Hollywood Studio Collection (RKO Radio Pictures): . Home Theater Forum Top Picks . The Silver Screen Collection (Limited Edition): .
http://www.hometheaterforum.com/t/310658/odeon-entertainment-dvd-distributor/90
-
examples ofdrug biologic products
SmX Cinema Solutions :: Projector Screen Questions
Will I see the perforations of the CineWeave HD from seating distance? . movie screen to get audio imaging the way it was intended to be from Hollywood. . Why expect anything less in your home theater? . Yes, we offer four solid screens with the Pro-Line frame in Matte, 1.4 gain, 1.8 gain and 2.4 gain (Silver Screen) .
http://www.smxscreen.com/projection-screen-questions.html
-
1950 s alphabet and numbers
Hollywood adaptations of comic books in a post-9/11 context: the ...
1Hollywood built its studio system and developed into a true industry in the late . book heroes and films eventually came to be associated on the silver screen, . offering digital sound and unobstructed stadium seating with big comfortable . big TV screens and home cinema systemshas started competing with cinemas, .
http://transatlantica.revues.org/5419
-
nextel i860 phone specs
How to Decorate a Movie Room or Home Theater | eHow.com
Run rope lights along the bottom edges of seats for a realistic movie-theater . Decorate a room with a movie theme to show off your love of the silver screen.
http://www.ehow.com/how_2150067_decorate-movie-room-home-theater.html
-
san jacinto county tx appraisal district
The Future of Surround Sound | Sound and Vision Magazine
Sep 18, 2012 . Dolby Atmos system flown at Hollywood's Dolby Theater . Imagine yourself sitting in the center seat, center row, of a dark and empty theater. . writers to talk & write about but zero chance of being meaningful to the the average home theater aficionado. . Listen Up: Les Misérables hits the Silver Screen .
http://www.soundandvisionmag.com/article/future-surround-sound
-
civil air patrol airplanes
Theaters Look Beyond Movies To Fill Seats : NPR
Sep 8, 2008 . Movie theaters are looking beyond Hollywood to attract audiences. . They've now got to compete with home theaters, iTunes, pirated movies, Netflix and other new . And sports may also be moving on to the silver screen.
http://www.npr.org/templates/story/story.php?storyId=94394590
-
issues eticos en la psicoterapia
The Phonograph - What We Do
Home Cinema :: If The Show Must Go On, Show Off. Bring Hollywood Home: To your home. Whether you're building a new dedicated cinema room or bringing .
http://www.phonographtulsa.com/What-We-Do.aspx


GO!!!


--- layout: post title: Finding programmers and designers for Rails projects categories: - jobs author: David published: true date: 2006-04-25 21:07:56.000000000 +01:00 ---
The Signal vs Noise Job Board is a new alternative for finding good programmers and designers to work on Rails projects (among other things). It puts your job pitch in front of the tens of thousands of people reading the Signal vs Noise weblog. It comes at a price of $250 for a posting of 500 words visible for 30 days.
CNET, Fleck, and NYTimes.com are all using it to advertise developers with Ruby and Rails experience. If you’re just looking for programming positions, you can subscribe to the RSS for the programming section.
As you might have noticed from the URLs, this job site is using the new Simply Restful plugin. Our playground for RESTful living on Rails.


{% include 'header.html' %}
Home
Check your SMSG address history and add new addresses.
Page: {{ filters.page_no }}


The Power Plays: Superb Harry Byrne Performance Points To A Bright Future
by Sean McMahonBrought to you by Energia, proud sponsors of Leinster Rugby
Leinster maintained their 100% record in the Guinness PRO14 with a 50-15 demolition of the Dragons at the RDS on Friday night.
With the internationals still away, head coach Leo Cullen offered an opportunity to more of Leinster’s budding young stars as Jack Aungier was introduced from the bench for his senior debut while Ryan Baird and Harry Byrne made their first starts for the eastern province at this level.
Both Baird and Byrne were impressive throughout but it was the latter’s performance which really shone through and this was reflected in the man-of-the-match award he received at the end of the game.
As it currently stands, Byrne is fourth-choice when it comes to the out-half position as he lies behind Johnny Sexton, his older brother Ross and Ciarán Frawley in the playmaker stakes.
However, his performance on Friday night, in torrential conditions, sent a clear message to the Leinster coaching staff that he is well capable at this level despite only making his fourth senior appearance and first start.
Byrne displayed all the attributes which he needs to succeed at this level as he kicked superbly out of hand, managed the game well and provided an attacking spark by displaying good awareness to the various situations which were unfolding around him.
His first involvement was a clearing kick which he sent straight down the throat of Dragons out-half Sam Davies – a disappointing first action but he didn’t let that get to him as the 20-year-old grew into the game considerably from that point.
With less than five minutes on the clock, we see some of Byrne’s skills with ball-in-hand as he takes it flat to the line from a Jamison Gibson-Park pass before laying off the ball to an onrushing Caelan Doris.
On the very next phase, he takes the ball at pace once again but this time he sends a skip pass to Jimmy O’Brien who has joined the attack from the fullback position.
If you cannot view the above clip, click here.
This range of passing is complemented well by his game-management and we see an example of this in the 15th minute when the 20-year-old identifies space in the backfield after a quick turnover in possession to send the ball deep into the Dragons half.
Devin Toner is actually the one to win possession back for Leinster before Byrne kicks and although the ball doesn’t bounce into touch as he would have liked, Davies is under tremendous pressure due to a good chase by Dave Kearney and O’Brien.
If you cannot view the above clip, click here.
Just a few moments later, Byrne is on the receiving end of a late hit but he dusts himself down to get back up and get involved in the next phase.
Here, the St Michael’s alumnus (red) delivers a delightful ‘tunnel pass’ to a waiting James Lowe. Toner and Scott Penny are pretending to receive the pass here but the ball is always going to the Kiwi winger who breaks the line and gets Leinster on the front foot.
A couple of minutes later, O’Brien has his attempted grubber kick blocked which means Byrne has to scramble back and collect under pressure.
The out-half does very well to look up and make sure the Dragons’ fringe defender commits to the tackle, therefore generating some space, before zipping a pass out to Lowe who kicks ahead.
If you cannot view the above clip, click here.
At the midway point of the first half, Leinster respond immediately to Davies’ penalty. Before Byrne receives the ball from Gibson-Park, he identifies that he has front-rowers Richard Hibbard and Leon Brown (white circles) in front of him.
Byrne is always going to back himself to attack this space but he gives himself more of an opportunity by faking to pass to his left before stepping off his left foot to power through the gap.
He is brought to ground just about by Brown but the out-half has generated momentum for his side who score through Kearney after a few more phases.
If you cannot view the above clip, click here.
Byrne didn’t shy away from his defensive responsibilities either.
With just over 10 minutes remaining in the first half, Rhodri Williams sends Connor Edwards straight down Byrne’s channel but the out-half executed a low chop tackle to perfection to bring the powerful centre to the ground.
If you cannot view the above clip, click here.
As we’ve seen already, Byrne takes the ball flat to the line consistently, despite the open invitation to get smashed.
Here, we see another example of that as Leinster look to respond from Jordan Williams’ try.
Off a scrum, Gibson-Park feeds Byrne (red) who attacks the line at pace before firing a pass out the back to the scrum-half who ran a looping support line. Byrne takes a hit from Davies (white) for his troubles but the clever move gets Leinster deep into the Dragons 22.
If you cannot view the above clip, click here.
Byrne clears out a ruck on the next phase and when Lowe is brought down just short of the line, he receives the ball and shows that awareness once again to spot Hibbard and Brok Harris in front of him.
He backs himself to get through a gap to the right of Hibbard and he does this with ease by accelerating through.
He is helped a little bit as referee Andrea Piardi makes contact with the Dragons hooker but the 20-year-old out-half won’t be complaining one bit.
If you cannot view the above clip, click here.
Early in the second half, Byrne helps create the move of the match. He hears a call from the other side of the pitch from Kearney who is screaming for the ball.
From the footage, it’s clear that Byrne is scoping out the situation as he surveys the scene to his right.
Kearney is out of shot but when Byrne receives the ball from Gibson-Park, he executes a sublime crossfield kick which the winger collects.
If you cannot view the above clip, click here.
Some lovely interplay between Kearney, Conor O’Brien and Penny sees the experienced winger slalom his way over for his second try of the night.
Byrne’s ability to spot opportunities was one of the most impressive facets of his performance and we see another example of that in the 52nd minute when he notices the covering Dragons defender (red) out of position.
He executes an ‘up and under’ which Lowe competes for and manages to slap back down on the Leinster side to continue their attack.
If you cannot view the above clip, click here.
Finally, with the result beyond a formality at this stage, Byrne was still pushing and looking for opportunities with the game in its closing stages.
With less than 10 minutes to go, the out-half intercepted a pass from Davies but unfortunately for the youngster, play was brought back for a previous knock-on.
If you cannot view the above clip, click here.
___
All in all, Byrne’s performance showcased that he can operate at this level. There are parts to his game which he needs to improve but with age very much on his side, the Dubliner looks set to have a very bright future and will no doubt cause Leo Cullen some selection headaches throughout the rest of the season.
___
Energia, one of Ireland’s leading and most competitive suppliers of electricity and gas, is the proud partner and the power behind rugby in Ireland from grassroots through to the national teams. For behind the scenes action and exclusive content follow Energia on Facebook, Twitter, Instagram and their rugby mobile app #PositiveEnergy.


Built on the Ethereum blockchian
Lenders
Got spare cash? Invest, and earn interest.
Borrowers
Need money quick? Get money at a great rate.


The Brown Fairy Book
by Andrew Lang
The Turtle and His Bride
by Andrew Lang
Additional Information
- Year Published: 1904
- Language: English
- Country of Origin: England
- Source: Lang, A. (Ed.). (1904). The Brown Fairy Book. London: Longmans, Green & Co.
-
Readability:
- Flesch–Kincaid Level: 5.4
- Word Count: 1,750
- Genre: Fairy Tale/Folk Tale
- Keywords: marriage, turtles
- ✎ Cite This
Downloads
There was once a turtle who lived among a great many people of different kinds, in a large camp near a big river which was born right up amongst the snows, and flowed straight away south till it reached a sea where the water was always hot.
There were many other turtles in the camp, and this turtle was kind and pleasant to them all, but he did not care for any of them very much, and felt rather lonely.
At last he built himself a hut, and filled it with skins for seats, and made it as comfortable as any hut for miles round; and when it was quite finished he looked about among the young women to see which of them he should ask to be his wife.
It took him some time to make up his mind, for no turtle likes being hurried, but at length he found one girl who seemed prettier and more industrious than the rest, and one day he entered her home, and said: ‘Will you marry me?’
The young woman was so surprised at this question that she dropped the beaded slipper she was making, and stared at the turtle. She felt inclined to laugh—the idea was so absurd; but she was kind-hearted and polite, so she looked as grave as she could, and answered:
‘But how are you going to provide for a family? Why, when the camp moves, you will not even be able to keep up with the rest!’
‘I can keep up with the best of them,’ replied the turtle, tossing his head. But though he was very much offended he did not let the girl see it, and begged and, prayed her so hard to marry him that, at last, she consented, very unwillingly.
‘You will have to wait till the spring, though,’ she said; ‘I must make a great many slippers and dresses for myself, as I shall not have much time afterwards.’
This did not please the turtle; but he knew it was no use talking, so all he answered was:
‘I shall go to war and take some captives, and I shall be away several months. And when I return I shall expect you to be ready to marry me.’
So he went back to his hut, and at once set about his preparations. The first thing he did was to call all his relations together, and ask them if they would come with him and make war on the people of a neighbouring village. The turtles, who were tired of doing nothing, agreed at once, and next day the whole tribe left the camp. The girl was standing at the door of her hut as they passed, and laughed out loud—they moved so slowly. Her lover, who was marching at the head, grew very angry at this, and cried out:
‘In four days from now you will be weeping instead of laughing, because there will be hundreds of miles between you and me.’
‘In four days,’ replied the girl—who only promised to marry him in order to get rid of him—‘in four days you will hardly be out of sight.’
‘Oh, I did not mean four days, but four YEARS,’ answered the turtle, hastily; ‘whatever happens I shall be back by then.’
The army marched on, till one day, when they felt as if they must have got half round the earth, though they were scarcely four miles from the camp, they found a large tree lying across their path. They looked at it with dismay, and the oldest among them put their heads together to see what was to be done.
‘Can’t we manage to get past by the top?’ asked one.
‘Why, it would take us YEARS,’ exclaimed another. ‘Just look at all those tall green branches, spreading in every direction. If once we got entangled in THEM, we should never get out again!’
‘Well then, let us go round by the bottom,’ said a third.
‘How are we to do that, when the roots have made a deep hole, and above that is a high bank?’ replied a fourth. ‘No; the only way I can think of, is to burn a large hole in the trunk.’ And this they did, but the trunk was very thick, and would not burn through.
‘It is no use, we must give it up,’ they agreed at last. ‘After all, nobody need ever know! We have been away such a long while that we might easily have had all sorts of adventures.’ And so the whole company turned homewards again.
They took even longer to go back than they had to come, for they were tired and footsore with their journey. When they drew near the camp they plucked up their courage, and began to sing a war- song. At this the villagers came flocking to see what spoils the turtles had won, but, as they approached, each turtle seized some one by the wrist, exclaiming: ‘You are our spoils; you are our prisoners!’
‘Now that I have got you I will keep you,’ said the leader, who had happened to seize his betrothed.
Everybody was naturally very angry at this behaviour, and the girl most of all, and in her secret heart she determined to have her revenge. But, just at present, the turtles were too strong, so the prisoners had to put on their smartest slippers and their brightest clothes, and dance a war dance while the turtles sang. They danced so long that it seemed as if they would never stop, till the turtle who was leading the singing suddenly broke into a loud chant:
Whoever comes here, will die, will die!
At this all the dancers grew so frightened that they burst through the ring of their captors, and ran back to the village, the turtles following—very slowly. On the way the chief turtle met a man, who said to him:
‘That woman who was to have been your wife has married another man!’
‘Is that true?’ said the turtle. ‘Then I must see him.’
But as soon as the villager was out of sight the turtle stopped, and taking a bundle containing fringes and ornaments from his back, he hung them about him, so that they rattled as he walked. When he was quite close to the hut where the woman lived, he cried out:
‘Here I am to claim the woman who promised to be my wife.’
‘Oh, here is the turtle,’ whispered the husband hurriedly; ‘what is to be done now?’
‘Leave that to me; I will manage him,’ replied the wife, and at that moment the turtle came in, and seized her by the wrist. ‘Come with me,’ he said sternly.
‘You broke your promise,’ answered she. ‘You said you would be back soon, and it is more than a year since you went! How was I to know that you were alive?’
At her words the husband took courage, and spoke hastily:
‘Yes, you promised you would go to war and bring back some prisoners, and you have not done it.’
‘I DID go, and made many prisoners,’ retorted the turtle angrily, drawing out his knife. ‘Look here, if she won’t be MY wife, she sha’n’t be YOURS. I will cut her in two; and you shall have one half, and I the other.’
‘But half a woman is no use to me,’ answered the man. ‘If you want her so much you had better take her.’ And the turtle, followed by his relations, carried her off to his own hut.
Now the woman saw she would gain nothing by being sulky, so she pretended to be very glad to have got rid of her husband; but all the while she was trying to invent a plan to deliver herself from the turtle. At length she remembered that one of her friends had a large iron pot, and when the turtle had gone to his room to put away his fringes, she ran over to her neighbour’s and brought it back. Then she filled it with water and hung it over the fire to boil. It was just beginning to bubble and hiss when the turtle entered.
‘What are you doing there?’ asked he, for he was always afraid of things that he did not understand.
‘Just warming some water,’ she answered. ‘Do you know how to swim?’
‘Yes, of course I do. What a question! But what does it matter to you?’ said the turtle, more suspicious than ever.
‘Oh, I only thought that after your long journey you might like to wash. The roads are so muddy, after the winter’s rains. I could rub your shell for you till it was bright and shining again.
‘Well, I AM rather muddy. If one is fighting, you know, one cannot stop to pick one’s way. I should certainly be more comfortable if my back was washed.’
The woman did not wait for him to change his mind. She caught him up by his shell and popped him straight into the pot, where he sank to the bottom, and died instantly.
The other turtles, who were standing at the door, saw their leader disappear, and felt it was their duty as soldiers to follow him; and, springing into the pot, died too. All but one young turtle, who, frightened at not seeing any of his friends come out again, went as fast as he could to a clump of bushes, and from there made his way to the river. His only thought was to get away as far as possible from that dreadful hut; so he let the river carry him where it was going itself, and at last, one day, he found himself in the warm sea, where, if he is not dead, you may meet him still.


public interface IGameView
extends java.util.Observer
| Modifier and Type | Field and Description |
|---|---|
static int |
BORDER |
static int |
CANVAS_HEIGHT |
static int |
CANVAS_WIDTH |
static int |
CELL_PADDING |
static int |
CELL_SIZE |
static int |
COLS |
static int |
GRID_WIDHT_HALF |
static int |
GRID_WIDTH |
static int |
ROWS |
static int |
SYMBOL_SIZE |
static int |
SYMBOL_STROKE_WIDTH |
static int |
VIEW_HEIGHT |
static int |
VIEW_WIDTH |
| Modifier and Type | Method and Description |
|---|---|
void |
display()
Display this View
|
javax.swing.JPanel |
getTemplate()
Return the
JPanel inside JFrame
This method is exposed public for JUnit4 only
The resource is derived from another source so it should be tested well |
static final int VIEW_WIDTH
static final int VIEW_HEIGHT
static final int BORDER
static final int ROWS
static final int COLS
static final int CELL_SIZE
static final int CANVAS_WIDTH
static final int CANVAS_HEIGHT
static final int GRID_WIDTH
static final int GRID_WIDHT_HALF
static final int CELL_PADDING
static final int SYMBOL_SIZE
static final int SYMBOL_STROKE_WIDTH


Launching and configuring HPX applications¶
Configuring HPX applications¶
All HPX applications can be configured using special command line options and/or using special configuration files. This section describes the available options, the configuration file format, and the algorithm used to locate possible predefined configuration files. Additionally this section describes the defaults assumed if no external configuration information is supplied.
During startup any HPX application applies a predefined search pattern to locate one or more configuration files. All found files will be read and merged in the sequence they are found into one single internal database holding all configuration properties. This database is used during the execution of the application to configure different aspects of the runtime system.
In addition to the ini files, any application can supply its own configuration
files, which will be merged with the configuration database as well. Moreover,
the user can specify additional configuration parameters on the command line
when executing an application. The HPX runtime system will merge all command
line configuration options (see the description of the --hpx:ini
,
--hpx:config
, and --hpx:app-config
command line options).
The HPX INI File Format¶
All HPX applications can be configured using a special file format which is
similar to the well-known Windows INI file format. This is a structured text format
allowing to group key/value pairs (properties) into sections. The basic element
contained in an ini file is the property. Every property has a name and a
value, delimited by an equals sign '='
. The name appears to the left of the
equals sign:
name=value
The value may contain equal signs as only the first '='
character
is interpreted as the delimiter between name
and value
Whitespace before
the name, after the value and immediately before and after the delimiting equal
sign is ignored. Whitespace inside the value is retained.
Properties may be grouped into arbitrarily named sections. The section name
appears on a line by itself, in square brackets [
and ]
. All properties
after the section declaration are associated with that section. There is no
explicit “end of section” delimiter; sections end at the next section
declaration, or the end of the file:
[section]
In HPX sections can be nested. A nested section has a name composed of
all section names it is embedded in. The section names are concatenated using
a dot '.'
:
[outer_section.inner_section]
Here inner_section
is logically nested within outer_section
.
It is possible to use the full section name concatenated with the property name to refer to a particular property. For example in:
[a.b.c]
d = e
the property value of d
can be referred to as a.b.c.d=e
.
In HPX ini files can contain comments. Hash signs '#'
at the beginning
of a line indicate a comment. All characters starting with the '#'
until the
end of line are ignored.
If a property with the same name is reused inside a section, the second occurrence of this property name will override the first occurrence (discard the first value). Duplicate sections simply merge their properties together, as if they occurred contiguously.
In HPX ini files, a property value ${FOO:default}
will use the environmental
variable FOO
to extract the actual value if it is set and default
otherwise.
No default has to be specified. Therefore ${FOO}
refers to the environmental
variable FOO
. If FOO
is not set or empty the overall expression will evaluate
to an empty string. A property value $[section.key:default]
refers to the value
held by the property section.key
if it exists and default
otherwise. No
default has to be specified. Therefore $[section.key]
refers to the property
section.key
. If the property section.key
is not set or empty, the overall
expression will evaluate to an empty string.
Note
Any property $[section.key:default]
is evaluated whenever it is queried
and not when the configuration data is initialized. This allows for lazy
evaluation and relaxes initialization order of different sections. The only
exception are recursive property values, e.g. values referring to the very
key they are associated with. Those property values are evaluated at
initialization time to avoid infinite recursion.
Built-in Default Configuration Settings¶
During startup any HPX application applies a predefined search pattern to locate one or more configuration files. All found files will be read and merged in the sequence they are found into one single internal data structure holding all configuration properties.
As a first step the internal configuration database is filled with a set of default configuration properties. Those settings are described on a section by section basis below.
Note
You can print the default configuration settings used for an executable
by specifying the command line option --hpx:dump-config
.
The system
configuration section¶
[system]
pid = <process-id>
prefix = <current prefix path of core HPX library>
executable = <current prefix path of executable>
Property |
Description |
|
This is initialized to store the current OS-process id of the application instance. |
|
This is initialized to the base directory HPX has been loaded from. |
|
This is initialized to the base directory the current executable has been loaded from. |
The hpx
configuration section¶
[hpx]
location = ${HPX_LOCATION:$[system.prefix]}
component_path = $[hpx.location]/lib/hpx:$[system.executable_prefix]/lib/hpx:$[system.executable_prefix]/../lib/hpx
master_ini_path = $[hpx.location]/share/hpx-<version>:$[system.executable_prefix]/share/hpx-<version>:$[system.executable_prefix]/../share/hpx-<version>
ini_path = $[hpx.master_ini_path]/ini
os_threads = 1
localities = 1
program_name =
cmd_line =
lock_detection = ${HPX_LOCK_DETECTION:0}
throw_on_held_lock = ${HPX_THROW_ON_HELD_LOCK:1}
minimal_deadlock_detection = <debug>
spinlock_deadlock_detection = <debug>
spinlock_deadlock_detection_limit = ${HPX_SPINLOCK_DEADLOCK_DETECTION_LIMIT:1000000}
max_background_threads = ${HPX_MAX_BACKGROUND_THREADS:$[hpx.os_threads]}
max_idle_loop_count = ${HPX_MAX_IDLE_LOOP_COUNT:<hpx_idle_loop_count_max>}
max_busy_loop_count = ${HPX_MAX_BUSY_LOOP_COUNT:<hpx_busy_loop_count_max>}
max_idle_backoff_time = ${HPX_MAX_IDLE_BACKOFF_TIME:<hpx_idle_backoff_time_max>}
[hpx.stacks]
small_size = ${HPX_SMALL_STACK_SIZE:<hpx_small_stack_size>}
medium_size = ${HPX_MEDIUM_STACK_SIZE:<hpx_medium_stack_size>}
large_size = ${HPX_LARGE_STACK_SIZE:<hpx_large_stack_size>}
huge_size = ${HPX_HUGE_STACK_SIZE:<hpx_huge_stack_size>}
use_guard_pages = ${HPX_THREAD_GUARD_PAGE:1}
Property |
Description |
|
This is initialized to the id of the locality this application instance is running on. |
|
Duplicates are discarded.
This property can refer to a list of directories separated by |
|
This is initialized to the list of default paths of the main hpx.ini
configuration files. This property can refer to a list of directories
separated by |
|
This is initialized to the default path where HPX will look for more
ini configuration files. This property can refer to a list of directories
separated by |
|
This setting reflects the number of OS-threads used for running HPX-threads. Defaults to number of detected cores (not hyperthreads/PUs). |
|
This setting reflects the number of localities the application is running
on. Defaults to |
|
This setting reflects the program name of the application instance.
Initialized from the command line |
|
This setting reflects the actual command line used to launch this application instance. |
|
This setting verifies that no locks are being held while a HPX thread
is suspended. This setting is applicable only if
|
|
This setting causes an exception if during lock detection at least one
lock is being held while a HPX thread is suspended. This setting is
applicable only if |
|
This setting enables support for minimal deadlock detection for
HPX-threads. By default this is set to |
|
This setting verifies that spinlocks don’t spin longer than specified
using the |
|
This setting specifies the upper limit of allowed number of spins that
spinlocks are allowed to perform. This setting is applicable only if
|
|
This setting defines the number of threads in the scheduler which are used to execute background work. By default this is the same as the number of cores used for the scheduler. |
|
By default this is defined by the preprocessor constant
|
|
This setting defines the maximum value of the busy-loop counter in the
scheduler. By default this is defined by the preprocessor constant
|
|
This setting defines the maximum time (in milliseconds) for the scheduler
to sleep after being idle for |
|
This is initialized to the small stack size to be used by HPX-threads.
Set by default to the value of the compile time preprocessor constant
|
|
This is initialized to the medium stack size to be used by HPX-threads.
Set by default to the value of the compile time preprocessor constant
|
|
This is initialized to the large stack size to be used by HPX-threads.
Set by default to the value of the compile time preprocessor constant
|
|
This is initialized to the huge stack size to be used by HPX-threads.
Set by default to the value of the compile time preprocessor constant
|
|
This entry controls whether the coroutine library will generate stack
guard pages or not. This entry is applicable on Linux only and only if
the |
The hpx.threadpools
configuration section¶
[hpx.threadpools]
io_pool_size = ${HPX_NUM_IO_POOL_SIZE:2}
parcel_pool_size = ${HPX_NUM_PARCEL_POOL_SIZE:2}
timer_pool_size = ${HPX_NUM_TIMER_POOL_SIZE:2}
Property |
Description |
|
The value of this property defines the number of OS-threads created for the internal I/O thread pool. |
|
The value of this property defines the number of OS-threads created for the internal parcel thread pool. |
|
The value of this property defines the number of OS-threads created for the internal timer thread pool. |
The hpx.thread_queue
configuration section¶
Important
These setting control internal values used by the thread scheduling queues in the HPX scheduler. You should not modify these settings except if you know exactly what you are doing]
[hpx.thread_queue]
min_tasks_to_steal_pending = ${HPX_THREAD_QUEUE_MIN_TASKS_TO_STEAL_PENDING:0}
min_tasks_to_steal_staged = ${HPX_THREAD_QUEUE_MIN_TASKS_TO_STEAL_STAGED:10}
min_add_new_count = ${HPX_THREAD_QUEUE_MIN_ADD_NEW_COUNT:10}
max_add_new_count = ${HPX_THREAD_QUEUE_MAX_ADD_NEW_COUNT:10}
max_delete_count = ${HPX_THREAD_QUEUE_MAX_DELETE_COUNT:1000}
Property |
Description |
|
The value of this property defines the number of pending HPX threads which have to be available before neighboring cores are allowed to steal work. The default is to allow stealing always. |
|
The value of this property defines the number of staged HPX tasks have which to be available before neighboring cores are allowed to steal work. The default is to allow stealing only if there are more tan 10 tasks available. |
|
The value of this property defines the minimal number tasks to be converted into HPX threads whenever the thread queues for a core have run empty. |
|
The value of this property defines the maximal number tasks to be converted into HPX threads whenever the thread queues for a core have run empty. |
|
The value of this property defines the number number of terminated HPX threads to discard during each invocation of the corresponding function. |
The hpx.components
configuration section¶
[hpx.components]
load_external = ${HPX_LOAD_EXTERNAL_COMPONENTS:1}
Property |
Description |
|
This entry defines whether external components will be loaded on this
locality. This entry normally is set to |
Additionally, the section hpx.components
will be populated with the
information gathered from all found components. The information loaded for each
of the components will contain at least the following properties:
[hpx.components.<component_instance_name>]
name = <component_name>
path = <full_path_of_the_component_module>
enabled = $[hpx.components.load_external]
Property |
Description |
|
This is the name of a component, usually the same as the second argument
to the macro used while registering the component with
|
|
This is either the full path file name of the component module or the
directory the component module is located in. In this case, the component
module name will be derived from the property
|
|
This setting explicitly enables or disables the component. This is an optional property, HPX assumed that the component is enabled if it is not defined. |
The value for <component_instance_name>
is usually the same as for the
corresponding name
property. However generally it can be defined to any
arbitrary instance name. It is used to distinguish between different ini
sections, one for each component.
The hpx.parcel
configuration section¶
[hpx.parcel]
address = ${HPX_PARCEL_SERVER_ADDRESS:<hpx_initial_ip_address>}
port = ${HPX_PARCEL_SERVER_PORT:<hpx_initial_ip_port>}
bootstrap = ${HPX_PARCEL_BOOTSTRAP:<hpx_parcel_bootstrap>}
max_connections = ${HPX_PARCEL_MAX_CONNECTIONS:<hpx_parcel_max_connections>}
max_connections_per_locality = ${HPX_PARCEL_MAX_CONNECTIONS_PER_LOCALITY:<hpx_parcel_max_connections_per_locality>}
max_message_size = ${HPX_PARCEL_MAX_MESSAGE_SIZE:<hpx_parcel_max_message_size>}
max_outbound_message_size = ${HPX_PARCEL_MAX_OUTBOUND_MESSAGE_SIZE:<hpx_parcel_max_outbound_message_size>}
array_optimization = ${HPX_PARCEL_ARRAY_OPTIMIZATION:1}
zero_copy_optimization = ${HPX_PARCEL_ZERO_COPY_OPTIMIZATION:$[hpx.parcel.array_optimization]}
async_serialization = ${HPX_PARCEL_ASYNC_SERIALIZATION:1}
message_handlers = ${HPX_PARCEL_MESSAGE_HANDLERS:0}
Property |
Description |
|
This property defines the default IP address to be used for the parcel
layer to listen to. This IP address will be used as long as no other
values are specified (for instance using the |
|
This property defines the default IP port to be used for the parcel layer
to listen to. This IP port will be used as long as no other values are
specified (for instance using the |
|
This property defines which parcelport type should be used during
application bootstrap. The default depends on the compile time
preprocessor constant |
|
This property defines how many network connections between different
localities are overall kept alive by each of locality. The
default depends on the compile time preprocessor constant
|
|
This property defines the maximum number of network connections that one
locality will open to another locality. The default depends
on the compile time preprocessor constant
|
|
This property defines the maximum allowed message size which will be
transferrable through the parcel layer. The default depends on the
compile time preprocessor constant |
|
This property defines the maximum allowed outbound coalesced message size
which will be transferrable through the parcel layer. The default depends
on the compile time preprocessor constant
|
|
This property defines whether this locality is allowed to utilize
array optimizations during serialization of parcel data. The default is
|
|
This property defines whether this locality is allowed to utilize
zero copy optimizations during serialization of parcel data. The default
is the same value as set for |
|
This property defines whether this locality is allowed to spawn a
new thread for serialization (this is both for encoding and decoding
parcels). The default is |
|
This property defines whether message handlers are loaded. The default is
|
The following settings relate to the TCP/IP parcelport.
[hpx.parcel.tcp]
enable = ${HPX_HAVE_PARCELPORT_TCP:$[hpx.parcel.enabled]}
array_optimization = ${HPX_PARCEL_TCP_ARRAY_OPTIMIZATION:$[hpx.parcel.array_optimization]}
zero_copy_optimization = ${HPX_PARCEL_TCP_ZERO_COPY_OPTIMIZATION:$[hpx.parcel.zero_copy_optimization]}
async_serialization = ${HPX_PARCEL_TCP_ASYNC_SERIALIZATION:$[hpx.parcel.async_serialization]}
parcel_pool_size = ${HPX_PARCEL_TCP_PARCEL_POOL_SIZE:$[hpx.threadpools.parcel_pool_size]}
max_connections = ${HPX_PARCEL_TCP_MAX_CONNECTIONS:$[hpx.parcel.max_connections]}
max_connections_per_locality = ${HPX_PARCEL_TCP_MAX_CONNECTIONS_PER_LOCALITY:$[hpx.parcel.max_connections_per_locality]}
max_message_size = ${HPX_PARCEL_TCP_MAX_MESSAGE_SIZE:$[hpx.parcel.max_message_size]}
max_outbound_message_size = ${HPX_PARCEL_TCP_MAX_OUTBOUND_MESSAGE_SIZE:$[hpx.parcel.max_outbound_message_size]}
Property |
Description |
|
Enable the use of the default TCP parcelport. Note that the initial bootstrap of the overall HPX application will be performed using the default TCP connections. This parcelport is enabled by default. This will be disabled only if MPI is enabled (see below). |
|
This property defines whether this locality is allowed to utilize
array optimizations in the TCP/IP parcelport during serialization of
parcel data. The default is the same value as set for
|
|
This property defines whether this locality is allowed to utilize
zero copy optimizations in the TCP/IP parcelport during serialization of
parcel data. The default is the same value as set for
|
|
This property defines whether this locality is allowed to spawn a
new thread for serialization in the TCP/IP parcelport (this is both for
encoding and decoding parcels). The default is the same value as set for
|
|
The value of this property defines the number of OS-threads created for
the internal parcel thread pool of the TCP parcel port. The default is
taken from |
|
This property defines how many network connections between different
localities are overall kept alive by each of locality. The
default is taken from |
|
This property defines the maximum number of network connections that one
locality will open to another locality. The default is
taken from |
|
This property defines the maximum allowed message size which will be
transferrable through the parcel layer. The default is taken from
|
|
This property defines the maximum allowed outbound coalesced message size
which will be transferrable through the parcel layer. The default is
taken from |
The following settings relate to the MPI parcelport. These settings take effect
only if the compile time constant HPX_HAVE_PARCELPORT_MPI
is set (the
equivalent cmake variable is HPX_WITH_PARCELPORT_MPI
and has to be set to
ON
.
[hpx.parcel.mpi]
enable = ${HPX_HAVE_PARCELPORT_MPI:$[hpx.parcel.enabled]}
env = ${HPX_HAVE_PARCELPORT_MPI_ENV:MV2_COMM_WORLD_RANK,PMI_RANK,OMPI_COMM_WORLD_SIZE,ALPS_APP_PE}
multithreaded = ${HPX_HAVE_PARCELPORT_MPI_MULTITHREADED:0}
rank = <MPI_rank>
processor_name = <MPI_processor_name>
array_optimization = ${HPX_HAVE_PARCEL_MPI_ARRAY_OPTIMIZATION:$[hpx.parcel.array_optimization]}
zero_copy_optimization = ${HPX_HAVE_PARCEL_MPI_ZERO_COPY_OPTIMIZATION:$[hpx.parcel.zero_copy_optimization]}
use_io_pool = ${HPX_HAVE_PARCEL_MPI_USE_IO_POOL:$1}
async_serialization = ${HPX_HAVE_PARCEL_MPI_ASYNC_SERIALIZATION:$[hpx.parcel.async_serialization]}
parcel_pool_size = ${HPX_HAVE_PARCEL_MPI_PARCEL_POOL_SIZE:$[hpx.threadpools.parcel_pool_size]}
max_connections = ${HPX_HAVE_PARCEL_MPI_MAX_CONNECTIONS:$[hpx.parcel.max_connections]}
max_connections_per_locality = ${HPX_HAVE_PARCEL_MPI_MAX_CONNECTIONS_PER_LOCALITY:$[hpx.parcel.max_connections_per_locality]}
max_message_size = ${HPX_HAVE_PARCEL_MPI_MAX_MESSAGE_SIZE:$[hpx.parcel.max_message_size]}
max_outbound_message_size = ${HPX_HAVE_PARCEL_MPI_MAX_OUTBOUND_MESSAGE_SIZE:$[hpx.parcel.max_outbound_message_size]}
Property |
Description |
|
Enable the use of the MPI parcelport. HPX tries to detect if the application was started within a parallel MPI environment. If the detection was succesful, the MPI parcelport is enabled by default. To explicitly disable the MPI parcelport, set to 0. Note that the initial bootstrap of the overall HPX application will be performed using MPI as well. |
|
This property influences which environment variables (comma separated) will be analyzed to find out whether the application was invoked by MPI. |
|
This property is used to determine what threading mode to use when
initializing MPI. If this setting is |
|
This property will be initialized to the MPI rank of the locality. |
|
This property will be initialized to the MPI processor name of the locality. |
|
This property defines whether this locality is allowed to utilize
array optimizations in the MPI parcelport during serialization of
parcel data. The default is the same value as set for
|
|
This property defines whether this locality is allowed to utilize
zero copy optimizations in the MPI parcelport during serialization of
parcel data. The default is the same value as set for
|
|
This property can be set to run the progress thread inside of HPX threads
instead of a separate thread pool. The default is |
|
This property defines whether this locality is allowed to spawn a
new thread for serialization in the MPI parcelport (this is both for
encoding and decoding parcels). The default is the same value as set for
|
|
The value of this property defines the number of OS-threads created for
the internal parcel thread pool of the MPI parcel port. The default is
taken from |
|
This property defines how many network connections between different
localities are overall kept alive by each of locality. The
default is taken from |
|
This property defines the maximum number of network connections that one
locality will open to another locality. The default is
taken from |
|
This property defines the maximum allowed message size which will be
transferrable through the parcel layer. The default is taken from
|
|
This property defines the maximum allowed outbound coalesced message size
which will be transferrable through the parcel layer. The default is
taken from |
The hpx.agas
configuration section¶
[hpx.agas]
address = ${HPX_AGAS_SERVER_ADDRESS:<hpx_initial_ip_address>}
port = ${HPX_AGAS_SERVER_PORT:<hpx_initial_ip_port>}
service_mode = hosted
dedicated_server = 0
max_pending_refcnt_requests = ${HPX_AGAS_MAX_PENDING_REFCNT_REQUESTS:<hpx_initial_agas_max_pending_refcnt_requests>}
use_caching = ${HPX_AGAS_USE_CACHING:1}
use_range_caching = ${HPX_AGAS_USE_RANGE_CACHING:1}
local_cache_size = ${HPX_AGAS_LOCAL_CACHE_SIZE:<hpx_agas_local_cache_size>}
Property |
Description |
|
This property defines the default IP address to be used for the
AGAS root server. This IP address will be used as long as no
other values are specified (for instance using the |
|
This property defines the default IP port to be used for the AGAS
root server. This IP port will be used as long as no other values are
specified (for instance using the |
|
This property specifies what type of AGAS service is running on
this locality. Currently, two modes exist. The locality
that acts as the AGAS server runs in |
|
This property specifies whether the AGAS server is exclusively
running AGAS services and not hosting any application components.
It is a boolean value. Set to |
|
This property defines the number of reference counting requests
(increments or decrements) to buffer. The default depends on the compile
time preprocessor constant
|
|
This property specifies whether a software address translation cache is
used. It is a boolean value. Defaults to |
|
This property specifies whether range-based caching is used by the
software address translation cache. This property is ignored if
hpx.agas.use_caching is false. It is a boolean value. Defaults to |
|
This property defines the size of the software address translation cache
for AGAS services. This property is ignored
if |
The hpx.commandline
configuration section¶
The following table lists the definition of all pre-defined command line option shortcuts. For more information about commandline options see the section HPX Command Line Options.
[hpx.commandline]
aliasing = ${HPX_COMMANDLINE_ALIASING:1}
allow_unknown = ${HPX_COMMANDLINE_ALLOW_UNKNOWN:0}
[hpx.commandline.aliases]
-a = --hpx:agas
-c = --hpx:console
-h = --hpx:help
-I = --hpx:ini
-l = --hpx:localities
-p = --hpx:app-config
-q = --hpx:queuing
-r = --hpx:run-agas-server
-t = --hpx:threads
-v = --hpx:version
-w = --hpx:worker
-x = --hpx:hpx
-0 = --hpx:node=0
-1 = --hpx:node=1
-2 = --hpx:node=2
-3 = --hpx:node=3
-4 = --hpx:node=4
-5 = --hpx:node=5
-6 = --hpx:node=6
-7 = --hpx:node=7
-8 = --hpx:node=8
-9 = --hpx:node=9
Property |
Description |
|
Enable command line aliases as defined in the section
|
|
Allow for unknown command line options to be passed through to
|
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
|
On the commandline, |
Loading INI files¶
During startup and after the internal database has been initialized as described in the section Built-in Default Configuration Settings, HPX will try to locate and load additional ini files to be used as a source for configuration properties. This allows for a wide spectrum of additional customization possibilities by the user and system administrators. The sequence of locations where HPX will try loading the ini files is well defined and documented in this section. All ini files found are merged into the internal configuration database. The merge operation itself conforms to the rules as described in the section The HPX INI File Format.
Load all component shared libraries found in the directories specified by the property
hpx.component_path
and retrieve their default configuration information (see section Loading components for more details). This property can refer to a list of directories separated by':'
(Linux, Android, and MacOS) or using';'
(Windows).Load all files named
hpx.ini
in the directories referenced by the propertyhpx.master_ini_path
This property can refer to a list of directories separated by':'
(Linux, Android, and MacOS) or using';'
(Windows).Load a file named
.hpx.ini
in the current working directory, e.g. the directory the application was invoked from.Load a file referenced by the environment variable
HPX_INI
. This variable is expected to provide the full path name of the ini configuration file (if any).Load a file named
/etc/hpx.ini
. This lookup is done on non-Windows systems only.Load a file named
.hpx.ini
in the home directory of the current user, e.g. the directory referenced by the environment variableHOME
.Load a file named
.hpx.ini
in the directory referenced by the environment variablePWD
.Load the file specified on the command line using the option
--hpx:config
.Load all properties specified on the command line using the option
--hpx:ini
. The properties will be added to the database in the same sequence as they are specified on the command line. The format for those options is for instance--hpx:ini
=hpx.default_stack_size=0x4000
. In addition to the explicit command line options, this will set the following properties as implied from other settings:hpx.parcel.address
andhpx.parcel.port
as set by--hpx:hpx
hpx.agas.address
,hpx.agas.port
andhpx.agas.service_mode
as set by--hpx:agas
hpx.program_name
andhpx.cmd_line
will be derived from the actual command linehpx.os_threads
andhpx.localities
as set by
hpx.runtime_mode
will be derived from any explicit--hpx:console
,--hpx:worker
, or--hpx:connect
, or it will be derived from other settings, such as--hpx:node
=0
which implies--hpx:console
Load files based on the pattern
*.ini
in all directories listed by the propertyhpx.ini_path
. All files found during this search will be merged. The propertyhpx.ini_path
can hold a list of directories separated by':'
(on Linux or Mac) or';'
(on Windows).Load the file specified on the command line using the option
--hpx:app-config
. Note that this file will be merged as the content for a top level section[application]
.
Note
Any changes made to the configuration database caused by one of the steps
will influence the loading process for all subsequent steps. For instance, if
one of the ini files loaded changes the property hpx.ini_path
this will
influence the directories searched in step 9 as described above.
Important
The HPX core library will verify that all configuration settings specified
on the command line (using the --hpx:ini
option) will be checked
for validity. That means that the library will accept only known
configuration settings. This is to protect the user from unintentional typos
while specifying those settings. This behavior can be overwritten by
appending a '!'
to the configuration key, thus forcing the setting to be
entered into the configuration database, for instance: --hpx:ini
=hpx.foo! = 1
If any of the environment variables or files listed above is not found the corresponding loading step will be silently skipped.
Loading components¶
HPX relies on loading application specific components during the runtime of an application. Moreover, HPX comes with a set of preinstalled components supporting basic functionalities useful for almost every application. Any component in HPX is loaded from a shared library, where any of the shared libraries can contain more than one component type. During startup, HPX tries to locate all available components (e.g. their corresponding shared libraries) and creates an internal component registry for later use. This section describes the algorithm used by HPX to locate all relevant shared libraries on a system. As described, this algorithm is customizable by the configuration properties loaded from the ini files (see section Loading INI files).
Loading components is a two stage process. First HPX tries to locate all component shared libraries, loads those, and generates default configuration section in the internal configuration database for each component found. For each found component the following information is generated:
[hpx.components.<component_instance_name>]
name = <name_of_shared_library>
path = $[component_path]
enabled = $[hpx.components.load_external]
default = 1
The values in this section correspond to the expected configuration information for a component as described in the section Built-in Default Configuration Settings.
In order to locate component shared libraries, HPX will try loading all
shared libraries (files with the platform specific extension of a shared
library, Linux: *.so
, Windows: *.dll
, MacOS: *.dylib
found in the
directory referenced by the ini property hpx.component_path
).
This first step corresponds to step 1) during the process of filling the internal configuration database with default information as described in section Loading INI files.
After all of the configuration information has been loaded, HPX performs the
second step in terms of loading components. During this step, HPX scans all
existing configuration sections
[hpx.component.<some_component_instance_name>]
and instantiates a special
factory object for each of the successfully located and loaded components.
During the application’s life time, these factory objects will be responsible to
create new and discard old instances of the component they are associated with.
This step is performed after step 11) of the process of filling the internal
configuration database with default information as described in section
Loading INI files.
Application specific component example¶
In this section we assume to have a simple application component which exposes
one member function as a component action. The header file app_server.hpp
declares the C++ type to be exposed as a component. This type has a member
function print_greeting()
which is exposed as an action
print_greeting_action
. We assume the source files for this example are
located in a directory referenced by $APP_ROOT
:
// file: $APP_ROOT/app_server.hpp
#include <hpx/hpx.hpp>
#include <hpx/include/iostreams.hpp>
namespace app
{
// Define a simple component exposing one action 'print_greeting'
class HPX_COMPONENT_EXPORT server
: public hpx::components::component_base<server>
{
void print_greeting ()
{
hpx::cout << "Hey, how are you?\n" << hpx::flush;
}
// Component actions need to be declared, this also defines the
// type 'print_greeting_action' representing the action.
HPX_DEFINE_COMPONENT_ACTION(server, print_greeting, print_greeting_action);
};
}
// Declare boilerplate code required for each of the component actions.
HPX_REGISTER_ACTION_DECLARATION(app::server::print_greeting_action);
The corresponding source file contains mainly macro invocations which define boilerplate code needed for HPX to function properly:
// file: $APP_ROOT/app_server.cpp
#include "app_server.hpp"
// Define boilerplate required once per component module.
HPX_REGISTER_COMPONENT_MODULE();
// Define factory object associated with our component of type 'app::server'.
HPX_REGISTER_COMPONENT(app::server, app_server);
// Define boilerplate code required for each of the component actions. Use the
// same argument as used for HPX_REGISTER_ACTION_DECLARATION above.
HPX_REGISTER_ACTION(app::server::print_greeting_action);
The following gives an example of how the component can be used. We create one
instance of the app::server
component on the current locality and
invoke the exposed action print_greeting_action
using the global id of the
newly created instance. Note, that no special code is required to delete the
component instance after it is not needed anymore. It will be deleted
automatically when its last reference goes out of scope, here at the closing
brace of the block surrounding the code:
// file: $APP_ROOT/use_app_server_example.cpp
#include <hpx/hpx_init.hpp>
#include "app_server.hpp"
int hpx_main()
{
{
// Create an instance of the app_server component on the current locality.
hpx::naming:id_type app_server_instance =
hpx::create_component<app::server>(hpx::find_here());
// Create an instance of the action 'print_greeting_action'.
app::server::print_greeting_action print_greeting;
// Invoke the action 'print_greeting' on the newly created component.
print_greeting(app_server_instance);
}
return hpx::finalize();
}
int main(int argc, char* argv[])
{
return hpx::init(argc, argv);
}
In order to make sure that the application will be able to use the component
app::server
, special configuration information must be passed to HPX. The
simples way to allow HPX to ‘find’ the component is to provide special ini
configuration files, which add the necessary information to the internal
configuration database. The component should have a special ini file containing
the information specific to the component app_server
.
# file: $APP_ROOT/app_server.ini
[hpx.components.app_server]
name = app_server
path = $APP_LOCATION/
Here $APP_LOCATION
is the directory where the (binary) component shared
library is located. HPX will attempt to load the shared library from there.
The section name hpx.components.app_server
reflects the instance name of the
component (app_server
is an arbitrary, but unique name). The property value
for hpx.components.app_server.name
should be the same as used for the second
argument to the macro HPX_REGISTER_COMPONENT
above.
Additionally a file .hpx.ini
which could be located in the current working
directory (see step 3 as described in the section Loading INI files) can
be used to add to the ini search path for components:
# file: $PWD/.hpx.ini
[hpx]
ini_path = $[hpx.ini_path]:$APP_ROOT/
This assumes that the above ini file specific to the component is located in
the directory $APP_ROOT
.
Note
It is possible to reference the defined property from inside its value. HPX
will gracefully use the previous value of hpx.ini_path
for the reference
on the right hand side and assign the overall (now expanded) value to the
property.
Logging¶
HPX uses a sophisticated logging framework allowing to follow in detail what operations have been performed inside the HPX library in what sequence. This information proves to be very useful for diagnosing problems or just for improving the understanding what is happening in HPX as a consequence of invoking HPX API functionality.
Default logging¶
Enabling default logging is a simple process. The detailed description in the remainder of this section explains different ways to customize the defaults. Default logging can be enabled by using one of the following:
a command line switch
--hpx:debug-hpx-log
, which will enable logging to the console terminalthe command line switch
--hpx:debug-hpx-log
=<filename>
, which enables logging to a given file<filename>
, orsetting an environment variable
HPX_LOGLEVEL=<loglevel>
while running the HPX application. In this case<loglevel>
should be a number between (or equal to)1
and5
where1
means minimal logging and5
causes to log all available messages. When setting the environment variable the logs will be written to a file namedhpx.<PID>.lo
in the current working directory, where<PID>
is the process id of the console instance of the application.
Customizing logging¶
Generally, logging can be customized either using environment variable settings or using by an ini configuration file. Logging is generated in several categories, each of which can be customized independently. All customizable configuration parameters have reasonable defaults, allowing to use logging without any additional configuration effort. The following table lists the available categories.
Category |
Category shortcut |
Information to be generated |
Environment variable |
General |
None |
Logging information generated by different subsystems of HPX, such as thread-manager, parcel layer, LCOs, etc. |
|
|
Logging output generated by the AGAS subsystem |
|
|
Application |
|
Logging generated by applications. |
|
By default, all logging output is redirected to the console instance of an application, where it is collected and written to a file, one file for each logging category.
Each logging category can be customized at two levels, the parameters for each
are stored in the ini configuration sections hpx.logging.CATEGORY
and
hpx.logging.console.CATEGORY
(where CATEGORY
is the category shortcut as
listed in the table above). The former influences logging at the source
locality and the latter modifies the logging behaviour for each of the
categories at the console instance of an application.
Levels¶
All HPX logging output has seven different logging levels. These levels can be set explicitly or through environmental variables in the main HPX ini file as shown below. The logging levels and their associated integral values are shown in the table below, ordered from most verbose to least verbose. By default, all HPX logs are set to 0, e.g. all logging output is disabled by default.
Logging level |
Integral value |
|---|---|
|
|
|
|
|
|
|
|
|
|
No logging |
|
Tip
The easiest way to enable logging output is to set the environment variable
corresponding to the logging category to an integral value as described in
the table above. For instance, setting HPX_LOGLEVEL=5
will enable full
logging output for the general category. Please note that the syntax and
means of setting environment variables varies between operating systems.
Configuration¶
Logs will be saved to destinations as configured by the user. By default,
logging output is saved on the console instance of an application to
hpx.<CATEGORY>.<PID>.lo
(where CATEGORY
and PID>
are placeholders
for the category shortcut and the OS process id). The output for the general
logging category is saved to hpx.<PID>.log
. The default settings for the
general logging category are shown here (the syntax is described in the section
The HPX INI File Format):
[hpx.logging]
level = ${HPX_LOGLEVEL:0}
destination = ${HPX_LOGDESTINATION:console}
format = ${HPX_LOGFORMAT:(T%locality%/%hpxthread%.%hpxphase%/%hpxcomponent%) P%parentloc%/%hpxparent%.%hpxparentphase% %time%($hh:$mm.$ss.$mili) [%idx%]|\\n}
The logging level is taken from the environment variable HPX_LOGLEVEL
and
defaults to zero, e.g. no logging. The default logging destination is read from
the environment variable HPX_LOGDESTINATION
On any of the localities it
defaults to console
which redirects all generated logging output to the
console instance of an application. The following table lists the possible
destinations for any logging output. It is possible to specify more than one
destination separated by whitespace.
Logging destination |
Description |
file( |
Direct all output to a file with the given <filename>. |
cout |
Direct all output to the local standard output of the application instance on this locality. |
cerr |
Direct all output to the local standard error output of the application instance on this locality. |
console |
Direct all output to the console instance of the application. The console instance has its logging destinations configured separately. |
android_log |
Direct all output to the (Android) system log (available on Android systems only). |
The logging format is read from the environment variable HPX_LOGFORMAT
and
it defaults to a complex format description. This format consists of several
placeholder fields (for instance %locality%
which will be replaced by
concrete values when the logging output is generated. All other information is
transferred verbatim to the output. The table below describes the available
field placeholders. The separator character |
separates the logging message
prefix formatted as shown and the actual log message which will replace the
separator.
Name |
Description |
The id of the locality on which the logging message was generated. |
|
hpxthread |
The id of the HPX-thread generating this logging output. |
hpxphase |
The phase 1 of the HPX-thread generating this logging output. |
hpxcomponent |
The local virtual address of the component which the current HPX-thread is accessing. |
parentloc |
The id of the locality where the HPX thread was running which initiated the current HPX-thread. The current HPX-thread is generating this logging output. |
hpxparent |
The id of the HPX-thread which initiated the current HPX-thread. The current HPX-thread is generating this logging output. |
hpxparentphase |
The phase of the HPX-thread when it initiated the current HPX-thread. The current HPX-thread is generating this logging output. |
time |
The time stamp for this logging outputline as generated by the source locality. |
idx |
The sequence number of the logging output line as generated on the source locality. |
osthread |
The sequence number of the OS-thread which executes the current HPX-thread. |
Note
Not all of the field placeholder may be expanded for all generated logging
output. If no value is available for a particular field it is replaced with a
sequence of '-'
characters.]
Here is an example line from a logging output generated by one of the HPX examples (please note that this is generated on a single line, without line break):
(T00000000/0000000002d46f90.01/00000000009ebc10) P--------/0000000002d46f80.02 17:49.37.320 [000000000000004d]
<info> [RT] successfully created component {0000000100ff0001,<PHONE_NUMBER>030002} of type: component_barrier[7(3)]
The default settings for the general logging category on the console is shown here:
[hpx.logging.console]
level = ${HPX_LOGLEVEL:$[hpx.logging.level]}
destination = ${HPX_CONSOLE_LOGDESTINATION:file(hpx.$[system.pid].log)}
format = ${HPX_CONSOLE_LOGFORMAT:|}
These settings define how the logging is customized once the logging output is
received by the console instance of an application. The logging level is read
from the environment variable HPX_LOGLEVEL
(as set for the console instance
of the application). The level defaults to the same values as the corresponding
settings in the general logging configuration shown before. The destination on
the console instance is set to be a file which name is generated based from its
OS process id. Setting the environment variable HPX_CONSOLE_LOGDESTINATION
allows customization of the naming scheme for the output file. The logging
format is set to leave the original logging output unchanged, as received from
one of the localities the application runs on.
HPX Command Line Options¶
The predefined command line options for any application using
hpx::init
are described in the following subsections.
HPX options (allowed on command line only)¶
-
--hpx:help
¶
print out program usage (default: this message), possible values:
full
(additionally prints options from components)
-
--hpx:version
¶
print out HPX version and copyright information
-
--hpx:info
¶
print out HPX configuration information
-
--hpx:options-file
arg
¶ specify a file containing command line options (alternatively: @filepath)
HPX options (additionally allowed in an options file)¶
-
--hpx:worker
¶
run this instance in worker mode
-
--hpx:console
¶
run this instance in console mode
-
--hpx:connect
¶
run this instance in worker mode, but connecting late
-
--hpx:hpx
arg
¶ the IP address the HPX parcelport is listening on, expected format:
address:port
(default:<IP_ADDRESS>:7910
)
-
--hpx:agas
arg
¶ the IP address the AGAS root server is running on, expected format:
address:port
(default:<IP_ADDRESS>:7910
)
-
--hpx:nodefile
arg
¶ the file name of a node file to use (list of nodes, one node name per line and core)
-
--hpx:nodes
arg
¶ the (space separated) list of the nodes to use (usually this is extracted from a node file)
-
--hpx:endnodes
¶
this can be used to end the list of nodes specified using the option
--hpx:nodes
-
--hpx:ifsuffix
arg
¶ suffix to append to host names in order to resolve them to the proper network interconnect
-
--hpx:ifprefix
arg
¶ prefix to prepend to host names in order to resolve them to the proper network interconnect
-
--hpx:iftransform
arg
¶ sed-style search and replace (
s/search/replace/
) used to transform host names to the proper network interconnect
-
--hpx:localities
arg
¶ the number of localities to wait for at application startup (default:
1
)
-
--hpx:ignore-batch-env
¶
ignore batch environment variables
-
--hpx:expect-connecting-localities
¶
this locality expects other localities to dynamically connect (this is implied if the number of initial localities is larger than 1)
-
--hpx:pu-offset
¶
the first processing unit this instance of HPX should be run on (default:
0
)
-
--hpx:pu-step
¶
the step between used processing unit numbers for this instance of HPX (default:
1
)
-
--hpx:threads
arg
¶ the number of operating system threads to spawn for this HPX locality. Possible values are: numeric values
1
,2
,3
and so on,all
(which spawns one thread per processing unit, includes hyperthreads), orcores
(which spawns one thread per core) (default:cores
).
-
--hpx:cores
arg
¶ the number of cores to utilize for this HPX locality (default:
all
, i.e. the number of cores is based on the number of threads--hpx:threads
assuming--hpx:bind
=compact
-
--hpx:affinity
arg
¶ the affinity domain the OS threads will be confined to, possible values:
pu
,core
,numa
,machine
(default:pu
)
-
--hpx:bind
arg
¶ the detailed affinity description for the OS threads, see More details about HPX command line options for a detailed description of possible values. Do not use with
--hpx:pu-step
,--hpx:pu-offset
or--hpx:affinity
options. Implies--hpx:numa-sensitive
(--hpx:bind
=none
) disables defining thread affinities).
-
--hpx:use-process-mask
¶
use the process mask to restrict available hardware resources (implies
--hpx:ignore-batch-env
)
-
--hpx:print-bind
¶
print to the console the bit masks calculated from the arguments specified to all
--hpx:bind
options.
-
--hpx:queuing
arg
¶ the queue scheduling policy to use, options are
local
,local-priority-fifo
,local-priority-lifo
,static
,static-priority
,abp-priority-fifo
andabp-priority-lifo
(default:local-priority-fifo
)
-
--hpx:high-priority-threads
arg
¶ the number of operating system threads maintaining a high priority queue (default: number of OS threads), valid for
--hpx:queuing
=abp-priority
,--hpx:queuing
=static-priority
and--hpx:queuing
=local-priority
only
-
--hpx:numa-sensitive
¶
makes the scheduler NUMA sensitive
HPX configuraton options¶
-
--hpx:app-config
arg
¶ load the specified application configuration (ini) file
-
--hpx:config
arg
¶ load the specified hpx configuration (ini) file
-
--hpx:ini
arg
¶ add a configuration definition to the default runtime configuration
-
--hpx:exit
¶
exit after configuring the runtime
HPX debugging options¶
-
--hpx:list-symbolic-names
¶
list all registered symbolic names after startup
-
--hpx:list-component-types
¶
list all dynamic component types after startup
-
--hpx:dump-config-initial
¶
print the initial runtime configuration
-
--hpx:dump-config
¶
print the final runtime configuration
-
--hpx:debug-hpx-log
[arg]
¶ enable all messages on the HPX log channel and send all HPX logs to the target destination (default:
cout
)
-
--hpx:debug-agas-log
[arg]
¶ enable all messages on the AGAS log channel and send all AGAS logs to the target destination (default:
cout
)
-
--hpx:debug-parcel-log
[arg]
¶ enable all messages on the parcel transport log channel and send all parcel transport logs to the target destination (default:
cout
)
-
--hpx:debug-timing-log
[arg]
¶ enable all messages on the timing log channel and send all timing logs to the target destination (default:
cout
)
-
--hpx:debug-app-log
[arg]
¶ enable all messages on the application log channel and send all application logs to the target destination (default:
cout
)
-
--hpx:debug-clp
¶
debug command line processing
-
--hpx:attach-debugger
arg
¶ wait for a debugger to be attached, possible arg values:
startup
orexception
(default:startup
)
Command line argument shortcuts¶
Additionally, the following shortcuts are available from every HPX application.
 In fact, all of the shortcuts listed above are pre-defined using the technique described here. Also, it is possible to redefine any of the pre-defined shortcuts to expand differently as well.
Shortcut options are obtained from the internal configuration database. They are
stored as key-value properties in a special properties section named
hpx.commandline
. You can define your own shortcuts by adding the
corresponding definitions to one of the ini
configuration files as described
in the section Configuring HPX applications. For instance, in order to define a command
line shortcut --p
which should expand to -hpx:print-counter
, the
following configuration information needs to be added to one of the ini
configuration files:
[hpx.commandline.aliases]
--pc = --hpx:print-counter
Note
Any arguments for shortcut options passed on the command line are retained and passed as arguments to the corresponding expanded option. For instance, given the definition above, the command line option:
--pc=/threads{locality#0/total}/count/cumulative
would be expanded to:
--hpx:print-counter=/threads{locality#0/total}/count/cumulative
Important
Any shortcut option should either start with a single '-'
or with two
'--'
characters. Shortcuts starting with a single '-'
are interpreted
as short options (i.e. everything after the first character following the
'-'
is treated as the argument). Shortcuts starting with '--'
are
interpreted as long options. No other shortcut formats are supported.
Specifying options for single localities only¶
For runs involving more than one locality it is sometimes desirable to
supply specific command line options to single localities only. When the HPX
application is launched using a scheduler (like PBS, for more details see
section How to use HPX applications with PBS), specifying dedicated command line options for single
localities may be desirable. For this reason all of the command line options
which have the general format --hpx:<some_key>
can be used in a more general
form: --hpx:<N>:<some_key>
, where <N> is the number of the locality
this command line options will be applied to, all other localities will simply
ignore the option. For instance, the following PBS script passes the option
--hpx:pu-offset
=4
to the locality '1'
only.
#!/bin/bash
#
#PBS -l nodes=2:ppn=4
APP_PATH=~/packages/hpx/bin/hello_world_distributed
APP_OPTIONS=
pbsdsh -u $APP_PATH $APP_OPTIONS --hpx:1:pu-offset=4 --hpx:nodes=`cat $PBS_NODEFILE`
Caution
If the first application specific argument (inside $APP_OPTIONS
is a
non-option (i.e. does not start with a -
or a --
, then it must be
placed before the option --hpx:nodes
, which, in this case,
should be the last option on the command line.
Alternatively, use the option --hpx:endnodes
to explicitly
mark the end of the list of node names:
pbsdsh -u $APP_PATH --hpx:1:pu-offset=4 --hpx:nodes=`cat $PBS_NODEFILE` --hpx:endnodes $APP_OPTIONS
More details about HPX command line options¶
This section documents the following list of the command line options in more detail:
The command line option --hpx:bind
¶
This command line option allows one to specify the required affinity of the
HPX worker threads to the underlying processing units. As a result the worker
threads will run only on the processing units identified by the corresponding
bind specification. The affinity settings are to be specified using
--hpx:bind
=<BINDINGS>
, where <BINDINGS>
have to be formatted as
described below.
In addition to the syntax described below one can use --hpx:bind
=none
to disable all binding of any threads to a particular core. This is
mostly supported for debugging purposes.
The specified affinities refer to specific regions within a machine hardware topology. In order to understand the hardware topology of a particular machine it may be useful to run the lstopo tool which is part of Portable Hardware Locality (HWLOC) to see the reported topology tree. Seeing and understanding a topology tree will definitely help in understanding the concepts that are discussed below.
Affinities can be specified using HWLOC (Portable Hardware Locality (HWLOC)) tuples. Tuples of HWLOC
objects and associated indexes can be specified in the form
object:index
, object:index-index
or object:index,...,index
. HWLOC
objects represent types of mapped items in a topology tree. Possible values for
objects are socket
, numanode
, core
and pu
(processing unit).
Indexes are non-negative integers that specify a unique physical object in a
topology tree using its logical sequence number.
Chaining multiple tuples together in the more general form
object1:index1[.object2:index2[...]]
is permissible. While the first tuple’s
object may appear anywhere in the topology, the Nth tuple’s object must have a
shallower topology depth than the (N+1)th tuple’s object. Put simply: as you
move right in a tuple chain, objects must go deeper in the topology tree.
Indexes specified in chained tuples are relative to the scope of the parent
object. For example, socket:0.core:1
refers to the second core in the first
socket (all indices are zero based).
Multiple affinities can be specified using several --hpx:bind
command
line options or by appending several affinities separated by a ';'
By
default, if multiple affinities are specified, they are added.
"all"
is a special affinity consisting in the entire current topology.
Note
All ‘names’ in an affinity specification, such as thread
, socket
,
numanode
, pu
or all
can be abbreviated. Thus the affinity
specification threads:0-3=socket:0.core:1.pu:1
is fully equivalent to its
shortened form t:0-3=s:0.c:1.p:1
.
Here is a full grammar describing the possible format of mappings:
mappings ::=distribution
|mapping
(";"mapping
)* distribution ::= "compact" | "scatter" | "balanced" | "numa-balanced" mapping ::=thread_spec
"="pu_specs
thread_spec ::= "thread:"range_specs
pu_specs ::=pu_spec
("."pu_spec
)* pu_spec ::=type
":"range_specs
| "~"pu_spec
range_specs ::=range_spec
(","range_spec
)* range_spec ::= int | int "-" int | "all" type ::= "socket" | "numanode" | "core" | "pu"
The following example assumes a system with at least 4 cores, where each core
has more than 1 processing unit (hardware threads). Running
hello_world_distributed
with 4 OS-threads (on 4 processing units), where
each of those threads is bound to the first processing unit of each of the
cores, can be achieved by invoking:
hello_world_distributed -t4 --hpx:bind=thread:0-3=core:0-3.pu:0
Here thread:0-3
specifies the OS threads for which to define affinity
bindings, and core:0-3.pu:
defines that for each of the cores (core:0-3
)
only their first processing unit pu:0
should be used.
Note
The command line option --hpx:print-bind
can be used to print the
bitmasks generated from the affinity mappings as specified with
--hpx:bind
. For instance, on a system with hyperthreading enabled
(i.e. 2 processing units per core), the command line:
hello_world_distributed -t4 --hpx:bind=thread:0-3=core:0-3.pu:0 --hpx:print-bind
will cause this output to be printed:
0: PU L#0(P#0), Core L#0, Socket L#0, Node L#0(P#0)
1: PU L#2(P#2), Core L#1, Socket L#0, Node L#0(P#0)
2: PU L#4(P#4), Core L#2, Socket L#0, Node L#0(P#0)
3: PU L#6(P#6), Core L#3, Socket L#0, Node L#0(P#0)
where each bit in the bitmasks corresponds to a processing unit the listed worker thread will be bound to run on.
The difference between the four possible predefined distribution schemes
(compact
, scatter
, balanced
and numa-balanced
) is best explained
with an example. Imagine that we have a system with 4 cores and 4 hardware
threads per core on 2 sockets. If we place 8 threads the assignments produced by
the compact
, scatter
, balanced
and numa-balanced
types are shown
in the figure below. Notice that compact
does not fully utilize all the
cores in the system. For this reason it is recommended that applications are run
using the scatter
or balanced
/numa-balanced
options in most cases.
In addition to the predefined distributions it is possible to restrict the
resources used by HPX to the process CPU mask. The CPU mask is typically set
by e.g. MPI and batch environments. Using the command line option
--hpx:use-process-mask
makes HPX act as if only the processing units
in the CPU mask are available for use by HPX. The number of threads is
automatically determined from the CPU mask. The number of threads can still be
changed manually using this option, but only to a number less than or equal to
the number of processing units in the CPU mask. The option
--hpx:print-bind
is useful in conjunction with
--hpx:use-process-mask
to make sure threads are placed as expected.
- 1
The phase of a HPX-thread counts how often this thread has been activated.


Match Play. Red trails White 0-2 to 3 (Crawford Game).
pips Red=99 White=118
(CorrectAnswer= 0/0, ErrorScore= 0)
Being ahead in the race it is tempting to head for home with 16/6 but even if the remaining blot is not hit it will have difficulty scrambling to safety next time, meanwhile White will have strengthened his home board.
It is much better to keep the pressure on White’s mid-point, strengthen Red’s home board and minimise shots with 8/2, 5/1.
It is much better to keep the pressure on White’s mid-point, strengthen Red’s home board and minimise shots with 8/2, 5/1.
1. Cubeful 2-ply 8/2 5/1 Eq.: +0.064 0.527 0.100 0.002 - 0.473 0.114 0.002 2. Cubeful 2-ply 16/6 Eq.: -0.003 (-0.068) 0.494 0.083 0.002 - 0.506 0.069 0.002 3. Cubeful 2-ply 8/2 6/2 Eq.: -0.014 (-0.078) 0.489 0.084 0.002 - 0.511 0.130 0.003 4. Cubeful 0-ply 16/10 6/2 Eq.: -0.195 (-0.259) 0.400 0.080 0.001 - 0.600 0.221 0.007 5. Cubeful 0-ply 16/10 5/1 Eq.: -0.252 (-0.316) 0.370 0.086 0.001 - 0.630 0.302 0.014


Predicting The Top 10 Of The Third College Football Playoff Rankings
by Matt LombardiSaturday’s college football slate featured some great games, but it also featured some unfortunate injuries. Alabama star quarterback Tua Tagovailoa suffered a dislocated hip that will require surgery and likely end his college career.
Alabama still handled Mississippi State, but there’s no doubt that the Crimson Tide won’t be the same team moving forward without Tagovailoa. It’ll be fascinating to see how the College Football Playoff committee handles Tagovailoa’s injury when it assesses the Crimson Tide.
Elsewhere, LSU outlasted Ole Miss while looking shaky on defense, Ohio State blew out Rutgers, Georgia held off Auburn and Baylor got out to a huge lead and gave it all up in a tough loss to Oklahoma.
Minnesota, which shot up to No. 8 after the Penn State win, also lost to Iowa.
Here’s what we think the top 10 of the third version of the College Football Playoff Rankings will look like:
- LSU
- Ohio State
- Clemson
- Georgia
- Alabama
- Oregon (plays Arizona late tonight)
- Utah
- Oklahoma
- Penn State
- Florida
College football fans – do we have it right?