Комментарии 21
Есть нетбук на AMD C60 (Fusion) — в кристалле встроенный Radeon. Если интересно — погоняю и отпишусь. На майнинге выдает 8 мегахэш.
0
Как то просто выглядит функция float MathCalculations(float a, float b).
Вы уверены, что компилятор ее сам не привел к виду res = a*a*A + b*B + C? Компиляторы нынче умные… да и случай простой. Может asm покажите?
Вы уверены, что компилятор ее сам не привел к виду res = a*a*A + b*B + C? Компиляторы нынче умные… да и случай простой. Может asm покажите?
+3
Я достаточно уверен, что не приводит. Изначально она такой упрощенной и была, тогда цифры сходились с разницей в производительности памяти, а тут сходятся с разницей в производительности арифметики. Возможно если сказать компилятору, чтобы он сильнее оптимизировал, то он заменит.
-1
Все верно, компилятор(VS2010) не сообразит(на счет других не знаю). Пробовал включать sse2, оптимизацию по скорости, float point model(FAST). Код изменился незначительно(функция MathCalculations):
БЫЛО:
СТАЛО:
Полагаю, что оптимизация не получилось из-за того, что компилятор боится переставить операции местами, так как это повлияет на результат.
БЫЛО:
...
fld dword ptr [ebp+8H]
fmul st(0), st(0)
fld dword ptr [ebp+0CH]
fld qword ptr [?_0812]
fmul st(0), st(1)
fld st(1)
fmul qword ptr [?_0811]
fst qword ptr [ebp-20H]
fld st(2)
fmul qword ptr [?_0810]
fst qword ptr [ebp-28H]
...
СТАЛО:
...
movaps xmm6, xmm0
mulss xmm6, dword ptr [?_0801]
movss dword ptr [ebp-4H], xmm6
movaps xmm2, xmm0
mulss xmm2, dword ptr [?_0800]
movaps xmm3, xmm0
mulss xmm3, dword ptr [?_0799]
movaps xmm4, xmm0
mulss xmm4, dword ptr [?_0798]
movaps xmm5, xmm0
mulss xmm5, dword ptr [?_0797]
...
Полагаю, что оптимизация не получилось из-за того, что компилятор боится переставить операции местами, так как это повлияет на результат.
0
Почему повлияет на результат?
0
Из за формата представления чисел с точкой. Пример на python:
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 0.1 * 1 + 0.1 * 2 + 0.1 * 3 + 0.1 * 4 + 0.1 * 5 + 0.1 * 6 + 0.1 * 7 + 0.1 * 8 + 0.1 * 9
>>> b = 0.1 * (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)
>>> print (a, " ", b)
(4.500000000000001, ' ', 4.5)
>>> print (a == b)
False
>>>
0
Ну так не O3 единым, ещё надо поставить опцию /fp:fast. Попробуйте, пожалуйста :)
0
Host реализация — это просто всё счетать в одном потоке. Можно написать тест на pthreads с очередями или какой-то другой библиотекой для работы с потоками и посмотреть как это соотносится с реализацией OpenCL на CPU.
Не понятно почему MSVC10 не смог использовать SSE оптимизации. Интересно было бы попробовать современный GCC, ну должен же он найти вектора и начать с ними работать нормально.
Не понятно почему MSVC10 не смог использовать SSE оптимизации. Интересно было бы попробовать современный GCC, ну должен же он найти вектора и начать с ними работать нормально.
+2
Где-то видел на просторах Интернета, что MSVC в принципе забил на SSE. Что 6.0 что 2010.
-1
Ага, поэтому даже в настройках компилятора можно выставить поддержку SSE?
Кстати, в настройках компилятора разрешено использовать SSE? (С/С++ -> Code Generation -> Enable Enhanced Instruction Set).
Кстати, в настройках компилятора разрешено использовать SSE? (С/С++ -> Code Generation -> Enable Enhanced Instruction Set).
0
Насколько я понимаю, поддержка != автоматическая векторизация. Хотя можно попробовать. Интеловский компилятор вроде может автоматом векторизовывать.
0
Хост = один поток, все по дефолту. Многопоточную версию посмотреть было бы интересно, но больше 4х она при всем желании не сделает:)
0
Так вроде GCC и MSVC10 требуют флагов для SSE
0
А как различается точность вычислений с плавающей запятой на CPU и использованием OpenCL и без?
Мне для повышения точности моделирования приходится собирать приложение в Debug (чтобы получить 80-разрядные вычисления на double).
Мне для повышения точности моделирования приходится собирать приложение в Debug (чтобы получить 80-разрядные вычисления на double).
0
#include "MathCode.cpp"
А можно также включать в opencl код файлы кода написанные на C#?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Первые шаги с OpenCL или сказ о том как одинаковый код на GPU и CPU запускать