В настоящее время я разрабатываю программу на базе графического процессора, которая использует несколько ядер, которые запускаются одновременно с использованием нескольких потоков.Атомные операции CUDA и запуск параллельного ядра
В моем приложении несколько ядер должны получить доступ к очереди/стеку , и я планирую использовать атомные операции.
Но я не знаю, работают ли атомарные операции между несколькими ядрами одновременно. Пожалуйста, помогите мне всем, кто знает точный механизм атомных операций на GPU или у кого есть опыт работы с этой проблемой.
Вы пробовали что-нибудь? Это не моя область, но если вы попытались что-то другое, то некоторые пользователи смогут лучше помочь с некоторым кодом :) –
Из руководства по программированию CUDA C: _ атомная функция выполняет атомарную операцию чтения-модификации-записи на одном 32-разрядное или 64-разрядное слово, находящееся в глобальной или разделяемой памяти. [...] Операция является атомарной в том смысле, что она гарантированно выполняется без помех от других потоков. Из Руководства по лучшей практике CUDA C: _ На устройствах, способных выполнять одновременное выполнение ядра, потоки также могут использоваться для выполнять несколько ядер одновременно, чтобы более полно использовать мультипроцессоры устройства _ _ – JackOLantern
Объединив две вещи, я бы сказал, что если вы запускаете разные ядра, работающие с независимыми данными в разных потоках, и каждое ядро использует атомные операции, то операции внутри каждое ядро может быть «сериализовано», но ядра могут работать одновременно с использованием различных ресурсов, доступных в графическом процессоре (ядра, блоки загрузки/сохранения и специальные функциональные блоки). – JackOLantern