2013-06-21 2 views
0

В моей программе у меня два ядра, и для каждого ядра я запускаю только два блока из 256 потоков.Два параллельных ядра на nvidia kepler 3.0

kernel1<<<2,256>>>() 
kernel2<<<2,256>>>() 

На течение 4 SMX графических карт текущее выполнение программы что-то подобное (когда профилирование с визуальным профайлер, как ядро ​​execut сам себе один за другим)

SMX1 SMX2 
--------- 
| K1 | K1 | 
| K1 | K1 | 
----------- 
| | | 
| | | 
--------- 
SMX3 SMX4 

SMX1 SMX2 
--------- 
| K2 | K2 | 
| K2 | K2 | 
----------- 
| | | 
| | | 
--------- 
SMX3 SMX4 

Мне было интересно, если можно было Lauch как ядро, в то же время в пределах одной и той же программы, и есть то, что посмотреть, как это и разделить время выполнения на 2:

SMX1 SMX2 
--------- 
| K1 | K1 | 
| K1 | K1 | 
----------- 
| K2 | K2 | 
| K2 | K2 | 
--------- 
SMX3 SMX4 

в ке pler 3.5: Новая функция «Hyper-Q» в архитектуре кеплера позволяет одновременно обедать несколькими ядрами из нескольких процессов MPI. (или другой процесс)

+0

Вы можете найти ответ, используя функцию разделения устройств в OpenCL. – ahmad

ответ

2

Должно быть возможно, чтобы два ядра выполнялись одновременно. Для начала вам нужно запустить два ядра в отдельных потоках. Разделяет ли он время выполнения на 2, я не могу сказать. Вы можете посмотреть на concurrent kernels CUDA sample или на любой из образцов, которые включают потоки.

+0

Итак, у карт Nvidia есть что-то похожее на ядро ​​/ нить-сродство? –

+0

Я бы не сказал, что этот вопрос или мой ответ имеют какое-либо отношение к близости. Вопрос о том, что имеется 4 SMX. Поскольку у каждого из предложенных ядер есть 2 потока блоков, должно быть возможно иметь один поток-блок, выполняющийся на каждом SMX, как и предлагал OP. –