Основные отличия между thread-local storage (TLS) и partitioned global address space (PGAS)? Каковы последствия использования языков или программ с использованием одного или другого?В чем разница между TLS и PGAS?
ответ
Это, по крайней мере, внешне похожие подходы, но практические последствия совершенно разные.
TLS - это то, как можно указать, что автоматические переменные (то есть данные в стеке) связаны с потоками операционной системы (OS) (например, потоками POSIX), а не с целым процессом ОС.
Ниже приведен пример TLS в OpenMP. Я использую OpenMP, потому что потоки C11 еще не поддерживаются GCC или Clang. Эквивалентный синтаксис в C11 (C++ 11) равен _Thread_local
(thread_local
).
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int p;
#pragma omp threadprivate(p)
int s;
int main(int argc, char **argv)
{
#pragma omp parallel
{
printf("%d: %p %p\n", omp_get_thread_num(), &p, &s);
}
return 0;
}
На моей машине, выход этого кода:
> OMP_NUM_THREADS=8 ./tls
1: 0x7fdbb1404ea8 0x1004a5060
2: 0x7fdbb1500c08 0x1004a5060
3: 0x7fdbb1500c18 0x1004a5060
4: 0x7fdbb1500c28 0x1004a5060
5: 0x7fdbb1500c38 0x1004a5060
6: 0x7fdbb1500c48 0x1004a5060
0: 0x7fdbb1500c58 0x1004a5060
7: 0x7fdbb1500c68 0x1004a5060
Как вы можете видеть здесь, адрес данных TLS различен на каждом потоке, в то время как адрес глобальных без ДУСА то же самое для всех потоков.
В PGAS обычно используется распределенная память. Данные распределяются конфиденциально для каждого потока (здесь поток может быть потоком ОС, процессом ОС или чем-то еще) по умолчанию. При необходимости можно распределять общие данные.
Ниже приведена программа SHMEM. В этой программе данные sheap
являются указателями в каждом PE (обрабатывающем элементе, который обычно является процессом ОС), к которому может обращаться любой другой PE, используя вызовы функций, такие как shmem_getmem
и shmem_putmem
.
#include <shmem.h>
int main(int argc, char* argv[])
{
start_pes(0);
int mype = my_pe();
int npes = num_pes();
int n = (argc>1 ? atoi(argv[1]) : 1000);
int * sheap = shmalloc(n*sizeof(int));
if (sheap==NULL) exit(1);
printf("PE %d: sheap base = %p\n", mype, sheap);
shfree(sheap);
return 0;
}
В языке PGas как СКП, можно использовать синтаксис нагрузки магазина, но компилятор будет транслировать их в сети функция связи вызывает, если данные живет в отдаленном месте (удаленный означает другой узел в распространять память).
Принципиальное различие между TLS и PGas является то, что TLS работает в резьбовом контексте, где данные разделяемой по умолчанию и TLS используется для ее приватизировать, в то время как в PGas все данные частными по умолчанию и общие данные могут быть выделены по запросу.
Помогает ли это? Я знаю, что примеры C++ 11 и UPC были бы более полезными, чем OpenMP и SHMEM, но было легче написать последнее.
Спасибо, что написал это время. Очень полезно. – John
- 1. Разница между DTLS и TLS
- 2. разница между SSL и TLS
- 3. В чем разница между GNU_LIBC_VERSION и GNU_NPTL_VERSION?
- 4. В чем разница между «и»?
- 5. В чем разница между `{}` и `[]`?
- 6. В чем разница между == и ===?
- 7. В чем разница между «+» и «\ +»?
- 8. В чем разница между + = и = +?
- 9. В чем разница между/* ... */и/** ... */
- 10. В чем разница между: и +:
- 11. В чем разница между $ {} и # {}
- 12. В чем разница между $ _. и $ _
- 13. В чем разница между = и: =
- 14. В чем разница между && и &?
- 15. В чем разница между $ {} и # {}?
- 16. В чем разница между + и%?
- 17. В чем разница между + = и = +
- 18. В чем разница между # {} $ {} и% {}?
- 19. В чем разница между «» и «»?
- 20. В чем разница между ['#'] и [. = '#']?
- 21. В чем разница между == ~ и! =?
- 22. В чем разница между «/» и «/ *»?
- 23. В чем разница между «./» и «../»?
- 24. В чем разница между {}()) и {})()
- 25. В чем разница между «'» и «»
- 26. В чем разница между «и«
- 27. В чем разница между (&& и &) и (|| и |)?
- 28. В чем разница между ....?
- 29. В чем разница между:
- 30. чем разница между [[], []] и [[]] * 2
Это очень разные понятия. Можете ли вы найти определения каждого и попытаться задать более конкретный вопрос? – Jeff
@Jeff Я спросил, потому что я уже сделал это (см. Ссылки) и не был уверен в различиях. Я думал, что PGAS похож на TLS (который, я думаю, я понимаю). TLS сохраняет память локально для каждого потока, но обычно существуют механизмы для обработки глобальных/общих переменных. PGAS имеет глобальное адресное пространство, но разделяет его таким образом, который кажется очень похожим на TLS. Часть объяснения википедии PGAS, которую я не понимаю, это то, где она говорит о локальности ссылки и близости пространства разделяемой памяти. – John
Хорошо, здесь есть поверхностное сходство, но на практике PGAS «потоки» - фактически ОС-процессы. PGAS также поддерживает распределенную память. Я попытаюсь написать правильный ответ, когда я подберу подходящую клавиатуру. – Jeff