text:
The Quebec Anthology
Publication Year: 1996
Published by: University of Ottawa Press
Series: Canadian Short Story Library
Download PDF
pp. v-vi
Download PDF
pp. vii-xii
Although Quebecois literature flourished during the first half of the nineteenth century, its principal genre was the conte, an oral not a written form—which presents a distinct problem for the anthologist. French Canada did not really have a written literature until the publication of Frangois-Xavier Garneau's Histoire du Canada, the first volumes of which began appearing in 1845 ...
"The Legend of Rose Latulipe" 1837
Download PDF
pp. 1-7
Born in Quebec in 1814, Philippe-Ignace-Francois was the second of Philippe-Joseph Aubert de Gaspe's thirteen children; he was named after his ancestor, the seigneur Philippe-Ignace Aubert de Gaspe, Chevalier of the Royal and Military Order of Saint-Louis. Unlike his illustrious ...
"The Three Devils, or, All's Well That Ends Well" 1867
Download PDF
pp. 8-21
Paul-Jules-Joseph Stevens was born in Brussels, Belgium, in 1830, and emigrated to Canada in 1854 to become a school teacher in Berthier-en-Haut, now called Berthierville. He married Marie Valier in 1855 and the next year began publishing in such popular journals of the day as Le Pays, La ...
"The Roussis' Fire" 1872
Download PDF
pp. 22-37
Faucher de Saint-Maurice was born in Quebec City on April 18, 1844, and baptized Narcisse-Henri-Edouard Faucher. He attended the Petit Seminaire and the college Sainte-Anne-de-la-Pocatiere, becoming a clerk in the law firm of Henri Taschereau and Ulric-Joseph Tessier in ...
"Yellow-Wolf, Malecite Chieftain of Old" 1893
Download PDF
pp. 38-52
Shortly after, the de Gaspe family moved to Saint-Jean-Port-Joli, a village on the St. Lawrence with which Philippe-Joseph was to be associated for the rest of his life. He studied law and in 1816 was named sheriff of Quebec, but in 1822 he began to get hopelessly into debt and was relieved of his office. The following ...
"La Gothe and Her Husband" 1895
Download PDF
pp. 53-63
Robertine Barry was born on Isle-Verte on February 28, 1863, and studied in Trois-Pistoles and Quebec City. A pioneering woman journalist, her work was championed by her contemporaries, including Louis Frechette. Under the pseudonym Frangoise, she published Fleurs champetres (Rural ...
"How I Learned to Speak English" 1900
Download PDF
pp. 64-68
Born in Pointe-Levis on November 16, 1839, Louis Frechette attended the Petit Seminaire, the College Sainte-Anne-de-la-Pocatiere, and the Seminaire de Nicolet before becoming a clerk in the law firm of Francois-Xavier Lemieux in 1860. For the next three years he studied law ...
"Hay Fever" 1917
Download PDF
pp. 69-88
Sylva Clapin was born in Saint-Hyacinthe, Quebec, on July 15, 1853, and studied at the Seminaire de Saint-Hyacinthe until 1873, when he joined the United States Navy and served aboard the Kansas. He returned to Saint-Hyacinthe to become the village librarian, to run a bookshop and a ...
"The Ferryman" 1920
Download PDF
pp. 89-98
Jean-Aubert Loranger, a descendant of Philippe-Aubert de Gaspe, was born in Montreal in 1896. Orphaned at the age of four, he was raised by foster parents and, at the age of 22, became one of the founding members of the literary group that published the avant-garde art and poetry journal Le ...
"The Italian Teacher" 1927
Download PDF
pp. 99-110
Harry Bernard was born in London, England, in 1898, but moved to Canada in early childhood. He studied at the Seminaire de Saint-Hyacinthe and at the Universite de Montreal, where he received his Ph.D. in literature in 1948. By then he had already published eight of his ten books, ...
"The Mass of Florent L
Download PDF
pp. 111-121
Eugene Sears (who wrote under the pseudonyme Louis Dantin) was born in the village of Beauharnois in 1865. He attended the College de Montreal and later the Seminaire de Montreal, and studied to become a priest at the Congregation des Peres du Tres-Saint-Sacrement in 1883. ...
"Foreign Souls" 1934
Download PDF
pp. 122-138
Born in Sarzeau, Brittany, in 1879, Marie le Franc studied to become a teacher in Vannes, France, and taught in le Morbihan before moving to Montreal in 1906. She taught French language and literature, first at Westmount College and then at McGill University, and over the course of her ...
"Mrs. Filly" 1942
Download PDF
pp. 139-151
Albert Laberge was born on February 18, 1871, in Beauharnois, the son of a farming family. He was educated in Beauharnois and, later, at the Jesuit College du Gesu (Sainte-Marie) in Montreal. In 1891, he suffered a crisis of faith, however, and the following year was expelled for ...
"Mother Soubert's Pig" 1944
Download PDF
pp. 152-160
Born in Quebec City on November 28, 1915, of Montagnais descent, Yves Theriault studied at the Ecole Notre-Damede- Grace in Montreal, but at the age of seventeen decided to travel throughout the entire province of Quebec rather than pursue his studies. Subsequently, he worked as a trapper, ...
"Fleur-de-Mai" 1945
Download PDF
pp. 161-171
Alain Grandbois was born in Saint-Casimir de Portneuf on May 25, 1900, and was educated at the College de Montreal and the Seminaire de Quebec, and later at Saint Dunstan University in Charlottetown. He took a law degree at Universite Laval in 1921. An inheritance allowed him to ...
"Happiness" 1946
Download PDF
pp. 172-182
Philippe Panneton, who wrote under the pseudonym Ringuet, was born in Trois-Rivieres on April 30, 1895, to a family that had first settled in the region in 1640. At the age of eighteen, he went to Montreal to work as a reporter, then one year later enrolled at the Universite de Montreal ...
"The Torrent" 1947
Download PDF
pp. 183-218
Anne Hebert was born August 1, 1916, in Sainte-Catherinede- Fossambault, the daughter of literary critic Maurice Hebert and the first cousin of the great Quebecois poet Hector Saint-Denys-Garneau. A childhood illness prevented her from attending school, and she was educated at ...
"Last Rites" 1960
Download PDF
pp. 219-230
Gerard Bessette was born on February 25, 1920, in Sainte- Anne-de-Sabrevois, Quebec. He attended the Universite de Montreal, receiving his master's degree in 1946 on the poems of Emile Nelligan, and a doctorate in 1950 on poetic imagery in Quebecois poetry. From 1946 to 1948 he taught ...
"A Case of Sorcery" 1963
Download PDF
pp. 231-239
Born in Saint-Modeste, near Riviere-du-Loup on the lower St. Lawrence, on August 15, 1925, Adrien Therio was five when his family moved thirty miles inland, to the Chemin- Tache that appears in many of his short stories (including "A Case of Sorcery"). He began his studies at the Seminaire ...
"The Chronicles of l'Anse Saint-Roch" 1968
Download PDF
pp. 240-254
Jacques Perron was born in Louiseville, near Trois-Rivieres, on January 20, 1921, and attended first the Seminaire de Trois-Rivieres and then Universite Laval, from which he graduated with a degree in medicine in 1945. After a year with the Royal Army Medical Corps, he opened a practice in ...
"Back on April Eleventh" 1969
Download PDF
pp. 255-267
Hubert Aquin was born in Montreal on October 24, 1929. He attended the Universite de Montreal, where he studied philosophy, and then the Institut d'Etudes politiques in Paris, from 1948 to 1951, before returning to Montreal to work for Radio-Canada and the National Film Board. In the ...
"The Goldfish" 1970
Download PDF
pp. 268-283
Roch Carrier was born in Sainte-Justine-de-Dorchester on May 13, 1937, and studied at the College Saint-Louis in Edmunston, New Brunswick, a city where he also worked as a journalist from 1958 to 1960. He attended the universities of Montreal, Paris, and the Sorbonne, where he received his ...
"A Blue Rose Perfume" 1974
Download PDF
pp. 284-297
Born in Montreal in 1927, Andre Langevin worked as literary editor of Le Devoir>/em> before becoming a broadcaster for Radio-Canada, and has written numerous radio and filmscripts as well as novels and short stories. His first novel,
"Part II of Children of My Heart" 1979
Download PDF
pp. 298-325
Gabrielle Roy was born on Rue Deschambault, in St. Boniface, Manitoba, on March 22, 1909. Her father was a colonization agent for the federal government, responsible for bringing immigrants from the east and Europe into Saskatchewan (her short story "Ely! Ely! Ely!" describes this ...
"The Good Old Days" 1981
Download PDF
pp. 326-339
Andre Major was born in Montreal on April 22, 1942, and left school at the age of eighteen to pursue a career in journalism and literature. He wrote for the weekly Petit journal, became a frequent contributor to Liberte, and in 1963, with Hubert Aquin and others, he began publishing the magazine ...
"The Secret Voice" 1982
Download PDF
pp. 340-345
Gaetan Brulotte was born in Lauzon on April 8, 1945, and studied at the Universite de Paris under Roland Barthes, receiving his Ph.D. in modern literature in 1978. He has since taught in several universities, including Universite du Quebec a Montreal, Laval, California, and New Mexico. He ...
"Beach Blues" 1983
Download PDF
pp. 346-373
Monique Prouk was born in Quebec City in 1952. She has written numerous radio and television plays, as well as film scripts and stage plays. In 1983, she published her first book of short stories, Sans coeur etsans reproche, the tide story of which has been translated by Sheila Fischman as "Feint of ...
"Pomme Douly and the Instant of Eternity" 1988
Download PDF
pp. 374-381
Suzanne Jacob was born near Abitibi and enrolled at the College Notre-Dame-de-l'assomption de Nicolet in 1965, where she was introduced to the worlds of theatre and music. She taught French as a second language from 1967 to 1972; during this period, she began writing songs and stories, some ...
"To Console Myself. I Imagine That the Bombs Have Fallen" 1989
Download PDF
pp. 382-384
Anne Dandurand was born in Montreal on November 19, 1953—"the same day television came to Montreal," as she says—the twin sister of the writer Claire De. She worked as a union organizer for La Federation des travailleurs du Quebec as well as for the Committee on the Status of ...
"In My Condition" 1989
Download PDF
pp. 385-389
Gilles Pellerin, teacher and short-story writer, was born in Shawinigan in 1954 and now lives in Quebec City, where he recently founded the publishing house L'Instant meme. In 1988 his story "Le Songe" won first prize in a short-story contest sponsored by L'Office franco-quebecois, and that ...
"The Love of Lies" 1989
Download PDF
pp. 390-394
Claude-Emmanuelle Yance was born in Quebec City. She moved to the French island of Nouvelle-Caledonie, where she lived for nine years, and then spent two years in Paris before returning to Quebec. Although she acknowledges the influences of the South Pacific as well as of Paris in her linguistic ...
"Tragedy Houses My Wound" 1990
Download PDF
pp. 395-408
Andre Carpentier was born in Montreal on October 29, 1947. He graduated from the Universite du Quebec a Montreal in 1973 with a masters degree in literature, and is a short-story writer and novelist. He helped edit the visual arts magazine L'Ecran in 1974, and the next year became the
"Consuming Love" 1990
Download PDF
pp. 409-412
Claire De was born in Montreal on November 19, 1953, the twin sister of Anne Dandurand. She divided her time between Montreal and Paris for many years, and now lives permanently in Paris. Her first book, co-authored with her sister, was La Louve-garou (1982), ...
"Portraits of Elsa" 1990
Download PDF
pp. 413-424
Marie Jose Theriault was born in Montreal on March 21, 1945, the daughter of Yves Theriault. She attended the College Marie de France until 1961; after leaving school she worked as a salesperson, an interpreter, a proofreader, and, from 1964 to 1973, a professional dancer. In 1973 she ...
Print-ISBN-13: 9780776603476
Print-ISBN-10: 0776603477
Page Count: 424
Publication Year: 1996
Volume Title: 19
Series Title: Canadian Short Story Library
See more Books in this Series
MUSE Marc Record: Download for The Quebec Anthology


text:
A wise move. The dictionary claims that marketing is "the commercial functions involved in transferring goods from producer to consumer." Well, sort of... Marketing is about dreaming the inconceivable, then making it inescapable. It's creating a precious, invigorating, life-force buzz. It's about knowing what your clients want and getting it to them. Not next week. Not later today. But right now.
The concoction of message, image and delivery can be touching, controversial – even poignant. And when engineered as a cohesive and strategic marketing plan, these "commercial functions" can help you 'move' unimaginable amounts of goods, services or whatever it is you're taking to market.
GLAD WORKS offers the following marketing services.
- Marketing Plans.
- Marketing Campaigns.
- Social Networking
- Direct Mail.
- Direct eMail.
- Internet Marketing.
- Copy writing.
- Editing.
- Proofreading.
- And anything else that builds real, revenue-driving buzz.

subset: commoncrawl


text:
Fourteen weeks of upsets and blowouts.
Fourteen weeks of breakout performances, star-studded failures, injuries and oh-my-gosh moments.
For 14 weeks, the 2013 college football season has given us so many great games and storylines, more than enough to make this year one of the best ever. But it ain't over.
Not including the 17 days' worth of nearly nonstop bowl game action (which is like a season in itself), the final slate of regular-season games comes to us Thursday through Saturday night.
Though there are only 14 games, all but two of them will go a long way toward clearing up the national title picture, not to mention sorting out the entire bowl picture.
Last week's wild and crazy weekend resulted in a less-than-stellar 37-21 record picks-wise, though we correctly picked Auburn over Alabama (yet not exactly in the manner it played out). How will we fare this time around? Check out the slideshow to see our projections, then contribute to the comments section with your thoughts.
(Note: All rankings used are based on the latest BCS standings.)


text:
Walkable and Healthy Communities: Tactics and Case Studies
- When
- March 6, 2013 6:00 pm - 8:00 pm
- Where
- The Center for Architecture
536 LaGuardia Place (btwn W. 3rd & Bleecker)
- Cost
- $10 for non-Members
Free for AIANY Members
- RSVP online
Sam Schwartz Engineering, the transportation engineering and planning firm, and America Walks, the national pedestrian advocacy organization, have just published a new guide, Steps to a Walkable Community: A Guide for Citizens, Planners, and Engineers, which features pro-walking tactics and case studies that have successfully improved and encouraged walking in communities around North America.
The synergy of Sam's strategies with those of New York City's Active Design Guidelines and related research will be underscored by introductory presentations by Karen Lee MD and Ernie Hutton AICP Assoc AIA.
Sam Schwartz, Principal, Sam Schwartz Engineering
Laura MacNeil, Sam Schwartz Engineering
Karen Lee MD, NYC Department of Health and Mental Hygiene
Ernie Hutton AICP Assoc AIA, Hutton Associates Inc.
Respondent Panel
David Burney FAIA Commissioner, NYC Dept of Design and Construction
Cost Free for Members
$10 for non-Members
Organized by AIANY Planning and Urban Design Committee


text:
What's spinning, individual songs editionTuesday, January 15th, 2002
Something a bit different: songs (as opposed to albums) that I'm digging.
- Aksak Maboul, "Palmiers en Pots" (from Un Peu de l'Ame des Bandits)
- Biota, "Reckoning Falls" (from Object Holder)
- The Coup, "Hip 2 Tha Skeme" (from Genocide & Juice)
- DJ Shadow, "Midnight in a Perfect World" (from Endtroducing…)
- Explosions in the Sky, "Have You Passed Through This Night" (from Those Who Tell the Truth…)
- 5uu's, "Noah's Flame" (from Abandonship)
- The Gathering, "Morphia's Waltz" (from if_then_else)
- Mr. Bungle, "Desert Search for a Techno Allah" (from Disco Volante)
- Mogwai, "Dial:Revenge" (from Rock Action)
- Nathaniel Merriweather, "Book of the Month" (from Lovage)
- NeBeLNeST, "Stimpy Bar" (from Nova Express)
I saw a bunch of movies over Christmas break. One of them was Vanilla Sky. I enjoyed it until the awfully hackneyed sci-fi plot twists during the latter part, which sort of reminded me of Brazil but with a cheesy pseudo-happy-ending. However, I thought the soundtrack was awesome. Radiohead's "Everything in its Right Place" couldn't have been used more effectively, and the three Sigur Rós songs were also very well-placed. I recognized a couple other pieces too, but couldn't name them. Good stuff.


text:
Providence: Attractions and more...
Related Contents
Other Attractions United States:
Cranston (About 7.3 mi) - West Warwick (About 10.9 mi) - Woonsocket (About 13.1 mi) - Fall River (About 15.8 mi) - West Greenwich (About 18.5 mi) - North Kingstown (About 18.9 mi)
More information United States:
|Cranston - 7 mi
An eighteen hole Golf Course, with a driving range snacks bar, locker room and dining establishment is a wonderful place to play golf. One such place in Cranston is Cranston...
|West Warwick - 10.8 mi
Warwick Public Library is a huge library with a vast collection of reference material, books, research materials, periodicals and more. This library has an organization that...


text:
Find resources
Resource type: Film/video
- Above Zero: Strategies to Prevent Vaccine Freezing
This four-minute animated video emphasizes the difficulty and importance of maintaining proper temperatures in the vaccine cold chain. The risk of exposing vaccines to freezing temperatures are now known to be significant. These risks can be reduced …
Author: PATH, World Health Organization
Publication date: 2013
- Celebrating a Legacy Of Global Immunization
This video highlights 50 years of vaccine progress and innovation by the US Centers for Disease Control and Prevention. From the first US pledge of political, financial, and technical resources to end smallpox to current efforts to eradicate polio …
Author: PATH
Publication date: 2015
- Cervical Cancer, Cervical Dysplasia, Genital Warts: The Pathogenesis and Clinical Outcomes of HPV Anogenital Infections
This technical six-minute animation explains what HPV is, shows how it infects human tissue, and how disease progresses. It also provides disease burden information specific to HPV and cervical cancer.
Author: Sanofi Pasteur MSD
Publication date: 2006
- Cervical Cancer: The Real Lady Killer
This film in the BBC's "Kill or Cure?" series uncovers the challenges of preventing and treating cervical cancer in Africa and highlights exciting new opportunities for dramatically reducing the toll of disease. The BBC crew follows Sarah …
Author: PATH, Rockhopper Productions
Publication date: 2009
- Fragile Lives - Immunization at Risk
Hailed as "the greatest public health success story of all time," today childhood immunization faces obstacles never seen before. While immunization still saves three million young lives each year, millions more could be saved if there were enough …
Author: PATH, Barraclough Productions
Publication date: 2004
- Global Polio Eradication
The Global Polio Eradication Initiative (GPEI) released a new six-year plan in 2012 that outlines steps to end polio transmission, help improve childhood immunization programs, and begin a worldwide polio vaccine transition. While the plan is …
Author: Center for Strategic and International Studies
Publication date: 2013
- Heard at the 68th WHA: Closing the Immunization Gap
In this video, immunization experts and political leaders attending the 68th World Health Assembly (WHA) share their thoughts on what must be done to close the immunization gap, reach vulnerable populations, and ensure that all children have access …
Author: PATH
Publication date: 2015
- How Are Vaccines Developed?
This video provides a very high-level overview of the rigorous testing that vaccines undergo when they are developed. As the video highlights, vaccines are subject to even tougher standards than medicines—more people are included in clinical …
Author: Vaccines Today
Publication date: 2015
- How Can Data Help Fight Disease?
This animated video explains the important role that data plays in fighting polio worldwide. Data about cases of polio, the size of an outbreak and the population affected, and information about vaccination programs can be collected and shared …
Author: Bill & Melinda Gates Foundation
Publication date: 2016
- How Do Vaccines Work?
This animated video explains how the immune system works and how, using this information, scientists found ways to help our bodies protect us from infectious diseases by developing different types of vaccines.
Author: TED-Ed; Kelwalin Dhanasarnsombut
- Keys to Storing and Handling Your Vaccine Supply
This 45-minute video was designed to decrease vaccine storage and handling errors and preserve vaccine supply by demonstrating to immunization providers the recommended best practices for storage and handling of vaccines. It highlights the keys to …
Author: US Centers for Disease Control and Prevention
Publication date: 2014
- Kill or Cure: Avian Flu
This 25-minute BBC World documentary, produced by Rockhopper TV, takes an in depth look at avian influenza, including current clinical trials and when resulting vaccines may be ready for production.
Author: Rockhopper TV
Publication date: 2007
- Kill or Cure: Influenza
This 25-minute BBC World documentary, produced by Rockhopper TV, examines the history of influenza and current research into treatment and vaccinations aimed at preventing a future influenza pandemic.
Author: Rockhopper TV
Publication date: 2005
- Kill or Cure: Meningitis
This 25-minute BBC World documentary, produced by Rockhopper TV, offers a poignant and revealing account of the devastating impact meningitis epidemics have on individuals, families, and communities. The film also takes viewers to Mali where PATH's …
Author: PATH; Rockhopper TV
Publication date: 2007
- Meningitis A Shot of Hope
This documentary details the work of the Meningitis Vaccine Project, a partnership between the World Health Organization and PATH to eliminate meningitis A as a public health problem in sub-Saharan Africa through the development, testing, licensure, …
Author: PATH
Publication date: 2015
- My Name, My Future: Optimize Project Guatemala
This 10-minute video provides an overview of Guatemala's effort to build a comprehensive immunization information system with support from Project Optimize, a collaboration between PATH and the World Health Organization. The video explains how a new …
Author: Guatemala's Ministry of Public Health and Social Assistance; Pan American Health Organization
Publication date: 2013
- Now is the Time
Recent advances in vaccine science have enabled more countries to provide newer, lifesaving vaccines to more people. However, the impact of these vaccines is often constrained by delays and vaccine waste due to stressed and aging vaccine supply and …
Author: PATH, World Health Organization
Publication date: 2013
- Preparing for Malaria Vaccines: African Scientists Speak Out
In this five-minute video, scientist-advocates describe their critical role in closing the gap between the availability of lifesaving interventions and developing countries' access to them. A malaria vaccine could be available in just a few short …
Author: PATH
Publication date: 2007
- Rotavirus Vaccines: Rapid Rollout is Saving Lives
This animated video and companion infographic highlight the progress made in reducing rotavirus disease burden due to the rapid introduction of rotavirus vaccines in more than 75 countries worldwide. They show that while great progress has been …
Author: PATH
Publication date: 2015
- Securing a Polio-Free World: Video Series
This series of six videos explains the important steps that are being taken to make sure that, once poliovirus has been eradicated, it will never have the opportunity to return. Topics of the videos include the current polio vaccines available, the …
Author: World Health Organization
Publication date: 2016
- Shadow Lives: The Human Toll of Japanese Encephalitis
Children who survive JE infection must come to grips with the human and socioeconomic consequences of the disease. Produced in collaboration with the JE Project, Shadow Lives—The Human Toll of Japanese Encephalitis, introduces us to families …
Author: PATH
Publication date: 2006
- Survival: The Struggle to Breathe
Part of the groundbreaking series on global health, Survival, this 45-minute documentary, filmed in the Philippines, focuses on the infections that lead to pneumonia. The film also highlights interventions to improve access to antibiotics as well …
Author: BBC World News and Rockhopper TV
Publication date: 2008
- Use of MenAfriVac in a Controlled Temperature Chain (CTC) in Benin
This six-minute video describes the first campaign against meningitis A in Benin using MenAfriVac conjugate vaccine in a controlled temperature chain (CTC), conducted from November 15 to 25, 2012. The use of a CTC meant that the vaccine could be …
Author: Agence de Médecine Preventive, PATH, World Health Organization
Publication date: 2013
- A Vaccine That Could Help End Malaria
This animated video explains how transmission-blocking vaccines could work to prevent mosquitos from spreading the malaria parasite to people.
Author: PATH
Publication date: 2015
- Vaccines and Your Baby
This 27-minute video explains how vaccines work, the science behind them, immunity, and 11 diseases that vaccines prevent. It also includes stories from parents of children who suffered from vaccine-preventable diseases.
Author: Children's Hospital of Philadelphia


text:
eSeminar Now Available: Introduction to Capture Workflows using Adobe Captivate 5
One of the major workflows in Adobe Captivate 5 is the Capture workflow. We use capture workflows to demonstrate Application Simulations, Product demos, etc.
To introduce these workflows, we had a two-part series eSeminar discussing different recording options available such as Automatic and Manual recording of either screen area or an application. Session also focused on different preview/publish options available catering to Web distribution or stand-alone distribution.
The recordings of these sessions is available at Adobe OnDemand Seminars page, you can also click the links below to view the recorded sessions.
Introduction to Capture – Part 1
Introduction to Capture – Part 2


text:
XBOX360 Genres: Arcade / Puzzles | Fighting | Flight | Kids / Family | Racing | Shooter | Sport | Rpg / Strategy | Music
Harry Potter And The Deathly Hallows Part 2 XBOX360
Step into the roles of your favourite heroes in the epic finale of the entertainment event of the decade. Playing as Harry and other key characters in the Harry Potter and the Deathly Hallows: Part 2 videogame, you are on a dangerous and urgent quest to locate and destroy the remaining Horcruxes, and with them, Voldemort. Break into the high security vaults of Gringotts Bank, escape Fiendfyre in the Room of Requirement and battle Voldemort's most powerful allies as you defend Hogwarts in this action-packed experience. Featuring the most epic battles of any Harry Potter game gone before, this is the ultimate showdown against Voldemort and his Dark forces. The fate of the wizarding world rests in your hands in the final battle of Hogwarts. Â Features:
-Play the Parts of Your Heroes - Take on the role of different characters as each plays a pivotal role in the battle for Hogwarts. Play as Harry, Hermione, Ron, Ginny, Seamus, Neville, Molly Weasley and Professor McGonagall as they each play their part in the defence of Hogwarts and the destruction of Voldemort
-Epic Battles - Wield the power of accomplished wizards as you duel the most fearsome and formidable characters of the wizarding world.
-Fight the Dark forces - Use your magical skills to defeat Death Eaters, Snatchers, and giants intent on destruction
-Stunning Environments - Experience Hogwarts as you've never seen it before
Rent Harry Potter And The Deathly Hallows Part 2 on XBOX360
Buy ex-rental and earn 12 points
The novelty factor of running around a stunning castle, listening to a sweeping and engaging soundtrack and casting spells like there's no tomorrow are the only things saving this game from being genuinely bad. It's far too short, for one thing. I kid you not, it took me about four hours to complete this game - and I collected "all" the collectables. It's also very repetitive. The basic game manic involves you walking into an area, hiding behind debris and shooting spells at wave after wave of death eaters/snatchers. That doesn't mean that this isn't fun, but just be aware of what you're getting into here. The story is completely linear this time, so there are no side quests like the previous game (whether this is good or bad is up to you) and the only locations you see are, obviously, Gringotts, Hogsmeade and Hogwarts unlike the first game which had many varied locations. The castle looks fantastic though, don't get me wrong. And the soundtrack, it's exceptional. Truly. It's also alot of fun being able to control a variety of characters (McGonagall, Mrs Weasley and Seamus Finnigan most of all). At points in the game the gameplay will change up a bit. There are a couple of purely 'boss' levels which are interesting but feel like filler. And there are levels or areas where you're running towards the screen trying to outrun whatever's chasing you. This is at its best near the end when Voldemort is chasing you down through Hogwarts. The normal difficulty setting is very easy, but the expert is much harder (I've yet to try the game on Advanced). As for the extra stuff, well, it's a mixed bag. You can collect Characters, Music and challenges throughout the main quest which you can then 'use' in the main menu. The challenges involve you going back to each of the 12 levels and trying to finish them as quickly and efficiently as possible to get a rating (which can be posted online). In my opinion though, these challenges are not worth the hassle, as I seem to average silver on the ones I've bothered trying (platinum is the best). The graphics are, as I can tell, identical to the last game (which were good) and the voice acting is 50/50. Some is great (The trio), some is not (Snape. Oh god Snape! :P). In conclusion, this game will hold your attention if you're a fan of Harry Potter. The novelty of being involved in the battle of Hogwarts is great. Both if you're a general gamer, you'll probably only want to pick this up to add to your achievement/trophy points. (P.S. You can apparate in this game. This is quite fun, but it's a bit clumsy and you unlock it late in the game).


text:
Exclusive Video: Karlie Kloss Dances With Les Twins
In Anthony Vaccarello.
Fashion always loves a slow-motion dancing-model video, and the latest comes from Anja Rubik's new magazine, 25. Shot by Arek Tomiak in Paris, Karlie Kloss struts on a wet sidewalk with French hip-hop dancers Larry and Laurent Bourgeois, a.k.a. Les Twins, who have also performed with Beyoncé, Jay-Z, and Missy Elliot. Understandably, Karlie can't quite keep up, but bless her for trying.
Related: Exclusive: Anja Rubik on the Debut Issue of Her New Magazine, 25


text:
- Home
- News & Multimedia
- Speeches
- Reclamation's Commitment to Federal Power
Reclamation's Commitment to Federal Power
Remarks Delivered By:
John W. Keys, III, Commissioner
Mid-West Electric Consumers Association
Denver, Colorado
December 08, 2004
I am delighted to be here with you again this year. One of the things I'm most proud of at Reclamation is the strong partnerships we have built, and I love to get out here to talk with you, the folks who are getting things done on the ground.
When this Administration came in four years ago, we had two main goals: first, to concentrate on our core mission of delivering water and power, and doing what it takes to get that done; and second, to renew and reinvigorate our relationships with our partners in water and power groups. It's a privilege to have the chance to serve you again the next four years.
Even with a reelection, there are bound to be changes. Bennett Raley, our Assistant Secretary for Water and Science, has resigned. We'll miss his hard work and all he brought to his office.
The Acting Assistant Secretary is Tom Weimer. Tom is a good man to work for—he really understands water issues and supports the work we do. I'm looking forward to a lot of continued progress working with Tom.
We expect the transitions to the second term to be seamless. President Bush has said that he's anxious to push forward, and we at Reclamation are too.
The theme of this meeting—Fighting for Federal Power—is very striking. When you look back at the history of western water, there are tales of water wars, shovel fights on ditch banks. We want to prevent these stories from being replayed today and tomorrow in the growing competition for water.
Reclamation will continue to work with you to generate reliable, cost-effective hydropower. At the same time, we are working hard to head off fights over water and power by looking ahead and by emphasizing work in cooperation with our partners.
At Interior, we follow a principle Secretary Norton brought, called the 4Cs: Conservation through cooperation, communication, and consultation. Cooperation, communication, and consultation have never been more important to making sure that progress continues.
I want to update you on some of our progress and draw special attention to the Department's Water 2025 initiative. Water 2025 is aimed at preventing conflict and crisis over water and ensuring that the West continues to have reliable water supplies.
One change at Reclamation is that Great Plains Regional Director Maryanne Bach is leaving the RD post to become Reclamation's Director of Research. Maryanne did a great job of reinforcing relationships with our water and power customers.
I know that she will do excellent work heading our R&D program, working to develop and apply technology in meeting water and power challenges. We thank her for her excellent work and wish her well in her new job.
The search for a new RD is already underway. We have advertised the position, and filling it is a priority.
The water and power that Reclamation provides sustains a major part of the West's infrastructure. Our 58 powerplants have a generating capacity of 14,778,418 kW, making us the 10th largest producer of electricity in the West, and water from Reclamation projects is used to produce a large percentage of the West's agriculture.
Our customers depend on us for water and power, and the reliability of Reclamation powerplants is exemplary. Our forced outage rate is roughly one-half that of the industry as a whole, and in most cases we are able to meet our water delivery commitments even in low water years. Reclamation hydropower plays a critical role in the interconnected grid in our service areas. Last year's blackout in the East underscored the importance of the availability of a reliable electricity supplies.
In addition to providing electricity to wholesale consumers in the West, Reclamation hydropower also provides a significant portion of the system's ability to respond to fluctuations in voltage and load. This ability is brought about by adjusting the system voltage as it fluctuates (automatic voltage regulation—AVR) and matching the demand to the production of electricity (automatic generation control—AGC). The large rotating mass of hydroelectric generators also stabilizes the system and reduces the impact of fluctuations or detrimental events.
During times of electric system emergencies, Reclamation hydropower provides much of the system's ability to avoid outages by providing reserve power that can be brought on line instantaneously (spinning reserves), stand-by generation, equipment that keeps the power grid stable (power system stabilizers), AVR, and AGC which all help compensate for fluctuating power flows, generation drops, and transmission line failures that occur during an emergency. During the past 4 years, Reclamation has provided system support for emergencies many hundred times.
Our hydropower can be brought back on line quickly after an outage to provide needed electrical services to restore the grid and assist other regional utilities without relying on external power sources. We also provide a federally- mandated source of safe shutdown power for nuclear power plants in the West.
Two-thirds of Reclamation's power plants have the ability to be re-started without outside power (black start capability), and many of our power plants play a key role in the NERC and Western Electricity Coordinating Council (WECC) regional restoration plans to establish isolated areas of operating generation (generation islands) which can then be linked together to restore the interconnected grid.
One big challenge to our work is the drought that has touched most parts of the West over the past five years.
The drought has had a significant impact on our work. For example, water levels have been dramatically affected at Lake Mead, Lake Powell, and other reservoirs.
Research has helped to increase our understanding of the dynamics of drought. The research cannot, however, tell us whether we are at the conclusion of a drought cycle or in the midst of a longer cycle.
Some have compared the magnitude of the current drought in the Colorado River basin to that of the Dust Bowl. That comparison is arresting. Just as arresting is this: we are not in a crisis.
We can thank the foresight of past generations, who recognized that the West is largely desert and prepared accordingly by creating an effective system of dams and reservoirs. These facilities have served their purposes well over the past century and are keeping us out of crisis today. This does not, however, mean that we continue to do business as usual, because drought is not the only cause of water shortages.
The drought has captured our attention, but, even in normal or wet years, demands sometimes exceed available supplies.
The American West is changing—the population in the West is growing faster than anywhere else in the country.
On the power side of the house, with the uncertainty in the regulatory environment causing lack of investment in new power plants and transmission, the drought has made the situation equally serious.
Reclamation is working with our water, power and environmental stakeholders to meet these challenges.
I'm really excited about the Secretary's Water 2025 program as a way to meet challenges through cooperation and partnership.
As a way to address the growing competition for water, we launched the Secretarial initiative Water 2025: Preventing Crises and Conflict in the West. Water is our most precious resource in the West, truly our lifeblood: No water, no livelihood, no life. Water can also be our most contentious resource. Water 2025 has identified areas where potential crises and conflicts over water may occur.
Water 2025 has two purposes. First it provides a basis for a public discussion of the realities that face the West so that decisions can be made at the right level in advance of a water supply crisis. Second Water 2025 sets forth a framework to identify the problems, solutions, and a plan of action to focus the conversation as the Department of the Interior works with states, tribes, local and state governments, and the private sector to meet water supply challenges.
This year we launched the Challenge Grant program—which is the heart of our Water 2025 initiative. The Challenge Grant projects have proposed innovative ways to head off problems by conserving and distributing water more efficiently and more effectively through collaboration, water conservation, efficiency, and markets. The Challenge Grant program is a great example of the spirit of the Bush Administration's New Environmentalism. The Challenge Grant program supports, through cost-shares, partnerships that offer innovative, locally managed solutions to our most pressing water challenges.
The Challenge Grant program shows how leveraging the federal investment can provide tremendous benefits. Federal grants of $4 million are helping to fund the projects, which are returning almost $30 million in on-the-ground water delivery system improvements. That is a thirteen percent investment from the federal side. This program serves as an excellent model for how we should be using our federal investment for maximum impact.
The 19 projects that received fiscal year 2004 Water 2025 Challenge Grants represent 10 western states—from California to Colorado, from Montana to Texas.
Congressional action to date for fiscal year 2005 supports $19.5 million for Water 2025. We recently posted the Request for Proposals for fiscal year 2005, and we expect the program to thrive.
Reclamation, our Power Marketing Administrations, our customers, and our fellow federal generators work in an industry going through significant change, and we continue to respond to changes as they occur.
We maintain strong partnerships with our customers. You, our customers, continue to have a keen interest in containing costs, increasing efficiency, and maintaining reliability. We work closely with you as we develop our operation and maintenance workplans and our replacements program for hydropower equipment to ensure that your concerns are addressed.
This is a time of flat budgets, and I don't see that changing anytime soon. It is critical to Reclamation to have adequate funds for operation, maintenance and replacement of our power facilities. Mid West can be a strong partner in seeking receipt financing authorities for Reclamation, as well as the Corps of Engineers and Western, for those activities. The customer participation processes just revised in the Great Plains region are a solid foundation for that effort.
We also have a strong ongoing partnership with Western Area Power Administration. Great strides have been made, but there are many more opportunities to make partnering part of our day-to-day operations. These include:
- Coordination of reliability council actions
- Provision of system support during daily operations
- Working with Western to ensure that federal water and power interests are protected during the formation of Regional Transmission Organizations
- Coordination of legislation and policy strategy in response to the National Energy Task Force.
Reclamation has also initiated a number of activities aimed at ensuring the long-term viability of our power facilities. These include:
- Ensuring the security of our generation and transmission infrastructure
- Participating in the Interagency Forum on Infrastructure Protection
- Carrying out a strong Power Review of Operations and Maintenance Program and following up on the recommendations from those reviews
- Developing business based risk condition assessment for generation assets (We are working with the Corps on this)
- Through succession planning and targeted hydropower training, ensuring that we have trained staff to operate our generation
Reclamation is committed to providing reliable, sustainable water and power supplies in the West for future generations.
Reclamation is committed to working in partnership with our Power Marketing Administrations, water and power customers, and other stakeholders in meeting this challenge.
I continue to be enormously proud of Reclamation's projects and people, and I'm excited and optimistic about our future.
I'll be happy to take any questions.
For More Information:


text:
SPARKS, Nev. ŌĆö ScolariŌĆÖs Food & Drug, a 13-store chain based here, will begin offering digital shopper planning services on its website next month from Grocery Shopping Network, Minneapolis. Shoppers will have online access to the weekly circular, printable coupons, personalized specials, recipes and wine pairings, and be able to build and print customized shopping lists. They will be able to click on an advertised item and have it placed on a shopping list where they can adjust the ...
REGISTER TO VIEW THIS ARTICLE - Register for a Free Account
Why Register for FREE?
Registering for content on Supermarket News will give you INSTANT access to invaluable articles and media content that industry professionals rely on. You will have access to our special reports, feature articles, and industry analysis. It's FREE, easy and quick. What are you waiting for! In addition you will also receive complimentary access to the SN salary survey data tables.
Click here to read the FAQ page if you have any questions (opens in a new window)
Attention Paid Print Subscribers: While you have already been granted free access to SN we ask that you register now. We promise it will only take a few minutes! Or visit your profile and add your print magazine account number and zip code.


text:
Reviewed By anthony V (LOS BANOS, CA) Reviewed for a 2005 Toyota Tacoma —8/13/2015 8:14 PM
Bolted on in about an hour. A little heavy for one guy but I was barely able to do it. Perfect hitch. The only thing you see is the receiver. Everything is hidden. Love it!


text:
Pallet Crates local companies in Tennessee TN- Displaying all 7
Tree Brand Packaging Inc serving Tennessee
We can provide numerous crating options including: plywood, glass, large shipping, machinery shipping, misc crates and more. We are a Heat Treated certified lumber manufacturer and produce the highest quality shipping solutions possible. We continue to work with many companies ensuring we meet custom needs.
Products: Crates: pallet; boxes; boxes & crates: rectangular, wood; boxes & shook: nailed wood; boxes: collapsible; boxes: custom; boxes: hinged cover, wood; boxes: material handling; boxes: military specification; boxes: pallet; boxes: plywood; boxes: shipping; boxes: wirebound, wood; boxes: wood, custom; boxes: wooden; boxes; foam; containers:..
Woodway, Inc. Cleveland, TN
pallet, pallet ispm15 ht, pallet ispm 15, export pallets, plastic pallets, pallets, custom pallets, wooden skids, wooden pallets, ispm15, ispm 15, ht pallet, heat treatment, export, pallet heat treatment, 2-way pallet, 4-way pallet, block pallet
Products: Crates: pallet; boxes & crates: rectangular, wood; boxes: wooden; crates; dunnage; heat treatment;..
R & K Enterprises Sweetwater, TN
Products: Crates: pallet; boxes: wooden; containers: shipping; crates; edge banding; expendable pallets; export..
Pallet Services, LLC Memphis, TN
Products: Crates: pallet; boxes & crates: rectangular, wood; boxes & shook: nailed wood; crates; crates: export;..
Pallets Plus Inc Memphis, TN
Products: Crates: pallet; code repair services; containers: wood; crating services: shipping; industrial &..
Pallett Resource Llc Chattanooga, TN
Products: Crates: pallet; boxes: material handling; boxes: pallet; boxes: shipping; boxes: used; crating services:..
Portland Pallet Inc Portland, TN
Products: Crates: pallet; containers: pallet; containers: shipping, wood; crating services: shipping; lumber;..
Top quality manufacturers serving Tennessee TN have been highlighted in this comprehensive source of industrial information. A broad range of CRATES: PALLET manufacturers has been compiled in this industrial directory designed to provide information on leading, quality oriented manufacturers serving Tennessee TN.
Cities being served include: Antioch, Athens, Bartlett, Brentwood, Bristol, Chattanooga, Clarksville, Cleveland, Clinton, Collierville, Columbia, Cookeville, Cordova, Crossville, Dickson, Dyersburg, Franklin, Gallatin, Goodlettsville, Greeneville, Hendersonville, Hixson, Jackson, Johnson City, Kingsport, Knoxville, La Vergne, Lawrenceburg, Lebanon, Lewisburg, Lexington, Madison, Maryville, Mc Minnville, Memphis, Morristown, Mount Juliet, Murfreesboro, Nashville, Oak Ridge, Paris, Portland, Pulaski, Sevierville, Shelbyville, Smyrna, Sparta, Springfield, Tullahoma, Union City.
Area codes being served include: 423, 615, 731, 865, 901, 931.
Pallet Crates local companies in Tennessee TN - Displaying all 7
Pallet Crates - Companies Serving:All States
Alabama AL (3)
Arizona AZ (3)
Arkansas AR (3)
California CA (12)
Colorado CO (3)
Connecticut CT (5)
Florida FL (8)
Georgia GA (16)
Illinois IL (15)
Indiana IN (12)
Iowa IA (7)
Kansas KS (2)
Kentucky KY (3)
Louisiana LA (2)
Maryland MD (4)
Massachusetts MA (3)
Michigan MI (13)
Minnesota MN (3)
Mississippi MS (3)
Missouri MO (9)
Nebraska NE (2)
New Hampshire NH (3)
New Jersey NJ (8)
New York NY (7)
North Carolina NC (13)
North Dakota ND (2)
Ohio OH (21)
Oklahoma OK (3)
Oregon OR (3)
Pennsylvania PA (22)
Rhode Island RI (2)
South Carolina SC (7)
Tennessee TN (7)
Texas TX (10)
Utah UT (2)
Vermont VT (2)
Virginia VA (5)
Washington WA (9)
West Virginia WV (3)
Wisconsin WI (10)


text:
- Undergraduate
- Graduate
- People
- Alumni
- Partners & Outreach
Richard A. Wysk
Dopaco Distinguished ProfessorOffice phone: (919) 515-1549
Office fax: (919) 515-5281
Office location: 414-A Daniels Hall
E-mail: email@example.com
Website: www.ise.ncsu.edu/wysk
PhD, Purdue University
MS, University of Massachusetts
BS, University of Massachusetts
Dr. Richard A. Wysk's research and teaching interests are in the general area of Computer Integrated Manufacturing (CIM) and medical device design and manufacturing. In particular, he is interested in: 1) lean manufacturing (waste elimination and setup reduction), 2) product/process engineering, 3) Computer-Aided Manufacturing, 4) Flexible Manufacturing Systems (FMSs) planning, design and control, and most recently 5) the engineering and manufacturing of medical products, including regenerative medical products. Dr. Wysk has coauthored six books including Computer-Aided Manufacturing, with T.C. Chang and H.P. Wang -- the 1991 IIE Book of the Year and the 1991 SME Eugene Merchant Book of the Year. He has also published more than one-hundred seventy-five technical papers in the open-literature in journals including the Transactions of ASME, the Transactions of IEEE and the IIE Transactions. He is an Associate Editor and/or a member of the Editorial Board for five technical journals. Dr. Wysk is an IIE Fellow, an SME Fellow, a member of Sigma Xi, and a member of Alpha Pi Mu and Tau Beta Pi. He is the recipient of the IIE Region III Award for Excellence, the SME Outstanding Young Manufacturing Engineer Award, the IIE David F. Baker Distinguished Research Award and the IIE Albert Holzman Outstanding Educator Award . He has held engineering positions with General Electric and Caterpillar Tractor Company. He has also served on the faculties of Virginia Polytechnic Institute and State University and Texas A&M University where he held the Royce Wisenbaker Chair in Innovation. He is a veteran of the U.S. Army, and served in Vietnam, where he earned a Bronze Star and an Army Commendation Medal with an Oak Leaf Cluster.
Areas of Interest
Computer Integrated Manufacturing (CIM), medical device design and manufacturing and regenerative medicine manufacturing.
Selected Articles
- Fuller, T., Wysk, R.A., Charuman, C., Kennett, M., Sebastianelli, W., Shirwaiker, R.A., Voigt, R., & Royer, P. (2010). Developing an engineered antimicrobial/prophylactic system using electrically activated bactericidal metals. Journal of Materials Science for Medicine, 21 (7), 2103.
- Shirwaiker, R.A., Wysk, R.A., Kariyawasam, S., Carrion, H., & Voigt, R. (2011). Micro-scale fabrication and characterization of a silver-polymer-based electrically activated antibacterial surface. Biofabrication, 3.
- Yang, Z., Wysk, R.A., Joshi, S., Frank, M., Petrzelka, J. (2009). Conventional machining methods for rapid prototyping and direct manufacturing. International Journal of Rapid Manufacturing, 1 (1).
- Kim, N., Shin, D., Wysk, R.A., & Rothrock, L. (2010). Using finite state automata (FSA) for formal modeling of affordances in human-machine cooperative manufacturing systems. International Journal of Production Research, 48 (5).
- Medina, L., Wysk, R.A. & Kramer, G. (in press). Supporting medical device development: A standard product design model. Journal of Engineering Design.
- Yang, Z., Wysk, R.A. & Joshi, S. (2012). Setup planning for six-axis wire electric discharge machining. Journal of manufacturing science, 134 (2).
- Yang, Z., Wysk, R.A., & Joshi, S.J. (2011). Global tangent visibility for polyhedral computer aided design models. Journal of manufacturing science and engineering, 133 (3).


text:
You are not logged in.
If you're like me, you are proud of the new CPU your computer runs on - in my case a i7-720Q with 8 embedded cores...
But Delphi is not very multi-thread or multi-core friendly... guess why....
All X86 CPUs are equipped with the ability to lock a specific memory address, preventing other system buses to read or modify it while the following instruction runs.
The LOCK prefix to an assembly instruction causes the CPUs to assert the LOCK# signal, and practically ensures exclusive use of the memory address in multiprocessors / multi-thread environments.
The LOCK prefix works only with the following instructions:
BT, BTS, BTR, BTC (mem, reg/imm)
XCHG, XADD (reg, mem / mem, reg)
ADD, OR, ADC, SBB (mem, reg/imm)
AND, SUB, XOR (mem, reg/imm)
NOT, NEG, INC, DEC (mem)
Note: XCHG and XADD (and all the 'X' family of instructions) are planned to be thread-safe, and always asserts LOCK# regardless of the presence of the LOCK prefix.
These low-level LOCK mechanisms ensure that some memory is modified by only one thread at a time.
On a multi-core CPU, all cores just freeze in order to make this LOCKed asm function threadsafe. If you have a lot of threads with more than one CPU, the context of every CPU core has to be frozen, cleared, all cores wait for the LOCKed asm instruction to complete, then the context is to be retrieved, and execution continue.
So guess what... when the CPU has to execute such instructions, all cores just freeze and your brand new 8 cores CPU just run as a 1 core CPU...
This is the same LOCKed asm function which is used internally by Windows with its <i>Critical Sections</i>. That's why Windows itself is told not to be very multi-core friendly, because it does use a lot of critical sections in its internal... Linux is much more advanced, and scales pretty well on massive multi-core architectures.
In Delphi, I discovered at least two performance problem in its RTL:
1. Default memory manager, i.e. FastMM4, uses a LOCKed asm instruction for every memory allocation or dis-allocation.
2. string types and dynamic arrays just use the same LOCKed asm instruction everywhere, i.e. for every access which may lead into a write to the string.
See what I wrote in the Embarcadero forum... this post was not very popular, but indeed I think I've raised a big issue on the Delphi compiler internals and performance here - and I don't think Embarcadero has plans to resolve this...
IMHO if you use strings in your application and need speed, using another memory manager than FastMM4 is not enough. You'll have to avoid most string use, and implement a safe TStringBuilder-like class.
ShortStrings could be handy here, even if they are limited to 255 character long.
Using regular PAnsiChar, and fixed buffers in the stack is also a solution, but it must be safe...
In our enhanced RTL for Delphi 7, we avoid use of this LOCKed asm instruction if your application has only one thread: so if you use our enhanced RTL, and make thread by yourself (not using the TThread object), you'll have the best multi-thread performance possible.
For example, here is how we coded the clearing of a string:
procedure _LStrClr(var S);
asm { -> EAX pointer to str }
MOV EDX,[EAX] { fetch str }
TEST EDX,EDX { if nil, nothing to do }
JE @@done
lea ecx,[edx-skew].StrRec.refCnt
mov dword ptr [EAX],0 // clear str
cmp [ecx],0
jl @@done // refCnt=-1: literal str
{$ifdef AVOIDLOCK}
cmp IsMultiThread,false
jnz @@lock
dec [ecx] // not threadsafe dec refCount, but faster
{$else} lock dec [ecx] // threadsafe dec refCount
{$endif}jne @@done
@@free: push eax
mov eax,ecx
call MemoryManager.FreeMem // inlined _FreeMem() code
or eax,eax
jnz _JmpInvalidPtr
pop eax
{$ifdef AVOIDLOCK}
@@lock: lock dec [ecx] // threadsafe dec refCount
je @@free
{$else}{$ifndef NOAMD}ret{$endif} // AMD trick: avoid branch misprediction
@@done:{$ifndef NOAMD}db $F3{$endif} // rep ret AMD trick: avoid branch misprediction
So if the AVOIDLOCK conditional is defined, and there is only one thread in your application (the IsMultiThread is false), the lock dec [ecx] instruction won't be called, but a much faster (and core-friendly) dec [ecx] instruction is used.
Note that there is a similar check already in FastMM4: if IsMultiThread is false, no LOCKed instruction will be used.
The only drawback is that if you want to use threads in your application, you'll have to ensure that:
1. TThread is not to be used: the creation of one TThread just set IsMultiThread to true, so enable LOCKed instructions;
2. BeginThread() function must be avoided also (it set also the flag);
3. So you'll have to call directly CreateThread() Win32 APIs for your threads;
4. And none of your units should use either TThread either BeginThread!
That's why it could be useful that Embarcadero take this problem in account, and try to resolve it at the compiler level....
Well, to achieve thread synchronization and avoid race condition, some type of atomic operation is needed. And I think the LOCKed instruction is the finest atomic operation you will get. So I don't think it can be avoided -- may be its usage can be reduced, but eventually you will have to use one.
Eliminating LOCKed instruction is not what a compiler can do. Architectural (hardware) changes are needed, for example, using transational memory.
There are a lot of algorithms which are able to avoid most atomic operations.
Just look at http://www.linuxjournal.com/article/5833 and you'll find why Linux is in another galaxy than Windows... this article was written in 2002, and Linux is running on massive parallel computers with the same kernel source code than the one in your last geeky Ubuntu...
Eliminating LOCKed instruction is not what a compiler can do.
I 100% agree with you: that's why I said the locks are to be avoided in the Delphi RTL, that is in memory allocation and string handling.
One another approach is to have multiple heaps, avoid most copy.
For example, I'm working on some very powerful and multi-thread ready architecture named XMLRAD.
See http://xmlrad.cvs.sourceforge.net/viewv … ision=1.96
Main ideas of UltimX:
- avoid unnecessary memory allocations moving data from source buffer to final buffer
- avoid intermediate string copy
- Memory buffers are maintained on the stack when possible
- Memory allocations are maintained outside the scope of variables so variables do not need any longer to reserve physical memory, and can rely on pre-allocated spaces to move data from source to destination
- when memory allocations are needed and are local to the scope of the procedure stack, the programmer should privilege the use of the heap CurrentScratch with XScratchStack/Unstack the memory blocks reside for the scope of the procedure (ephemary allocation),all these local memory allocations are collected at each XScratchUnstack and when thread terminates, the whole CurrentScratch heap is collected at once
- when memory allocations are needed to survive out of the scope of the current procedure stack, the programmer should use the heap of the current request (XMLRequest.Heap), the memory blocks reside for the duration of the request (ephemary allocation) and all these local memory allocations are collected at once when the request is released
- at last, when no other alternative is possible but to perform a global memory allocation,then such allocation should be performed using the global heap (auto-detect of the Numa Node)
Without changing the compiler, but just your coding style and your library, you can increase multi-core performance a lot!
I don't know if you ever noticed that, but you can even have multiple heaps in your Delphi application, and have objects which are created not on the main global heap, but on a private heap.
Here is my rewrite of the allocation part of any class in Delphi (I can post this code here because it's my code, not Embarcadero's):
class function TObject.NewInstance: TObject;
asm // faster version by AB
push eax
mov eax,[eax].vmtInstanceSize
call MemoryManager.GetMem // inlined _GetMem() code
or eax,eax
mov edx,eax
jz _JmpOutOfMemory
pop eax
jmp InitInstance
So you can customize the memory allocation by using some other call than GetMem.
There are so many ways of improving the speed... but you have to open your mind and use a profiler, and a timer, in order to really make things faster, not only having fun (even if making it faster is having a lot of fun for me)...
True, local heap can avoid locking, but there will be other problems introduced:
1. Some application uses massive multi-threading, if each thread opens a local heap, then the address space may get very fragmented. (When Delphi eventually move to 64bit, we probably won't have to worry about it anymore... )
2. Each heap would need an instance of memory manager, and then there will be inter-op problems. If a piece of memory is passed between threads, it has to be somehow "linked" to its allocator memory manager instance otherwise there will be problem freeing it. And also the free operation needs to be synchronized, probably using LOCK, maybe RCU -- but I think it is too heavy weighted for memory management.
Last edited by AdamWu (2010-07-23 01:51:03)
1. I don't get your point here: local heap may be in the same address space. A local / by thread heap is just another way of allocating memory from the global heap, but with some pre-allocated memory by thread.
2. Local heap memory manager can be just a growing heap, with all memory unallocated at once, when the thread finished.
2.1. Exchange of data between threads is in fact not so common. You can avoid most of its usage in some applications (like a web server which does HTML rendering).
2.2. Indeed, every object must know it's heap manager, but it's not difficult to fix it by design.
2.3. With a local heap freed at once, you'll avoid most locks.
3. Most locks are performed by the current version of Delphi:
- when you allocate memory;
- when your memory has to grow up or down;
- when your memory is freed;
- when a string is assigned to another string, which is very common if you use methods/function which returns a string as a result;
- when a char is about to be written in the string, i.e. when a string is about to be modified (implicit UniqueString() call generated by the compiler);
- the same for dynamic arrays...
See the UltimX.pas code I referred to in my previous post (from XMLRad project): you'll find a lot of interesting techniques to avoid CPU locking, for Delphi.
I agree that all these are possible and can be done.
But I kind of worried about doing all these puts too many constraints on the programming style, to the point of counter productive.
For example, exchange of data between threads is not common, agreed, but the problem is that, it does happen, and you won't know when.
So, in order to correctly handle those 0.1% cases that happen randomly, you have to be prepared all the time - i.e. the alloc / free list operations must be synchronized.
There are many existing optimizations such as RCU used in Linux kernel, but nearly all of them speeds up just the readers, some even penalize the writers in order to optimize for reading.
But most of the cases you argue in the first post are actually writing - string assignment, freeing memory blocks ... I doubt optimization can help.
But yes, there is an alternative way, just change the existing programming model and avoid the need for lock.
Like suggested in UltimX - whenever you need something local, just use the stack.
But everything comes at some cost, right?
1. The stack space is quite limited, and may not be extendable, so the programmer needs to be extra careful not to overflow it.
2. The local heap is basically a chunk a memory taken out from middle of the otherwise continous address space. So if you take too many, the address space gets fragmented.
32-bit program only has 2GB address space, in which it must fit in the executable plus all libraries, and the stacks and heaps for all threads.
So it is actually quite easy to get fragmented, and what happens then is that you will fail to allocate a relatively big chunk of memory (say 300MB), even there seems to be much more avaliable (say 600MB), because it is not a single piece (such as 3x200MB)...
I've seem some nice hardware solutions. I have programmed on an OCTEON networking processor, which is designed to handle packets at extremely fast speed. On board are special hardware assistances to avoid locking, such as a programmable "thread" scheduler, and a hardware memory manager. But again, there is some cost - the memory manager can only give you fix sized blocks, so some wastage is unavoidable...
Last edited by AdamWu (2010-07-24 01:39:03)
You just have to write with diverse objects/allocators. What is called a thread-local heap below may also be a request-local heap, i.e. for a Web Server, a heap which is initialized when the HTTP request is received, used to calculate the answer, then release at once when the request is finished or outdated.
Therefore you have two ways of implementing thread-local and global heaps:
1. Define diverse classes types for diverse heaps: one kind of class will have a thread-local storage (by overloading the TObject.NewInstance class function as I just stated above). If you define you classes carefully, Delphi strong typing will prevent you using thread-local allocated objects outside the thread scope.
2. Another trick is to put the thread ID into every memory allocated block (there is already the block size in all blocks, you can add such a parameter just before any data, and I think a 4 bytes overhead is not much). If a block memory is used outside the thread which created it, a copy will be made. Some kind of cheap RCU. But you'll have to overwrite the memory allocator. No lock in this case, and 100% thread-safe. This perhaps could also be enabled in the system.pas long string implementation, independently from the heap manager used... perhaps some track to follow here...
And don't forget it's always possible to use plain object types in the stack rather than class types: this object types are faster to initialize and are excellent candidates for local/temporary storage. Even shortstrings and PChar buffers are very fast if you need fast parsing and text appending, which is most server work has to do. And I suspect the main implementation of massive multi-thread is in such server applications.
About memory fragmentation, it can be avoided if you use clever algorithms. It's not difficult, if you can guess the average/maximum needed memory per thread, to make such allocation not fragmented. And in a Pentium-class CPU, memory fragmentation is not an issue here. L1/L2/L3 cache latency is the main performance parameter. So if you reserve some space in the main heap for local threads in order to create a cache (i.e. a list of preallocated heaps), then allocate and deallocate local-thread heap from this "private heap" cache, you won't have any fragmentation. If your local-thread heap is deallocated at once when the thread (or request) is finished, you won't either have to check about memory liberation (you can forget about calling free if the destroy destructor was not overriden to do something else than free memory).
Yes, stack based memory allocate is definitely faster, agreed.
But as I said, extra careness is needed on the programmer side, especially when writing a library, or calling external libraries, because you can't control the stack when you don't have the execution control (i.e. the external caller may only leave you a tiny stack, or the external callee may demand too much stack space than you have left for it)
And, sometimes a stack overflow exhibit totally weird behavior, it is hard to detect or debug.
> If a block memory is used outside the thread which created it, a copy will be made.
Who is going to make the copy?
If the user thread does the copy, then locking is needed, since the owner thread may operation the memory during the copy, and thus leading to race condition. (RCU works only if ALL write accesses are first made in a separate copy, so in order to make your scheme an RCU, even the owner thread need to make a copy of its memory block before doing any update -- this is one of the case I mentioned that the writer is penalized for faster reads)
if the owner thread does the copy, then the user thread needs to provide synchronized access to its memory manager, and most likely via some kind of locking. (Say, a memory block owned by thread A is going to be passed to thread B, then thread A needs to ask thread B's memory manager for a chunk of memory before A can perform the copy...)
Last edited by AdamWu (2010-07-27 17:38:20)
I've a compiler enhancement proposal, which could make Delphi more multi-thread friendly:
see http://synopse.info/forum/viewtopic.php?pid=305
Here are some benchmarks... even if I found it difficult to get real data about this.
http://www.dlugosz.com/Repertoire/refma … paper.html
-> on Dual Pentium Pro, it was a 178/31=5.7 factor, on Pentium 4 w/hyperthreading it was a 38/2=19 factor
-> Core2Duo, it was 530/220 = 2.4 factor, on Core2Extreme, it was 2500/1130 = 2.2 factor
So the LOCK sounds to get better, with the new CPU architectures.
Bottom of page:
http://www.realworldtech.com/page.cfm?A … 182719&p=8
"Nehalem also lowers the latency for synchronization primitives such as
LOCK, XCHG and CMPXCHG, which are necessary for multi-threaded
programming. Intel claims that the latency for LOCK CMPXCHG
instructions (which serializes the whole pipeline) is 20% of what it
was for the P4 (which was absolutely horrible) and about 60% of the
Core 2. While the latency is lower, the behavior is still similar to
prior generaitons; Lock instructions are not pipelined, although
younger operations can execute ahead of a LOCK instruction."
So I guess that the timing from spiral.net is somewhat wrong.
Lock instructions are not pipelined, although
younger operations can execute ahead of a LOCK instruction."
This will definitively be a bottleneck for fast string processing in a thread.
In multi-threaded apps, static allocated buffers are always preferred. But it's not so easy to implement.
The best performance I ever get was with calling directly the Windows thread API, with pre-allocated memory buffers, and assigning a thread to each core (or at least assigning one thread per core, minus one or two, or div per two if you know that your task is not HyperThread-friendly). It worked very well for real-time image processing.
Or you can take a look at the new http://synopse.info/fossil/finfo?name=SynCrypto.pas file, and the way I implemented the AES multi-threaded compression, via pure Windows API. Since it won't use TThread, IsMultiThread will stay equal to false, and FastMM4 will perform better... if you use no TThread in your application, of course!
The resulting code is very easy to read and follow... the Windows API implementation is even clearer than creating a TThread class:
CPUCount: integer = 0;
procedure GetCPUCount;
var SI: TSystemInfo;
GetSystemInfo(SI); // USETHREADSFORBIGAESBLOCKS is defined for Windows only
CPUCount := SI.dwNumberOfProcessors;
TThreadParams = record
bIn, bOut: pAESBlock;
BlockCount: integer;
Encrypt: boolean;
ID: THandle;
{ we use direct Windows threads, since we don't need any exception handling
nor memory usage inside the Thread handler
-> avoid classes.TThread and system.BeginThread() use
-> application is still "officialy" mono-threaded (i.e. IsMultiThread=false),
for faster System.pas and FastMM4 (no locking)
-> code is even shorter then original one using TThread }
function ThreadWrapper(var P: TThreadParams): Integer; stdcall;
with P do
result := 0; // make the compiler happy, but won't never be called
procedure TAES.DoBlocksThread(var bIn, bOut: PAESBlock; Count: integer; doEncrypt: boolean);
var Thread: array[0..3] of TThreadParams; // faster than dynamic array
Handle: array[0..high(Thread)] of THandle;
nThread, i, nOne: integer;
pIn, pOut: PAESBlock;
if Count=0 then exit;
if CPUCount=0 then
if {$ifdef USEPADLOCK} padlock_available or {$endif}
(CPUCount=1) or // (DebugHook<>0) or
(Count<((512*1024) div AESBlockSize)) then begin // not needed below 512 KB
nThread := CPUCount;
if nThread>length(Thread) then // a quad-core is enough ;)
nThread := length(Thread);
nOne := Count div nThread;
pIn := bIn;
pOut := bOut;
for i := 0 to nThread-1 do
with Thread[i] do begin // create threads parameters
bIn := pIn;
bOut := pOut;
BlockCount := nOne;
Encrypt := doEncrypt;
AES := self; // local copy of the AES context for every thread
Handle[i] := CreateThread(nil,0,@ThreadWrapper,@Thread[i],0,ID);
if Count>0 then
DoBlocks(pIn,pOut,pIn,pOut,Count,doEncrypt); // remaining blocks
bIn := pIn;
bOut := pOut;
for i := 0 to nThread-1 do
A possibility is therefore to have the main GUI thread allocating memory for all background threads, before calling them, then have these threads be created by pure Windows API, instead of defining some TThread.Execute... You can also use memory allocated by the Windows API, either a local Heap or VirtualAlloc: if you need big chunk of memory, VirtualAlloc is as fast as FastMM4, since for such big blocks, FastMM4 just call VirtualAlloc.
But be aware that you don't have to use exceptions in pure Windows API threads, or you'll have to copy the exception handling in TThread code...
I made a new memory manager for Delphi, which uses a threadvar/TLS inside, so each thread has its own memory. This way no locks are used, and memory intensive apps scales (almost) perfectly now!
The name of the new MM is ScaleMM:
I have released version 0.9 yesterday: still a little bit rough but functional :-).
It is also 4x faster than FastMM, even for single threaded!
I had 2 major things in my mind:
1 = make it scale
2 = make it as simple as possible (so faster than bloated FastMM)
I still use a simple CAS lock for interthread memory (memory allocated in thread 1, freed in thread 2).
And for the global cache/pool I use simple lock, which maybe can replaced with an interlocked index for getting/putting an item in an array/pool.
If anybody has better ideas how to do it without locking: say it please :-).
Also other comments or help are welcome!
Last edited by andrewdynamo (2010-11-18 11:27:33)
I made a new memory manager for Delphi, which uses a threadvar/TLS inside, so each thread has its own memory. This way no locks are used, and memory intensive apps scales (almost) perfectly now!
Very good unit!
It's definitively easy to read and follow, because of its nice and simple design.
In TThreadMemManager.GetMem/Reallocmem:
- You don't handle aSize<=0, which should return nil (you'll have a GPF in the current implementation).
Everywhere in the code (to be 64 bit ready):
- You should use pointer(NativeUInt()) instead of pointer(cardinal()) typecast.
- You should use NativeInt instead of integer (to be sure that this will be stored in a register, without any overflow check).
Some ideas/remarks:
- the RET in ending of _GetOwnTls is pointless.
- Perhaps joining all code in only one ScaleMM unit could make sense (easier to deploy/install).
- RELEASE should be the default: a NORELEASE could make sense by default (for version 1.0)
- why did you use {$A8} ? {$A4} or 'packed' wouldn't be wrong either. 16 bytes alignment could be an option only, and FastMM4 doesn't always returns 16 byte aligned blocks in the default compilation mode (via OldMM.GetMem).
- If you use 16 bytes per TMemHeader, you could add a "magic" cardinal number to it to identify Freemem/Reallocmem misuses.
- you are using New() and Dispose() which can be safely replaced with a OldMM.GetMem(sizeof()) and OldMM.FreeMem() calls.
- You use some div 32 or div 256: you'd better use shl 5 and shl 8, which will be faster when working with integer/NativeInt.
IMHO in Scale_ReallocMem(), the
//new size smaller then current size?
if (aSize <= Owner.FItemSize) then //we have already incremented blocksize in "TMemList.AllocMem" and "TMemStore.GetMemFromList"
if (aSize + Owner.FItemSize >= Owner.FItemSize) then
Result := aMemory //no resize needed
//too much downscaling
Result := Scale_GetMem(aSize); //new mem
if aMemory <> Result then
Move(aMemory^, Result^,
aSize); //copy (use smaller new size)
Scale_FreeMem(aMemory); //free old mem
doesn't make sense to me. As it is written, the "too much downscaling" block won't never be trigered.
I see that you rely on FastMM4 for bigger block size. What about using Windows Heap API?
It's slower than FastMM4 for mono threading applications, but I read that it behaves better than FastMM4, even for big blocks, in multi-threaded applications.
Code extracted from our Enhanced RTL for Delphi (perhaps the HEAP_NO_SERIALIZE is not a good idea and should be avoided in multi thread apps):
HeapHandle: THandle = 0;
{* Global handle to the heap. Do not change it! }
HeapFlags: cardinal = 0;
{* Possible flags are:
HEAP_GENERATE_EXCEPTIONS - system will raise an exception to indicate a
function failure, such as an out-of-memory
condition, instead of returning NULL.
HEAP_NO_SERIALIZE - mutual exclusion will not be used while the HeapAlloc
function is accessing the heap. Be careful!
Not recommended for multi-thread applications.
But faster.
HEAP_ZERO_MEMORY - obviously. (Slower!)
{ Note from MSDN:
The granularity of heap allocations in Win32 is 16 bytes. So if you
request a global memory allocation of 1 byte, the heap returns a pointer
to a chunk of memory, guaranteeing that the 1 byte is available. Chances
are, 16 bytes will actually be available because the heap cannot allocate
less than 16 bytes at a time.
function GetProcessHeap: THandle; stdcall; external kernel;
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: Cardinal): Pointer; stdcall; external kernel;
function HeapReAlloc(hHeap: THandle; dwFlags: Cardinal; lpMem: Pointer; dwBytes: Cardinal): Pointer; stdcall; external kernel;
function HeapFree(hHeap: THandle; dwFlags: Cardinal; lpMem: Pointer): LongBool; stdcall; external kernel;
function SysGetMem(size: Integer): Pointer;
// Allocate memory block
if HeapHandle=0 then
HeapHandle := GetProcessHeap; // allow the heap to be shared within dll
Result := HeapAlloc(HeapHandle, HeapFlags, size);
function SysFreeMem(p: Pointer): Integer;
// Deallocate memory block
if HeapHandle=0 then
Result := 0 else
Result := Integer(not HeapFree(HeapHandle, HeapFlags and HEAP_NO_SERIALIZE, p));
function SysReallocMem(p: Pointer; size: Integer): Pointer;
// Resize memory block
if HeapHandle=0 then
HeapHandle := GetProcessHeap; // allow the heap to be shared within dll
Result := HeapRealloc(HeapHandle, HeapFlags and (HEAP_NO_SERIALIZE and
HEAP_GENERATE_EXCEPTIONS and HEAP_ZERO_MEMORY),
// (Prevent using flag HEAP_REALLOC_IN_PLACE_ONLY here - to allow
// system to move the block if necessary).
p, size);
function GetHeapStatus: THeapStatus;
procedure UninitAllocator;
// Shutdown; do nothing
Thank you for the positive reply!
- "You don't handle aSize<=0"
Thank you, will add a check for that (or maybe the RTL already does that?)
- "Everywhere in the code (to be 64 bit ready)"
Yes, I will change that too, really hope 64bit (preview) will be available soon to test ScaleMM.
But for now, I used my sparse spare time to get it working. 64bit compatible is (near) future, lower prio.
- "the RET in ending of _GetOwnTls is pointless"
Ok, thanks
- "Perhaps joining all code in only one ScaleMM unit could make sense (easier to deploy/install)"
Yes, I first thought small units would be better than one big unit, but it not easier to install (use multiple units in dpr or use search path)
- "RELEASE should be the default: a NORELEASE could make sense by default (for version 1.0)"
Ok, thanks
- "why did you use {$A8} ? {$A4} or 'packed' wouldn't be wrong either. 16 bytes alignment could be an option only, and FastMM4 doesn't always returns 16 byte aligned blocks in the default compilation mode (via OldMM.GetMem)."
Just some test to see if it makes a difference :-)
I do not have much experience with alignment yet
- "If you use 16 bytes per TMemHeader, you could add a "magic" cardinal number to it to identify Freemem/Reallocmem misuses"
yes I can use the 8 extra bytes for something else then, but what do you mean with "misuses"?
- "you are using New() and Dispose() which can be safely replaced with a OldMM.GetMem(sizeof()) and OldMM.FreeMem() calls."
Yes and no: this way it can use it's own memory (that's the reason for the "recursive" check)
- "You use some div 32 or div 256: you'd better use shl 5 and shl 8, which will be faster when working with integer/NativeInt."
Aha, thanks for the tip
- about downscaling:
E.g. aSize is 1, itemsize is 256 then:
1 < 256
1 + 256 >= 256 .... hmmm you're right
should be:
if aSize < Owner.FItemSize div 2 then //downscale if more than half smaller
1 < 256 div 2 -> not ok, too much downscaling
128 < 256 div 2 -> ok, just the half but ok
- about large mem:
For the first version, I focus on "make a working POC", so ScaleMM on top of FastMM was the easiest :-).
Btw, "on top" is also a nice feature: you can put any other MM before ScaleMM!
I haven't thought much about how to deal with large mem (I would like to make version 2 independent of FastMM),
but your proposal of using the heap sounds good, thanks! Do you have good ideas about a "large memory" strategy?
I know FastMM has some special logic for medium and large blocks.
- "you are using New() and Dispose() which can be safely replaced with a OldMM.GetMem(sizeof()) and OldMM.FreeMem() calls."
Yes and no: this way it can use it's own memory (that's the reason for the "recursive" check)
So replace it with GetMem and FreeMem.
For the first version, I focus on "make a working POC", so ScaleMM on top of FastMM was the easiest :-).
Btw, "on top" is also a nice feature: you can put any other MM before ScaleMM!
I haven't thought much about how to deal with large mem (I would like to make version 2 independent of FastMM),
but your proposal of using the heap sounds good, thanks! Do you have good ideas about a "large memory" strategy?
I know FastMM has some special logic for medium and large blocks.
FastMM is perhaps the best option for blocks > 16 KB (medium blocks are handled internally up to a bit more than 256 KB, then it calls VirtualAlloc for bigger blocks).
The "on top" aspect is really really great. I really like it.
For the "div 2", replace it with "shl 1". Or use cardinals (the compiler will replace "aCardinal div 2" by "aCardinal shl 1", but it won't do it for an integer, because it must check if the integer is not <0).
For unsigned integers, div 2=shl 1, div 4=shl 2, div 8=shl 3, and so on...
Since you're using positive integers, you could safely use NativeUInt everywhere.
You could have used a threadvar instead of low-level Windows API.
The _FixedOffset is perhaps not worth it. Reading some threadvar memory could be quite as fast.
I've inlined the threadvar access in asm in our Enhanced RTL, for example for the ioresult function.
Using a threadvar would allow you to get rid of the asm and use regular pascal code in some cases (like being ready for 64 bit or FPC).
Do you want me to rewrite the getmem/freemem versions in asm?
Perhaps when the algorithm will be proven, I'll go into this, if you want.
In all cases, your unit, with a thread pool (to avoid creating a new heap every time a thread is created), could make our server scales even better.
It's very similar to the MM included in FPC 2.4. Did you take a look at it?
- "So replace it with GetMem and FreeMem"
Ok thats better, Scale_GetMem etc it will be then :-)
- "replace all div with shl"
Yes I will do that for version 1.0
- about using _fixedoffset:
this way no (extra) multiply is done each time to calculate offset to threadmem, should be faster...
But yes, for 64bit (no asm support :-( ) I will probably need to make use of normal threadvar.
- about asm rewrite:
Yes, that would be nice! I made it a lower prio because of no 64bit asm, but for 32bit it would be good anyway.
I am curious how much faster you can make it in asm!
- about MM of FPC
No, I completely coded it myself, but I used some ideas of TopMM (which is slower than FastMM in real world test, is also too bloated, that's why I made ScaleMM) and of course some of FastMM. Also used the CAS32 of the Lock free queue:
http://www.thedelphigeek.com/2010/02/dy … right.html
But I will take a look at it!
- about using _fixedoffset:
this way no (extra) multiply is done each time to calculate offset to threadmem, should be faster...
In practice, the *4 multiplication is done in one CPU clock.
My point was about using a threadvar content, i.e. reading the offset from the threadvar position.
Since this call is only made one, it won't be slower, and would avoid the memory protection trick.
ScaleMM fixes are updated in SVN
What about your testing status?
Does it scale well on real applications (like a server application)?
Not yet, only in a demo program with 30.000.000 mem allocs, strings + objects in 16 threads on a quad core machine :-).
I'm busy right now @ work with a large refactoring of old CRUDs objects, so I hope next week
Not yet, only in a demo program with 30.000.000 mem allocs, strings + objects in 16 threads on a quad core machine :-).
Not bad.
I'm busy right now @ work with a large refactoring of old CRUDs objects, so I hope next week
So do I. Refactoring and maintaining is paying the bills...
I just noticed (from svn code) that you changed some i: integer into i: byte
Using an integer will be faster in the generated code: it will use a 32 bit register, instead of a 8 bit par of it, with some typecast.
integer will be more adequate than byte, even if the optimizer is generating an integer in the asm code because it knows it'll be faster
nativeint would be perfect, in all cases fitting the processor register size.
In all cases, my advice is always to use Alt-F2 to see the generated asm code, before any change.
In TMemBlockList.AddNewMemoryBlock I'm not sure your with use it the better one. Alt-F2 could help.
In TGlobalMemManager.GetBlockMemory, I guess your try...finally bl.FRecursive := False is pointless. Previous implementation sounded better to me.
IMHO TMemBlockList.FItemSize should be NativeInt to avoid a word to integer/NativeInt cast in the generated code.
I just noticed (from svn code) that you changed some i: integer into i: byte
In TGlobalMemManager.GetBlockMemory, I guess your try...finally bl.FRecursive := False is pointless. Previous implementation sounded better to me.
IMHO TMemBlockList.FItemSize should be NativeInt to avoid a word to integer/NativeInt cast in the generated code.
I tried your proposal and I got no speed improvement (byte to integer/nativeint). Changing FItemSize from word to integer/nativeint made it even some slower!
(probably due to alignment).
So I kept the byte and word, especially to show it uses low values and these sizes are minimum needed (and not getting slower with it). So the only parts I use
integer instead of NativeInt are the TMemoryManagerEx functions. I changed all other parts to nativeint if it made sense and to another type if an integer was not
About try..finally: just to be sure in case of an AV
Last edited by andrewdynamo (2010-11-22 08:51:24)
I'll work on the source tonight, in order to rewrite some part, according to some ideas I got.
For example, some blocks sizes are overlaping (256 and 2048).
I'll do the refactoring looking at the generated asm code (Alt+F2) which is a good idea of speed optimization, whatever CPU it will run on.
I'll try to make a simple medium sized block implementation.


text:
Communal welfare organisations are facing a further squeeze on their funding from local authorities, increasing the pressure to raise more from donors to maintain services.
Jewish Care chairman Stephen Zimmerman told a breakfast meeting of its business group this week that the charity was still battling with Barnet Council over funding.
"This year Jewish Care is currently not going to receive any increase in the amount given by our largest local authority and we are even fighting to achieve the status quo."
Chief executive Simon Morris explained afterwards that around three-quarters of residents in Jewish Care homes are partly funded by local authorities. But the gap between the cost of a service and what local authorities are prepared to pay "unfortunately widens every year. Jewish Care works hard to negotiate annually with local authorities to try and secure increases in the amount they will pay for an individual's care. But, not surprisingly, we are struggling to do so in this very tough economic environment."
Leon Smith, chief executive of the Nightingale home for the elderly in south London, said that, on average, local authorities met only 60 per cent of the cost of caring for those eligible for council support. "The true value of local authority support for our residents is gradually being eroded in real terms."
Some councils were already warning that there would be no rise for inflation in contributions for a second year. "If the true value of local authority funding does not go up year on year, in effect a higher proportion of our income needs to be found from voluntary sources."
Mr Smith added that in many cases local authorites preferred to support people in their homes rather than in residential care. A person living in a tenement building in a poor part of London, or "dying of loneliness or lack of stimulation" might desperately want a Nightingale place. "But the local authority may deem it that because they can still carry out certain personal functions for themselves at home, they would not be eligible for local authority support."
Norwood chief executive Norma Brier said councils were seeking to reduce the cost of many areas of social care because of the economic slowdown. "This includes the fees paid for services they buy from Norwood for adults with learning disabilities."
A Barnet spokesman said the contribution to Jewish Care "reflects the challenges facing local authorities and providers across the country. Our increase in adult social care funding in the current year has been absorbed by demographic change. With more people living longer with more complex needs, the funding of support for older people and other adults is a major issue for society to debate."
Jewish Care, Nightingale and Norwood had a combined income of more than £106 million according to their last available accounts, of which nearly £41 million came from donations. The rest was mainly from council contributions or fees paid by residents.


text:
Digitally Enhanced Volume Three (Mixed By Will Holland)
- Artists Arty, Andy Duguid, Moodfreak, Steve Brian, Adymus, Mike Sonar, The Flyers, Andy Blueman, Adam Nickey, Temple One, Static Blue, Ferry Tayle, Will Holland, Motionchild, Tiff Lacey, Perpetual, Paul Tarrant, Arty, Sindre Eide, Torin Schmitt, Ryan Merchant, Estiva, Agulo, David Berkeley, Audien, Xgenic, Mike Sonar, The Flyers, Eide, Andriz, Sand & Sense, Temple One, Hannah Ray, 7 Skies, Kiholm, Adam Nickey, Blue 8, Suncatcher, Daniel Kandi, Martijn Stegerhoek, Mark Andrez, Mque, Matt Holliday, Stonevalley, Tritonal
- Release Date 2010-03-08
- Labels Enhanced Recordings
- Catalog ENHANCEDCD007
**** MIXMAG 'Compilation of the Month' ****
'More high quality fare from the never fail label'
'Enhanced serve up the third instalment of their acclaimed Digitally Enhanced series, with 2 CDs featuring big recent tracks and upcoming material, from the label that's fast becoming our favourite. At just 27, Will Holland is owner of Enhanced, a fine producer regularly appearing on this very page, and resident / promoter at Leeds event Digital Society - arguably the UK's coolest trance night.
Anyhoo. you know what to expect from an Enhanced comp by now. there's progressive offerings alongside the euphoria that the label does so well, and the tracklist features Will himself, Temple One, Ferry Tayle and Estiva, among others. That's you told.'
Now one of the most hotly anticipated compilations, Will Holland serves up Volume Three of the critically acclaimed Digitally Enhanced series this March featuring 100% material from 'the hottest label around' (Trance.nu).
Keeping to the same winning format, Will delivers two mixes of the most recent and over 20 exclusive tracks from Enhanced; the first disc including the more progressive offerings from the Enhanced stable whist the second disc goes for the jugular with 80 minutes of full on hands in the air goodness from 'the label of the year' (MusiCritics), including exclusive new tracks and remixes from the cream of the Enhanced crop along with the latest new signings and recruits including Will Holland, Temple One, Estiva, Ferry Tayle Static Blue, Adam Nickey, Suncatcher, Audien, Arty, 7 Skies & Kiholm, Andy Duguid, Steve Brian, Andy Blueman and many, many more!
At 27, Will Holland is regarded as one of the most influential young stars in trance today as the founder of one of the world's leading trance labels Enhanced Recordings and with residencies for the largest clubs in the UK: Digital Society and Gatecrasher.
With the world's leading dance music magazine Mixmag stating 'the future of trance is in safe hands.' the young Leeds based dj/producer with an international tour diary and four international radio shows to boot continues to push the sound he loves forward.
With Enhanced being 'the label story of the year' (Dj Mag) in 2009, this is your crystal ball into the label and Will Holland's 2010; and we think you'll agree it's looking rather good indeed for the UK star and the label that is 'one of the most famous labels today!' (World No.1 DJ, Armin van Buuren - ASOT)
1. Ferry Tayle & Static Blue - Trapeze (Arty Remix) (Digitally Enhanced Intro Edit)
2. Motionchild & Will Holland feat. Tiff Lacey - Arctic Kiss (Andy Duguid Remix)
3. Perpetual feat. Tiff Lacey - Restless (MoodFreak Remix)
4. Paul Tarrant - Sunset Serenade (Original Mix)
5. Arty - Gentle Touch (Original Mix)
6. Sindre Eide - Poesia (Original Mix)
7. Torin Schmitt feat. Ryan Merchant - Follow (Original Mix)
8. Estiva - I Feel Fine (Piano Mix)
9. Agulo feat. David Berkeley - Fire Sign (Steve Brian's Original Mix)
10. Audien - Transition (Original Mix)
11. XGenic - Around Me (Steve Brian Remix)
12. The Flyers & Mike Sonar - Reveal (Original Mix)
13. Eide & Andrez - Forget me (Adymus remix)
14. Sand & Sense - Together (The Flyers & Mike Sonar's Original mix)
1. Temple One feat. Hannah Ray - Autumn Leaves (Digitally Enhanced Intro Edit)
2. Estiva - Dalmatia (Edit)
3. Ferry Tayle & Static Blue - Trapeze (Original Mix)
4. 7 Skies & Kiholm - Lost & Found (Original Mix)
5. Adam Nickey pres. Blue 8 - Eleventh Street (Original Mix )
6. Suncatcher - Wildflowers (Original Mix)
7. Daniel Kandi & Martijn Stegerhoek- As One (Original Mix)
8. Motionchild & Will Holland feat. Tiff Lacey - Arctic Kiss (Andy Blueman Remix)
9. Temple One & Mark Andrez - Gran Canaria (Original Mix)
10. Matt Holliday feat. Mque - Your Touch (Adam Nickey Remix)
11. Estiva & Temple One - November Lovely (Temple One Mix)
12. Sindre Eide - Two Against The World (Original Mix)
13. Stonevalley - Winter (Original Mix)
14. Tritonal - Utopia (Take Me Away) (Original Mix)


text:
When youre working on your optimization programs, are you thinking ahead? Do you watch industry trends to see what may be on the horizon? If not, then its time you did. Business planning is all about not only today, but tomorrow as well. Search engine optimization programs are no different they need to be future-proofed.
Future proofing your SEO means that you operate with one eye on where the industry is going as to ensure your efforts hold up over time. This is a wise move not only from stability reasoning but from a financial one as well. That is to say, there is a cost consideration when we have to go back and adapt entire websites with new tactics that we really should have seen coming. Your SEO efforts should always stand the test of time.
The safety element - this means we use tactics that were fairly certain will work tomorrow and tread lightly on the ones that arent. One thing is certain in SEO is that there are fine lines that we cross from what is an acceptable practice, to those we know could get us in hot water. What is border-line today is often against the TOS tomorrow.
This means that tactics youre employing now might actually harm a website in the near future. Stay well away from the edge my friends
its a long we down.
Some common areas include;
and so forth, you get the idea.
The predictive element this means having a keen understanding of the search industry and capitalizing on trends before they happen. This means you use your keen sense fortune-telling to try and establish where search engines are going and make sure your optimization programs are positioned for best effect.
Some current areas of interest at the moment are;
Once more, it requires that were paying attention to whats going on out there. It doesnt mean heavily modifying your tactics as much as thinking ahead as to how each will hold up. Planning for a strong ROI on your activities doesnt end at the end of each month
there is long term ROI to be considered as well. Money invested in borderline tactics could mean a total loss in a a year from now on that investment or at east a devaluation.
We all know that Gypsies know all about fortune telling so wed be the place to start. How does one go about future proofing their SEO? Ultimately it will take a more intrinsic sense of where things are headed and we can put ourselves in this mindset by;
Truly, the main point here is that you should always be thinking about strategies that will stand the test of time. This will ultimately save resources (time and money) that could be expended cleaning up problems or wasted on now ineffective link building.The next time you stumble on a new trick and think, I cant believe this actually works it would be wise to consider the future.
At very least it may be nullified, at worse penalized.
Playing it safe may not be sexy, but were here for the long term. Viability and ROI on search optimization efforts requires forward thinking
will you be ready?
Empty your mind, be formless, shapeless, like water. You put water into a bottle, it becomes the bottle. You put water into a teapot, it becomes the teapot. Water can flow or it can crash. Be water my friend. Bruce Lee (Pierre Burton interview)
SEO Blog - SEO Training - SEO Geeks Newsletter -- Search Engine Optimization - SEO News - Social Media - Web Analytics - Link Building - Search Engine Patents- Site Map - Contact
Site Designed by Verve Developments.