Как использовать threadfence / CUDA5.5

0

Итак, я хочу знать, как использовать threadfence, и я хочу прочитать пример кода о threadfence.

пожалуйста, покажите мне пример кода о threadfence()

Я считаю, что когда я хочу получить доступ к памяти, это функция ядра на стороне устройства в CUDA5.5, я хочу выполнить эксклюзивный контроль.
Я узнал, что эксклюзивный контроль возможен, если я использую то, что называется "() __threadfence" Я делаю, я не знаю, что, если я буду использовать.

· Что я могу включить?
(теперь "__threadfence()" возникает ошибка, которая не была определена)
· Где я пишу код в исходном коде. потому что я думал, что хотел бы исключительно контролировать место, в котором вы хотите получить доступ к Log_d в приведенном ниже коде.

Другие темы Я хочу, чтобы предотвратить доступ к памяти Log_d между "lock start" ~ "lock stop" следующим кодом, например.

Я определил блоки и потоки на стороне процессора. блоков: 1,1,1 и потоков: 256,1,1

__global__ void matrix_vector_multi_gpu_1_256(float *A_d, float *B_d, float *C_d, float *Log_d){
    int i;

    A_d[threadIdx.x]=0.0F;

    for(i=0;i<N;i++){
        A_d[threadIdx.x]=A_d[threadIdx.x]+B_d[threadIdx.x*N+i]*C_d[i];
    }
    //lock Start about Log_d
    //__threadfence();
    for(int j=0;j<N;j++){
        if(Log_d[j]==0){
            Log_d[j]=threadIdx.x + 1;
            break;
        }
    }
    //Stop the lock


}
Теги:
visual-studio
cuda
visual-studio-2010

1 ответ

2

Было бы хорошо, если бы вы могли предоставить дополнительную информацию о том, что должна делать функция ядра matrix_vector_multi_gpu_1_256.

По __threadfence() устройство ожидает, пока все глобальные и общие доступы, созданные вызывающим потоком, будут видны:

  1. Все потоки в потоковом блоке для доступа к общей памяти;
  2. Все потоки в устройстве для доступа к глобальной памяти.

Пример использования __threadfence() доступен в threadFenceReduction для CUDA SDK.

В этом примере редукция выполняется в массиве произвольного размера в одном вызове ядра. Блоки потоков выполняют частичное сокращение, и ядро отслеживает, сколько блоков завершилось атомным приращением глобального счетчика. Если значение билета равно количеству блоков потоков, тогда блок, содержащий билет, знает, что последний блок завершен. Этот последний блок отвечает за суммирование результатов всех остальных блоков.

Чтобы этот подход работал правильно, необходимо обеспечить, чтобы перед тем, как блок взял билет, все транзакции с памятью были завершены. Это достигается с помощью __threadfence().

  • 0
    Спасибо за ваш повтор. но я не смог использовать __threadfence, как называется включаемый файл?
  • 1
    Для использования __threadfence() не требуется __threadfence() Если вы говорите, что не можете использовать его из-за красного подчеркивания, это отдельная проблема, которую вы сейчас обнаружили.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню