mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-09 23:45:36 +00:00
Merge branch 'develop' of https://github.com/paboyle/Grid into develop
This commit is contained in:
commit
07a07b6fa3
@ -9,14 +9,19 @@ inline typename vobj::scalar_objectD sumD_gpu_tensor(const vobj *lat, Integer os
|
|||||||
{
|
{
|
||||||
typedef typename vobj::scalar_object sobj;
|
typedef typename vobj::scalar_object sobj;
|
||||||
typedef typename vobj::scalar_objectD sobjD;
|
typedef typename vobj::scalar_objectD sobjD;
|
||||||
sobj *mysum =(sobj *) malloc_shared(sizeof(sobj),*theGridAccelerator);
|
// sobj *mysum =(sobj *) malloc_shared(sizeof(sobj),*theGridAccelerator);
|
||||||
|
// sobj *mysum =(sobj *) malloc(sizeof(sobj));
|
||||||
|
|
||||||
sobj identity; zeroit(identity);
|
sobj identity; zeroit(identity);
|
||||||
sobj ret ;
|
sobj ret ;
|
||||||
|
|
||||||
Integer nsimd= vobj::Nsimd();
|
Integer nsimd= vobj::Nsimd();
|
||||||
|
|
||||||
|
{
|
||||||
|
sycl::buffer<sobj, 1> abuff(&ret, {1});
|
||||||
theGridAccelerator->submit([&](cl::sycl::handler &cgh) {
|
theGridAccelerator->submit([&](cl::sycl::handler &cgh) {
|
||||||
auto Reduction = cl::sycl::reduction(mysum,identity,std::plus<>());
|
|
||||||
|
auto Reduction = cl::sycl::reduction(abuff,cgh,identity,std::plus<>());
|
||||||
cgh.parallel_for(cl::sycl::range<1>{osites},
|
cgh.parallel_for(cl::sycl::range<1>{osites},
|
||||||
Reduction,
|
Reduction,
|
||||||
[=] (cl::sycl::id<1> item, auto &sum) {
|
[=] (cl::sycl::id<1> item, auto &sum) {
|
||||||
@ -24,10 +29,14 @@ inline typename vobj::scalar_objectD sumD_gpu_tensor(const vobj *lat, Integer os
|
|||||||
sum +=Reduce(lat[osite]);
|
sum +=Reduce(lat[osite]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
theGridAccelerator->wait();
|
theGridAccelerator->wait();
|
||||||
ret = mysum[0];
|
// acceleratorCopyFromDevice(mysum,&ret,sizeof(sobj));
|
||||||
free(mysum,*theGridAccelerator);
|
// ret = mysum[0];
|
||||||
|
|
||||||
sobjD dret; convertType(dret,ret);
|
sobjD dret; convertType(dret,ret);
|
||||||
|
// free(mysum,*theGridAccelerator);
|
||||||
|
// free(mysum);
|
||||||
return dret;
|
return dret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,19 +82,24 @@ inline typename vobj::scalar_object sum_gpu_large(const vobj *lat, Integer osite
|
|||||||
template<class Word> Word svm_xor(Word *vec,uint64_t L)
|
template<class Word> Word svm_xor(Word *vec,uint64_t L)
|
||||||
{
|
{
|
||||||
Word xorResult; xorResult = 0;
|
Word xorResult; xorResult = 0;
|
||||||
Word *d_sum =(Word *)cl::sycl::malloc_shared(sizeof(Word),*theGridAccelerator);
|
// Word *d_sum =(Word *)cl::sycl::malloc_shared(sizeof(Word),*theGridAccelerator);
|
||||||
Word identity; identity=0;
|
Word identity; identity=0;
|
||||||
|
Word ret;
|
||||||
|
{
|
||||||
|
sycl::buffer<Word, 1> abuff(&ret, {1});
|
||||||
theGridAccelerator->submit([&](cl::sycl::handler &cgh) {
|
theGridAccelerator->submit([&](cl::sycl::handler &cgh) {
|
||||||
auto Reduction = cl::sycl::reduction(d_sum,identity,std::bit_xor<>());
|
// auto Reduction = cl::sycl::reduction(d_sum,identity,std::bit_xor<>());
|
||||||
|
auto Reduction = cl::sycl::reduction(abuff,cgh,identity,std::bit_xor<>());
|
||||||
cgh.parallel_for(cl::sycl::range<1>{L},
|
cgh.parallel_for(cl::sycl::range<1>{L},
|
||||||
Reduction,
|
Reduction,
|
||||||
[=] (cl::sycl::id<1> index, auto &sum) {
|
[=] (cl::sycl::id<1> index, auto &sum) {
|
||||||
sum ^=vec[index];
|
sum ^=vec[index];
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
theGridAccelerator->wait();
|
theGridAccelerator->wait();
|
||||||
Word ret = d_sum[0];
|
// ret = d_sum[0];
|
||||||
free(d_sum,*theGridAccelerator);
|
// free(d_sum,*theGridAccelerator);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user