2015-01-13 5 views
3

У меня есть Mac Pro (конец 2013 года), и я хочу сделать математику в двойном использовании с помощью OpenCL. Когда я использовал Mavericks, CL_DEVICE_EXTENSIONS для моего графического процессора FirePro отображал только cl_APPLE_fp64_basic_ops, поэтому я не мог использовать двойные математические функции, такие как exp(). Недавно я обновился до Yosemite, и теперь нужный cl_khr_fp64 находится в списке расширений, но я все еще не могу использовать exp для double. Журнал ошибок показывает, что он ищет перегруженную функцию, а exp доступен для float, float4, float8, ... но не для 64 бит. Я включил команду включить fp64:Как вы используете double в OpenCL на MacPro?

#pragma OPENCL EXTENSION cl_khr_fp64 : enable 

Кто-нибудь знает, что происходит? Почему GPU говорит, что есть cl_khr_fp64, но тогда я не могу использовать его все. Я могу +-*/ в двойном, но я мог бы также сделать это раньше только с basic_ops. Является ли Apple лгать мне, что они повысили поддержку fp64?

Странно, на моем процессоре OpenCL также говорит, что также доступен cl_khr_fp64, но я не могу использовать exp на процессоре.

+0

Вы пробовали это: http://stackoverflow.com/a/26797959/1864294 –

+0

@MichaelDorner, я попробовал это, и это возвращает 63 для CL_DEVICE_DOUBLE_FP_CONFIG Я также нашел документацию от Apple, что говорит о D700 поддерживает двойной. http://store.apple.com/us/buyFlowCTOLearnMore/ME253LL/A?group=graphics_z0pk Кроме того, когда я запускаю это на своем процессоре через OpenCL, он тоже не работает. CPU также возвращает 63 для CL_DEVICE_DOUBLE_FP_CONFIG –

ответ

-1

В OpenCL C вы должны называть их двойными, а не cl_khr_fp64s
например.
double pie = M_PI;
double2 two_pies = (double2){M_PI}; // or {M_PI,M_PI};