2016-07-06 3 views
0

Я разработал два ядра CUDA. Один - это ядро, связанное с памятью, а другое - связанное с вычислением. Ядра, сначала были оптимизированы на Tesla K40, и сейчас я выполняю тест производительности на Tesla K40 и Tesla K80, чтобы сравнить их результаты. Тем не менее, я действительно смущен, потому что я получаю почти такую ​​же производительность на обеих платах, в то время как K80 обеспечивает почти вдвое большую теоретическую пропускную способность и максимальную производительность DP. Я также тестировал с различным количеством потоков на блок, но снова не видел ощутимого улучшения производительности на Tesla K80 (около 2%) по сравнению с Tesla K40.Я получаю почти такую ​​же производительность как на Tesla K40, так и на Tesla K80

компилировать код, используя следующие флаги:

На Tesla K40:

nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_35,code=compute_35 -gencode arch=compute_35,code=sm_35 -link -o "test" 

На Tesla K80:

nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_37,code=sm_37 -link -o "test" 

Теоретически я должен получить более высокую производительность на Tesla K80, но я не знаю, почему это не работает.

Спасибо за любой ответ или комментарий!

ответ

2

Тем не менее, я действительно смущен, потому что на обеих платах я получаю почти такую ​​же производительность, в то время как K80 обеспечивает почти вдвое большую теоретическую пропускную способность и максимальную производительность DP.

Tesla K80 предоставляет эти преимущества только в том случае, если у вас есть код, который может использовать несколько графических процессоров. Кажется, вы запускаете одно ядро ​​(запуск) для своих тестов, а K80 не запускает одно ядро ​​(запуск) быстрее, чем K40.

K80 - это фактически два графических процессора, подключенных к одному физическому устройству. Каждый из двух графических процессоров имеет около 80-90% производительности одного K40, поэтому в совокупности он может обеспечить почти вдвое большую производительность, но только на коде с несколькими GPU.

K80 (по сравнению с K40) не принесет никакой пользы при выполнении одного ядра (запуска).

+0

Итак, K80 будет эффективен только для кода с несколькими GPU, не так ли? Мой код - это один графический процессор, который выполняется вторым ядром после завершения первого запуска ядра. – Siamak

+0

Правильно. В качестве тривиального теста вы можете запустить две независимые операции гемма, используя CUBLAS. Если вы запустили их на одном K40, можно было бы побежать за другим, скорее всего. Если вы запускаете их на одном K80, вы можете запускать их на двух отдельных графических процессорах на K80, поэтому каждый из них может работать одновременно, и он должен занимать примерно половину длины, чем тест K40. –

Смежные вопросы