Для моего проекта на последнем году я выбрал создание библиотеки, которую разработчики могли бы использовать для вычислений GPGPU с CUDA без необходимости разбираться в механизмах, лежащих в основе различных реализаций ядра API CUDA (иными словами, оболочки CUDA).Эта библиотека скорее всего будет напоминать библиотеку openMP.Для тех, кто не знаком с openMP, это API, который поддерживает многоплатформенное многопроцессорное программирование с общей памятью на C, где компоновка и декомпозиция данных обрабатываются автоматически директивами.Например, API распараллеливает каждый код в блоках:
long sum = 0, loc_sum = 0;
/*forks off the threads and starts the work-sharing construct*/
#pragma omp parallel for private(w,loc_sum) schedule(static,1)
{
for(i = 0; i < N; i++)
{
w = i*i;
loc_sum = loc_sum + w*a[i];
}
#pragma omp critical
sum = sum + loc_sum;
}
printf("\n %li",sum);
В моем случае я хотел бы реализовать ту же функциональность для параллельных вычислений CUDA на GPU.Следовательно, мне нужно будет создать набор директив компилятора, библиотечных подпрограмм и переменных среды, которые влияют на поведение во время выполнения.Каждый вызов в CUDA должен быть скрыт от программиста.
Поскольку CUDA представляет собой SIMD-архитектуру, я знаю, что необходимо учитывать множество факторов, особенно это касается зависимости между итерациями.Но сейчас я предполагаю, что программист знает ограничения вычислений GPGPU.
Теперь, вот где мне нужна ваша помощь.Может ли кто-нибудь дать мне какой-нибудь совет, с чего начать строить такую библиотеку?Кроме того, есть ли у кого-нибудь хорошие учебники, которые могут помочь мне разобраться с директивами компилятора или переменными окружения?Или кто-нибудь знает какую-либо другую библиотеку, которая выполняет аналогичную задачу и из которой я мог бы получить хорошую документацию?
И, самое главное, считаете ли вы, что это проект, который может быть выполнен за 1200 часов?Я уже немного знаком с GPGPU и CUDA, но создание такой библиотеки является новым для меня.