Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


students:high_performance_test:question_15

dumb: полагаю, 2.

  1. 2 – это более эффективно чем 1, поскольку должно уменьшиться количество потоков, борющихся за каждую критическую секцию.
  2. 3 – не общее решение. так можно сделать, если данные не модифицируются в критической секции.
  3. 4 – это только ухудшит ситуацию.

Discussion

Kirill V. Krinkin, 2007/10/04 00:41, 2007/10/04 00:52

Цитата [Threading Methodology: Principles and Practices, стр. 38]:

All shared global data access must be protected by synchronization constructs to prevent data races from occurring in the application. …many global data accesses that occur close to each other can be merged into one larger synchronization point, thereby eliminating many synchronization points.

If there are two global data accesses, and if the data that is accessed second is not updated between the two accesses, then the second access can be made immediately after the first. By protecting these two data accesses with synchronization, two synchronization points can be reduced to one.

Also, large critical sections that occur in the code may be potential candidates for a local copy of shared data for each thread if the data dependencies allow for such an optimization.

By merging global data access that occur close to each other and by making local copies of global data, you can significantly improve the scaling performance of your threaded applications.

Also, those global data accesses that occur as a read-only operation do not require synchronization constructs. By observing these simple rules of data restructuring, your application can benefit with significant scaling performance boost.

Объединяй и властвуй?

осьмилис, 2007/10/04 00:54

последний параграф смахивает на шутку. предлагаю смеха ради в одном потоке модифицировать std::map, а в другом – обходить его последовательно. если следовать рекомендации буквально, второму потоку синхронизация не нужна (:

осьмилис, 2007/10/04 00:56

смотря что имел в виду тот, кто писал русский текст – что потоки действительно часто блокируют друг друга, или что время уходит на частые вызовы функций блокировки, которые ничего не делают. если второе – то объединяй и властвуй. но мне показалось что первое.

You could leave a comment if you were logged in.
students/high_performance_test/question_15.txt · Last modified: 2016/08/07 00:06 by kel