Size: a a a

2020 December 05

m

magras in pro.cxx
@urandon Nikita Khomutov
Неверно. Статик может лежать в динамической библиотеке, и деструктор будет вызван при выгрузке библиотеки
Если мы выделили память в динамической библиотеке и попытаемся освободить из другого модуля могут возникнуть проблемы. Кажется это не характерно для линукса, но под виндой это обычное правило.
источник

@N

@urandon Nikita Khom... in pro.cxx
magras
Если мы выделили память в динамической библиотеке и попытаемся освободить из другого модуля могут возникнуть проблемы. Кажется это не характерно для линукса, но под виндой это обычное правило.
Ну так этим занимается код из инициализации/финализации dll-ки, так что никаких проблем с разными аллокаторами
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Если мы выделили память в динамической библиотеке и попытаемся освободить из другого модуля могут возникнуть проблемы. Кажется это не характерно для линукса, но под виндой это обычное правило.
Там вроде дело в разных рантаймах С/С++. Если добиться, чтоб он был один, то всё можно
источник

h

hazer_hazer in pro.cxx
magras
static std::shared_ptr гарантирует что объект будет жить до конца работы программы, поэтому не имеет смысла считать ссылки на объект. Вместо этого можно возвращать raw pointer и хранить объект с помощью static std::unique_ptr. Я допускаю что по каким-то причинам дальше удобнее работать с shared_ptr, но это может означать что проблема в архитектуре.
так у меня owner'ов множество
источник

m

magras in pro.cxx
@urandon Nikita Khomutov
Ну так этим занимается код из инициализации/финализации dll-ки, так что никаких проблем с разными аллокаторами
Так если у нас остались живые shared_ptr они не дадут удалить объект при выгрузке dll. То есть освобождение памяти произойдет из другого модуля. Если живых shared_ptr не было, то и проблемы нет.
источник

JJ

Joshua Jakowlew in pro.cxx
Помогите определиться. Задача - найти индекс любого ненулевого элемента вектора. (Весь код запускаем на гпу, по факту это часть поиска обратной матрицы). Можно просто идти последовательно, пока не выполнится условие. Я хочу завести по потоку на каждый элемент, поток проверяет условие и записывает по указателю индекс, если условие выполнено. Синхронизации нет, результат недетерминирован. Но цель найти любой элемент, так что по хорошему все будет ОК. Вправе ли я так сделать, или все таки есть вероятность разбудить Ктулху?
источник

AN

Alexander N in pro.cxx
Joshua Jakowlew
Помогите определиться. Задача - найти индекс любого ненулевого элемента вектора. (Весь код запускаем на гпу, по факту это часть поиска обратной матрицы). Можно просто идти последовательно, пока не выполнится условие. Я хочу завести по потоку на каждый элемент, поток проверяет условие и записывает по указателю индекс, если условие выполнено. Синхронизации нет, результат недетерминирован. Но цель найти любой элемент, так что по хорошему все будет ОК. Вправе ли я так сделать, или все таки есть вероятность разбудить Ктулху?
Можно наверное что-то типа parallel_for использовать? Он сам параллелит, я так понял элементы не связаны. Или на гпу оно не взлетит?
источник

JJ

Joshua Jakowlew in pro.cxx
Это вообще мелкая  функция в коде поиска обратной матрицы методом Гаусса-Жордана. Ее по любому выполнять на гпу надо, просто есть вариант запустить в одном потоке, что для гпу странно, либо как выше описал. Второй вариант предпочтительнее, просто я не уверен, могу ли я так делать
источник

JJ

Joshua Jakowlew in pro.cxx
Потому что с точки зрения стандарта это же, наверное, UB
источник

AN

Alexander N in pro.cxx
Просто руками запускать потоки, а ещё следить чтобы не вышло рейсов итд это как-то неправильно. Я так понял нужно записать один индекс
источник

D

Danya in pro.cxx
С помощью чего на GPU запускаете?
источник

JJ

Joshua Jakowlew in pro.cxx
cuda
источник

JJ

Joshua Jakowlew in pro.cxx
Если в коде, то по факту выбор между двумя вариантами

 template <typename T>
   __global__ void first_not_null_row(T* A, int* idx, int col, int order)
   {
       for (int i = 0; i < order; ++i)
       {
           if (A[i * order + col] != Zero_v<T>)
           {
               *idx = i;
               return;
           }
       }
   }

   template <typename T>
   __global__ void first_not_null_row(T* A, int* idx, int col, int order)
   {
       int i = blockIdx.x * blockDim.x + threadIdx.x;
       if (A[i * order + col] != Zero_v<T>)
       {
           *idx = i;
       }
   }
источник
2020 December 06

U

UsernameAK in pro.cxx
с какого C++ можно юзать циклы в constexpr?
источник

LA

Liber Azerate in pro.cxx
UsernameAK
с какого C++ можно юзать циклы в constexpr?
С 14-го
источник

U

UsernameAK in pro.cxx
то есть я могу compile-time хеширование строк сделать?
источник

SS

Sergey Skvortsov in pro.cxx
Можешь
источник

АК

Александр Караев... in pro.cxx
UsernameAK
то есть я могу compile-time хеширование строк сделать?
Да и в С++11 можешь при желании
источник

D

Danya in pro.cxx
Александр Караев
Да и в С++11 можешь при желании
Рекурсия наше всё
источник

ИП

Илья Павелко... in pro.cxx
Дарова
источник